NEWS
Script für shutdown nach Zeit x bei Stromausfall mit Rücksetzung bei Netzwiderkehr
-
Hallo Leute, ich habe ein Script geschrieben für automatischen shutdown bei Stromausfall.
Netzüberwachung über Relais und gpio.
Shutdown der Hosts für Raspi und Tinker über sendToHost.
Log Eintrag und send to telegram
Script setzt natürlich voraus, das die Netzwerverbindung und die Hosts Batterie oder USV gepuffert sind..
Das send to Host funktioniert nicht…
Habe das mit einem State gelöst auf welches mit der javascript instanz der entsprechenden Hosts reagiert werden kann.
Ist bestimmt auch für den einen oder anderen Interessant...
// Linux shutdown für Tinker und Raspy bei Netzausfall var forceCreation = true; var pfad = 'Netzausfall.'; var datenpunkte = { 'shutdown_stromausfall': {"init": false, "common": {type: 'boolean', name: 'Einleitung shutdown bei Stromausfall',unit: ''}}, }; //========================================================================= // Trigger //========================================================================= on({id: 'rpi2.1.gpio.22.state', change: "ne"}, function (obj) { var Netz = getState('rpi2.1.gpio.22.state').val; if (Netz === false ) { log('Phasenausfall L1 oder Stromausfall allgemein'); sendTo("telegram.0", "send", { text: ('Phasenausfall L1 oder Stromausfall allgemein') }); setStateDelayed ('javascript.1.Netzausfall.shutdown_stromausfall', true ,10*1000); }else{ if (Netz === true ) { clearStateDelayed ('javascript.1.Netzausfall.shutdown_stromausfall'); log ('Timer für shutdown bei Stromausfall wegen Netzwiderkehr zurück gesetzt'); sendTo("telegram.0", "send", { text: ('Timer für shutdown bei Stromausfall wegen Netzwiderkehr zurück gesetzt') }); } } }); on({id: 'javascript.1.Netzausfall.shutdown_stromausfall', change: "ne"}, function (obj) { var Stromausfall = getState('javascript.1.Netzausfall.shutdown_stromausfall').val; if (Stromausfall === true) { log('Iobroker Raspi wird wegen Stromausfall herunter gefahren'); sendTo("telegram.0", "send", { text: ('Iobroker Raspi wird wegen Stromausfall herunter gefahren') }); sendToHost('tinkerboard', cmdExec, 'sudo shutdown -h 0', function (res) { }); exec ('sudo shutdown -h 0'); } }); // ----------------------------------------------------------------------------------------------------------------------------------------- // Erzeuge Datenpunkte // ----------------------------------------------------------------------------------------------------------------------------------------- function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } // ----------------------------------------------- // Start Skript: // Initialisierung // ----------------------------------------------- createDp();
-
Da unterumständen 1 Signal nicht durch kam und nur der Host runter fuhr, welcher das Script verarbeitete, habe ich es nochmal umgebaut.
So funktioniert es jetzt….Wichtig ist das der Timer für den Host auf welchem das Hauptscript läuft später den Trigger für die exec Funktion auf true setzt.
Es ist nun 1 Script für den Master und 1 Script für den Slave Host nötig..
Wer nur einen Host hat, benötigt nur das 1. Script...
1.Script für Master bei Multihost oder single Host
// Linux shutdown für Tinker und Raspy bei Netzausfall //Script für den Master bei Multihost. Bei Single System ist nicht mehr nötig. createState('javascript.0.Netzausfall.shutdown.stromausfallRaspi', {def: 'false', type: 'boolean', name: 'Einleitung shutdown Raspi'}); //wer kein Multihost System laufen hat benötigt den oberen nicht createState('javascript.0.Netzausfall.shutdown.stromausfallTinker', {def: 'false', type: 'boolean', name: 'Einleitung shutdown Tinker'}); on({id: 'rpi2.1.gpio.22.state', change: "ne"}, function (obj) { var Netz = getState('rpi2.1.gpio.22.state').val; if (Netz === false ) { log('Phasenausfall L1 '); sendTo("telegram.0", "send", { text: ('Phasenausfall L1') }); setStateDelayed ('javascript.0.Netzausfall.shutdown.stromausfallRaspi', true ,10*1000);//Autonomiezeit entsprechend einstellen //bei Multihost Trigger für Hilfsscript oben , Timer mus < sein als der untere, damit das Signal sauber durch geht //wer kein Multihost System laufen hat benötigt diesen nicht setStateDelayed ('javascript.0.Netzausfall.shutdown.stromausfallTinker', true ,20*1000);//Autonomiezeit entsprechend einstellen }else{ if (Netz === true ) { clearStateDelayed ('javascript.0.Netzausfall.shutdown.stromausfallTinker'); clearStateDelayed ('javascript.0.Netzausfall.shutdown.stromausfallRaspi'); setState('javascript.0.Netzausfall.shutdown.stromausfallRaspi',false ); setState('javascript.0.Netzausfall.shutdown.stromausfallTinker',false ); //wer kein Multihost System laufen hat benötigt diesen nicht log ('Timer für shutdown bei Stromausfall wegen Netzwiderkehr zurück gesetzt'); sendTo("telegram.0", "send", { text: ('Timer für shutdown bei Stromausfall wegen Netzwiderkehr zurück gesetzt') }); } } }); on({id: 'javascript.0.Netzausfall.shutdown.stromausfallTinker', change: "any"}, function (obj) { var StromausfallTinker = getState('javascript.0.Netzausfall.shutdown.stromausfallTinker').val; if (StromausfallTinker === true) { log('Iobroker Tinker wird wegen Stromausfall herunter gefahren'); sendTo("telegram.0", "send", { text: ('Iobroker Tinker wird wegen Stromausfall herunter gefahren') }); exec ('sudo shutdown -h 0'); } });
2. Script für Multihost System für den Slave
//Hilfsscript für Multihost Slave on({id: 'javascript.0.Netzausfall.shutdown.stromausfallRaspi', change: "any"}, function (obj) { var StromausfallRaspi = getState('javascript.0.Netzausfall.shutdown.stromausfallRaspi').val; if (StromausfallRaspi === true) { log('Iobroker Raspi wird wegen Stromausfall herunter gefahren'); sendTo("telegram.0", "send", { text: ('Iobroker Raspi wird wegen Stromausfall herunter gefahren') }); exec ('sudo shutdown -h 0'); } });
-
Hallo Gemeinde,
mir ist aufgefallen, das ja nach einem Reboot das speichern der States der Objekte was ja normalerweise erwünscht ist, in diesem Fall zu Problemen führt.
Und zwar werden die Trigger für die exec Funktion zum Herunterfahren auf True gesetzt. Dort verharren sie dann natürlich nach dem nächsten Einschalten, so das bei einem erneuten Stromausfall der Befehl für das herunterfahren nicht durchkommt.
Deshal ist der Trigger auf change any zu änderen..
on({id: 'javascript.0.Netzausfall.shutdown.stromausfallRaspi', change: "any"}, function (obj) {
on({id: 'javascript.0.Netzausfall.shutdown.stromausfallTinker', change: "any"}, function (obj) {
-
Hier die technik dazu…super DC 12V USV phoenix contact...
Versorgt mein raspi, den wifi wz, meine rgbw briefkasten und 2 fritten sowie die klingel...autonomiezeit 90min...
Mein tinker hängt an einem teknet powerpack locker 180min autonomiezeit.
Alarmanlage und weatherman werden über eine insel solar lösung mit 12V batterie versorgt..somit das wichtigste alles gepuffert...~~![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201809 ... 99cc95.jpg">https://uploads.tapatalk-cdn.com/20180902/58e7de6a250ea401e5b4264e9d99cc95.jpg</link_text>" />
Gesendet von meinem SM-G800F mit Tapatalk~~
-
Um das ganze abzuschliessen, gibt es eine möglichkeit nach dem herunterfahren der naschinen diese über wake on lan wieder hochzufahren? Also den raspi und den stinker?
Geben die boards das her?
Gesendet von meinem SM-G800F mit Tapatalk
-
Ok nicht möglich…Schade...
Die Idee war nach einem Stromausfall mit shutdown die dinger bei Netzwiderkehr wieder hochzufahren zu können .
Da die Boards ja Batterie gepuffert sind, würden bei Restkapazität der Batterien die Geräte ja nicht wieder neu starten bzw. erst wenn die Batterien leer wären... Ist das Netz vorher wieder da, bleiben die Maschinen ja aus.
Deshalb wäre ein Möglichkeit schön, z.B Aus dem Urlaub heraus die Dinger wieder starten zu können. WOL ist leider nicht di Lösung...
Müsste wohl eine kleine Schaltung bauen um das zu relaisieren.
Oder ein geflashter Schaltaktor mit Tasmota Firmware in die Versorgungsleitung..Dieser könnte über die eigene Web Url ferngesteuert werden... Da muss ich mir noch was überlegen...
Schade das es mit WOL nicht geht...
WOL relies on having a BIOS that is listening for the magic packet on the network interface.
Raspberry Pis do not have a BIOS that can do that, so WOL is impossible.
You can use a Pi to generate magic packets to wake other machines. http://search.cpan.org/~clintdw/Net-Wak ... et/Wake.pm