NEWS
Raspberry PI runterfahren
-
Hallo zusammen
Bräuchte mal wieder ein wenig Hilfe von Euch
Mein Pi usw hängen an einer USV. Ich möchte gerne, wenn der Strom ausgefallen ist und die USV im Einsatz ist, IoBroker stoppen und danach den PI runterfahren. Ob der Strom aus oder an ist, sehe ich an einem Homematic Energiemesser, der vor dem Pi usw hängt.
Wenn also Energiemesser = 0, dann IoBroker stop, danach shutdown.
Soweit so gut, aber wie setze ich das um? Geht das überhaupt so?
Hat das jemand von Euch schonmal so gemacht oder wie macht Ihr das?
Über Putty ist das ja kein Problem, aber ich möchte mich ja vorher nicht erst bei Putty einwählen und dass dann in die Wege leiten, dass soll schon alleine gehen, aber wie
Desweiteren hab ich einen weiteren Pi, auf dem Raspberrymatic läuft als CCU2 Ersatz, der soll auch runtergefahren werden. Kann ich das kombinieren oder mache ich das lieber extra über die Homematic?
Schonmal Danke im Vorraus.
Mfg Stephan
-
Was ist das denn für eine USV?
Viele USV‘n können so etwas von alleine.
Wieso willst du iobroker vorher stoppen?
Wenn du den Pi Sauber runterfährst ist eigentlich alles gut.
-
Dem https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#exec–-execute-some-os-command-like-cp-file1-file2 kann man die gleichen Befehle übergeben, die man auch mit Putty ausführt.
@Steffi81:dann IoBroker stop, danach shutdown. `
Das ist nicht nötig, denn beim Shutdown werden alle Prozesse - auch die von ioBroker - sauber gekillt. Dabei werden sogar die States vom Puffer in die Datei geschrieben. -
Es handelt sich um eine APC Smart UPS SMT 750i
An den USB Anschluss habe ich meine Synology DiskStation angeschlossen, die ist so eingerichtet, dass sie nach 3 min dann in den sicheren Modus wechselt. Das klappt auch alles.
Die USV soll nach dem runterfahren auch ausgehen, dass geht auch, ist nur schlecht, wenn die Pi’s noch an sind
Aber wie ich darüber die Pi‘s runterfahren soll, weiß ich nicht.
Habe auch keine Ahnung wie ich das ganze umsetzten soll, bzw. was ich wo einstellen muss oder so. Ob ich nen Adapter dafür brauche, oder nen Script schreiben muss, oder oder
Dachte, es wäre besser erst IoBroker zu stoppen und dann runter zufahren. Hatte gelesen, dass bei manchen das runterfahren bis zu 10 min dauert, wenn IoBroker vorher nicht gestoppt wurde.
Weil an der USV ja kein LAN Anschluss dran ist, habe ich mir noch ne gebrauchte Network Karte mit LAN Anschluss besorgt, ist aber noch in der Post.
Ginge es darüber dann einfacher, dass ich damit die Geräte gezielt ansteuern kann?
Mfg
-
Ob der Strom aus oder an ist, sehe ich an einem Homematic Energiemesser, der vor dem Pi usw hängt.
Wenn also Energiemesser = 0, dann IoBroker stop, danach shutdown. `
Sendet der Energiemesser noch, wenn er spannungslos ist ? Wenn er hinter der USV hängt, weshalb sollte dann die Leistung auf 0 gehen ? -
Er hängt vor der USV.
An dem Energiemesser hatte ich eine mehrfach Steckleiste, wo die ganzen Geräte für das Netzwerk dran sind. Die USV steckt nun in dem Energiemesser und die Steckleiste in der USV.
Gut, zum testen hatte ich den Energiemesser per Hand zum testen ausgeschaltet, somit stand im IoBroker 0
Wenn jetzt der Strom komplett weg ist, denk ich, ist das Gerät eher nicht erreichbar ist,
als das es mir 0 sagt.
Würde das denn gehen, wenn die USV im LAN hängt, die weiß ja wann der Strom weg ist. Kann die denn Geräte runterfahren lassen? Wenn ja, wie macht man das?
-
Würde das denn gehen, wenn die USV im LAN hängt, die weiß ja wann der Strom weg ist. `
Das sollte mit dem Adapter https://github.com/Apollon77/ioBroker.nut gehen. Voraussetzung ist, dass der Switch / Router, der sich zwischen USV und Raspberry Pi befindet, auch durch die USV versorgt wird.
@Steffi81:Kann die denn Geräte runterfahren lassen? Wenn ja, wie macht man das? `
In einem Script kann man auf den passenden Datenpunkt des NUT-Adapters triggern und per exec('cmd') das Shutdown-Kommando (verzögert) starten. -
Also der Switch, Router, die PI‘s und die Synology hängen alle hinter der USV.
Wie genau müsste denn son Script aussehen, von Script hab ich jetzt nicht so die Ahnung. Wie mach ich das dann, über Blockly? Oder muss ich das dann unter Scripte eingeben?
Hoffe werde nicht gesteinigt für die blöden Fragen :?
Mfg
-
Oder muss ich das dann unter Scripte eingeben? `
Du kannst es unter Scripte eingeben, etwa so:const idNetz = '...'; // Datenpunkt-ID für Netzspannung vorhanden var timer = null; on(idNetz, function(dp) { if(!dp.stat.val) { // keine Netzspannung timer = setTimeout(function() { exec('sudo shutdown -h 0'); }, 5 * 60000); // Verzögerung 5 Minuten } else if(timer) clearTimeout(timer); // stoppt Timer, falls Netz innerhalb der Verzögerungszeit wieder vorhanden });
Falls erst ioBroker gestoppt werden soll und dann shutdown, erzeugst Du ein Shell-Script mit den beiden Kommandos und rufst aus dem Javascript mit exec('myScript') dieses Shell-Script auf.
-
Puh, ich seh schon, dass ist doch komplizierte als ich dachte, für einen Laien
Eben war die LAN Karte in der Post, die werde ich erstmal einbauen und einrichten.
Danach den Adapter und dann weiter mit dem Script. Mal sehen wie weit ich komme
-
Falls erst ioBroker gestoppt werden soll und dann shutdown, erzeugst Du ein Shell-Script mit den beiden Kommandos und rufst aus dem Javascript mit exec('myScript') dieses Shell-Script auf. ` Das funktioniert glaube ich so nicht..
Wenn das Shellscript durch ioBroker aufgerufen wird,
wird es auch zusammen mit ioBroker gekillt da beim Beenden von ioBroker auch alle child-processes gekillt werden und "exec('shellscript.sh')" ist in dem Fall ein child-process von ioBroker bzw. der JavaScript Instanz.
War das nicht irgendwie so - oder habe ich das falsch in Erinnerung?
Gruß
-
Dann womöglich per spawn mit der detached-Option:
-
Guten Morgen.
Wollte mal einen kleine Lagebericht Posten.
Also, USV ist nun per LAN Kabel im Netzwerk verfügbar.
Diskstation erkennt die USV.
NUT Adapter eingerichtet, Daten von der USV werden gelesen.
VIS Ansicht soweit auch fertig.
Habe mit Blockly ein Script geschrieben, dass bei Ausfall oder Wiederkehr der Eingangsspannung eine Variable auf wahr/unwahr setzt.
Bei unwahr sende ich mit Blockly an den PI erst „ sudo shutdown -h 1, danach sudo iobroker stop „
Klappt, Iobroker wird angehalten und 1 min später der PI runtergefahren.
War nen bissel Bastelei, aber ich hab’s hinbekommen
Habe aber noch nen zweite PI, wo Raspberrymatic drauf läuft.
Kann ich von Iobroker nen „ poweroff „ an diesen PI senden, damit der dann auch runter fährt? Wenn ja, wie mache ich das.
Mfg
-
Kann ich von Iobroker nen „ poweroff „ an diesen PI senden, damit der dann auch runter fährt? Wenn ja, wie mache ich das. `
Dürfte per SSH gehen. Obs ne Kommandozeilenoption gibt weiß ich nicht, ich hab was ähnliches aber schon per javascript gemacht mit dem node-ssh Modul https://www.npmjs.com/package/node-sshSo dürfte es grob funktionieren:
node_ssh = require('node-ssh'); ssh = new node_ssh(); ssh.connect({ host: 'localhost', username: 'abcdef', password: 'defghi' }).then(() => { ssh.execCommand("shutdown -h now"); })
Edit: Kommando korrigiert
-
Hallo,
ich fahre Raspis normal mit
halt
stattshutdown
runter. Sollte schneller gehen als shutdown. Ob````
poweroff -
Also mit SSH geht das ja, macht man ja normal mit Putty.
Habe im Blockly ja auch mit „exec“ den selben Befehl wie im Putty eingegeben. Und das geht.
Man muss nur für jeden Befehl ein extra Exec ansetzen, weil immer nur ein Befehl pro Exec geht. Was ich aber nicht schlimm finde. Oder ich habe das noch nicht anders rausgefunden
Iobroker fahre ich mit shutdown runter, raspberrymatic mit poweroff, ohne was anzuhalten wie beim Iobroker.
Werde das Script mal ausprobieren, mal sehen ob das geht. Über Blockly wäre mir natürlich lieber, finde ich einfacher zu verstehen
Mfg
-
Sollte schneller gehen als shutdown. Ob
poweroff
Vorteile bringt, ist mir beim Raspi nicht bekannt. ` halt, shutdown, poweroff macht keinen unterschied beim Raspberry..shutdown (-h now) oder poweroff machen genau das gleiche wie halt,.. Außer dass sie noch das Netzteil ausschalten und den Computer somit "vom Strom nehmen".. Das funktioniert beim Raspberry wegen externem USB Netzteil aber natürlich nicht.
Gruß
-
ich fahre Raspis normal mit
halt
stattshutdown
runter. Sollte schneller gehen als shutdown.Laut meiner Info sind die Kommandos auf den meisten Systemen identisch:
> Again, in this toolset the opposite of received BSD wisdom applies and halt and reboot simply chain to shutdown — unless the system is already in the poweroff or halt "run-levels", in which case these commands actually enact the final system state change. `
tl;dr:"halt" ruft "shutdown -h" auf
und "reboot" ruft "shutdown -r" auf.
Allerdings müsste mein Befehl oben shutdown -h heißen, um den Raspi tatsächlich herunterzufahren. Hartes Herunterfahren würde ich nicht machen, die Datenbanken müssen ja Gelegenheit bekommen ihren Speicherinhalt auf die Platte/SD zu schreiben…
-
Ich hatte https://homematic-forum.de/forum/viewtopic.php?f=48&t=27716&p=245865#p245865 mal eine Anleitung gepostet, wie man CCU.IO, den Vorgänger des ioBroker, von der CCU aus neu starten kann.
Vielleicht kann's ja noch jemand gebrauchen.
Gruß,
Thorsten
-
Guten Morgen.
Wollte mal einen kleine Lagebericht Posten.
Also, USV ist nun per LAN Kabel im Netzwerk verfügbar.
Diskstation erkennt die USV.
NUT Adapter eingerichtet, Daten von der USV werden gelesen.
VIS Ansicht soweit auch fertig.
Habe mit Blockly ein Script geschrieben, dass bei Ausfall oder Wiederkehr der Eingangsspannung eine Variable auf wahr/unwahr setzt.
Bei unwahr sende ich mit Blockly an den PI erst „ sudo shutdown -h 1, danach sudo iobroker stop „
Klappt, Iobroker wird angehalten und 1 min später der PI runtergefahren.
War nen bissel Bastelei, aber ich hab’s hinbekommen
Habe aber noch nen zweite PI, wo Raspberrymatic drauf läuft.
Kann ich von Iobroker nen „ poweroff „ an diesen PI senden, damit der dann auch runter fährt? Wenn ja, wie mache ich das.
Mfg `
Teil doch mal bitte dein Blockly…!