Create .env for config

feature/absolute-paths
siinus 4 years ago
parent e6fb8ea528
commit 74b6cbe7e3
  1. 19
      README.md
  2. 17
      pyleds/.env.defaults
  3. 2
      pyleds/.env.example
  4. 1
      pyleds/.gitignore
  5. 36
      pyleds/lib/Config.py
  6. 26
      pyleds/lib/Litsimaja.py
  7. 9
      pyleds/run.py

@ -8,20 +8,7 @@ Projekt Litsimaja - Lapikute tagatoa seintele programmeeritavad ARGB ribad
#### Running with emulation
This is mainly for testing, development.
In ``lib/Litsimaja.py`` change the following:
```
# from lib.strip.TkinterStrip import TkinterStrip
def __init__(self):
self._strip = PixelStrip(290, 18, 800000, 10, False, 255, 0, 4104)
```
to
```
from lib.strip.TkinterStrip import TkinterStrip
def __init__(self):
self._strip = TkinterStrip(290, 18, 800000, 10, False, 255, 0, 4104)
```
Create .env file:
```cp .env.example .env```
and see: ```USE_EMULATOR```
Now when you run the program, you will see a Tkinter window pop up with a rectangle simulating the LED strip.
Don't commit this change.

@ -0,0 +1,17 @@
ENVIRONMENT=prod
USE_EMULATOR=false
BIND_ADDR=127.0.0.1
BIND_PORT=8080
# Strip configuration
STRIP_PIXELS=290
STRIP_GPIO_PIN=18
STRIP_HZ=800000
STRIP_DMA=10
STRIP_INVERT=false
STRIP_BRIGHTNESS=255
STRIP_CHANNEL=0
STRIP_TYPE=4104
REGIONS=46,96,191,241
BPM_DEFAULT=60

@ -0,0 +1,2 @@
ENVIRONMENT=dev
USE_EMULATOR=true

1
pyleds/.gitignore vendored

@ -1 +1,2 @@
.env
litsimaja.log

@ -0,0 +1,36 @@
from dotenv import dotenv_values
def populate_values(load: {}):
conf = load
conf['IS_DEV']: bool = str.lower(load['ENVIRONMENT']) == 'dev'
conf['USE_EMULATOR']: bool = str.lower(load['USE_EMULATOR']) == 'true'
conf['BIND_PORT']: int = int(load['BIND_PORT'])
conf['STRIP_PIXELS']: int = int(load['STRIP_PIXELS'])
conf['STRIP_GPIO_PIN']: int = int(load['STRIP_GPIO_PIN'])
conf['STRIP_HZ']: int = int(load['STRIP_HZ'])
conf['STRIP_DMA']: int = int(load['STRIP_DMA'])
conf['STRIP_INVERT']: bool = str.lower(load['STRIP_INVERT']) == 'true'
conf['STRIP_BRIGHTNESS']: int = int(load['STRIP_BRIGHTNESS'])
conf['STRIP_CHANNEL']: int = int(load['STRIP_CHANNEL'])
conf['STRIP_TYPE']: int = int(load['STRIP_TYPE'])
conf['REGIONS']: [] = [int(x) for x in load['REGIONS'].split(',')]
conf['BPM_DEFAULT']: int = int(load['BPM_DEFAULT'])
return conf
class Config(object):
_config: {} = {}
def __init__(self):
load_conf = {
**dotenv_values(".env.defaults"),
**dotenv_values(".env"),
}
self._config = populate_values(load_conf)
def get(self, key: str):
return self._config[key]

@ -1,6 +1,4 @@
from rpi_ws281x import PixelStrip
# from lib.strip.WindowStrip import WindowStrip
# from lib.strip.TkinterStrip import TkinterStrip
from lib.Config import Config
from lib.LoopSwitch import LoopSwitch
from lib.Regions import Regions
from lib.Tempo import Tempo
@ -8,11 +6,24 @@ from lib.Tempo import Tempo
class Litsimaja(object):
def __init__(self):
self._strip = PixelStrip(290, 18, 800000, 10, False, 255, 0, 4104)
self._config = Config()
if self.conf('USE_EMULATOR'):
module = __import__('lib.strip.TkinterStrip', None, None, ['TkinterStrip'])
class_name = 'TkinterStrip'
else:
module = __import__('rpi_ws281x', None, None, ['PixelStrip'])
class_name = 'PixelStrip'
loaded_class = getattr(module, class_name)
self._strip = loaded_class(
self.conf('STRIP_PIXELS'), self.conf('STRIP_GPIO_PIN'), self.conf('STRIP_HZ'), self.conf('STRIP_DMA'),
self.conf('STRIP_INVERT'), self.conf('STRIP_BRIGHTNESS'), self.conf('STRIP_CHANNEL'),
self.conf('STRIP_TYPE')
)
self._loops = []
self._strip.begin()
self._regions: Regions = Regions(self.count_pixels(), [46, 96, 191, 241])
self._tempo: Tempo = Tempo(60)
self._regions: Regions = Regions(self.count_pixels(), self.conf('REGIONS'))
self._tempo: Tempo = Tempo(self.conf('BPM_DEFAULT'))
self._selected_program = None
def count_pixels(self) -> int:
@ -65,3 +76,6 @@ class Litsimaja(object):
def set_selected_program(self, program_name: str):
self._selected_program = program_name
def conf(self, key: str):
return self._config.get(key)

@ -7,9 +7,12 @@ from lib.Litsimaja import Litsimaja
from flask import Flask, request, Response, render_template, json
from flask_accept import accept
# start litsimaja
lm = Litsimaja()
# logging
logger = logging.getLogger('litsimaja')
logger.setLevel(logging.DEBUG)
logger.setLevel(logging.DEBUG if lm.conf('IS_DEV') else logging.WARN)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler = logging.FileHandler('litsimaja.log')
file_handler.setFormatter(formatter)
@ -18,8 +21,6 @@ stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setFormatter(formatter)
logger.addHandler(stdout_handler)
# start litsimaja
lm = Litsimaja()
app = Flask(__name__, static_url_path='', static_folder='templates')
Pl.run('siinus', 'Wipes', lm, logger, {'color': [0, 0, 0]})
Pl.run('peter', 'DiskoPidu', lm, logger, {})
@ -79,4 +80,4 @@ def sync_beat():
return lm_standard_xhr_response()
app.run('0.0.0.0', 8080)
app.run(lm.conf('BIND_ADDR'), lm.conf('BIND_PORT'))

Loading…
Cancel
Save