ludl8615 Geschrieben May 11, 2021 at 21:16 Share Geschrieben May 11, 2021 at 21:16 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! Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
photron Geschrieben May 12, 2021 at 12:03 Share Geschrieben May 12, 2021 at 12:03 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. Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
ludl8615 Geschrieben May 12, 2021 at 21:17 Autor Share Geschrieben May 12, 2021 at 21:17 (bearbeitet) 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 May 12, 2021 at 21:22 von ludl8615 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
photron Geschrieben May 17, 2021 at 09:39 Share Geschrieben May 17, 2021 at 09:39 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 Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
ludl8615 Geschrieben May 17, 2021 at 17:08 Autor Share Geschrieben May 17, 2021 at 17:08 Hallo photron, Ahh jaa, das war der Schlüssel!! Herzlichen Dank dafür! Daumen hoch an euch! Top Support und Mega Technik! Ich empfehle euch schon seit Jahren.👍 Schöne Grüße! Zitieren Link zu diesem Kommentar Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.