Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Neustart vom IoBroker sowie einen kompletten Reboot über die VIS mit Blockly

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Neustart vom IoBroker sowie einen kompletten Reboot über die VIS mit Blockly

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      GeosShark last edited by

      Die Buttons funzen nicht richtig, da die Datenpunkte nicht komplett erzeugt werden.

      Besser wäre folgende Erstellung:

      // states für Asführungsbestätigung der remote reboot / shutdown scripts
      // und zum automatischem schließen des Bestätigungsbutton nach einer Zeit X (timout)
      
      // -----------------------------------------------
      // Vorbereitung 
      // -----------------------------------------------
      
      var timout = 2*1000;
      
      var forceCreation   = true;
      
      var pfad = 't2c_System.';
      
      var datenpunkte = {
         'restart_Bestaetigung':        {"init": false, "common": {type: 'boolean',  name: 'Bestätigung für Reboot',                        unit: ''}},
         'stop_Bestaetigung':           {"init": false, "common": {type: 'boolean',  name: 'Bestätigung für Shutdown',                      unit: ''}},
         'update_Bestaetigung':         {"init": false, "common": {type: 'boolean',  name: 'Bestätigung für Update',                        unit: ''}},
         'upgrade_Bestaetigung':        {"init": false, "common": {type: 'boolean',  name: 'Bestätigung für Upgrade',                       unit: ''}},
         'upgradeSelf_Bestaetigung':    {"init": false, "common": {type: 'boolean',  name: 'Bestätigung für UpgradeSelf',                   unit: ''}},
         'LinuxRestart_Bestaetigung':   {"init": false, "common": {type: 'boolean',  name: 'Bestätigung für Linux-Restart',                 unit: ''}},
         'LinuxShutdown_Bestaetigung':  {"init": false, "common": {type: 'boolean',  name: 'Bestätigung für Linux-Shutdown',                unit: ''}},
      
         'restart_command':             {"init": false, "common": {type: 'boolean',  name: 'Ausführung des "iobroker restart" Kommandos',   unit: ''}},
         'stop_command':                {"init": false, "common": {type: 'boolean',  name: 'Ausführung "iobroker stop" Kommandos',          unit: ''}},
         'update_command':              {"init": false, "common": {type: 'boolean',  name: 'Ausführung "iobroker update" Kommandos',        unit: ''}},
         'upgrade_command':             {"init": false, "common": {type: 'boolean',  name: 'Ausführung "iobroker upgrade" Kommandos',       unit: ''}},
         'upgradeSelf_command':         {"init": false, "common": {type: 'boolean',  name: 'Ausführung "iobroker upgrade self" Kommandost', unit: ''}},
         'LinuxShutdown_command':       {"init": false, "common": {type: 'boolean',  name: 'Ausführung "shutdown -h now" Kommandos',        unit: ''}},
         'LinuxRestart_command':        {"init": false, "common": {type: 'boolean',  name: 'Ausführung "reboot" Kommandos',                 unit: ''}}
         };       
      
      //=========================================================================
      // Trigger 
      //=========================================================================
      
      on({id: 'javascript.0.t2c_System.restart_Bestaetigung', change : 'any'}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
           setTimeout(function(){setState('javascript.0.t2c_System.restart_Bestaetigung', false)},timout);
        }
      });
      
      on({id: 'javascript.0.t2c_System.stop_Bestaetigung', change : 'any'}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
           setTimeout(function(){setState('javascript.0.t2c_System.stop_Bestaetigung', false)},timout);
        }
      });
      
      on({id: 'javascript.0.t2c_System.update_Bestaetigung', change : 'any'}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
           setTimeout(function(){setState('javascript.0.t2c_System.update_Bestaetigung', false)},timout);
        }
      });
      
      on({id: 'javascript.0.t2c_System.upgrade_Bestaetigung', change : 'any'}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
           setTimeout(function(){setState('javascript.0.t2c_System.upgrade_Bestaetigung', false)},timout);
        }
      });
      on({id: 'javascript.0.t2c_System.upgradeSelf_Bestaetigung', change : 'any'}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
           setTimeout(function(){setState('javascript.0.t2c_System.upgradeSelf_Bestaetigung', false)},timout);
        }
      });
      
      on({id: 'javascript.0.t2c_System.LinuxRestart_Bestaetigung', change : 'any'}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
           setTimeout(function(){setState('javascript.0.t2c_System.LinuxRestart_Bestaetigung', false)},timout);
        }
      });
      
      on({id: 'javascript.0.t2c_System.LinuxShutdown_Bestaetigung', change : 'any'}, function(obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
           setTimeout(function(){setState('javascript.0.t2c_System.LinuxShutdown_Bestaetigung', false)},timout);
        }
      });
      
      // -----------------------------------------------
      // Scripte zum Ausführen der exec Funktionen
      // -----------------------------------------------
      
      // iobroker restart
      on({id: 'javascript.0.t2c_System.restart_command', change: 'any'}, function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
            log('vis: iobroker restart');
            setState('javascript.0.t2c_System.restart_command', false);
            exec ('iobroker restart');
        }
      });
      
      // iobroker stop
      createState('t2c_System.stop_command', '');
      on({id: 'javascript.0.t2c_System.stop_command', change: 'any'}, function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
            log('vis: iobroker stop');
            setState('javascript.0.t2c_System.stop_command', false);
            exec ('iobroker stop');
        }
      });
      
      // iobroker update
      createState('t2c_System.update_command', '');
      on({id: 'javascript.0.t2c_System.update_command', change: 'any'}, function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
            log('vis: iobroker update');
            setState('javascript.0.t2c_System.update_command', false);
            exec ('iobroker update');
        }
      });
      
      // iobroker upgrade
      createState('t2c_System.upgrade_command', '');
      on({id: 'javascript.0.t2c_System.upgrade_command', change: 'any'}, function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
            log('vis: iobroker upgrade');
            setState('javascript.0.t2c_System.upgrade_command', false);
            exec ('iobroker upgrade');
        }
      });
      
      // iobroker upgrade self
      createState('t2c_System.upgradeSelf_command', '');
      on({id: 'javascript.0.t2c_System.upgradeSelf_command', change: 'any'}, function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
            log('vis: iobroker upgrade self');
            setState('javascript.0.t2c_System.upgradeSelf_command', false);
            exec ('iobroker upgrade self');
        }
      });
      
      // Linux shutdown
      createState('t2c_System.LinuxShutdown_command', '');
      on({id: 'javascript.0.t2c_System.LinuxShutdown_command', change: 'any'}, function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
            log('vis: Linux shutdown');
            setState('javascript.0.t2c_System.LinuxShutdown_command', false);
            exec ('sudo shutdown -h 0');
        }
      });
      
      // Linux Reboot
      createState('t2c_System.LinuxRestart_command', '');
      on({id: 'javascript.0.t2c_System.LinuxRestart_command', change: 'any'}, function (obj) {
        if (obj.newState.val === true || obj.newState.val === 'true'){
            log('vis: Linux Reboot');
            setState('javascript.0.t2c_System.LinuxRestart_command', false);
            exec ('reboot');
        }
      });   
      
      // -----------------------------------------------------------------------------------------------------------------------------------------
      // 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();
      
      

      Habe es noch etwas "gebeautyfied"

      1 Reply Last reply Reply Quote 1
      • A
        aleks-83 last edited by

        OK, Danke.

        also die Datenpunkte und das Script von smartboart löschen und deins erstellen und starten!?

        1 Reply Last reply Reply Quote 0
        • G
          GeosShark last edited by

          hallo Aleks,

          Am Anfang meines Scripts steht````
          var forceCreation = true;

          
          Solange diese Varialble auf "true" steht, werden die Datenpunkte zwangsweise erstellt, also auch wenn sie schon existieren.
          
          Ansonsten fehlte die initialisierung der Datenpunkte auf "false".
          
          Gruß
          
          Frank
          1 Reply Last reply Reply Quote 0
          • smartboart
            smartboart last edited by

            Hallo,

            das Script funktioniert auch in der ursprünglichen Version. Ich hatte nur beim create Sate im script den ersten Status nach der Erstellung nicht definiert.

            die log zeilen hatten copy und paste Fehler, welche die LogAusgabe betrafen.

            Nach dem Starten des Scripts werden die States angelegt.

            Dann das script wieder stoppen und neu starten.

            Mir ist das Problem nicht aufgefallen, da ich das Script parallel zu meiner Vis angepasst habe.

            Dabei hatte ich eh mehrmals die buttons betätigt, wobei dann die States ja einen definierten Zustand bekommen. Das hätte schon geholfen..

            GeoShark hat das script nochmal aufgeräumt.

            Finde ich gut, das es weiter eintwickelt wird..

            Der Gedanke ist folgender, wegen der Frage mit den Buttons…

            Der obere Button gibt die Funktion frei. Es öffnet sich die Sicherheitsabfrage Sicher? und der unter Button für die Exec Funktion.

            Mit Betätigung des grünen Haken im unten geöffneten Button wird die exec ausgeführt. Wenn du 2 Sekunden zögerst weil nicht sicher, geht der unter button wieder zu. ebenfalls beim erneuten Betätigen des oberen Button mit dem X geht die Sicher Abfrage und der untere Button wieder weg... Wie im Video oben gezeigt...

            Im Javascript Adapter muss die exec Funktion freigegeen werden, damit die exec Funktionen auch durchkommen...Du hattest ja geschrieben, das die Funktion nicht klappte...

            1 Reply Last reply Reply Quote 0
            • A
              aleks-83 last edited by

              Ah OK. Super. jetzt hab ichs…

              Ich frage mich aber noch wie ich mehrere deiner "buttons" einfügen kann.

              Denn ich habe jetzt einen Button für Reboot angelegt. der Funktioniert.

              Dann habe ich per Widget importieren alle deine 3 Codes erneut eingefügt und den zweiten button auf einen anderen Datenpunkt geelgt (Update)

              Wenn ich jetzt aber auf den button Reboot klicke, öffnet unter dem Button für Update ebenfalls die Abfrage "sicher?" und das Häkchen "klappt aus".

              Zusatzfrage:

              Wie kann ich ein"busy" Logo anzeigen, solange das Update/upgrade läuft?

              1 Reply Last reply Reply Quote 0
              • smartboart
                smartboart last edited by

                Ich hatte jeweils nur für die reboot funktion alles zur verfügung gestellt.

                Du musst jetzt eigentlich nur noch im Vis Editor die widgets für jede Funktion einmal kopieren und dann entsprehend konfigurieren.

                Dazu musst du nur immer die State id für jeden button anpassen.

                Die Bilder kannst du auch nach lust und laune anpassen…

                Siehe Bild unten...das musst du für jeden buton ändern.... Die oberen button habe ich aus 2 Widgets zusammen gefügt, um diese anzupassen musst du sie doppelt anklicken und dann kannst du sie auch anpassen... 6558_unbenannt.png 6558_unbenannt.png

                1 Reply Last reply Reply Quote 0
                • A
                  aleks-83 last edited by

                  Nochmal vielen Dank für die schnelle Hilfe!

                  Ich hatte vergessen unter Allgemein den Datenpunkt anzupassen. :lol:

                  1 Reply Last reply Reply Quote 0
                  • A
                    aleks-83 last edited by

                    Wie sieht es denn mit dem upgrade self vom js.controller aus?

                    hierfür braucht man ja eigentlich mehrere Befehle nacheinander.

                    Kann ich die auch auf einen button legen?

                    Eigentlich müsste der nachfolgende Befehl ja erst warten bis der vorherige zu ende ausgeführt wurde!?

                    sudo iobroker stop
                    sudo iobroker update
                    sudo iobroker upgrade self
                    sudo iobroker start
                    

                    Und, kann man während das update läuft, ein "busy logo" sprich Sanduhr anzeigen?

                    1 Reply Last reply Reply Quote 0
                    • smartboart
                      smartboart last edited by

                      Den upgrade self habe ich aus diesem Grund bei mir nicht mehr visualisiert siehe meine letzten bilder.. bild oben und führe das update aus dem grund für den js-controller weiterhin über die konsole aus… mit iobroker stop werden die adapter beendet auch der javascript adapter...

                      Ein Update des Js Controller kommt auch nicht so oft vor...

                      Habe es auch noch nicht ausprobiert ob es klappt... Wer es ausprobiert hat, möge seine Erfahrung dazu mitteilen...

                      Eine busy Anzeige habe ich bei mir mehr oder weniger mit dem info button realisiert zumindest für das update/ upgrade....hab den info button welcher verfügbare updates anzeigt und wenn kein update mehr verfügbar weil durchgeführt wieder verschwindet.und ein script welches ein telegramm schickt bei Verfügbarkeit und wenn update durchgeführt.

                      Dafür gibt es ein objekt von admin.0 updateslist mit dessen infos du dir zumindest die verfügbaren updates anzeigen lassen kannst...wenn ein update verfügbar, kann dies mit dem update button abgefragt werden..passiert aber auch automatisch einmal am tag...

                      Für alle anderen wie reboot, stop usw. hast du ja vis...welches dann mit dem rad keine verbindung meldet...

                      Gesendet von meinem SM-G800F mit Tapatalk

                      1 Reply Last reply Reply Quote 0
                      • P
                        plazmatic07 last edited by

                        Hi Zusammen,

                        hat jemand vielleicht eine Idee, wie ich das in einer Multihost Umgebung löse?

                        Die Kommands werden natürlich nur auf dem Host ausgeführt, auf dem die Instanz gerade läuft

                        Grüße und Danke

                        1 Reply Last reply Reply Quote 0
                        • smartboart
                          smartboart last edited by

                          Ja einfach das script nochmal auf dem 2. host laufen lassen also ne 2. Javascript Instanz auf dem 2. Host installieren und dort das script nochmal mit angepassten states…im idealfall einfach die 0 gegen die 1 tauschen...und in vis auch nochmal alles kopieren und dort auch die 0 mit der 1 anpassen... ( instanz nummer vom javascriptadapter) geht am schnellsten...

                          Läuft bei mir auch so..

                          Gesendet von meinem SM-G800F mit Tapatalk

                          1 Reply Last reply Reply Quote 0
                          • F
                            fraeggle last edited by

                            Ähmm musste gerade feststellen das das nicht mehr geht werde shutdown noch reboot.

                            nachdem ich den iobroker geupdatet habe.

                            Hat jmd das gleiche Problem?

                            javascript.0 2019-01-18 17:27:12.888 silly inMem message * javascript.0.t2c_System.LinuxRestart_Bestaetigung

                            javascript.0 2019-01-18 17:27:12.655 silly inMem message * javascript.0.t2c_System.LinuxRestart_command

                            javascript.0 2019-01-18 17:27:12.654 info script.js.Dienste_System.Neustart: Command stop

                            aber machen tut er nichts.

                            Achso ja im Javascript ist auführen von Exec aktiv.

                            1 Reply Last reply Reply Quote 0
                            • G
                              Gunster last edited by

                              Ich habe das gleiche Problem, auch ein sudo reboot funktioniert bei mir nicht.

                              1 Reply Last reply Reply Quote 0
                              • smartboart
                                smartboart last edited by

                                Liegt nicht am Script das geht bei mir einwandfrei. Repo steht bei auf latest… Ist bei mir aber bisher auf allen Javascript Versionen gelaufen..

                                Gesendet von meinem CLT-L09 mit Tapatalk

                                1 Reply Last reply Reply Quote 0
                                • F
                                  fraeggle last edited by

                                  hmmm dann muss ich mal weiter forschen… oder hast du noch nen anderen "Trick"?

                                  1 Reply Last reply Reply Quote 0
                                  • smartboart
                                    smartboart last edited by

                                    Geht's denn ueber putty bzw. Konsole

                                    Gesendet von meinem CLT-L09 mit Tapatalk

                                    1 Reply Last reply Reply Quote 0
                                    • F
                                      fraeggle last edited by

                                      habs…....

                                      Folgendes... hatte total verdrängt, dass ich den neu über curl aufgesetzt hab und nich ein fertiges Image für den Banana Pi genommen hab, da dieses Uralt ist. Somit gibt es Probleme mit dem User iobroker, da der irgendwie nicht alles darf.

                                      Änderung der /etc/sudoers wie folgt

                                      iobroker ALL=(ALL;ALL) ALL

                                      iobroker ALL=NOPASSWD:/sbin/reboot

                                      iobroker ALL=NOPASSWD:/sbin/shutdown

                                      und schon klappt alles wieder.

                                      1 Reply Last reply Reply Quote 0
                                      • G
                                        Gunster last edited by

                                        @fraeggle:

                                        iobroker ALL=(ALL;ALL) ALL

                                        iobroker ALL=NOPASSWD:/sbin/reboot

                                        iobroker ALL=NOPASSWD:/sbin/shutdown `

                                        Das war's danke.

                                        1 Reply Last reply Reply Quote 0
                                        • F
                                          fraeggle last edited by

                                          Gern bin ja froh das es bei mir auch wieder geht. 😄

                                          1 Reply Last reply Reply Quote 0
                                          • L
                                            leonundjulie last edited by leonundjulie

                                            @aleks-83 said in Neustart vom IoBroker sowie einen kompletten Reboot über die VIS mit Blockly:

                                            Wie sieht es denn mit dem upgrade self vom js.controller aus?

                                            hierfür braucht man ja eigentlich mehrere Befehle nacheinander.

                                            Kann ich die auch auf einen button legen?

                                            Eigentlich müsste der nachfolgende Befehl ja erst warten bis der vorherige zu ende ausgeführt wurde!?

                                            sudo iobroker stop
                                            sudo iobroker update
                                            sudo iobroker upgrade self
                                            sudo iobroker start
                                            

                                            Und, kann man während das update läuft, ein "busy logo" sprich Sanduhr anzeigen?

                                            Ich haben diesen "alten" Task ausgegeraben ... das Thema ist halt immer noch aktuell und hier sehr gut beschriebn. Das ganze habe ich in den letzten Tagen implemnetiert und funktioniert.

                                            Eine Frage habe ich dennoch, da das hier beschriebene Vorgehensweise für das UPDATEN und UPGRADEN ja (eigentlich) nicht ganz korrekt ist. Vor dem Ausführen dieser Befehle sollte der IOB ja immer gestoppt werden und somit sähe die Befehlsfolge ja wie folgt aus:

                                            sudo iobroker stop
                                            sudo iobroker update
                                            sudo iobroker upgrade
                                            sudo iobroker start

                                            Aber mit dem Befehl iobroker stop schneidet man sich ja die Beine ab, sprich IOB stopt, und auch der JS-Skript läuft dann nicht mehr 🤔 .

                                            Kann man auf dem PI eine Batchdatei (sorry, wenn ich die falsche Terminologie verwende) erzeugen, die dann per exec angestoßen wird?

                                            Codierknecht 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            779
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            15
                                            39
                                            28235
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo