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.
    • werner2000x
      werner2000x @Homoran last edited by

      @homoran 2024-11-13 15:49:07.665 warn get state error: DB closed

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

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

        @homoran 2024-11-13 15:49:07.665 warn get state error: DB closed

        bitte alles im Kontext zeigen.
        So ein Schnipsel hilft nicht wirklich

        ist das wirklich das Skript, das Paul und Codierknecht benutzt haben?

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

          @homoran ich finde den log nicht mehr. Aber jetzt sehe ich 3 offene Fenster im object "DoorsOpen". Jedoch ändert sich die Anzahl nicht, wenn ich eine neues Fenster aufmache.

          Homoran 1 Reply Last reply Reply Quote 0
          • 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

                                      849
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

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