Initial implementation of Sahsa Clock

Pygame framebuffer clock for Le Potato (ARM Debian) with aiohttp webhook server.
Renders 12-hour clock directly to /dev/fb0 (no X11/Wayland). Supports full-screen
message overlays pushed via a browser dashboard or Bearer-token API. Includes
first-run setup wizard, session-based dashboard auth, bcrypt password storage,
per-IP rate limiting, and systemd service unit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-24 16:22:10 -06:00
commit 0c2392b2b3
13 changed files with 1587 additions and 0 deletions

27
sahsa-clock.service Normal file
View File

@@ -0,0 +1,27 @@
[Unit]
Description=Sahsa Clock Display
After=network.target
DefaultDependencies=no
[Service]
Type=simple
User=pi
WorkingDirectory=/opt/sahsa_clock
# Tell SDL to render directly to the Linux framebuffer (no display server needed)
Environment=SDL_VIDEODRIVER=fbcon
Environment=SDL_FBDEV=/dev/fb0
# Disable console blanking so the TV stays on
ExecStartPre=/bin/sh -c 'echo -ne "\033[9;0]" > /dev/tty1'
# If using a virtualenv (recommended):
ExecStart=/opt/sahsa_clock/venv/bin/python3 /opt/sahsa_clock/main.py
# If using system Python instead, replace the line above with:
# ExecStart=/usr/bin/python3 /opt/sahsa_clock/main.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target