Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Script funktioniert nur bedingt

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

Script funktioniert nur bedingt

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 4 Kommentatoren 822 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
    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 Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @manolo sagte in Script funktioniert nur bedingt:

        Ergebnis bleibt das Selbe.

        welches?
        was steht im log?

        M Offline
        M Offline
        Manolo
        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
        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 Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            Manolo
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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 Online
              CodierknechtC Online
              Codierknecht
              Developer Most Active
              schrieb am zuletzt editiert von 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 9.1.1 LXC|8 GB|Core i7-6700
              HmIP|ZigBee|Tasmota|Unifi
              Zabbix Certified Specialist
              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

              1 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                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 Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • haus-automatisierungH Offline
                    haus-automatisierungH Offline
                    haus-automatisierung
                    Developer Most Active
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    1
                    • M Offline
                      M Offline
                      Manolo
                      schrieb am zuletzt editiert von Manolo
                      #12

                      Das war tatsächlich die Lösung!

                      Vielen Dank für die schnelle Hilfe! :+1:

                      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 Antworten Letzte Antwort
                      0
                      • M Manolo

                        Das war tatsächlich die Lösung!

                        Vielen Dank für die schnelle Hilfe! :+1:

                        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
                        schrieb am zuletzt editiert von
                        #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 Antwort Letzte Antwort
                        0
                        • M Manolo

                          Das war tatsächlich die Lösung!

                          Vielen Dank für die schnelle Hilfe! :+1:

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

                          Thema kann geschlossen werden.

                          CodierknechtC Online
                          CodierknechtC Online
                          Codierknecht
                          Developer Most Active
                          schrieb am zuletzt editiert von
                          #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 9.1.1 LXC|8 GB|Core i7-6700
                          HmIP|ZigBee|Tasmota|Unifi
                          Zabbix Certified Specialist
                          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                          1 Antwort Letzte Antwort
                          0
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          745

                          Online

                          32.5k

                          Benutzer

                          81.6k

                          Themen

                          1.3m

                          Beiträge
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                          ioBroker Community 2014-2025
                          logo
                          • Anmelden

                          • Du hast noch kein Konto? Registrieren

                          • Anmelden oder registrieren, um zu suchen
                          • Erster Beitrag
                            Letzter Beitrag
                          0
                          • Home
                          • Aktuell
                          • Tags
                          • Ungelesen 0
                          • Kategorien
                          • Unreplied
                          • Beliebt
                          • GitHub
                          • Docu
                          • Hilfe