Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. On(); mehrere Bedingungen in einem on()?

    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

    On(); mehrere Bedingungen in einem on()?

    This topic has been deleted. Only users with topic management privileges can see it.
    • andreaskos
      andreaskos last edited by

      Ah, jetzt bin ich auf der richtigen Spur, denk ich: man benötigt dafür den $-Selector !!

      Hab ein Beispiel probiert. Wenn irgendein Licht an- oder abgeht, dann soll eine Aktion ausgeführt werden, also:

      $('channel[state.id=*.STATE](functions=Licht)').on(function(obj) {
              console.log("Dieses Licht wurde geschaltet: "  + obj.id);
      });
      
      

      Gleiches geht eben auch mit in Enums zusammengefassten Tastern, so hast du's gemeint Dutchman, oder?

      D.h. man braucht nur mehr die Enum angreifen und ändern, aber nicht mehr ins Skript.

      Cool!

      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        @andreaskos:

        Gleiches geht eben auch mit in Enums zusammengefassten Tastern, so hast du's gemeint Dutchman, oder?

        D.h. man braucht nur mehr die Enum angreifen und ändern, aber nicht mehr ins Skript.

        Cool! `

        Genau 🙂

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

        Send from mobile device

        Das schöne ios hat Auto Korrektur zum k****

        Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

        1 Reply Last reply Reply Quote 0
        • S
          stan23 last edited by

          Hallo,

          funktioniert das auch mit Enums auf der admin-Oberfläche?

          // Triggern Tastendruck
          on({id: "enum.tasterrollo.tasterrollohocheg", change: "ne"}, function (obj) {
          
          

          3680_enum.png

          Das Log zeigt nämlich dass es als Pattern erkannt wird und der Trigger greift nicht.
          > script.js.common.Rollos.RolloHochEgDoppelklick: subscribe: {"pattern":{"id":"enum.tasterrollo.tasterrollohocheg","change":"ne"},"name":"script.js.common.Rollos.RolloHochEgDoppelklick"}

          Oder muss das Enum im gleichen Skript definiert werden?

          1 Reply Last reply Reply Quote 0
          • andreaskos
            andreaskos last edited by

            Das Enum kann ganz normal in der Admin-Oberfläche definiert werden.

            Die on-Funktion wird dann über den $-Selektor ausgelöst, d.h. in deinem Fall (stan23) wäre das etwa so:

            $('state(tasterrollo=tasterrollohocheg)').on(function(obj) {
            
                    console.log("Ausgelöst hat: "  + obj.id);
            
            });
            
            

            Ich hab außerdem gemerkt, dass Änderungen von Enums oft nicht sofort vom ioBroker übernommen werden. Nach einem Befehl über die Kommandozeile sollte es dann gehen:

            iobroker stop && iobroker start
            
            
            1 Reply Last reply Reply Quote 0
            • S
              stan23 last edited by

              Hi Andreas,

              weißt du auch wie ich die State-Änderung "any" spezifizieren kann?

              Mit dem Beispiel ergibt sich folgendes:

               script.js.common.Rollos.RolloOgDoppelklick: subscribe: {"pattern":{"id":"hm-rpc.0.LEQ1322734.2.PRESS_SHORT","change":"ne"},"name":"script.js.common.Rollos.RolloOgDoppelklick"}
               ... für alle Enum-Members
              

              https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#–-selector habe ich auf Anhieb nichts passendes gefunden.

              1 Reply Last reply Reply Quote 0
              • Dutchman
                Dutchman Developer Most Active Administrators last edited by

                @andreaskos:

                Ich hab außerdem gemerkt, dass Änderungen von Enums oft nicht sofort vom ioBroker übernommen werden. Nach einem Befehl über die Kommandozeile sollte es dann gehen: `

                Fast richtig, der JavaScript adapter liest bei einen Script (oder Adapter Start zweifele jetzt) alle enums und dessen Inhalte aus.

                Erweiterst/änderst du objecte darin musst das neu geladen werden.

                Kompletter ioBroker Reboot ist Scherz völlig übertrieben, JavaScript Instanz neu starten reicht.

                (Eventuell reicht sogar einfach Script neu starten wie gesagt bin mir nicht ganz sicher)

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

                Send from mobile device

                Das schöne ios hat Auto Korrektur zum k****

                Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

                1 Reply Last reply Reply Quote 0
                • andreaskos
                  andreaskos last edited by

                  @Marco:

                  Bin mir nicht ganz sicher was du meinst. Das Beispiel müsste schon bei jeder Änderung reagieren.

                  @Dutchman:

                  Vielen Dank für die Klärung!

                  1 Reply Last reply Reply Quote 0
                  • S
                    stan23 last edited by

                    Hi Andreas,

                    in meinem Enum sind HomeMatic Wired Rolloaktoren (HMW-LC-Bl1-DR) aufgeführt, dies bei SHORT_PRESS immer nur TRUE aktualisieren, aber den Wert nicht ändern.

                    Der Trigger muss daher nicht auf ne (not equal) sondern auf any stehen.

                    Im erweiterten Log steht aber dass per default "change":"ne" ausgewählt ist:
                    > script.js.common.Rollos.RolloOgDoppelklick: subscribe: {"pattern":{"id":"hm-rpc.0.LEQ1322734.2.PRESS_SHORT",****"change":"ne"****},"name":"script.js.common.Rollos.RolloOgDoppelklick"}

                    1 Reply Last reply Reply Quote 0
                    • andreaskos
                      andreaskos last edited by

                      Ah, verstehe! Ich hab hatte es bisher nur mit Lichtern ausprobiert. Diese ändern sich natürlich jedesmal, also geht es auch immer. Du hast recht Marco, die Taster frischen ihr "true" nur immer wieder auf, da geht es dann nicht mehr. Ich habe leider bislang auch noch keine Möglichkeit gefunden, das change: any im $-Selektor mit rein zu packen.

                      Kann uns jemand weiterhelfen?

                      1 Reply Last reply Reply Quote 0
                      • T
                        Tefi last edited by

                        Irgendwie habe ich das noch nicht gepackt.

                        Ich füge die state aller Bewegungsmelder in enum.roomcontroller.kueche.motions.

                        subscribe ( {id: "enum.roomcontroller.kueche.motions", change: 'any'}, function (data) {
                            log('Test');
                        } );
                        
                        

                        Was ist da falsch?

                        Bei Bewegung wird nicht regaiert.

                        Besten Dnak für alle Tipps

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

                          @Tefi:

                          Was ist da falsch?

                          Bei Bewegung wird nicht regaiert. `
                          Man kann nicht auf enums triggern, sondern nur auf Datenpunkte. Will man enums auswerten, muss man den https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#–-selector anwenden.

                          1 Reply Last reply Reply Quote 0
                          • T
                            Tefi last edited by

                            Ok, danke

                            enum.functions.Beleuchtung wurde bei der Installation des Adapeters angelegt und funktioniert:

                            const testDps = $('state(functions=Beleuchtung)');

                            testDps.each(function(id, i) {

                            log(id + ': ' + getState(id).val);

                            });

                            enum.roomcontroller.test abe ich von Hand angelegt und brings nichts, obwohl auf Datenpunkte vorhanden sind:

                            const testDps = $('state(roomcontroller=test)');
                            testDps.each(function(id, i) {
                                log(id + ': ' + getState(id).val);
                            });
                            
                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 last edited by

                              Wenn enum.roomcontroller.test und die Zuordnung der Datenpunkte neu ist, muss erst die JS-Instanz neu gestartet werden, damit der Selektor die Datenpunkte findet.
                              493_enum_neu.jpg
                              493_enum_neu_log.jpg

                              1 Reply Last reply Reply Quote 0
                              • T
                                Tefi last edited by

                                Super. Genau das war es.

                                Wie hole ich mir jetzt alle Enum's nicht die Mitglieder?

                                zB enum.functions =(Bewegung, Beleuchtung, usw)?

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

                                  @Tefi:

                                  Wie hole ich mir jetzt alle Enum's nicht die Mitglieder?

                                  zB enum.functions =(Bewegung, Beleuchtung, usw)? `
                                  Versuche es mal mit https://github.com/ioBroker/ioBroker.javascript/blob/master/doc/en/javascript.md#getenums.

                                  `var functions = getEnums('functions');
                                  for(var i = 0; i < functions.length; i++) {
                                     log(functions[i].name);
                                  }`[/i]
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • T
                                    Tefi last edited by

                                    Ja genau das war es.

                                    Besten Dank

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    552
                                    Online

                                    31.7k
                                    Users

                                    79.9k
                                    Topics

                                    1.3m
                                    Posts

                                    6
                                    24
                                    5500
                                    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