feat(station): Abschlussbild beim Herunterfahren und beim Neustart
E-Paper behaelt sein Bild dauerhaft, auch stromlos. Faehrt der Pi herunter, wird der Anzeigedienst mit abgeraeumt und das zuletzt gezeichnete Bild bleibt fuer immer stehen - bei der Abnahme stand dort die Rueckfrage des Tastermenues, und der ausgeschaltete Pi sah aus, als warte er noch auf eine Eingabe. Zwei neue Units, ninlight-poweroff.service (WantedBy=poweroff.target) und ninlight-reboot.service (WantedBy=reboot.target). Sie haengen am System, nicht am Tasterdienst: so greifen sie bei jedem Herunterfahren - Menue, "poweroff" per SSH, "reboot" - und nicht nur auf einem von drei Wegen. Zwei Units statt einer Fallunterscheidung, weil systemd einem ExecStart nicht sagt, wohin die Reise geht. Die Texte unterscheiden sich: "AUSGESCHALTET / Strom kann getrennt werden" gegen "NEUSTART / Strom NICHT trennen!" samt Hinweis auf die rund zwei Minuten, die der Zero W bis zum Anzeigedienst braucht. An diesem Pi hat ein Stromzug in genau dieser Wartezeit schon eine SD-Karte gekostet. Reihenfolge: die Units ordnen sich per After=ninlight-display.service hinter dessen Stop ein, und "ninlight-station display final <kind>" wartet zusaetzlich, bis systemctl is-active nicht mehr anschlaegt - dasselbe Muster wie display_handover(), nur ohne Wiederanfahren. Gibt der Dienst die Leitungen nicht frei, wird nicht gezeichnet (GPIO busy), sondern gewarnt: ein Anzeigefehler haelt das Herunterfahren nie auf. Nebenbei behoben: display_run() reichte nur "$1" an display.py weiter und haette "--final poweroff" halbiert.
This commit is contained in:
@@ -53,6 +53,8 @@ setup_sandbox() {
|
||||
echo "# dummy" >"$sandbox/tools/station/ninlight-station.service"
|
||||
echo "# dummy" >"$sandbox/tools/station/ninlight-display.service"
|
||||
echo "# dummy" >"$sandbox/tools/station/ninlight-button.service"
|
||||
echo "# dummy" >"$sandbox/tools/station/ninlight-poweroff.service"
|
||||
echo "# dummy" >"$sandbox/tools/station/ninlight-reboot.service"
|
||||
# display/ wird ECHT kopiert, nicht durch Attrappen ersetzt: die Zusage aus Task 6b
|
||||
# ist, dass die beiden uebernommenen Panel-Treiber UND der Herkunftsnachweis
|
||||
# HERKUNFT.md mit auf den Pi gehen. Mit selbst erfundenen Dateinamen im Sandbox-Repo
|
||||
@@ -185,6 +187,8 @@ run_deploy() {
|
||||
NINLIGHT_STATION_UNIT="$SANDBOX_STATE/etc/systemd/system/ninlight-station.service" \
|
||||
NINLIGHT_DISPLAY_UNIT="$SANDBOX_STATE/etc/systemd/system/ninlight-display.service" \
|
||||
NINLIGHT_BUTTON_UNIT="$SANDBOX_STATE/etc/systemd/system/ninlight-button.service" \
|
||||
NINLIGHT_POWEROFF_UNIT="$SANDBOX_STATE/etc/systemd/system/ninlight-poweroff.service" \
|
||||
NINLIGHT_REBOOT_UNIT="$SANDBOX_STATE/etc/systemd/system/ninlight-reboot.service" \
|
||||
NINLIGHT_SIGN_DIR="$sign_dir" \
|
||||
"$sandbox/tools/station/deploy.sh" "$@"
|
||||
}
|
||||
@@ -1240,6 +1244,33 @@ set -e
|
||||
&& pass "der Altbestand images/migrate wurde entfernt" \
|
||||
|| fail "images/migrate liegt noch da"
|
||||
|
||||
echo
|
||||
echo "=== Szenario 32: die beiden Abschlussbild-Units werden mit ausgeliefert ==="
|
||||
# Ohne sie bliebe auf dem E-Paper nach dem Herunterfahren fuer immer das letzte Bild
|
||||
# stehen - bei der Abnahme war das die Rueckfrage des Tastermenues.
|
||||
SANDBOX="$TMPROOT/s32"; STUBBIN="$TMPROOT/bin32"; LOG="$TMPROOT/s32.log"; SANDBOX_STATE="$TMPROOT/s32-state"
|
||||
setup_sandbox "$SANDBOX"
|
||||
setup_stubbin "$STUBBIN" "$LOG"
|
||||
mkdir -p "$SANDBOX/build/foo"
|
||||
echo "foo-image" >"$SANDBOX/build/foo/ninlight_foo_ota.img"
|
||||
: >"$LOG"
|
||||
set +e
|
||||
OUT=$(run_deploy "$SANDBOX" pi-test 2>&1)
|
||||
RC=$?
|
||||
set -e
|
||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0" || fail "Exit-Code $RC: $OUT"
|
||||
for u in ninlight-poweroff ninlight-reboot; do
|
||||
[ -f "$SANDBOX_STATE/etc/systemd/system/$u.service" ] \
|
||||
&& pass "$u.service installiert" || fail "$u.service fehlt - sie waere toter Text im Repo"
|
||||
done
|
||||
# Ein Deploy darf keine Unit EINSCHALTEN, die vorher aus war - das macht setup_pi.sh.
|
||||
grep -Fq "systemctl enable ninlight-poweroff" "$LOG" \
|
||||
&& fail "der Deploy aktiviert die Abschlussbild-Unit" \
|
||||
|| pass "der Deploy aktiviert sie nicht (das ist setup_pi.sh's Aufgabe)"
|
||||
# Und die Ablage ist hinterher leer.
|
||||
[ ! -e /tmp/ninlight-poweroff.service ] && [ ! -e /tmp/ninlight-reboot.service ] \
|
||||
&& pass "die Ablage wurde aufgeraeumt" || fail "Unit-Dateien blieben unter /tmp liegen"
|
||||
|
||||
echo
|
||||
if [ "$FAILED" -eq 0 ]; then
|
||||
echo "Alle Tests bestanden."
|
||||
|
||||
Reference in New Issue
Block a user