Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Script für shutdown nach Zeit x bei Stromausfall mit Rücksetzung bei Netzwiderkehr

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    211

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    7.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Script für shutdown nach Zeit x bei Stromausfall mit Rücksetzung bei Netzwiderkehr

Script für shutdown nach Zeit x bei Stromausfall mit Rücksetzung bei Netzwiderkehr

Scheduled Pinned Locked Moved Skripten / Logik
6 Posts 1 Posters 1.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • smartboartS Offline
    smartboartS Offline
    smartboart
    wrote on last edited by
    #1

    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();
    
    
    1 Reply Last reply
    0
    • smartboartS Offline
      smartboartS Offline
      smartboart
      wrote on last edited by
      #2

      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'); 
          }
      });
      
      1 Reply Last reply
      0
      • smartboartS Offline
        smartboartS Offline
        smartboart
        wrote on last edited by
        #3

        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) {

        1 Reply Last reply
        0
        • smartboartS Offline
          smartboartS Offline
          smartboart
          wrote on last edited by
          #4

          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~~

          1 Reply Last reply
          0
          • smartboartS Offline
            smartboartS Offline
            smartboart
            wrote on last edited by
            #5

            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

            1 Reply Last reply
            0
            • smartboartS Offline
              smartboartS Offline
              smartboart
              wrote on last edited by
              #6

              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

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              78

              Online

              32.4k

              Users

              81.3k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe