Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Problem mit "Fenster offen Script"

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Problem mit "Fenster offen Script"

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @werner2000x last edited by

      @werner2000x Bitte lass dir helfen!
      Das geht nicht wenn du immer etwas anderes machst, als wir dich bitten!

      Wir sind im Moment hier;

      @paul53 sagte in Problem mit "Fenster offen Script":

      @werner2000x sagte: Script angepasst

      Es muss die Schreibweise in der ID "enum.functions.window" verwendet werden:

      log($('*(functions=window)').toArray());
      

      muss eine ID-Liste mit allen Fenstern ausgeben.

      1 Reply Last reply Reply Quote 1
      • werner2000x
        werner2000x last edited by werner2000x

        Ich bin doch jetzt neuen script, da es mir einfacher ist:

        const ids = Array.prototype.slice.apply($("(functions=window)"));
         
        on({id: ids, change: "ne"}, async function() {
            let count = 0;
            for (let id of ids) {
                if (getState(id).val) count++;
            }
            setStateAsync("javascript.0.FensterUeberwachung.DoorsOpen", count, true);
        });
        
        Codierknecht Homoran paul53 3 Replies Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @werner2000x last edited by

          @werner2000x sagte in Problem mit "Fenster offen Script":

          Ich bin doch jetzt neuen script:

          Wir aber (noch) nicht.
          Wir möchten erstmal Stück für Stück sehen, was da wie eingerichtet ist.

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

            @werner2000x sagte in Problem mit "Fenster offen Script":

            Ich bin doch jetzt neuen script:

            sollst du aber nicht

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

              @werner2000x sagte: neuen script

              Dann ergänze es durch Log-Ausgaben:

              const ids = Array.prototype.slice.apply($("(functions=window)"));
              log(ids);
               
              on({id: ids, change: "ne"}, async function() {
                  let count = 0;
                  for (let id of ids) {
                      if (getState(id).val) count++;
                  }
                  setStateAsync("javascript.0.FensterUeberwachung.DoorsOpen", count, true);
                  log('Anzahl offen: ' + count);
              });
              
              werner2000x 1 Reply Last reply Reply Quote 2
              • werner2000x
                werner2000x @paul53 last edited by

                @paul53 Hier der Log:

                javascript.0	16:11:59.416	info	script.js.Meine_Geräte.FensterOffenWarung: Anzahl offen: 3
                
                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @werner2000x last edited by

                  @werner2000x sagte: Hier der Log:

                  Wo ist der Log aus Zeile 2?

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

                    @paul53 Log aus 2. Zeile:

                    avascript.0	16:15:19.420	info	script.js.Meine_Geräte.FensterOffenWarung: [ 'innogy-smarthome.0.Esszimmer.Fenstersensor-Esszimmer.Fenstersensor-Esszimmer.IsOpen', 'innogy-smarthome.0.Flur.Tür-und-Fenstersensor-1.Tür-und-Fenstersensor-1.IsOpen', 'innogy-smarthome.0.Küche.Fenstersensor-Küche.Fenstersensor-Küche.IsOpen', 'innogy-smarthome.0.Schlafzimmer.Fenster.WDS.IsOpen', 'zigbee.0.00158d008b158119.contact', 'zigbee.0.00158d008b159b8c.contact', 'zigbee.0.00158d008b159c0a.contact', 'zigbee.0.00158d008b31a568.contact' ]
                    javascript.0	16:15:19.421	info	script.js.Meine_Geräte.FensterOffenWarung: registered 8 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                    
                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @werner2000x last edited by paul53

                      @werner2000x sagte: Log aus 2. Zeile

                      Da sind doch die 8 Datenpunkt-IDs der Fenster!
                      Liefert "contact" ebenfalls true bei "offen"?

                      werner2000x 1 Reply Last reply Reply Quote 1
                      • werner2000x
                        werner2000x @paul53 last edited by werner2000x

                        @paul53 Die Fenster isopen (innogy) liefern 0 bei zu, die contact-event 1 bei zu.

                        Kategorie3.jpg

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

                          @werner2000x sagte: contact-event 1 bei zu.

                          Dann modifiziere die Schleife:

                              for (let id of ids) {
                                  let open = getState(id).val;
                                  if(id.includes('contact')) open = !open;
                                  if(open) count++;
                              }
                          

                          Ich würde allerdings eine Vereinheitlichung per Alias bevorzugen, wie @Codierknecht bereits erwähnte.

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

                            @paul53 Danke für die Hilfe.
                            Es kommt der Fehler "open is not defined"

                            onst ids = Array.prototype.slice.apply($("(functions=window)"));
                            log(ids);
                             
                            on({id: ids, change: "ne"}, async function() {
                                let count = 0;
                                for (let id of ids) {
                                    if (getState(id).val) count++;
                                     if(id.includes('contact')) open = !open;
                                    if(open) count++;
                                }
                                setStateAsync("javascript.0.FensterUeberwachung.DoorsOpen", count, true);
                                log('Anzahl offen: ' + count);
                                	
                                
                            });
                            
                            paul53 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @werner2000x last edited by

                              @werner2000x sagte: "contact event" jedoch immer noch als offen gewertet.

                              Du solltest die bestehende Schleife modifizieren und nicht eine weitere Schleife hinzufügen.

                              const ids = Array.prototype.slice.apply($("(functions=window)"));
                              // log(ids);
                               
                              on({id: ids, change: "ne"}, async function() {
                                  let count = 0;
                                  for (let id of ids) {
                                      let open = getState(id).val;
                                      if(id.includes('contact')) open = !open;
                                      if(open) count++;
                                  }
                                  setStateAsync("javascript.0.FensterUeberwachung.DoorsOpen", count, true);
                                  log('Anzahl offen: ' + count);
                              });
                              
                              werner2000x 1 Reply Last reply Reply Quote 0
                              • werner2000x
                                werner2000x @paul53 last edited by

                                @paul53 sorry, habe falsch eingefügt. Jetzt klappt es. 🙂

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                957
                                Online

                                31.8k
                                Users

                                80.0k
                                Topics

                                1.3m
                                Posts

                                6
                                71
                                2600
                                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