Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Gelöst] Wird das Script bei Neustart ausgeführt ?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

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

Scheduled Pinned Locked Moved Skripten / Logik
14 Posts 4 Posters 1.8k 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.
  • T Offline
    T Offline
    TOBO
    wrote on last edited by
    #1

    Hallo zusammen.

    ich habe ein Homematic Türsensor. Der Zustand (offen/geschlossen) wird auf SPS Ausgänge weitergeitet und dort mittels einer ROT/GRÜN LED angezeigt.

    var idSrc = "hm-rpc.0.LTK0032481.1.STATE";
    var idClosed = "s7.0.Outputs.0.Status_Door_EG_Closed";
    var idOpen = "s7.0.Outputs.0.Status_Door_EG_Open";
    
    on(idSrc, function(dp) {  // Triggern bei Änderung
    
    if (getState(idSrc).val == "0" )
    {
      setState(idClosed, true); 
      setState(idOpen, false);
      } else {
      setState(idClosed, false); 
      setState(idOpen, true);
    }
    
    });
    
    // Script start
    setState(idOpen, getState(idSrc).val);
    setState(idClosed, !getState(idSrc).val);
    
    

    So sieht das aus und funktioniert auch.

    Jetzt eben musste ich mal alles runterfahren, weil ich wegen Arbeiten in der Verteilung die Hauptsicherung abschalten musste. Nachdem ich wieder alles gestartet habe, bleiben beide LED Dunkel. Die Homematic hat den Zustand geschlossen. Nachdem ich einen Restart des Scripts gemacht habe, war es wieder OK.

    Wird dieser Scriptteil nach dem Booten nicht automatisch einmal bearbeitet ?

    ` > // Script start

    setState(idOpen, getState(idSrc).val);

    setState(idClosed, !getState(idSrc).val); `

    Gruss.

    ToBo

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @TOBO:

      Wird dieser Scriptteil nach dem Booten nicht automatisch einmal bearbeitet ? `
      Ja, alle Skripte werden nach dem Booten gestartet.

      Der Vergleich funtioniert allerdings nicht, da kein String, sondern ein boolscher Wert geliefert wird. Richtig:

      if(!dp.state.val) {
      // oder
      if(dp.state.val === false) {
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • T Offline
        T Offline
        TOBO
        wrote on last edited by
        #3

        Mag sein das ea falsch ist, aber es funktioniert schon seit Wochen so einwandfrei.

        1 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          Stimmt, aufgrund der impliziten Typwandlung ("0" –> false) bei Javascript.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Reply Last reply
          0
          • T Offline
            T Offline
            TOBO
            wrote on last edited by
            #5

            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
            0
            • T Offline
              T Offline
              TOBO
              wrote on last edited by
              #6

              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
              0
              • paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by
                #7

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

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  TOBO
                  wrote on last edited by
                  #8

                  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
                  0
                  • T Offline
                    T Offline
                    TOBO
                    wrote on last edited by
                    #9

                    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
                    0
                    • D Offline
                      D Offline
                      dwm
                      wrote on last edited by
                      #10

                      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
                      0
                      • DutchmanD Offline
                        DutchmanD Offline
                        Dutchman
                        Developer Most Active Administrators
                        wrote on last edited by
                        #11

                        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
                        0
                        • paul53P Offline
                          paul53P Offline
                          paul53
                          wrote on last edited by
                          #12

                          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();
                          });
                          
                          

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Reply Last reply
                          0
                          • D Offline
                            D Offline
                            dwm
                            wrote on last edited by
                            #13

                            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. 8) 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
                            0
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              wrote on last edited by
                              #14

                              @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.

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              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

                              601

                              Online

                              32.7k

                              Users

                              82.4k

                              Topics

                              1.3m

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

                              • Don't have an account? Register

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