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.
31 lines
1.3 KiB
Desktop File
31 lines
1.3 KiB
Desktop File
[Unit]
|
|
Description=ninlight-Station: "Neustart"-Bild aufs E-Paper
|
|
Documentation=file:/opt/ninlight-station/README.md
|
|
# Das Gegenstueck zu ninlight-poweroff.service, mit einem ANDEREN Text - und das ist hier
|
|
# kein Schoenheitsfehler, sondern der Zweck der zweiten Unit:
|
|
#
|
|
# Herunterfahren -> "AUSGESCHALTET / Strom kann getrennt werden"
|
|
# Neustart -> "NEUSTART / Strom NICHT trennen!"
|
|
#
|
|
# Ein Raspberry Pi Zero W braucht gut anderthalb Minuten, bis der Anzeigedienst wieder
|
|
# zeichnet. Stuende dort waehrenddessen "Strom kann getrennt werden", waere das eine
|
|
# Aufforderung zu genau dem Griff, der an diesem Pi schon eine SD-Karte gekostet hat.
|
|
#
|
|
# Zwei Units statt einer mit Fallunterscheidung: systemd sagt einem ExecStop/ExecStart
|
|
# nicht, wohin die Reise geht - man muesste "systemctl list-jobs" nach "reboot.target"
|
|
# durchsuchen. Ueber WantedBy= ist es dagegen der Abschalt-Zieleinheit selbst entnommen
|
|
# und damit nicht zu verwechseln.
|
|
DefaultDependencies=no
|
|
# Reihenfolge und Begruendung wie in ninlight-poweroff.service (GPIO-Uebergabe, und noch
|
|
# vor umount.target zeichnen).
|
|
After=ninlight-display.service ninlight-button.service
|
|
Before=umount.target shutdown.target final.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/usr/local/bin/ninlight-station display final reboot
|
|
TimeoutStartSec=30
|
|
|
|
[Install]
|
|
WantedBy=reboot.target
|