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. JavaScript
  5. Frage zu Fensterskript

NEWS

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

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

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

Frage zu Fensterskript

Geplant Angeheftet Gesperrt Verschoben JavaScript
19 Beiträge 3 Kommentatoren 696 Aufrufe 2 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.
  • M martinschm

    @paul53 said in Frage zu Fensterskript:

    @martinschm
    Zeige mal (mind.) einen Objektbaum, aus dem die Zuordnung des Gewerkes "fenster" ersichtlich ist.

                var Status = getState(windows[i]+ ".state").val;
    

    + ".state" ist sicherlich falsch !

    Hier der Objektbaum
    278d5bff-1680-42fe-b1dc-cac955ef2c81-image.png

    Das +.state muß ich bei Xiaomi Sensoren machen. Ansonsten klappt es nicht. Das Skript läuft wie gesagt auch durch wenn man es manuell neulädt.

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von paul53
    #4

    @martinschm sagte:

    Hier der Objektbaum

    Ich meinte nicht den Gewerkeobjektbaum, sondern den Objektbaum mit Fenster-Geräten und -Datenpunkten, bei dem man die Gewerkezuordnung sieht.

    Das +.state muß ich bei Xiaomi Sensoren machen.

    Hast Du das Gewerk Kanälen zugeordnet ? Dann muss der Trigger anders aussehen.

    $('channel[state.id=*.state](functions=fenster)').on
    

    oder Du ersetzt alles ab Zeile 38 durch:

    on(/.+\.state$/, countOpenWindowsDoors);
    
    countOpenWindowsDoors();
    

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    M 1 Antwort Letzte Antwort
    0
    • M martinschm

      @paul53 said in Frage zu Fensterskript:

      @martinschm
      Zeige mal (mind.) einen Objektbaum, aus dem die Zuordnung des Gewerkes "fenster" ersichtlich ist.

                  var Status = getState(windows[i]+ ".state").val;
      

      + ".state" ist sicherlich falsch !

      Hier der Objektbaum
      278d5bff-1680-42fe-b1dc-cac955ef2c81-image.png

      Das +.state muß ich bei Xiaomi Sensoren machen. Ansonsten klappt es nicht. Das Skript läuft wie gesagt auch durch wenn man es manuell neulädt.

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #5

      @martinschm sagte:

      Das Skript läuft wie gesagt auch durch wenn man es manuell neulädt.

      Das Original-Skript setzt voraus, dass das Gewerk dem Datenpunkt (Name "Is opened") zugeordnet wird und nicht dem Kanal.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @martinschm sagte:

        Hier der Objektbaum

        Ich meinte nicht den Gewerkeobjektbaum, sondern den Objektbaum mit Fenster-Geräten und -Datenpunkten, bei dem man die Gewerkezuordnung sieht.

        Das +.state muß ich bei Xiaomi Sensoren machen.

        Hast Du das Gewerk Kanälen zugeordnet ? Dann muss der Trigger anders aussehen.

        $('channel[state.id=*.state](functions=fenster)').on
        

        oder Du ersetzt alles ab Zeile 38 durch:

        on(/.+\.state$/, countOpenWindowsDoors);
        
        countOpenWindowsDoors();
        
        M Offline
        M Offline
        martinschm
        schrieb am zuletzt editiert von martinschm
        #6

        @paul53 said in Frage zu Fensterskript:

        @martinschm sagte:

        Hier der Objektbaum

        Ich meinte nicht den Gewerkeobjektbaum, sondern den Objektbaum mit Fenster-Geräten und -Datenpunkten, bei dem man die Gewerkezuordnung sieht.

        Das +.state muß ich bei Xiaomi Sensoren machen.

        Hast Du das Gewerk Kanälen zugeordnet ? Dann muss der Trigger anders aussehen.

        $('channel[state.id=*.state](functions=fenster)').on
        

        oder Du ersetzt alles ab Zeile 38 durch:

        on(/.+\.state$/, countOpenWindowsDoors);
        
        countOpenWindowsDoors();
        

        Der Objektbaum sieht so aus:
        55cbdb6a-b9c2-44d0-9d21-402a7bd3373c-image.png

        Dachte es reicht wenn die Fenster einer Aufzählung zugeordnet sind und das Skript da durchläuft.

        Ich sehe grade in dem Artikel (https://www.smarthome-tricks.de/software-iobroker/iobroker-aufzaehlungen-fuer-das-zaehlen-von-offenen-fenstern-oder-tueren-verwenden/), das dort nur die States und nicht die Geräte zugeordnet wurden.

        Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

        paul53P 1 Antwort Letzte Antwort
        0
        • M martinschm

          @paul53 said in Frage zu Fensterskript:

          @martinschm sagte:

          Hier der Objektbaum

          Ich meinte nicht den Gewerkeobjektbaum, sondern den Objektbaum mit Fenster-Geräten und -Datenpunkten, bei dem man die Gewerkezuordnung sieht.

          Das +.state muß ich bei Xiaomi Sensoren machen.

          Hast Du das Gewerk Kanälen zugeordnet ? Dann muss der Trigger anders aussehen.

          $('channel[state.id=*.state](functions=fenster)').on
          

          oder Du ersetzt alles ab Zeile 38 durch:

          on(/.+\.state$/, countOpenWindowsDoors);
          
          countOpenWindowsDoors();
          

          Der Objektbaum sieht so aus:
          55cbdb6a-b9c2-44d0-9d21-402a7bd3373c-image.png

          Dachte es reicht wenn die Fenster einer Aufzählung zugeordnet sind und das Skript da durchläuft.

          Ich sehe grade in dem Artikel (https://www.smarthome-tricks.de/software-iobroker/iobroker-aufzaehlungen-fuer-das-zaehlen-von-offenen-fenstern-oder-tueren-verwenden/), das dort nur die States und nicht die Geräte zugeordnet wurden.

          Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #7

          @martinschm sagte:

          Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

          Das habe ich in meiner vorletzten Antwort geschrieben. Alles ab Zeile 38 ersetzen durch

          on(/.+\.state$/, countOpenWindowsDoors); // triggert alle .state bei Wertänderung
          
          countOpenWindowsDoors(); // Skriptstart
          

          Hier wird kein Selector verwendet, sondern ein RegExp, mit dem auf alle Datenpunkte getriggert wird, die mit ".state" enden. Die Selektion nach Gewerk erfolgt in der Funktion countOpenWindowsDoors().

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          R M 2 Antworten Letzte Antwort
          0
          • paul53P paul53

            @martinschm sagte:

            Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

            Das habe ich in meiner vorletzten Antwort geschrieben. Alles ab Zeile 38 ersetzen durch

            on(/.+\.state$/, countOpenWindowsDoors); // triggert alle .state bei Wertänderung
            
            countOpenWindowsDoors(); // Skriptstart
            

            Hier wird kein Selector verwendet, sondern ein RegExp, mit dem auf alle Datenpunkte getriggert wird, die mit ".state" enden. Die Selektion nach Gewerk erfolgt in der Funktion countOpenWindowsDoors().

            R Offline
            R Offline
            ReverZ
            schrieb am zuletzt editiert von ReverZ
            #8

            @paul53

            Bei meinen Xiaomi-Kontakten muss der Teil so heissen, damit es funktioniert (contact statt state):

            on(/.+\.contact$/, countOpenWindowsDoors); // triggert alle .contact bei Wertänderung
            countOpenWindowsDoors();
            

            Oder:

            function registerSubscription()
            {
            $('state[state.id=*.contact](functions=fenster)').on(function(obj) {
            countOpenWindowsDoors();
            });
             
            $('state[state.id=*.contact](functions=tueren)').on(function(obj) {
            countOpenWindowsDoors();
            });
            }
            

            Und ich hab natürlich überall Status durch !Status ersetzt, da der Wert "true" ist, wenn der Kontakt geschlossen und nicht offen ist:

            if ( !Status ) { openWindows = openWindows + 1; }
            

            Aber Achtung: Ich verwende den Zigbee-Adapter. Hier sind die Datenpunkte und Werte unterschiedlich zum MiHome-Adapter.

            paul53P 1 Antwort Letzte Antwort
            0
            • R ReverZ

              @paul53

              Bei meinen Xiaomi-Kontakten muss der Teil so heissen, damit es funktioniert (contact statt state):

              on(/.+\.contact$/, countOpenWindowsDoors); // triggert alle .contact bei Wertänderung
              countOpenWindowsDoors();
              

              Oder:

              function registerSubscription()
              {
              $('state[state.id=*.contact](functions=fenster)').on(function(obj) {
              countOpenWindowsDoors();
              });
               
              $('state[state.id=*.contact](functions=tueren)').on(function(obj) {
              countOpenWindowsDoors();
              });
              }
              

              Und ich hab natürlich überall Status durch !Status ersetzt, da der Wert "true" ist, wenn der Kontakt geschlossen und nicht offen ist:

              if ( !Status ) { openWindows = openWindows + 1; }
              

              Aber Achtung: Ich verwende den Zigbee-Adapter. Hier sind die Datenpunkte und Werte unterschiedlich zum MiHome-Adapter.

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #9

              @ReverZ sagte:

              contact statt state

              Verwendet ihr verschiedene Adapter ?

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              R M 2 Antworten Letzte Antwort
              0
              • paul53P paul53

                @ReverZ sagte:

                contact statt state

                Verwendet ihr verschiedene Adapter ?

                R Offline
                R Offline
                ReverZ
                schrieb am zuletzt editiert von
                #10

                @paul53
                Ich verwende die Version 0.10.2 des Zigbee-Adapters.

                1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @ReverZ sagte:

                  contact statt state

                  Verwendet ihr verschiedene Adapter ?

                  M Offline
                  M Offline
                  martinschm
                  schrieb am zuletzt editiert von
                  #11

                  @paul53 said in Frage zu Fensterskript:

                  @ReverZ sagte:

                  contact statt state

                  Verwendet ihr verschiedene Adapter ?

                  Ich verwende den Xiaomi Adapter

                  1 Antwort Letzte Antwort
                  0
                  • R Offline
                    R Offline
                    ReverZ
                    schrieb am zuletzt editiert von
                    #12

                    Ah OK, das erklärt natürlich einiges.

                    1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @martinschm sagte:

                      Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

                      Das habe ich in meiner vorletzten Antwort geschrieben. Alles ab Zeile 38 ersetzen durch

                      on(/.+\.state$/, countOpenWindowsDoors); // triggert alle .state bei Wertänderung
                      
                      countOpenWindowsDoors(); // Skriptstart
                      

                      Hier wird kein Selector verwendet, sondern ein RegExp, mit dem auf alle Datenpunkte getriggert wird, die mit ".state" enden. Die Selektion nach Gewerk erfolgt in der Funktion countOpenWindowsDoors().

                      M Offline
                      M Offline
                      martinschm
                      schrieb am zuletzt editiert von
                      #13

                      @paul53 said in Frage zu Fensterskript:

                      @martinschm sagte:

                      Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

                      Das habe ich in meiner vorletzten Antwort geschrieben. Alles ab Zeile 38 ersetzen durch

                      on(/.+\.state$/, countOpenWindowsDoors); // triggert alle .state bei Wertänderung
                      
                      countOpenWindowsDoors(); // Skriptstart
                      

                      Hier wird kein Selector verwendet, sondern ein RegExp, mit dem auf alle Datenpunkte getriggert wird, die mit ".state" enden. Die Selektion nach Gewerk erfolgt in der Funktion countOpenWindowsDoors().

                      Aber wird dann nicht auf alle Sensoren mit state reagiert, also auch Bewegungsmelder oder Rauchmelder

                      R paul53P 2 Antworten Letzte Antwort
                      0
                      • M martinschm

                        @paul53 said in Frage zu Fensterskript:

                        @martinschm sagte:

                        Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

                        Das habe ich in meiner vorletzten Antwort geschrieben. Alles ab Zeile 38 ersetzen durch

                        on(/.+\.state$/, countOpenWindowsDoors); // triggert alle .state bei Wertänderung
                        
                        countOpenWindowsDoors(); // Skriptstart
                        

                        Hier wird kein Selector verwendet, sondern ein RegExp, mit dem auf alle Datenpunkte getriggert wird, die mit ".state" enden. Die Selektion nach Gewerk erfolgt in der Funktion countOpenWindowsDoors().

                        Aber wird dann nicht auf alle Sensoren mit state reagiert, also auch Bewegungsmelder oder Rauchmelder

                        R Offline
                        R Offline
                        ReverZ
                        schrieb am zuletzt editiert von
                        #14

                        @martinschm
                        Mit der Subscription ja aber in deiner Funktion wird ja widerum auf die gewünschten Aufzählungen "gefiltert". Hat paul53 weiter oben auch schon erklärt.

                        M 1 Antwort Letzte Antwort
                        0
                        • M martinschm

                          @paul53 said in Frage zu Fensterskript:

                          @martinschm sagte:

                          Wie muß ich das Skript denn ändern wenn ich lieber das Gerät als den State zuordnen will ?

                          Das habe ich in meiner vorletzten Antwort geschrieben. Alles ab Zeile 38 ersetzen durch

                          on(/.+\.state$/, countOpenWindowsDoors); // triggert alle .state bei Wertänderung
                          
                          countOpenWindowsDoors(); // Skriptstart
                          

                          Hier wird kein Selector verwendet, sondern ein RegExp, mit dem auf alle Datenpunkte getriggert wird, die mit ".state" enden. Die Selektion nach Gewerk erfolgt in der Funktion countOpenWindowsDoors().

                          Aber wird dann nicht auf alle Sensoren mit state reagiert, also auch Bewegungsmelder oder Rauchmelder

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von
                          #15

                          @martinschm sagte:

                          wird dann nicht auf alle Sensoren mit state reagiert

                          Ja, aber da sie nicht in den "members" enthalten sind, passiert nichts.

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          1 Antwort Letzte Antwort
                          0
                          • R ReverZ

                            @martinschm
                            Mit der Subscription ja aber in deiner Funktion wird ja widerum auf die gewünschten Aufzählungen "gefiltert". Hat paul53 weiter oben auch schon erklärt.

                            M Offline
                            M Offline
                            martinschm
                            schrieb am zuletzt editiert von
                            #16

                            @ReverZ said in Frage zu Fensterskript:

                            @martinschm
                            Mit der Subscription ja aber in deiner Funktion wird ja widerum auf die gewünschten Aufzählungen "gefiltert". Hat paul53 weiter oben auch schon erklärt.

                            Hi, ok hab ich am Handy wahrscheinlich überlesen. Finde die Handhabung nicht so vorteilhaft, da wird ja unter Umständen viel zu häufig das Skript aufgerufen nur um dann nichts zu machen.

                            Da muss ich mal nach einer anderen Lösung schauen.

                            Danke schonmal für eure Hilfe.

                            paul53P 1 Antwort Letzte Antwort
                            0
                            • M martinschm

                              @ReverZ said in Frage zu Fensterskript:

                              @martinschm
                              Mit der Subscription ja aber in deiner Funktion wird ja widerum auf die gewünschten Aufzählungen "gefiltert". Hat paul53 weiter oben auch schon erklärt.

                              Hi, ok hab ich am Handy wahrscheinlich überlesen. Finde die Handhabung nicht so vorteilhaft, da wird ja unter Umständen viel zu häufig das Skript aufgerufen nur um dann nichts zu machen.

                              Da muss ich mal nach einer anderen Lösung schauen.

                              Danke schonmal für eure Hilfe.

                              paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von paul53
                              #17

                              @martinschm sagte:

                              Finde die Handhabung nicht so vorteilhaft, da wird ja unter Umständen viel zu häufig das Skript aufgerufen nur um dann nichts zu machen.

                              Ob die Filterung in der Javascript-Instanz oder im eigenen Skript vorgenommen wird, macht keinen großen Unterschied. Etwas Entlastung bringt das Einlesen der Arrays windows und doors außerhalb der Funktion.

                              const windows = getObject("enum.functions.fenster").common.members;
                              const doors = getObject("enum.functions.tueren").common.members;
                              
                              function countOpenWindowsDoors() {
                              

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              M 1 Antwort Letzte Antwort
                              0
                              • paul53P paul53

                                @martinschm sagte:

                                Finde die Handhabung nicht so vorteilhaft, da wird ja unter Umständen viel zu häufig das Skript aufgerufen nur um dann nichts zu machen.

                                Ob die Filterung in der Javascript-Instanz oder im eigenen Skript vorgenommen wird, macht keinen großen Unterschied. Etwas Entlastung bringt das Einlesen der Arrays windows und doors außerhalb der Funktion.

                                const windows = getObject("enum.functions.fenster").common.members;
                                const doors = getObject("enum.functions.tueren").common.members;
                                
                                function countOpenWindowsDoors() {
                                
                                M Offline
                                M Offline
                                martinschm
                                schrieb am zuletzt editiert von
                                #18

                                @paul53 said in Frage zu Fensterskript:

                                @martinschm sagte:

                                Finde die Handhabung nicht so vorteilhaft, da wird ja unter Umständen viel zu häufig das Skript aufgerufen nur um dann nichts zu machen.

                                Ob die Filterung in der Javascript-Instanz oder im eigenen Skript vorgenommen wird, macht keinen großen Unterschied. Etwas Entlastung bringt das Einlesen der Arrays windows und doors außerhalb der Funktion.

                                const windows = getObject("enum.functions.fenster").common.members;
                                const doors = getObject("enum.functions.tueren").common.members;
                                
                                function countOpenWindowsDoors() {
                                

                                Kann ich nicht eine Subscription auf die Objekte einer Aufzählung machen?

                                paul53P 1 Antwort Letzte Antwort
                                0
                                • M martinschm

                                  @paul53 said in Frage zu Fensterskript:

                                  @martinschm sagte:

                                  Finde die Handhabung nicht so vorteilhaft, da wird ja unter Umständen viel zu häufig das Skript aufgerufen nur um dann nichts zu machen.

                                  Ob die Filterung in der Javascript-Instanz oder im eigenen Skript vorgenommen wird, macht keinen großen Unterschied. Etwas Entlastung bringt das Einlesen der Arrays windows und doors außerhalb der Funktion.

                                  const windows = getObject("enum.functions.fenster").common.members;
                                  const doors = getObject("enum.functions.tueren").common.members;
                                  
                                  function countOpenWindowsDoors() {
                                  

                                  Kann ich nicht eine Subscription auf die Objekte einer Aufzählung machen?

                                  paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von paul53
                                  #19

                                  @martinschm sagte:

                                  Kann ich nicht eine Subscription auf die Objekte einer Aufzählung machen?

                                  Nein, außer mit einem Selector. Subscriben kann man nur Datenpunkte, Deine Aufzählungen enthalten aber Channels. Wie ich weiter oben schon mal geschrieben habe, kannst Du es mit einem veränderten Selector versuchen.

                                  $('channel[state.id=*.state](functions=fenster)').on(countOpenWindowsDoors);
                                  $('channel[state.id=*.state](functions=tueren)').on(countOpenWindowsDoors);
                                  

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  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

                                  392

                                  Online

                                  32.4k

                                  Benutzer

                                  81.5k

                                  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