Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Wird das Script bei Neustart ausgeführt ?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] Wird das Script bei Neustart ausgeführt ?

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

      Was könnte es dann sein, dass die LED nicht beim hochfahren gesetzt wurde?

      Wenn dies auf jeden Fall ausgeführt wird. Der Erste Teil muss nicht unbedint ausgeführt werden, das es keine Statusänderung gab. Aber diese muss dich dann unbedingt ausgeführt werden.#

      // Script start
      setState(idOpen, getState(idSrc).val);
      setState(idClosed, !getState(idSrc).val);
      
      

      Könnte es sein, dass die Homematic vielleicht noch nicht gebootet war und der Status von "idSrc" demzufolge nicht abgefragt werden konnte ?

      Der Raspberry mit IoBroker bootet viel schneller als die CCU.

      1 Reply Last reply Reply Quote 0
      • T
        TOBO last edited by

        Habe das jetzt zeitmäßig getestet. Alles sauber runtergefahren.

        Dann erst die Homatic ans Netz. Gewartet bis ich auf den WebAdmin komme und der Zustand der Tür dort angezeigt wird.

        Jetzt den Raspi mit IoBroker gestartet und es tut sich nicht.

        Erst, wenn ich das Script manuell restarte geht sofort eine LED an.

        What nu ?

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

          Vielleicht ist der hm-rpc-Adapter oder der s7-Adapter noch nicht so weit ? Geht aus dem Log nichts hervor ?

          Probier es mal mit Verzögerung

          // Script start
          setTimeout(function() {
             setState(idOpen, getState(idSrc).val);
             setState(idClosed, !getState(idSrc).val);
          }, 500);
          
          
          1 Reply Last reply Reply Quote 0
          • T
            TOBO last edited by

            Stimmt !!!

            Laut Log werden erst die Scripts ausgefürht und DANACH erst der S7 Adapter gestartet.

            s7.0	2017-07-04 15:15:42.953	info	starting. Version 0.2.5 in /opt/iobroker/node_modules/iobroker.s7, node: v6.10.1
            s7.0	2017-07-04 15:15:42.879	info	States connected to redis 127.0.0.1:6379
            
            entfernt
            
            javascript.0	2017-07-04 15:15:33.264	info	script.js.HM_to_S7.Status_Door_EG: registered 1 subscription and 0 schedules
            javascript.0	2017-07-04 15:15:33.258	info	Start javascript script.js.HM_to_S7.Status_Door_EG
            javascript.0	2017-07-04 15:15:33.257	info	script.js.HM_to_S7.Status_Door_EG_Panzerriegel: registered 1 subscription and 0 schedules
            javascript.0	2017-07-04 15:15:33.251	info	Start javascript script.js.HM_to_S7.Status_Door_EG_Panzerriegel
            javascript.0	2017-07-04 15:15:33.250	info	script.js.HM_to_S7.Status_Door_EG_Lock: registered 1 subscription and 0 schedules
            javascript.0	2017-07-04 15:15:33.238	info	Start javascript script.js.HM_to_S7.Status_Door_EG_Lock
            javascript.0	2017-07-04 15:15:33.236	info	script.js.HM_to_S7.Lin-Licht_prg: registered 2 subscriptions and 0 schedules
            javascript.0	2017-07-04 15:15:33.225	info	Start javascript script.js.HM_to_S7.Lin-Licht_prg
            javascript.0	2017-07-04 15:15:33.223	info	script.js.S7_to_HM.Dimmer: registered 1 subscription and 0 schedules
            javascript.0	2017-07-04 15:15:33.222	info	script.js.S7_to_HM.Dimmer: subscribe: {"pattern":{"id":"s7.0.DBs.DB1.VW0","change":"ne"},"name":"script.js.S7_to_HM.Dimme
            
            1 Reply Last reply Reply Quote 0
            • T
              TOBO last edited by

              Eine Verzögerung hat aber leider nichts gebracht. Habe die bis auf 5 Sekunden gestellt und es tut sich nichts.

              Kann man das nicht so machen, dass die Scripte, oder das eine Script erst dann ausgeführt wird, wenn der Adapter auch bereit ist ?

              1 Reply Last reply Reply Quote 0
              • D
                dwm last edited by

                Hätte ich jetzt naiv so erwartet 🙂

                Nach den Zeiten im Log waren da 9 Sekunden dazwischen, bis S7 gestartet war.

                Wenn Du bei "Objekte" reinschaust und Dir die Systemobjekte anzeigst, ist da (wahrscheinlich :)) ein "system.adapter.S7.0.alive" und "system.adapter.S7.0.connected".

                Mein Ansatz wär da glaub ich zu warten, bis die beide auf "true" stehen, und dann erst den Init-Code laufen zu lassen.

                Im Prinzip so…

                var timer = null;
                var counter = 0;
                
                timer = setInterval(function() {
                    log ("Check S7 alive ...");
                    if (getState("system.adapter.S7.0.alive").val && getState("system.adapter.S7.0.connected").val) {
                        log ("S7 Alive, initializing");
                       setState(idOpen, getState(idSrc).val);
                       setState(idClosed, !getState(idSrc).val);
                       clearInterval(timer);      
                    } else {
                        if (counter > 120) {
                            log ("Aborting S7 init, timeout");
                            clearInterval(timer);
                        }
                    	counter++;
                    }
                },1000);
                
                

                Einfach mal so getippt, ohne zu probieren. Sollte jede Sekunde mal testen, ob der S7 Adapter schon da ist, wenn ja wird initialisiert. Wenn nein, nochmal. Durch den Counter läuft das max. 2 Minuten und bricht dann ab. Wenn der Adapter nach 2 min nicht da ist, würd ich sagen kommt der auch nimmer …

                CU

                Werner

                1 Reply Last reply Reply Quote 0
                • Dutchman
                  Dutchman Developer Most Active Administrators last edited by

                  Gute Lösung von werner, der eine Adapter ist schneller als der andere und mit dieser Abfrage löst du das 😉

                  –-----------------------

                  Send from mobile device

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

                    Das würde ich dann aber mit on() machen:

                    function init() {
                        var x = getState(idSrc).val;
                        setState(idOpen, x);
                        setState(idClosed, !x);
                    }
                    
                    var S7alive = getState("system.adapter.S7.0.alive").val;
                    var S7connected = getState("system.adapter.S7.0.connected").val;
                    
                    if(S7alive && S7connected) init();
                    
                    on({id: "system.adapter.S7.0.alive", change: 'ne', val: true}, function() {
                        S7alive = true;
                        if(S7connected) init();
                    });
                    
                    on({id: "system.adapter.S7.0.connected", change: 'ne', val: true}, function() {
                        S7connected = true;
                        if(S7alive) init();
                    });
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • D
                      dwm last edited by

                      Ja, mit on() ist das eleganter 🙂

                      Schon weils auch klappt, wenn man den S7 mal anhält und wieder startet…

                      Aber: Triggert das on() auch, wenn evt. der S7 schon da wäre?

                      Keine Ahnung. Ich hab jetzt mal folgenden Code laufen lassen:

                      on ({id: "system.adapter.ping.0.alive"/*node-red.0.alive*/, val:true}, function (dp) {
                          log("Ping lebt!");
                      });
                      
                      

                      Also mit ping Adapter probiert, ich hab kein S7. Und: Das alive kommt alle 5 Sekunden. 😎 Hm. Aber nicht beim Start des Programms. Hm…

                      Evtl noch ein change:"ne" in das on() rein, würd ich vorschlagen ... und evt einfach init() naiv beim Starten aufrufen 🙂

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

                        @dwm:

                        Aber: Triggert das on() auch, wenn evt. der S7 schon da wäre? `
                        Habe das Skript ergänzt.
                        @dwm:

                        Das alive kommt alle 5 Sekunden…Evtl noch ein change:"ne" in das on() rein `
                        Ja, ist ebenfalls ergänzt.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        534
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        4
                        14
                        1697
                        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