Jump to content

TF IO-4 2.0 beim Reboot vom Pi schalten (Systemd Service)


Recommended Posts

Hallo an alle,

Ich programmiere gerade eine Umfangreiche Steuerung für meinen Camper. Basis ist ein Pi mit Openhab. Am Pi hängen unter anderem einige Tinkerforge Bricks und Briklets. Um Strom zu sparen schalte ich mit einem Bildschirmschoner das Display über ein  IO-4 Bricklet 2.0 und einen daran angeschlossenen Mosfet ab. Vor einem reboot oder shutdown des Pis soll dieser aber wieder zugeschaltet werden. Dafür versuche ich systemd zu verwenden, was mir schon seit 2 Wochen Kopfzerbrechen bereitet.

Mein Service (DisplayOn.service) sieht momentan wie Folgt aus:

[Unit]
Description=Display einschalten wenn RPi reboot
Before=reboot.target halt.target shutdown.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/bin/bash -c "/usr/local/bin/tinkerforge call io4-v2-bricklet G7z set-monoflop 0 true 20"
ExecStartPost=/usr/bin/sleep 2

[Install]
WantedBy=multi-user.target

 /bin/bash -c "/usr/local/bin/tinkerforge call io4-v2-bricklet G7z set-monoflop 0 true 20" kann ich  über die Kommandozeile ausführen.

Ich denke wenn der Service aufgerufen wird ist TF nicht mehr erreichbar, denn das journalctl gibt folgendes aus:

Mai 11 21:04:48 Primaballerina systemd[1]: Started Display einschalten wenn RPi reboot.
Mai 11 21:04:55 Primaballerina systemd[1]: Stopping Display einschalten wenn RPi reboot...
Mai 11 21:05:08 Primaballerina bash[3947]: tinkerforge call io4-v2-bricklet <uid> set-monoflop: error: [Errno 111] Connection refused
Mai 11 21:05:01 Primaballerina systemd[1]: DisplayOn.service: Control process exited, code=exited, status=23/n/a
Mai 11 21:05:01 Primaballerina systemd[1]: DisplayOn.service: Failed with result 'exit-code'.
Mai 11 21:05:01 Primaballerina systemd[1]: Stopped Display einschalten wenn RPi reboot.

Wisst ihr vielleicht auf welche Systemd Unit ich reagieren kann, sodass Tinkerforge zur Zeit der Ausführung noch erreichbar ist??

 

Ich wäre euch extrem Dankbar für Hilfe!!

Erst wenn ich das Programm fertig habe, kann ich die Steuerung einbauen. Und das ist der Letzte Schritt...

 

Schöne Grüße!

Link zu diesem Kommentar
Share on other sites

Zu dem Zeitpunkt an dem dein Serivce ausgeführt läuft Brick Daemon schon nicht mehr. Du musst das also so bauen, dass dein Service ausgeführt wird bevor der brickd Service beendet wird.

Du kannst mal versuchen im [Unit] Abschnitt ein Requires=brickd.service anzugeben, wobei mir nicht klar ist ob sich das wie gewünscht auswirkt, da für  Wants=, Requires= und Requisite= nur die Auswirkung auf das Startverhalten dokumentiert ist.

Link zu diesem Kommentar
Share on other sites

Vielen Dank für die Hilfe! Leider klappt es nicht wirklich. Ich habe dazu auch schon in einem Raspi-Forum diskutiert, leider sind wir da mittlerweile auch schon relativ ratlos.

Alles was bisher funktioniert hat war, wenn ich 

ExecStop=/bin/bash -c "/usr/local/bin/tinkerforge call io4-v2-bricklet G7z set-monoflop 0 true 20"

in den brickd.service packe. Dann schaltet der IO4 wie gewünscht beim reboot. Aber das ist wahrscheinlich nicht die beste Lösung?!

Könnte das Probleme machen?

 

Vielen Dank!

bearbeitet von ludl8615
Link zu diesem Kommentar
Share on other sites

Wenn du das im ExecStop des brickd Services machst, dann hat das denn Nachteil, dass das auch gemacht wird wenn brickd aus anderen Gründen (z.B. Update) gestoppt/neugestartet wird.

Bei Requires= scheint das Problem zu sein, dass das keine Reihenfolge definiert.

Teste mal mit After=brickd.service in deiner ursprünglichen Service Datei. Laut systemd Doku wird dadurch dein Service nach brickd gestartet und vor brickd beenden:

Quote

When two units with an ordering dependency between them are shut down, the inverse of the start-up order is applied. I.e. if a unit is configured with After= on another unit, the former is stopped before the latter if both are shut down.

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...