Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Gelöst] Fensterzähler mit Aufzählungen

    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

    [Gelöst] Fensterzähler mit Aufzählungen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Masterg 23
      Masterg 23 @dirk1962 last edited by

      @dirk1962 Vielen Dank, ich werde es mir gleich anschauen. Ich habe noch eine andere Anleitung gefunden:

      Scheint einfach zu sein aber trotzdem bekomme ich es nicht hin. Der DP der hochzählen soll, bleibt bei 0.
      Sobald ich ein Fenster öffne, blinkt die Zahl in grün auf aber der Wert bleibt bei 0.

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

        @masterg-23 sagte:

        setState("zählen_Fenster.textFensterauf", textFensterauf.join(',                                                                                                                                                                             '));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
        

        Ist am Ende der Zeile 32 ein Zeilenumbruch? Der wäre falsch.

            setState("zählen_Fenster.textFensterauf", textFensterauf.join(', '));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
        
        Masterg 23 1 Reply Last reply Reply Quote 0
        • Masterg 23
          Masterg 23 @paul53 last edited by

          @paul53 said in Fensterzähler mit Aufzählungen:

          @masterg-23 sagte:

          setState("zählen_Fenster.textFensterauf", textFensterauf.join(',                                                                                                                                                                             '));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
          

          Ist am Ende der Zeile 32 ein Zeilenumbruch? Der wäre falsch.

              setState("zählen_Fenster.textFensterauf", textFensterauf.join(', '));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
          

          Das war in der Tat falsch. Habs korrigiert. Trotzdem wird der Wert vom DP nicht geändert, wenn ich ein Fenster aufmache.

          Bildschirmfoto 2021-02-18 um 12.10.38.png

          Bildschirmfoto 2021-02-18 um 12.11.04.png

          Bildschirmfoto 2021-02-18 um 12.11.11.png

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

            @masterg-23 sagte: Trotzdem wird der Wert vom DP nicht geändert, wenn ich ein Fenster aufmache.

            Das Skript erstellt und verwendet Datenpunkte unter "javascript.0.zählen_Fenster".

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

              @paul53 Danke für deine Antwort.
              Auch dieser DP ändert sich nicht.
              Bildschirmfoto 2021-02-18 um 12.32.30.png

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

                @masterg-23 sagte: Auch dieser DP ändert sich nicht.

                Den Selektor hast Du auch nicht angepasst?

                var cacheSelectorState  = $('zigbee.0.*.opened(functions=Fenster)');
                

                Die Enum-ID lautet "enum.functions.Fenster" (Fenster groß geschrieben)?

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

                  @paul53 said in Fensterzähler mit Aufzählungen:

                  var cacheSelectorState = $('*.opened(functions=Fenster)');

                  Ich habe es angepasst.
                  Es gibt zwei Zeilen:
                  einmal var cacheSelector .... und einmal var cacheSelectorState...
                  ich habe den zweiten wie du geschrieben hattest angepasst. Aber ich denke, dass da noch ein Fehler drin ist.

                  var cacheSelector = $('channel[state.id=*.STATE](functions=Fenster)');
                    
                  var cacheSelectorState = $('*.opened(functions=Fenster)');
                    
                   function countFenster(obj) {
                        // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                       var anzahlFenster = 0;
                       var anzahlFensterauf = 0;
                       var textFensterauf = [];
                    
                  
                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Masterg 23 last edited by

                    @masterg-23
                    Ist "fenster" in der ID klein geschrieben?

                    Bild_2021-02-18_125626.png

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

                      @paul53 said in Fensterzähler mit Aufzählungen:

                      @masterg-23
                      Ist "fenster" in der ID klein geschrieben?

                      Bild_2021-02-18_125626.png

                      Nein den Code hatte ich oben gepostet. Fenster ist großgeschrieben

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

                        @masterg-23 sagte: hatte ich oben gepostet. Fenster ist großgeschrieben

                        Dort ist es in der ID klein geschrieben! Also so:

                        var cacheSelectorState = $('*.opened(functions=fenster)');
                        
                        Masterg 23 1 Reply Last reply Reply Quote 0
                        • Masterg 23
                          Masterg 23 @paul53 last edited by

                          @paul53 said in Fensterzähler mit Aufzählungen:

                          @masterg-23 sagte: hatte ich oben gepostet. Fenster ist großgeschrieben

                          Dort ist es in der ID klein geschrieben! Also so:

                          var cacheSelectorState = $('*.opened(functions=fenster)');
                          

                          Ich weiß nicht wie das sein kann. Oben ist es definitiv groß geschrieben.
                          Anbei noch einmal der gesamte Code

                          createState('zählen_Fenster.anzahlFenster', 0);    // wenn benötigt: Anzahl der vorhandenen Lichter
                           createState('zählen_Fenster.anzahlFensterauf', 0);  // Anzahl der Lichter, die an sind als Variable unter Javascript.0 anlegen
                           createState('zählen_Fenster.textFensterauf', " ");  // Anzahl der Lichter, die an sind als Variable unter Javascript.0 anlegen
                            
                           var cacheSelector = $('channel[state.id=*.STATE](functions=Fenster)');
                            
                          var cacheSelectorState = $('*.opened(functions=Fenster)');
                            
                           function countFenster(obj) {
                                // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0
                               var anzahlFenster = 0;
                               var anzahlFensterauf = 0;
                               var textFensterauf = [];
                            
                              log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val);    // Info im Log, welcher Zustand sich geändert hat
                            
                              cacheSelectorState.each(function (id, i) {                       // Schleife für jedes gefundenen Element *.STATE im Gewerk Licht
                                   var status = getState(id).val;                          // Zustand *.STATE abfragen (jedes Element)
                                   var obj    = getObject(id);
                                   if (status === true) {    // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
                                        textFensterauf.push(obj.common.name);    // Zu Array hinzufügen
                                   }                
                                   log("Licht Nr. " + i + ": " + getObject(id).common.name + ": " + status);
                                   ++anzahlFenster;                                        // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
                               }); 
                            
                               // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                   log("Text: " + anzahlFensterauf);
                                   log("Anzahl Fesnter: " + anzahlFenster + " # davon Lichter auf: " +  anzahlFensterauf);
                            
                               // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                              setState("zählen_Fenster.textFensterauf", textFensterauf.join(','));    // Schreibt die aktuelle Namen der eingeschalteten Lichter
                              setState("zählen_Fenster.anzahlFensterauf", textFensterauf.length);    // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
                              setState("zählen_Fenster.anzahlFenster", anzahlFenster);        // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
                           }
                            
                           cacheSelectorState.on(function(obj) {    // bei Zustandänderung *. STATE im Gewerk Fenster
                              countFenster(obj);
                           });
                          
                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Masterg 23 last edited by paul53

                            @masterg-23 sagte: Oben ist es definitiv groß geschrieben.

                            Bin ich blind? Die Schreibweise in der ID ist entscheidend, nicht der Name!

                            Masterg 23 2 Replies Last reply Reply Quote 1
                            • Masterg 23
                              Masterg 23 @paul53 last edited by

                              @paul53 Achsooo, ok dann muss ich überall klein schreiben. Sorry für die Umstände 😕

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

                                @paul53 Super danke dir. Jetzt funktioniert es.

                                Bildschirmfoto 2021-02-18 um 13.23.16.png

                                Jetzt muss ich nur noch hinbekommen, dass im DP textFensterauf die Namen der jeweiligen Fenster die auf sind geschrieben wird. Muss ich dafür bei Aufzählungen die Räume anlegen?

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

                                  @Masterg-23 sagte: Muss ich dafür bei Aufzählungen die Räume anlegen?

                                  Nein, der Name muss aus dem Parent-Objekt genommen werden (Zeile hinter Zeile 18 einfügen).

                                           var status = getState(id).val;                          // Zustand *.STATE abfragen (jedes Element)
                                           id = id.substring(0, id.lastIndexOf('.'); // Parent-ID
                                           var obj    = getObject(id);
                                  
                                  Masterg 23 1 Reply Last reply Reply Quote 0
                                  • Masterg 23
                                    Masterg 23 @paul53 last edited by Masterg 23

                                    @paul53 Ok danke für deine Hilfe. Ich merke es, dass es mir zu viel ist. Mit Javascript steh ich auf Kriegsfuß.
                                    Das ganze kann man auch mit Blockly realisieren oder? Da hab ich ein bisschen mehr Ahnung und kann mich besser reinfuchsen.

                                    Mein Ziel ist es, paar Sachen von diesem Projekt von dos1973 zu übernehmen. Speziell geht es mir um die Fenstererkennung usw hier.

                                    1603355062600-1_startseite.png

                                    1 Reply Last reply Reply Quote 0
                                    • Masterg 23
                                      Masterg 23 last edited by Masterg 23

                                      Mein Problem ist, die richtige Zuweisung damit die Anzeigen korrekt dargestellt werden. Aber wenn ich es mir so anschaue, dann ist es ziemlich komplex.
                                      Vielleicht sollte ich erstmal kleinere Brötchen backen.
                                      Bildschirmfoto 2021-02-18 um 14.15.51.png

                                      EDIT: Die Fensteranzeige habe ich hinbekommen, jedoch die kleine Symbole unten (Ausrufezeichen oder Haken) noch nicht. Aber ich denke das kriege ich auch hin.
                                      Ich stelle es hier auf gelöst.

                                      Vielen Dank 🙂
                                      Bildschirmfoto 2021-02-18 um 14.27.05.png

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      796
                                      Online

                                      31.9k
                                      Users

                                      80.2k
                                      Topics

                                      1.3m
                                      Posts

                                      3
                                      19
                                      800
                                      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