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. [Gelöst] [Frage] Skript zählen_Fenster

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    985

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

[Gelöst] [Frage] Skript zählen_Fenster

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
19 Beiträge 7 Kommentatoren 2.2k Aufrufe
  • Ä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.
  • G Offline
    G Offline
    Grenzwellen
    schrieb am zuletzt editiert von
    #1

    Guten Abend,

    ich benutze das Komplettskript Zählen von Fenstern um mir mit Hilfe des justgage-widgets die Anzahl der offenen Fenster anzuzeigen. Das funktioniert super.

    Heute habe ich einen Homematic IP Fenster-und Türkontakt optisch in mein System integriert. Der Status wird in dem Skript beim Öffnen der Tür nicht angezeigt.

    Was muss ich in dem Skript hinzufügen, um auch den State der Homematic IP auszulesen ?

    /* System Zahl Fenster
    
    zählt die Fenster in allen Räumen und meldet die offenen Fenster namentlich
    Daten kommen vom Gewerk 'Fenster'
    
    erstellt: 17.06.2015 nach diesem Vorbild: http://forum.iobroker.net/viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564
    05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php?f=21&t=473&start=20#p9267
    02.12.2015 Fehler beseitigt bei Anzahl Fenster, wenn offen (Unterscheidung RHS und TFK)
               Überprüfung des Zustandes (function fensterstatus) und Übergabe an Text
    25.01.2016 Fenster Nummer in Log korrigiert (+1)
    02.03.2016 Ansage für TTS aufbereitet
    02.07.2016 Regulärer Ausdruck (gierig) bei Aufbereitung für Ansage
    */
    
    function fensterstatus(zustand) {
        var meldung;
        switch (zustand) {
            case 1:
                meldung = 'RHS gekippt';
            break;
            case 2:
                meldung = 'RHS offen';
            break;
            case true:
                meldung = 'TFK offen';
            break;
            default:
                meldung = 'geschlossen';
            break;
        }
        return(meldung);
    }
    
    createState('zählen_Fenster.anzahlFenster', {     // wenn benötigt: Anzahl der vorhandenen Fenster
        type: 'number',
        min: 0,
        def: 0,
        role: 'value'
    });
    createState('zählen_Fenster.anzahlFensterauf', {  // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen
        type: 'number',
        min: 0,
        def: 0,
        role: 'value'
    });
    createState('zählen_Fenster.textFensterauf', {      // Anzahl der offenen Fenster und deren Namen als Variable unter Javascript.0 anlegen
        type: 'string',
        def: ' ',
        role: 'value'
    });    
    
    var cacheSelectorState  = $('channel[state.id=*.STATE](functions="Fenster")');
    
    function countFenster(obj) {
         // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster 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 Fenster
            var status = getState(id).val;                                          // Zustand *.STATE abfragen (jedes Element)
            var obj    = getObject(id);
            var name = getObject(id).common.name;
            var devicename = name.substring(0, name.indexOf(".STATE"));             //.state aus Text entfernen
            if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
                 ++anzahlFensterauf;
                 textFensterauf.push(devicename + ' (' + fensterstatus(status) + ')');  // Name und Zustand zum Array hinzufügen
            }                
            log('Fenster #' + (i+1) + ': ' + devicename + ' ' + fensterstatus(status)/* + ' (' + status + ' / ' + typeof status + ')'*/);
            ++anzahlFenster;                                                        // Zählt die Anzahl der vorhandenen Fenster unabhängig vom Status
        }); 
    
        // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
            log("Text: " + textFensterauf);
            log("Anzahl Fenster: " + anzahlFenster + " - davon Fenster 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 offenen Fenster
        setState("zählen_Fenster.anzahlFensterauf", textFensterauf.length);         // Schreibt die aktuelle Anzahl der offenen Fenster
        setState("zählen_Fenster.anzahlFenster", anzahlFenster);                    // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster
    }
    
    cacheSelectorState.on(function(obj) {    // bei Zustandänderung *. STATE im Gewerk Fenster
        countFenster(obj);
    });
    
    // Variable für Ansage aufbereiten
    createState('zählen_Fenster.textFensteraufAnsage', {
        type: 'string',
        def: ' ',
        role: 'value'
    });  
    // Anzahl der Fenster, die auf sind, für Ansage aufbereitet
    var idQuelle = 'javascript.0.zählen_Fenster.textFensterauf',
        idAnsage = 'javascript.0.zählen_Fenster.textFensteraufAnsage';
    
    on(idQuelle, function (obj) {
        var text = obj.state.val;
        text = text.replace(/RHS/g, 'Drehgriff');
        text = text.replace(/TFK/g, 'Reedkontakt');
        text = (text.length > 1) ? 'Geöffnete Fenster: ' + text : 'Alle Fenster sind verschlossen';
        setState(idAnsage, text);
    });
    
    1 Antwort Letzte Antwort
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      schrieb am zuletzt editiert von
      #2

      Poste Mal dass gesamte Script+ Datenpunkt des Sensor.

      Glaube das hatten wir schonmal und lag daran dass die Datenpunkte bei ip Geräten etwas anderes Aussehen

      –-----------------------

      Send from mobile device

      1 Antwort Letzte Antwort
      0
      • G Offline
        G Offline
        Grenzwellen
        schrieb am zuletzt editiert von
        #3

        Script ist komplett.

        Anbei ein Screenshot vom Sensor.

        Und der raw vom Kanal 1:

        {
          "_id": "hm-rpc.1.0000D709954C33.1",
          "type": "channel",
          "common": {
            "name": "TFK_Wohnen_Terasse_Fenster",
            "role": "sensor",
            "icon": "/icons/118_hmip-swdo_thumb.png"
          },
          "native": {
            "TYPE": "SHUTTER_CONTACT",
            "SUBTYPE": "",
            "ADDRESS": "0000D709954C33:1",
            "RF_ADDRESS": 0,
            "CHILDREN": [],
            "PARENT": "0000D709954C33",
            "PARENT_TYPE": "HMIP-SWDO",
            "INDEX": 1,
            "AES_ACTIVE": 1,
            "PARAMSETS": [
              "MASTER",
              "VALUES",
              "LINK",
              "SERVICE"
            ],
            "FIRMWARE": "",
            "AVAILABLE_FIRMWARE": "",
            "UPDATABLE": true,
            "FIRMWARE_UPDATE_STATE": "",
            "VERSION": 1,
            "FLAGS": 1,
            "LINK_SOURCE_ROLES": "CONDITIONAL_SWITCH WINDOW_SWITCH",
            "LINK_TARGET_ROLES": "",
            "DIRECTION": 1,
            "GROUP": "",
            "TEAM": "",
            "TEAM_TAG": "",
            "TEAM_CHANNELS": [],
            "INTERFACE": "",
            "ROAMING": 0,
            "RX_MODE": 0
          },
          "acl": {
            "object": 1636
          }
        }
        

        4187_screen_1.png

        1 Antwort Letzte Antwort
        0
        • T Offline
          T Offline
          tempestas
          schrieb am zuletzt editiert von
          #4

          Weiß nicht wie rum es war. Aber entwedwr haben die ip true/false oder 0/1 als state. Das was fehlt via || Verknüpfung mit einbauen.

          Sorry bin am Handy

          Edit

          || status === true
          
          

          <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

          1 Antwort Letzte Antwort
          0
          • G Offline
            G Offline
            Grenzwellen
            schrieb am zuletzt editiert von
            #5

            Wo genau bzw. wie muss muss ich den Status eintragen ?

                    if (status /*TFK*/ || status === 1 || status === 2 /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
            
                    if (status /*TFK*/ || status === 1 || status === 2 || status === true /*RHS*/) {  // wenn Zustand offen, dann wird die Anzahl der Fenster hochgezählt
            

            Beim Start des Scriptes werden nur fünf der sechs Kontakte im Cache gefunden. Ich vermute der Sensor wird namentlich nicht erkannt vom Script.

            Mit aktivierter Hilfe-Ausgabe bekomme ich folgende Meldung:

            23:15:16.503	[info]	javascript.0 Start javascript script.js.common.zählen_Fenster
            23:15:16.503	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0161964.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
            23:15:16.503	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847322.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
            23:15:16.503	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847736.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
            23:15:16.503	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847776.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
            23:15:16.503	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0848058.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
            23:15:16.503	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"javascript.0.zählen_Fenster.textFensterauf","change":"ne"},"name":"script.js.common.zählen_Fenster"}
            23:15:16.503	[info]	javascript.0 script.js.common.zählen_Fenster: registered 6 subscriptions and 0 schedules
            
            1 Antwort Letzte Antwort
            0
            • T Offline
              T Offline
              tempestas
              schrieb am zuletzt editiert von
              #6

              Mein Fehler,

              Habe auf dem kleinen Handy übersehen, dass dort schon

              If (status)
              
              

              Steht.

              Das entspricht meiner true Abfrage.

              Bin nachher daheim, dann schicke ich den richtigen Skriptteil

              <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

              1 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                tempestas
                schrieb am zuletzt editiert von
                #7

                also bei mir funktioniert es so ohne Probleme mit gemischt normalen und IP Kontakten:

                        if (status == 1 || status === true)  {    // wenn Zustand true (HM norm) oder "1" (bei HmIP), dann wird die Anzahl der Fenster hochgezählt
                        ++anzahlFensterauf;
                

                <size="85">ioBroker | 21 Adapter | Ubuntu Server | intel NUC | Homematic CCU2 | Hue | Osram Lightify| Sonos | 2x Instar Cam | Samsung Tab A 2016 im Holzrahmen| 3x Echo dot | 1x Echo | Neato Botvac D5</size>

                1 Antwort Letzte Antwort
                0
                • G Offline
                  G Offline
                  Grenzwellen
                  schrieb am zuletzt editiert von
                  #8

                  Moin,

                  wenn ich die Bedingung auf

                          if (status == 1 || status === true)  {    // wenn Zustand true (HM norm) oder "1" (bei HmIP), dann wird die Anzahl der Fenster hochgezählt
                          ++anzahlFensterauf;
                  

                  ändere funktioniert es auch nicht. Dann fehlt sogar noch die Bedingung status == 2 für den Fensterdrehgriffkonakt für die Position gekippt, die auch für Fenster offen mitgezählt werden soll.

                  Ich bin leider erst seit ein paar Tagen intensiv an der Benutzung von ioBroker und kenne mich mit der Script-Sprache absolut nicht aus.

                  Ich verstehe das Script so, dass beim ersten Ausführen des Scriptes im Gewerk Fenster alle Geräte in einen Cache geschrieben werden. Das wird wohl gemacht, damit nicht bei jeder Änderung des Status alle Geräte neu gesucht werden müssen.

                  Wenn ich das Script neu starte sehe ich nur die Geräte ohne IP:

                  10:51:34.214	[info]	javascript.0 Start javascript script.js.common.zählen_Fenster
                  10:51:34.214	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0161964.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                  10:51:34.214	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847322.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                  10:51:34.214	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847736.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                  10:51:34.214	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847776.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                  10:51:34.214	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0848058.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                  10:51:34.214	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"javascript.0.zählen_Fenster.textFensterauf","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                  10:51:34.214	[info]	javascript.0 script.js.common.zählen_Fenster: registered 6 subscriptions and 0 schedules
                  

                  In der Aufzählung fehlt der Kontakt mit der ID: hm-rpc.1.0000D709954C33

                  1 Antwort Letzte Antwort
                  0
                  • J Offline
                    J Offline
                    jensus11
                    schrieb am zuletzt editiert von
                    #9

                    Ist der Kontakt denn in der Funktion Fenster?

                    Habe mein Script auch gerade geändert und bei mir funktioniert das auch mit den IP Geräten.

                    1 Antwort Letzte Antwort
                    0
                    • HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #10

                      Und wurde nach hinzufügen in der Funktion/des gewerkes der hm-rega adapter neu gestartet?

                      Ggf. Auch der hm-rpc incl. der Option Geräte neu einlesen?

                      Gruß

                      Rainer

                      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
                      • G Offline
                        G Offline
                        Grenzwellen
                        schrieb am zuletzt editiert von
                        #11

                        Ja, im Gewerk Fenster wird der Kontakt angezeigt.

                        Adapter habe ich auch alle neugestartet bzw. einlesen lassen.

                        In der vis kann ich den Kontakt auch auslesen.
                        4187_screen_2.png
                        4187_screen_3.png

                        1 Antwort Letzte Antwort
                        0
                        • DutchmanD Offline
                          DutchmanD Offline
                          Dutchman
                          Developer Most Active Administrators
                          schrieb am zuletzt editiert von
                          #12

                          Script Adapter neu gestartet? Der inhalt der enums (objecte) werden bei Adapter Start ausgewertet

                          –-----------------------

                          Send from mobile device

                          1 Antwort Letzte Antwort
                          0
                          • G Offline
                            G Offline
                            Grenzwellen
                            schrieb am zuletzt editiert von
                            #13

                            Ja, an das Neu laden der Instanz javascript habe ich nicht gedacht. Nach Neustart wird der Kontakt im Script eingelesen und das script funktioniert ohne etwas anpassen zu müssen.

                            Viele Dank !

                            12:07:03.855	[info]	javascript.0 Start javascript script.js.common.zählen_Fenster
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0161964.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847322.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847736.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0847776.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.0.KEQ0848058.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"hm-rpc.1.0000D709954C33.1.STATE","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: subscribe: {"pattern":{"id":"javascript.0.zählen_Fenster.textFensterauf","change":"ne"},"name":"script.js.common.zählen_Fenster"}
                            12:07:03.855	[info]	javascript.0 script.js.common.zählen_Fenster: registered 7 subscriptions and 0 schedules
                            
                            1 Antwort Letzte Antwort
                            0
                            • flkontaktF Online
                              flkontaktF Online
                              flkontakt
                              schrieb am zuletzt editiert von
                              #14

                              Hallo zusammen, ich habe in der CCU2 meine Fenster in die Gewerke Fenster_Erdgeschoss und Fenster_Obergeschoss aufgeteilt. Was müsste im Script angepasst werden, um für beide Gewerke die entsprechenden Datenpunkte anzulegen? In der ursprünglichen Version kann doch nur 1 Gewerk ausgewertet werden, oder?

                              Gesendet von meinem SM-G920F mit Tapatalk

                              1 Antwort Letzte Antwort
                              0
                              • dslraserD Offline
                                dslraserD Offline
                                dslraser
                                Forum Testing Most Active
                                schrieb am zuletzt editiert von
                                #15

                                > Fenster_Erdgeschoss und Fenster_Obergeschoss aufgeteilt. Was müsste im Script angepasst werden, um für beide Gewerke die entsprechenden Datenpunkte anzulegen?

                                Vorweg, ich bin Anfänger. Aber ich würde in dem Script nach allem was Fenster heißt suchen und das mit dem Begriff Fenster_Erdgeschoss ersetzen und schauen ob dann schonmal das Erdgeschoss richtig angezeigt wird, danach mit dem Obergeschoss weiter machen. (oder zwei Scripte, jeweils eins für jede Etage)

                                LG Heiko

                                1 Antwort Letzte Antwort
                                0
                                • flkontaktF Online
                                  flkontaktF Online
                                  flkontakt
                                  schrieb am zuletzt editiert von
                                  #16

                                  Hallo, danke für die Info. Bin ebenso Anfänger, insbesondere im Scriptbereich. Versuche meine Themen mit Blockly zu lösen. Da es hier aber ein fertiges Script gibt, wollte ich dieses gerne nutzen. Habe schon experimentiert, aber ohne Erfolg (ersetzen Fenster durch Fenster_Erdgeschoss etc.)

                                  Gesendet von meinem SM-G920F mit Tapatalk

                                  1 Antwort Letzte Antwort
                                  0
                                  • dslraserD Offline
                                    dslraserD Offline
                                    dslraser
                                    Forum Testing Most Active
                                    schrieb am zuletzt editiert von
                                    #17

                                    Ich habe mal meine Variante hier für Dich in den Spoiler gepackt und für Dich abgeändert(Erdgeschoss)

                                    Ich habe allerdings die Drehgriffgeschichte bei mir rausgenommen. (zeigt nur offen und geschlossene Fenster im Telegram an, ohne den Zusatz Drehgriff gekippt oder offen) Ich nutze bisher keine Drehgriffe und habe ausschließlich IP Geräte)

                                    Kannst ja mal so ausprobieren.

                                    ! ````
                                    createState('zählen_Fenster_Erdgeschoss.anzahlFenster_Erdgeschoss', { // wenn benötigt: Anzahl der vorhandenen Fenster_Erdgeschoss
                                    type: 'number',
                                    min: 0,
                                    def: 0,
                                    role: 'value'
                                    });
                                    createState('zählen_Fenster_Erdgeschoss.anzahlFenster_Erdgeschossauf', { // Anzahl der Fenster_Erdgeschoss, die auf sind als Variable unter Javascript.0 anlegen
                                    type: 'number',
                                    min: 0,
                                    def: 0,
                                    role: 'value'
                                    });
                                    createState('zählen_Fenster_Erdgeschoss.textFenster_Erdgeschossauf', { // Anzahl der offenen Fenster_Erdgeschoss und deren Namen als Variable unter Javascript.0 anlegen
                                    type: 'string',
                                    def: '',
                                    role: 'value'
                                    });
                                    ! var cacheSelectorState = $('channelstate.id=*.STATE');
                                    ! function countFenster_Erdgeschoss(obj) {
                                    // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Fenster_Erdgeschoss auf 0
                                    var anzahlFenster_Erdgeschoss = 0;
                                    var anzahlFenster_Erdgeschossauf = 0;
                                    var textFenster_Erdgeschossauf = [];
                                    ! 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 Fenster_Erdgeschoss
                                    var status = getState(id).val; // Zustand .STATE abfragen (jedes Element)
                                    var obj = getObject(id);
                                    var name = getObject(id).common.name;
                                    var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen
                                    if ( status === 1 ) { // wenn Zustand offen, dann wird die Anzahl der Fenster_Erdgeschoss hochgezählt
                                    ++anzahlFenster_Erdgeschossauf;
                                    textFenster_Erdgeschossauf.push(devicename ); // Name und Zustand zum Array hinzufügen
                                    }
                                    log('Fenster_Erdgeschoss #' + (i+1) + ': ' + devicename + ' ' /
                                    + ' (' + status + ' / ' + typeof status + ')'
                                    /);
                                    ++anzahlFenster_Erdgeschoss; // Zählt die Anzahl der vorhandenen Fenster_Erdgeschoss unabhängig vom Status
                                    });
                                    ! // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
                                    log("Text: " + textFenster_Erdgeschossauf);
                                    log("Anzahl Fenster_Erdgeschoss: " + anzahlFenster_Erdgeschoss + " - davon Fenster_Erdgeschoss auf: " + textFenster_Erdgeschossauf.length);
                                    ! // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
                                    setState("zählen_Fenster_Erdgeschoss.textFenster_Erdgeschossauf", textFenster_Erdgeschossauf.join(', ')); // Schreibt die aktuelle Namen der offenen Fenster_Erdgeschoss
                                    setState("zählen_Fenster_Erdgeschoss.anzahlFenster_Erdgeschossauf", textFenster_Erdgeschossauf.length); // Schreibt die aktuelle Anzahl der offenen Fenster_Erdgeschoss
                                    setState("zählen_Fenster_Erdgeschoss.anzahlFenster_Erdgeschoss", anzahlFenster_Erdgeschoss); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Fenster_Erdgeschoss
                                    }
                                    ! cacheSelectorState.on(function(obj) { // bei Zustandänderung *. STATE im Gewerk Fenster_Erdgeschoss
                                    countFenster_Erdgeschoss(obj);
                                    });
                                    ! // Variable für Ansage aufbereiten
                                    createState('zählen_Fenster_Erdgeschoss.textFenster_ErdgeschossaufAnsage', {
                                    type: 'string',
                                    def: '',
                                    role: 'value'
                                    });
                                    // Anzahl der Fenster_Erdgeschoss, die auf sind, für Ansage aufbereitet
                                    var idQuelle = 'javascript.0.zählen_Fenster_Erdgeschoss.textFenster_Erdgeschossauf',
                                    idAnsage = 'javascript.0.zählen_Fenster_Erdgeschoss.textFenster_ErdgeschossaufAnsage';
                                    ! on(idQuelle, function (obj) {
                                    var text = obj.state.val;
                                    text = (text.length > 1) ? 'Geöffnete Fenster_Erdgeschoss: ' + text : 'Alle Fenster_Erdgeschoss sind geschlossen';
                                    setState(idAnsage, text);
                                    });

                                    
                                    PS: ich sehe gerade das ich mit Blockly noch einen Fenstertrigger für die Telegram Nachrichten extra habe. Geht bestimmt auch einfacher, aber so habe ich es bei mir und es funktioniert so bei mir.
                                    
                                    >! ````
                                     <xml xmlns="http://www.w3.org/1999/xhtml"><block type="on" id="O?_eoVJ7/WyV.w@keIqU" x="88" y="-62"><field name="OID">javascript.0.zählen_Fenster.textFensteraufAnsage</field>
                                        <field name="CONDITION">ne</field>
                                    
                                        <statement name="STATEMENT"><block type="telegram" id="eaX;19Y1[RB@YtwmW6ES"><value name="MESSAGE"><shadow type="text" id="~#dd18e%M;2EQA*/e7r1"><field name="TEXT">text</field></shadow> 
                                              <block type="get_value" id="XIu+e0Ix@KX,a8ABBSB["><field name="ATTR">val</field>
                                                <field name="OID">javascript.0.zählen_Fenster.textFensteraufAnsage</field></block></value></block></statement></block></xml> 
                                    

                                    3822_fenstertrigger.jpg

                                    1 Antwort Letzte Antwort
                                    0
                                    • flkontaktF Online
                                      flkontaktF Online
                                      flkontakt
                                      schrieb am zuletzt editiert von
                                      #18

                                      Hallo,

                                      vielen Dank für dein Script, funktioniert prima mit den "normalen" Fensterkontakten. Ich habe aber an allen Fenstern den Drehgriff montiert um Geschlossen/Gekippt/Offen auswerten zu können.

                                      Im EG zusätzlich die optischen Fensterkontakte für die Alarmüberwachung, diese findet und wertet dein Script auch zuverlässig aus.

                                      Könntest du die Drehgriffe wieder im Script vorsehen?

                                      Weitere Frage: Ich habe meine opt. Fensterkontakte in einem eigenen Gewerk (Überwachung). Wenn ich in deinem Script alle entsprechenden Begriffe austausche, müsste ich das Script für die Überwachung nutzen können, oder?

                                      Vielen Dank vorab für die Unterstützung, Gruß Frank

                                      1 Antwort Letzte Antwort
                                      0
                                      • dslraserD Offline
                                        dslraserD Offline
                                        dslraser
                                        Forum Testing Most Active
                                        schrieb am zuletzt editiert von
                                        #19

                                        Hallo Frank,
                                        > vielen Dank für dein Script, funktioniert prima mit den "normalen" Fensterkontakten
                                        Ich möchte nur kurz richtig stellen das dieses Script nicht von mir ist, sondern hier im Forum "zusammen gesucht" und für mich abgewandelt ist.

                                        Zu Deinen Fragen, das sollte eigentlich alles machbar sein. Ich habe aber auch noch eine Frage, da ich (noch) keine Drehgriffe habe. Welche Datenpunkte haben die Griffe bei geschlossen/gekippt/ und offen ? (also geschlossen = 0 / gekippt = 1 / und offen = 2, oder ist das anders ?)

                                        Das mit dem extra Blockly Trigger habe ich bei mir übrigens bewußt so gemacht, da man den dann auch mal eben schnell abschalten kann, aber trotzdem in Telegram das Script abfragen kann. (habe ich bei mir über Text2command gelöst, abfragen könnte ich dann über das Wort Fenster, siehe Anhang)

                                        PS: ich habe bei mir gerade das original Script nochmal eingebaut und nachgesehen was da passiert. Ich habe nur die "normalen IP Fensterkontakte, die haben als Datenpunkt 0 = geschlossen und 1 = offen.(siehe Anhang) Es scheint aber so zu sein, das der Drehgriff auch 0 = geschlossen und bei gekippt = 1 und bei offen = 2 hat ? Wenn das so ist, dann wäre es blöd, weil dann 1= gekippt(Drehgriff) und 1=offen(TFK) bedeuten würde. Es sei denn der Griff hat 1 als offen und zwei für gekippt, dann würde das Script ja gehen. Die TFK Abfrage scheint für die "nicht IP Fensterkontakte" gedacht zu sein, weil die auf true regieren soll ?

                                        PPS: vielleicht sollten wir einen eigenen Thread eröffnen, da dieser hier als gelöst gekennzeichnet ist ?

                                        LG Heiko
                                        3822_fenster.jpg
                                        3822_t2cfenster.jpg
                                        3822_fkontakt.jpg

                                        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

                                        751

                                        Online

                                        32.6k

                                        Benutzer

                                        82.3k

                                        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