feat(station): Anzeige ausliefern, Migrationsprofil, display-Befehle
Schritt 8 des Plans: die fertige E-Paper-Anzeige wird endlich ausgeliefert und verdrahtet, dazu zwei liegengebliebene Dinge. - deploy.sh/setup_pi.sh uebertragen display/ (mit Panel-Treibern und HERKUNFT.md) und ninlight-display.service; setup_pi.sh installiert und aktiviert die Unit und zieht python3-pil nach - ohne Pillow beendet sich der Anzeigedienst still mit 0, das faellt sonst nirgends auf. - setup_pi.sh legt auch das Profil fuer den Migrations-Zugangspunkt an (qconnex-firmware, von der alten Klyqa-Firmware fest vorgegeben, gleiche Adresse wie das Rettungsprofil). Ohne das scheiterte "migrate on" auf einem frisch eingerichteten Pi an need_profile. Bestehende Profile bleiben unangetastet. - "ninlight-station display test|clear|off"; der Hilfetext erklaert die Revisionsbestimmung, denn EPD_REVISION laesst sich nur am Testbild bestimmen. - "off" nimmt die Anzeige mit: erst Dienst stoppen, dann Panel leeren (sonst schreibt der Daemon binnen 5 s sein altes Bild zurueck) und beides vor ap_switch, das bei haengendem NetworkManager abbricht. Ein stehengebliebenes "MIGRATION" wuerde einen Betriebszustand behaupten, den es nicht mehr gibt. - test_host.sh sammelt tools/mkimage als Ganzes ein: die 19 Tests in test_nl_mkimage.py liefen in keiner Suite mehr mit, darunter die Wache fuer die Python-3.8-Randbedingung des Build-Containers. Ein neuer Test haelt die Regel fest, dass keine Testdatei mehr herausfallen kann. - Nebenbei: die Temp-Datei mit dem WLAN-Passwort wird wieder zuverlaessig aufgeraeumt, und leere Konfigurationswerte legen kein kaputtes Profil an.
This commit is contained in:
@@ -257,8 +257,41 @@ migrate_on() {
|
||||
echo "Nicht vergessen: 'ninlight-station off', wenn du fertig bist."
|
||||
}
|
||||
|
||||
# Ruft display.py mit einem Schalter auf. EPD_REVISION steht in $CONF und wird von
|
||||
# ". $CONF" nur als Shell-Variable gesetzt, nicht exportiert - "env VAR=..." reicht sie
|
||||
# an den Python-Prozess durch. "sudo", weil /dev/spidev0.0 und die GPIO-Leitungen root
|
||||
# gehoeren (der Anzeigedienst laeuft aus demselben Grund als root).
|
||||
display_run() {
|
||||
sudo env EPD_REVISION="$EPD_REVISION" python3 "$STATION_LIB/display/display.py" "$1"
|
||||
}
|
||||
|
||||
# Nimmt die Anzeige mit aus. Reihenfolge: erst den Dienst stoppen, dann das Panel leeren -
|
||||
# umgekehrt zeichnet der noch laufende Daemon binnen 5 s sein altes Bild wieder darauf.
|
||||
#
|
||||
# Warum leeren und nicht "Station aus" stehen lassen: der Anzeigedienst erkennt den
|
||||
# ausgeschalteten Zustand zwar selbst (systemctl is-active), aber ein laufender
|
||||
# Anzeigedienst nach "off" bedeutet, dass "off" eben NICHT alles abgeschaltet hat. Ein
|
||||
# leeres Panel behauptet dagegen gar nichts - und das ist bei einer Station, die Lampen
|
||||
# ungefragt Firmware unterschieben kann, die einzig ungefaehrliche Richtung: ein
|
||||
# stehengebliebenes "MIGRATION"-Bild wuerde einen Betriebszustand behaupten, den es nicht
|
||||
# mehr gibt, waehrend ein leeres Panel hoechstens nach "aus" aussieht - was es ist.
|
||||
display_off() {
|
||||
sudo systemctl stop ninlight-display 2>/dev/null || true
|
||||
# Kein Abbruch, wenn das Panel fehlt: display.py beendet sich dann selbst mit 0, und
|
||||
# ein Fehler an der Anzeige darf das Ausschalten der Station nie aufhalten.
|
||||
display_run --clear || echo "Warnung: Panel konnte nicht geleert werden - Anzeige pruefen" >&2
|
||||
}
|
||||
|
||||
full_off() {
|
||||
sudo systemctl stop ninlight-station 2>/dev/null || true
|
||||
# VOR ap_switch, nicht danach: ap_switch "" bricht bei einem haengenden
|
||||
# NetworkManager mit Fehler ab, und unter "set -e" kaeme danach nichts mehr. Genau
|
||||
# dann - Zugangspunkt laesst sich nicht abschalten - waere die Anzeige sonst der
|
||||
# letzte Rest von "off", der nie ausgefuehrt wird: Daemon laeuft weiter, Panel zeigt
|
||||
# unveraendert "MIGRATION". Ein leeres Panel behauptet dagegen nichts; die Wahrheit
|
||||
# ueber den noch offenen Zugangspunkt steht in ap_switch's Fehlermeldung, wo man sie
|
||||
# liest, statt auf einem Panel, das man auch fuer aktuell halten koennte.
|
||||
display_off
|
||||
ap_switch ""
|
||||
if nmcli -t -f NAME con show | grep -Fqx "$HOME_CONNECTION"; then
|
||||
if sudo nmcli con up "$HOME_CONNECTION" >/dev/null; then
|
||||
@@ -439,8 +472,27 @@ PY
|
||||
exit 0
|
||||
}
|
||||
|
||||
display_cmd() {
|
||||
case "${1:-}" in
|
||||
test) display_run --test ;;
|
||||
clear) display_run --clear ;;
|
||||
off) display_off ;;
|
||||
*) usage; exit 2 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
usage() {
|
||||
echo "Aufruf: ninlight-station on|recovery {on|off}|migrate {on [--listen]|off}|arm [<target>]|listen|off|status" >&2
|
||||
echo "Aufruf: ninlight-station on|recovery {on|off}|migrate {on [--listen]|off}|arm [<target>]|listen|display {test|clear|off}|off|status" >&2
|
||||
echo "" >&2
|
||||
echo " display test Testbild aufs Panel zeichnen. Das ist der erste Handgriff bei der" >&2
|
||||
echo " Hardware-Abnahme und die EINZIGE Moeglichkeit, die Panel-Revision" >&2
|
||||
echo " zu bestimmen: die steht am Geraet nirgends. Bleibt das Bild leer," >&2
|
||||
echo " verzerrt oder verschoben, ist EPD_REVISION in" >&2
|
||||
echo " /etc/ninlight-station.conf falsch - auf die andere Revision" >&2
|
||||
echo " umstellen (V2 statt V3 oder umgekehrt), das Panel kurz" >&2
|
||||
echo " stromlos machen und erneut 'display test'." >&2
|
||||
echo " display clear Panel leeren." >&2
|
||||
echo " display off Anzeigedienst stoppen und das Panel leeren (macht 'off' mit)." >&2
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
@@ -467,6 +519,9 @@ case "${1:-}" in
|
||||
listen)
|
||||
listen_cmd
|
||||
;;
|
||||
display)
|
||||
display_cmd "${2:-}"
|
||||
;;
|
||||
off)
|
||||
full_off
|
||||
;;
|
||||
|
||||
Reference in New Issue
Block a user