Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Javascript "startSkript" startet Skript doppelt

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    Javascript "startSkript" startet Skript doppelt

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      MCU @Boronsbruder last edited by

      @boronsbruder Würde runscript nutzen, aussdem erst nach sendMSG setzen, sonst wird die Nachricht nicht gesendet?

      setTimeout(function(){
           runScript()
      },2000)
      
      1 Reply Last reply Reply Quote 0
      • ofri2607
        ofri2607 last edited by

        @boronsbruder
        Versuch mal in der Subscribtion anstelle

        change: „ne“
        

        durch

        val: false
        

        auszutauschen.
        Damit benötigst du dann deine erste if-Abfrage nicht mehr.

        Ich habe hin und wieder auch schon für mich nicht ganz nachvollziehbare Verhalten bei change: „ne“ gehabt, sodass ich immer versuche explizit auf den gewünschten Wert in der Subscription abzufragen.

        Asgothian 1 Reply Last reply Reply Quote 0
        • Asgothian
          Asgothian Developer @ofri2607 last edited by Asgothian

          @ofri2607 sagte in Javascript "startSkript" startet Skript doppelt:

          @boronsbruder
          Versuch mal in der Subscribtion anstelle

          change: „ne“
          

          durch

          val: false
          

          auszutauschen.
          Damit benötigst du dann deine erste if-Abfrage nicht mehr.

          Ich habe hin und wieder auch schon für mich nicht ganz nachvollziehbare Verhalten bei change: „ne“ gehabt, sodass ich immer versuche explizit auf den gewünschten Wert in der Subscription abzufragen.

          Davon rate ich dringend ab. Wenn schon die if-abfrage verzichtet werden soll, dann bitte mit

          change:"lt"
          

          Das triggert ausschliesslich auf den Wechsel von False auf True. True auf False.

          A.
          Edit - Fehlerbehebung.

          ofri2607 1 Reply Last reply Reply Quote 0
          • Boronsbruder
            Boronsbruder @Boronsbruder last edited by Boronsbruder

            Also, das mit change: 'lt' hab ich mal präventiv getestet. (@Asgothian du meintest sicher: triggert von TRUE auf FALSE - nur um keine Fehler reinzubringen)
            Die Sache ist die, es wird immer nur das startSkript doppelt ausgeführt. Die anderen Teile sendMsg und der ConsolenOutput werden korrekt einmal ausgeführt.

            Die Lösung ist folgende:

                    stopScript('common.Bewässerung.Ventil_Steuerung', () => {
                        setTimeout( ()=> {runScript('common.Bewässerung.Ventil_Steuerung')},1000);
                    });
            

            Selbst ohne den Timeout also mit

                     stopScript('common.Bewässerung.Ventil_Steuerung', () => {
                        runScript('common.Bewässerung.Ventil_Steuerung');
                    });
            

            startet das Skript doppelt!
            Warum? Ich hab keine Ahnung...

            Asgothian T 3 Replies Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @Boronsbruder last edited by

              @boronsbruder sagte in Javascript "startSkript" startet Skript doppelt:

              triggert von TRUE auf FALSE - nur um keine Fehler reinzubringen

              korrekt, mein Fehler.

              1 Reply Last reply Reply Quote 0
              • Asgothian
                Asgothian Developer @Boronsbruder last edited by

                @boronsbruder sagte in Javascript "startSkript" startet Skript doppelt:

                startet das Skript doppelt!
                Warum? Ich hab keine Ahnung...

                bitte mal eine Debug ausgäbe in den Trigger, mit Angabe der Quelle und so weiter. Schauen ob der Trigger 2 mal kommt.

                A.

                Boronsbruder 1 Reply Last reply Reply Quote 0
                • ofri2607
                  ofri2607 @Asgothian last edited by

                  @asgothian sagte in Javascript "startSkript" startet Skript doppelt:

                  Davon rate ich dringend ab.

                  Was ist der Grund, warum du von eine Variante mit „val: false“ dringend abrätst?
                  Ich habe es in der Form des Öfteren in meinen Skript‘s problemlos und mit dem jew. gewünschten Ergebnis am Laufen; bin aber auch alles andere als ein Profi. Daher wäre, um daraus zu Lernen, der Hintergrund für mich interessant.

                  Asgothian 1 Reply Last reply Reply Quote 0
                  • Asgothian
                    Asgothian Developer @ofri2607 last edited by Asgothian

                    @ofri2607 Ganz einfach:

                    val:false reagiert sowohl auf Änderungen von true auf false, als auch auf Aktualisierungen (sprich wenn false einfach noch einmal in den DP geschrieben wird. Z.Bsp. wenn dahinter liegende Logik sich initialisiert) oder etwas bestätigt wird.

                    Meistens ist das ungewünscht. Deswegen triggere ich boolean states zumeist auf greater than (fuer true) und less than fuer false)

                    A.

                    bahnuhr 1 Reply Last reply Reply Quote 2
                    • bahnuhr
                      bahnuhr Forum Testing Most Active @Asgothian last edited by

                      @asgothian

                      ich benutze dann sowas:

                      change: "ne", val: false
                      

                      Müsste doch genauso funktionieren.
                      Also bei Veränderung und val = false

                      Asgothian 1 Reply Last reply Reply Quote 0
                      • Asgothian
                        Asgothian Developer @bahnuhr last edited by

                        @bahnuhr sagte in Javascript "startSkript" startet Skript doppelt:

                        @asgothian

                        ich benutze dann sowas:

                        change: "ne", val: false
                        

                        Müsste doch genauso funktionieren.
                        Also bei Veränderung und val = false

                        ja, Aber warum 2x prüfen wenn 1x reicht ?

                        bahnuhr 1 Reply Last reply Reply Quote 0
                        • bahnuhr
                          bahnuhr Forum Testing Most Active @Asgothian last edited by

                          @asgothian sagte in Javascript "startSkript" startet Skript doppelt:

                          ja, Aber warum 2x prüfen wenn 1x reicht ?

                          weil ich das andere nicht gewusst habe und mir es so logischer war 😉

                          Asgothian 1 Reply Last reply Reply Quote 0
                          • Asgothian
                            Asgothian Developer @bahnuhr last edited by

                            @bahnuhr 🙂

                            Ich predige das eigentlich seit 2020. true > false 🙂

                            Homoran 1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators @Asgothian last edited by

                              @asgothian sagte in Javascript "startSkript" startet Skript doppelt:

                              true > false

                              @bahnuhr
                              ist einfache binäre (bool'sche) Algebra!
                              false = 0
                              true = 1

                              bahnuhr 1 Reply Last reply Reply Quote 0
                              • bahnuhr
                                bahnuhr Forum Testing Most Active @Homoran last edited by

                                @homoran sagte in Javascript "startSkript" startet Skript doppelt:

                                false = 0
                                true = 1

                                Ja, das ist klar.

                                Aber dass dies seit 5 Jahre schon gepredigt wurde ist mir nicht bekannt.
                                Und ich lese täglich 2-4 Stunden hier im Forum.

                                Muss an mir vorbei gegangen sein.

                                Homoran 1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators @bahnuhr last edited by

                                  @bahnuhr sagte in Javascript "startSkript" startet Skript doppelt:

                                  Aber dass dies seit 5 Jahre schon gepredigt wurde ist mir nicht bekannt.

                                  spätestens bei Blockly wird immer wieder darauf hingewiesen den Trigger auf ist größer/ kleiner als letztes zu nehmen um eindeutigere Trigger zu erhalten und weitere Prüfungen in der folgenden Logik einzusparen

                                  bahnuhr 1 Reply Last reply Reply Quote 0
                                  • bahnuhr
                                    bahnuhr Forum Testing Most Active @Homoran last edited by

                                    @homoran sagte in Javascript "startSkript" startet Skript doppelt:

                                    Blockly

                                    ach deshalb 😉

                                    ich nehm JS und kein Blockly

                                    Homoran 1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators @bahnuhr last edited by

                                      @bahnuhr sagte in Javascript "startSkript" startet Skript doppelt:

                                      ich nehm JS und kein Blockly

                                      Weiß ich!
                                      Den entsprechenden Satz dazu hatte ich wieder gelöscht 😁

                                      1 Reply Last reply Reply Quote 0
                                      • T
                                        ticaki Developer @Boronsbruder last edited by ticaki

                                        @boronsbruder sagte in Javascript "startSkript" startet Skript doppelt:

                                        startet das Skript doppelt!
                                        Warum? Ich hab keine Ahnung...

                                        Nehmen wir mal an im Javascript adapter steht:

                                        for (let a=0; a<alleScriptDieTriggern.length; a++) {
                                        

                                        und du rufst jetzt synchron im Trigger die funktion

                                        alleScriptDieTriggern.push()
                                        

                                        auf. Das starten eines Skripts mit Trigger ist ja nix anderes.
                                        Dann wäre es möglich das ein await irgendwo deinem Skript die Zeit verschaft da einen Eintrag rein zu moggeln so das length+1 geht.

                                        Wobei es dann am ende steht und die chance, dass da nochmal genug zeit ist, eher niedrig - daher löst dieser Trigger nur einmal aus.

                                        Aber nur vermutung.

                                        1 Reply Last reply Reply Quote 0
                                        • Boronsbruder
                                          Boronsbruder @Asgothian last edited by

                                          @asgothian

                                          Das ist das komplette Skript (mit der Debug-Zeile und dem "Fehler" mit nur runskript ohne Timeout

                                          //Definitionen
                                                  const sDPFrost = '0_userdata.0.Wetter.aktuell.Frost';
                                                  const aDP_Frost_Devices=['hm-rpc.0.00089D89BA198D.3.STATE','hm-rpc.0.00089D89A1686E.4.STATE','hm-rpc.0.00089F29B112F6.3.STATE']; //Pumpe Zisterne, Moorbeet, Teich => aus wenn Frost, weil Kanäle und-verknüpft
                                                  const sDP_SensorIBC1 = 'hm-rpc.0.001F1A4990B273.1.STATE'; // Pegelschalter IBC voll
                                                  
                                                  const titel = "RaspMatic Reboot";
                                                  var msg = 'Frost aktualisiert ' + '\n\r';
                                                  
                                                  
                                                  // Trigger RaspMatic nach Reboot
                                                  
                                                  function sendMsg(pushmsg){
                                                          
                                                      sendTo("pushover", {
                                                          message:  pushmsg , // mandatory - your text message
                                                          title: titel, // optional - your message's title, otherwise your app's name is used
                                                          //sound: 'magic', // optional - the name of one of the sounds supported by device clients to override the user's default sound choice
                                                              // pushover, bike, bugle, cashregister, classical, cosmic, falling,
                                                              // gamelan, incoming, intermission, magic, mechanical, pianobar, siren,
                                                              // spacealarm, tugboat, alien, climb, persistent, echo, updown, none
                                                          priority: -1 // optional
                                                              // -1 to always send as a quiet notification,
                                                              // 1 to display as high-priority and bypass the user's quiet hours, or
                                                              // 2 to also require confirmation from the user
                                                      });
                                                  };
                                                  
                                                  on ({id: 'hm-rega.0.950', change: 'lt'}, function(data){ //Variable "CCU im Reboot" von RaspMatic
                                                    //  if (!data.state.val) // CCU nicht mehr im Reboot
                                                    //  {
                                                        console.log(data);
                                                          var bFrost = getState(sDPFrost).val;
                                                  
                                                          // Frost initialisieren
                                                          aDP_Frost_Devices.forEach (id => {
                                                              setState(id, !bFrost);
                                                              msg += '-- ' + id + ' : ' + !bFrost +'\n\r';
                                                          });
                                                  
                                                          // IBC Pegel initialisieren
                                                          var bIBC_voll = getState(sDP_SensorIBC1).val;
                                                          setState('0_userdata.0.Bewässerung.IBC.Pegel_voll', bIBC_voll);
                                                              msg += ' -- IBC Pegel voll : ' + bIBC_voll + '\n\r';
                                                          
                                                          //Bewässerung reinit => Ventil-Steuerung-Skript neutstarten
                                                          stopScript('common.Bewässerung.Ventil_Steuerung', () => {
                                                              //setTimeout( ()=> {runScript('common.Bewässerung.Ventil_Steuerung')},1000);
                                                              runScript('common.Bewässerung.Ventil_Steuerung');
                                                          });
                                                          
                                                              msg += ' -- Reinit Venti-Überwachung \n\r';
                                                  
                                                          // Info über Boot loggen
                                                          console.warn ("[Raspimatic-Boot] " + msg);
                                                          sendMsg(msg);
                                                          
                                                  
                                                     // }
                                                  });
                                          

                                          Es gibt nur eine Ausgabe ->

                                          EventObj {
                                            id: 'hm-rega.0.950',
                                            newState: {
                                              val: false,
                                              ts: 1757669894412,
                                              ack: false,
                                              lc: 1757669894412,
                                              from: 'system.adapter.admin.0',
                                              q: 0,
                                              c: undefined,
                                              user: 'system.user.admin'
                                            },
                                            oldState: {
                                              val: true,
                                              ts: 1757669892106,
                                              ack: true,
                                              lc: 1757669888017,
                                              from: 'system.adapter.hm-rega.0',
                                              q: 0,
                                              c: undefined,
                                              user: 'system.user.admin'
                                            },
                                            state: {
                                              val: false,
                                              ts: 1757669894412,
                                              ack: false,
                                              lc: 1757669894412,
                                              from: 'system.adapter.admin.0',
                                              q: 0,
                                              c: undefined,
                                              user: 'system.user.admin'
                                            }
                                          }
                                          

                                          aber das Skript startet wieder 2x:

                                          javascript.0	2025-09-12 11:38:15.492	info	Start JavaScript script.js.common.Bewässerung.Ventil_Steuerung (Javascript/js)
                                          javascript.0	2025-09-12 11:38:14.589	info	Start JavaScript script.js.common.Bewässerung.Ventil_Steuerung (Javascript/js)
                                          

                                          Und beide gestartet Skripts laufen dann parallel weiter...

                                          T 1 Reply Last reply Reply Quote 0
                                          • T
                                            ticaki Developer @Boronsbruder last edited by

                                            @boronsbruder

                                            Hast du mal den javascript-adapter neu gestartet? Im Hintergrund laufende Skript bekommst du nicht durch abschalten weg.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            919
                                            Online

                                            32.1k
                                            Users

                                            80.6k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            23
                                            271
                                            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