2 Commits

Author SHA1 Message Date
545ff966c8 add generated christmas lights (#9)
Reviewed-on: #9
2025-12-21 14:54:56 +00:00
siinus
33109455c9 Set paths absolute 2021-05-03 19:05:27 +03:00
3 changed files with 45 additions and 4 deletions

View File

@@ -1,4 +1,5 @@
from dotenv import dotenv_values from dotenv import dotenv_values
import pathlib
def populate_values(load: {}): def populate_values(load: {}):
@@ -26,9 +27,10 @@ class Config(object):
_config: {} = {} _config: {} = {}
def __init__(self): def __init__(self):
rp = str(pathlib.Path(__file__).parent.parent.absolute())
load_conf = { load_conf = {
**dotenv_values(".env.defaults"), **dotenv_values(rp + "/.env.defaults"),
**dotenv_values(".env"), **dotenv_values(rp + "/.env"),
} }
self._config = populate_values(load_conf) self._config = populate_values(load_conf)

View File

@@ -0,0 +1,38 @@
from lib.Program import Program
from rpi_ws281x import Color
import time
def name():
return 'Christmas Lights'
class ChristmasLights(Program):
def run(self, args: [] = None):
# Configuration
wait_ms = 0 # Speed of the animation
# Define classic festive colors
RED = Color(255, 0, 0)
GREEN = Color(0, 255, 0)
WARM_WHITE = Color(200, 180, 60) # A golden-ish warm white
colors = [RED, GREEN, WARM_WHITE]
# This determines how many pixels of the same color are next to each other
group_size = 2
offset = 0
while self.get_loop().status():
num_pixels = self._lm.count_pixels()
for i in range(num_pixels):
# Calculate which color index to use based on pixel position and current offset
# This creates the "moving" effect
color_index = ((i + offset) // group_size) % len(colors)
self._lm.set_pixel_color(i, colors[color_index])
self._lm.show()
# Increment offset to move the lights
offset = (offset + 1) % (len(colors) * group_size)
self._lm.get_tempo().wait()
time.sleep(wait_ms / 1000.0)

View File

@@ -1,11 +1,12 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import logging import logging
import pathlib
import sys import sys
import lib.ProgramLoading as Pl import lib.ProgramLoading as Pl
from lib.Litsimaja import Litsimaja from lib.Litsimaja import Litsimaja
from flask import Flask, request, Response, render_template, json from flask import Flask, request, Response, render_template, json
root_path = pathlib.Path(__file__).parent.absolute()
# start litsimaja # start litsimaja
lm = Litsimaja() lm = Litsimaja()
@@ -13,7 +14,7 @@ lm = Litsimaja()
logger = logging.getLogger('litsimaja') logger = logging.getLogger('litsimaja')
logger.setLevel(logging.DEBUG if lm.conf('IS_DEV') else logging.WARN) logger.setLevel(logging.DEBUG if lm.conf('IS_DEV') else logging.WARN)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler = logging.FileHandler('litsimaja.log') file_handler = logging.FileHandler(str(root_path) + '/litsimaja.log')
file_handler.setFormatter(formatter) file_handler.setFormatter(formatter)
logger.addHandler(file_handler) logger.addHandler(file_handler)
stdout_handler = logging.StreamHandler(sys.stdout) stdout_handler = logging.StreamHandler(sys.stdout)