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 funktioniert nur bedingt

NEWS

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

  • 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 funktioniert nur bedingt

Script funktioniert nur bedingt

Scheduled Pinned Locked Moved Skripten / Logik
14 Posts 4 Posters 797 Views 3 Watching
  • 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.
  • M Offline
    M Offline
    Manolo
    wrote on last edited by Manolo
    #1

    Hallo Community,
    habe mir aus diesem Forum aus Script Schnipseln ein eigenes Script gebastelt.
    Hier mal ein Auszug aus dem Script.

    // Eigene Datenpunkte
    function pruefeEigeneDatenpunkte() {
        if (arrDatenpunkt.length > 0) {
            for(var i = 0; i < arrDatenpunkt.length; i++) {
    			var present1 = (pathRadar + '0.' + arrDatenpunkt[i]);
    			var present2 = (pathRadar + '1.' + arrDatenpunkt[i]);
    
    			on([present1, present2], function(obj) {
    					if((present1 === obj.id) || (present2 === obj.id))
                            log('Sprungchance');
                            run(obj, obj.name);
                });
            }
        }
    }
    
    pruefeEigeneDatenpunkte();
    
    

    Das seltsame daran ist, es funktioniert nur mit dem Kommentar in Zeile 11.
    Sobald ich die Zeile entferne oder ausklammere, funktioniert der Sprung zum eigentlichen Programm nicht mehr.
    Kann mir da bitte jemand helfen?

    ioBroker auf Beelink J45, Slave auf Beelink BT3pro, Unifi Controller auf Raspi Pi 3; 4x VIS Fully Browser auf 10" und 7" Tablet; piVCCU auf 2x Raspi Pi 3 Redundanzsystem, ca. 50 HM-Geräte; Unifi USG, Switch, AP-AC-LR

    CodierknechtC 1 Reply Last reply
    0
    • M Manolo

      Hallo Community,
      habe mir aus diesem Forum aus Script Schnipseln ein eigenes Script gebastelt.
      Hier mal ein Auszug aus dem Script.

      // Eigene Datenpunkte
      function pruefeEigeneDatenpunkte() {
          if (arrDatenpunkt.length > 0) {
              for(var i = 0; i < arrDatenpunkt.length; i++) {
      			var present1 = (pathRadar + '0.' + arrDatenpunkt[i]);
      			var present2 = (pathRadar + '1.' + arrDatenpunkt[i]);
      
      			on([present1, present2], function(obj) {
      					if((present1 === obj.id) || (present2 === obj.id))
                              log('Sprungchance');
                              run(obj, obj.name);
                  });
              }
          }
      }
      
      pruefeEigeneDatenpunkte();
      
      

      Das seltsame daran ist, es funktioniert nur mit dem Kommentar in Zeile 11.
      Sobald ich die Zeile entferne oder ausklammere, funktioniert der Sprung zum eigentlichen Programm nicht mehr.
      Kann mir da bitte jemand helfen?

      CodierknechtC Offline
      CodierknechtC Offline
      Codierknecht
      Developer Most Active
      wrote on last edited by
      #2

      @manolo
      Eine Schleifenvaraiable (i) darfst Du nicht innerhalb wiederverwenden.
      Nenne die in der inneren Schleife z.B. j.

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 8.2.4 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi + dies & das
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      M 1 Reply Last reply
      0
      • CodierknechtC Codierknecht

        @manolo
        Eine Schleifenvaraiable (i) darfst Du nicht innerhalb wiederverwenden.
        Nenne die in der inneren Schleife z.B. j.

        M Offline
        M Offline
        Manolo
        wrote on last edited by Manolo
        #3

        @codierknecht
        Die innere Schleife war ausgeklammert, brauche ich für die Funktion auch eigentlich nicht.
        Sorry, dass ich das Script nicht aufgeräumt habe.
        Habe es nun aber korrigiert, Ergebnis bleibt das Selbe.

        Es geht um die zweite If-Bedingung in Zeile 9.
        das Programm "run" wird nur ausgeführt, wenn in der Zeile vorher etwas drin steht.

        ioBroker auf Beelink J45, Slave auf Beelink BT3pro, Unifi Controller auf Raspi Pi 3; 4x VIS Fully Browser auf 10" und 7" Tablet; piVCCU auf 2x Raspi Pi 3 Redundanzsystem, ca. 50 HM-Geräte; Unifi USG, Switch, AP-AC-LR

        HomoranH CodierknechtC haus-automatisierungH 3 Replies Last reply
        0
        • M Manolo

          @codierknecht
          Die innere Schleife war ausgeklammert, brauche ich für die Funktion auch eigentlich nicht.
          Sorry, dass ich das Script nicht aufgeräumt habe.
          Habe es nun aber korrigiert, Ergebnis bleibt das Selbe.

          Es geht um die zweite If-Bedingung in Zeile 9.
          das Programm "run" wird nur ausgeführt, wenn in der Zeile vorher etwas drin steht.

          HomoranH Offline
          HomoranH Offline
          Homoran
          Global Moderator Administrators
          wrote on last edited by
          #4

          @manolo sagte in Script funktioniert nur bedingt:

          Ergebnis bleibt das Selbe.

          welches?
          was steht im log?

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          M 1 Reply Last reply
          0
          • HomoranH Homoran

            @manolo sagte in Script funktioniert nur bedingt:

            Ergebnis bleibt das Selbe.

            welches?
            was steht im log?

            M Offline
            M Offline
            Manolo
            wrote on last edited by Manolo
            #5

            @homoran
            Mit Ergebnis meinte ich, dass das Programm nur ausgeführt wird, wenn die zusätzliche Zeile aktiv ist.
            Ohne die Zeile wird das nachfolgende Programm nicht ausgeführt.
            Im Log steht leider nichts, also kein Fehler.

            Was ich auch seltsam finde, ist, dass der Kommentar der hinter dem log steht ('Sprungchance') nicht als Info im Log auftaucht.

            ioBroker auf Beelink J45, Slave auf Beelink BT3pro, Unifi Controller auf Raspi Pi 3; 4x VIS Fully Browser auf 10" und 7" Tablet; piVCCU auf 2x Raspi Pi 3 Redundanzsystem, ca. 50 HM-Geräte; Unifi USG, Switch, AP-AC-LR

            HomoranH 1 Reply Last reply
            0
            • M Manolo

              @homoran
              Mit Ergebnis meinte ich, dass das Programm nur ausgeführt wird, wenn die zusätzliche Zeile aktiv ist.
              Ohne die Zeile wird das nachfolgende Programm nicht ausgeführt.
              Im Log steht leider nichts, also kein Fehler.

              Was ich auch seltsam finde, ist, dass der Kommentar der hinter dem log steht ('Sprungchance') nicht als Info im Log auftaucht.

              HomoranH Offline
              HomoranH Offline
              Homoran
              Global Moderator Administrators
              wrote on last edited by Homoran
              #6

              @manolo Bitte alles zeigen

              EDIT: Keine nachträglichen Änderungen ohne Kennzeichnung!!!

              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              1 Reply Last reply
              0
              • M Offline
                M Offline
                Manolo
                wrote on last edited by
                #7

                Hier nun das ganze Script:

                // +++++++++++++++++++++++++++++++++  USER ANGABEN  ++++++++++++++++++++++++++++++++
                var pathUser = "0_userdata.0.Anwesenheit.";
                var pathRadar = "radar2."
                
                var arrDatenpunkt = [
                // Beispiel: 'Name'
                	'Peter',
                    'Manuel',
                	'Annett',
                	'Test'
                ];
                
                // +++++++++++++++++++++++++++++  ENDE USER ANGABEN  +++++++++++++++++++++++++++++++
                // ######## FUNKTIONEN ########
                
                // Eigene Datenpunkte
                function pruefeEigeneDatenpunkte() {
                    if (arrDatenpunkt.length > 0) {
                        for(var i = 0; i < arrDatenpunkt.length; i++) {
                			var present1 = (pathRadar + '0.' + arrDatenpunkt[i]);
                			var present2 = (pathRadar + '1.' + arrDatenpunkt[i]);
                
                			on([present1, present2], function(obj) {
                //				for(var j = 0; i < arrDatenpunkt.length; j++) {
                					if((present1 === obj.id) || (present2 === obj.id))
                                        log('Sprungchance');
                                        run(obj, obj.name);
                //                }
                            });
                        }
                    }
                }
                
                pruefeEigeneDatenpunkte();
                
                //----------------------------------------------------------------------------//
                // Programm starten
                function run(obj, name) {
                 //   if ( !existsState(pathUser + name)) { erstelleStates(name);}
                	
                log('Im Programm kommen wir an');
                log(name);
                	if (getState(pathRadar + '0.' + name).val == true || getState(pathRadar + '1.' + name).val == true) {
                        log('User ' + name + ' wurde aktiviert');
                		setState(pathUser + name, true, true);
                	} else {
                        log('User ' + name + ' wurde deaktiviert')
                		setState(pathUser + name, false, true);
                	}
                }
                
                //----------------------------------------------------------------------------//
                // Datenpunkte erstellen
                function erstelleStates (namen) {
                    createState(pathUser + namen, false, {name: namen + 'Anwesend', type: 'boolean' });
                }
                //----------------------------------------------------------------------------//
                

                ioBroker auf Beelink J45, Slave auf Beelink BT3pro, Unifi Controller auf Raspi Pi 3; 4x VIS Fully Browser auf 10" und 7" Tablet; piVCCU auf 2x Raspi Pi 3 Redundanzsystem, ca. 50 HM-Geräte; Unifi USG, Switch, AP-AC-LR

                HomoranH 1 Reply Last reply
                0
                • M Manolo

                  @codierknecht
                  Die innere Schleife war ausgeklammert, brauche ich für die Funktion auch eigentlich nicht.
                  Sorry, dass ich das Script nicht aufgeräumt habe.
                  Habe es nun aber korrigiert, Ergebnis bleibt das Selbe.

                  Es geht um die zweite If-Bedingung in Zeile 9.
                  das Programm "run" wird nur ausgeführt, wenn in der Zeile vorher etwas drin steht.

                  CodierknechtC Offline
                  CodierknechtC Offline
                  Codierknecht
                  Developer Most Active
                  wrote on last edited by Codierknecht
                  #8

                  @manolo
                  Dass Du da in einer Schleife Trigger erzeugst ist Dir klar?
                  Das "run()" wird nur ausgeführt, wenn der Trigger feuert.

                  Ich würde den ganzen Kram mal vernünftig einrücken, damit man auch sieht was da wie zusammengehört.
                  Ohne jegliche Berücksichtigung der Funktionalität - die erschließt sich mir nicht.

                  // Eigene Datenpunkte
                  function pruefeEigeneDatenpunkte() {
                      if (arrDatenpunkt.length > 0) {
                          for (var i = 0; i < arrDatenpunkt.length; i++) {
                              var present1 = (pathRadar + '0.' + arrDatenpunkt[i]);
                              var present2 = (pathRadar + '1.' + arrDatenpunkt[i]);
                  
                              on([present1, present2], function(obj) {
                        	        if ((present1 === obj.id) || (present2 === obj.id)) {
                                      log('Sprungchance');
                                  }
                                  run(obj, obj.name);
                              });
                          }
                      }
                  }
                   
                  pruefeEigeneDatenpunkte();
                  

                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                  Proxmox 8.2.4 LXC|8 GB|Core i7-6700
                  HmIP|ZigBee|Tasmota|Unifi + dies & das
                  Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                  1 Reply Last reply
                  1
                  • M Manolo

                    @codierknecht
                    Die innere Schleife war ausgeklammert, brauche ich für die Funktion auch eigentlich nicht.
                    Sorry, dass ich das Script nicht aufgeräumt habe.
                    Habe es nun aber korrigiert, Ergebnis bleibt das Selbe.

                    Es geht um die zweite If-Bedingung in Zeile 9.
                    das Programm "run" wird nur ausgeführt, wenn in der Zeile vorher etwas drin steht.

                    haus-automatisierungH Offline
                    haus-automatisierungH Offline
                    haus-automatisierung
                    Developer Most Active
                    wrote on last edited by haus-automatisierung
                    #9

                    @manolo sagte in Script funktioniert nur bedingt:

                    Es geht um die zweite If-Bedingung in Zeile 9.

                    Dank var statt const sind die Variablen praktisch global. Das funktioniert so nicht. Google:

                    • JavaScript Scope: https://www.w3schools.com/js/js_scope.asp
                    • Block Scope

                    🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                    🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                    📚 Meine inoffizielle ioBroker Dokumentation

                    1 Reply Last reply
                    0
                    • M Manolo

                      Hier nun das ganze Script:

                      // +++++++++++++++++++++++++++++++++  USER ANGABEN  ++++++++++++++++++++++++++++++++
                      var pathUser = "0_userdata.0.Anwesenheit.";
                      var pathRadar = "radar2."
                      
                      var arrDatenpunkt = [
                      // Beispiel: 'Name'
                      	'Peter',
                          'Manuel',
                      	'Annett',
                      	'Test'
                      ];
                      
                      // +++++++++++++++++++++++++++++  ENDE USER ANGABEN  +++++++++++++++++++++++++++++++
                      // ######## FUNKTIONEN ########
                      
                      // Eigene Datenpunkte
                      function pruefeEigeneDatenpunkte() {
                          if (arrDatenpunkt.length > 0) {
                              for(var i = 0; i < arrDatenpunkt.length; i++) {
                      			var present1 = (pathRadar + '0.' + arrDatenpunkt[i]);
                      			var present2 = (pathRadar + '1.' + arrDatenpunkt[i]);
                      
                      			on([present1, present2], function(obj) {
                      //				for(var j = 0; i < arrDatenpunkt.length; j++) {
                      					if((present1 === obj.id) || (present2 === obj.id))
                                              log('Sprungchance');
                                              run(obj, obj.name);
                      //                }
                                  });
                              }
                          }
                      }
                      
                      pruefeEigeneDatenpunkte();
                      
                      //----------------------------------------------------------------------------//
                      // Programm starten
                      function run(obj, name) {
                       //   if ( !existsState(pathUser + name)) { erstelleStates(name);}
                      	
                      log('Im Programm kommen wir an');
                      log(name);
                      	if (getState(pathRadar + '0.' + name).val == true || getState(pathRadar + '1.' + name).val == true) {
                              log('User ' + name + ' wurde aktiviert');
                      		setState(pathUser + name, true, true);
                      	} else {
                              log('User ' + name + ' wurde deaktiviert')
                      		setState(pathUser + name, false, true);
                      	}
                      }
                      
                      //----------------------------------------------------------------------------//
                      // Datenpunkte erstellen
                      function erstelleStates (namen) {
                          createState(pathUser + namen, false, {name: namen + 'Anwesend', type: 'boolean' });
                      }
                      //----------------------------------------------------------------------------//
                      
                      HomoranH Offline
                      HomoranH Offline
                      Homoran
                      Global Moderator Administrators
                      wrote on last edited by
                      #10

                      @manolo und das log?
                      ... auf der Seite Protokolle und unter dem Editorfenster

                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      1 Reply Last reply
                      0
                      • haus-automatisierungH Offline
                        haus-automatisierungH Offline
                        haus-automatisierung
                        Developer Most Active
                        wrote on last edited by
                        #11

                        Einfach nie var verwenden. Dann hat man auch keine Probleme 🙂

                        // Eigene Datenpunkte
                        function pruefeEigeneDatenpunkte() {
                            if (arrDatenpunkt.length > 0) {
                                for(let i = 0; i < arrDatenpunkt.length; i++) {
                                    const present1 = `${pathRadar}0.${arrDatenpunkt[i]}`;
                                    const present2 = `${pathRadar}1.${arrDatenpunkt[i]}`;
                        
                                    on([present1, present2], (obj) => {
                                        if (present1 === obj.id || present2 === obj.id) {
                                            log('Sprungchance');
                                            run(obj, obj.name);
                                        }
                                    });
                                }
                            }
                        }
                        
                        pruefeEigeneDatenpunkte();
                        

                        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                        📚 Meine inoffizielle ioBroker Dokumentation

                        1 Reply Last reply
                        1
                        • M Offline
                          M Offline
                          Manolo
                          wrote on last edited by Manolo
                          #12

                          Das war tatsächlich die Lösung!

                          Vielen Dank für die schnelle Hilfe! 👍

                          Seltsamerweise funktioniert das var bei allen anderen Scripten die ich mir zusammengebaut habe.
                          Werde diese vorsorglich nun abändern.

                          Thema kann geschlossen werden.

                          ioBroker auf Beelink J45, Slave auf Beelink BT3pro, Unifi Controller auf Raspi Pi 3; 4x VIS Fully Browser auf 10" und 7" Tablet; piVCCU auf 2x Raspi Pi 3 Redundanzsystem, ca. 50 HM-Geräte; Unifi USG, Switch, AP-AC-LR

                          haus-automatisierungH CodierknechtC 2 Replies Last reply
                          0
                          • M Manolo

                            Das war tatsächlich die Lösung!

                            Vielen Dank für die schnelle Hilfe! 👍

                            Seltsamerweise funktioniert das var bei allen anderen Scripten die ich mir zusammengebaut habe.
                            Werde diese vorsorglich nun abändern.

                            Thema kann geschlossen werden.

                            haus-automatisierungH Offline
                            haus-automatisierungH Offline
                            haus-automatisierung
                            Developer Most Active
                            wrote on last edited by
                            #13

                            @manolo sagte in Script funktioniert nur bedingt:

                            Seltsamerweise funktioniert das var bei allen anderen Scripten die ich mir zusammengebaut habe.

                            Das Problem ist ja hier, dass Du in der Callback-Funktion auf die Werte außerhalb der Funktion zugreifen möchtest. Und die sind dann halt global (wegen var) und nicht nur im Block-Scope der Schleife gültig.

                            Einfach var vermeiden.

                            🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                            🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                            📚 Meine inoffizielle ioBroker Dokumentation

                            1 Reply Last reply
                            0
                            • M Manolo

                              Das war tatsächlich die Lösung!

                              Vielen Dank für die schnelle Hilfe! 👍

                              Seltsamerweise funktioniert das var bei allen anderen Scripten die ich mir zusammengebaut habe.
                              Werde diese vorsorglich nun abändern.

                              Thema kann geschlossen werden.

                              CodierknechtC Offline
                              CodierknechtC Offline
                              Codierknecht
                              Developer Most Active
                              wrote on last edited by
                              #14

                              @manolo sagte in Script funktioniert nur bedingt:

                              Thema kann geschlossen werden.

                              Das kannst nur Du, indem Du den Eingangspost bearbeitest und ein "[gelöst] - " vor den Titel setzt.

                              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                              Proxmox 8.2.4 LXC|8 GB|Core i7-6700
                              HmIP|ZigBee|Tasmota|Unifi + dies & das
                              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                              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

                              49

                              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