Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. On(); mehrere Bedingungen in einem on()?

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    215

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

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

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

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

Scheduled Pinned Locked Moved Skripten / Logik
24 Posts 6 Posters 6.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    rascal
    wrote on last edited by
    #1

    hey,

    kann man mehrere Auslöster in einem on() Befehl zusammenfassen?

    Gibts da Logik Operatoren ala: on({id: "xxx"} || {id: "yyy"}); ?

    kann man das so schreiben oder muss man es anders machen?

    edit:

    genau schaut mein Befehlt im Moment so aus:

    on({id: "javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/, valGe: "144"} && {id: "javascript.0.Sonnenstand.Azimut", valLe: "276"}, rolladen());
    

    Danke

    Martin

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      Mit RegExp gibt es die Möglichkeit von http://forum.iobroker.de/viewtopic.php?f=21&t=2251&p=19529&sid=b50a9aa041d5b131312489b512ede078&sid=b50a9aa041d5b131312489b512ede078#p19529 in on().

      Dein Problem lässt sich aber anders lösen:

      on("javascript.0.Sonnenstand.Azimut", function(dp) {
      	if (dp.state.val > 144 && dp.state.val < 276) rolladen();
      });
      

      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 Reply Last reply
      0
      • andreaskosA Offline
        andreaskosA Offline
        andreaskos
        wrote on last edited by
        #3

        Nur als Ergänzung, weil ich genau das heut auch gebraucht habe:

        Die id in der on-Deklaration kann auch ein Array sein, das mehrere Taster oder eben allgemein States beinhaltet. Achtung, das entspricht logisch praktisch einer ODER-Verknüpfung.

        Beispiel:

        var idTaster    = ["ID1", "ID2", "ID3", "ID4"];
        
        on({id: idTaster, val: true}, function(){
            //Mach irgendwas
        });
        
        
        1 Reply Last reply
        1
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @andreaskos:

          Die id in der on-Deklaration kann auch ein Array sein `
          Diese Möglichkeit gab es im März 2016 noch nicht.

          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 Reply Last reply
          0
          • DutchmanD Offline
            DutchmanD Offline
            Dutchman
            Developer Most Active Administrators
            wrote on last edited by
            #5

            @paul53:

            @andreaskos:

            Die id in der on-Deklaration kann auch ein Array sein Diese Möglichkeit gab es im März 2016 noch nicht.

            Ich gruppiere mir states die zusammen terugweg sollen immer in einer enum und dan sen on () auf Aafje objecte innerhalb dieser gruppierung.

            Praktisch daran ist wenn man die Trigger erweitern/ändern möchte braucht man nicht ins Script sondern ändert einfach die Gruppe (enum) Zuweisung

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

            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
            0
            • andreaskosA Offline
              andreaskosA Offline
              andreaskos
              wrote on last edited by
              #6

              Wie müsste in so einem Fall dann die on-Deklaration aussehen mit einer Aufzählung?

              Das lese ich aus der Doku nicht heraus https://github.com/ioBroker/ioBroker.ja … some-state

              1 Reply Last reply
              0
              • DutchmanD Offline
                DutchmanD Offline
                Dutchman
                Developer Most Active Administrators
                wrote on last edited by
                #7

                @andreaskos:

                Wie müsste in so einem Fall dann die on-Deklaration aussehen mit einer Aufzählung?

                Das lese ich aus der Doku nicht heraus https://github.com/ioBroker/ioBroker.ja … some-state `

                das steht doch 3 posts weiter oben ?

                @andreaskos:

                Nur als Ergänzung, weil ich genau das heut auch gebraucht habe:

                Die id in der on-Deklaration kann auch ein Array sein, das mehrere Taster oder eben allgemein States beinhaltet. Achtung, das entspricht logisch praktisch einer ODER-Verknüpfung.

                Beispiel:

                var idTaster    = ["ID1", "ID2", "ID3", "ID4"];
                
                on({id: idTaster, val: true}, function(){
                    //Mach irgendwas
                });
                
                ```` ` 
                1 Reply Last reply
                0
                • andreaskosA Offline
                  andreaskosA Offline
                  andreaskos
                  wrote on last edited by
                  #8

                  Ja, das hab ich ja selbst geschrieben. Dabei gings um ein Array im on, aber ich meinte so wie du es machst mit enums:

                  Ich gruppiere mir states die zusammen terugweg sollen immer in einer enum 
                  

                  Heißt das, du trägt alle auslösenden Events in einer Enum ein und verwendest diese dann im on? So hab ich's verstanden…

                  Oder - moment mal - ist ein enum bloß ein Array? 😮

                  1 Reply Last reply
                  0
                  • andreaskosA Offline
                    andreaskosA Offline
                    andreaskos
                    wrote on last edited by
                    #9

                    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
                    0
                    • DutchmanD Offline
                      DutchmanD Offline
                      Dutchman
                      Developer Most Active Administrators
                      wrote on last edited by
                      #10

                      @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
                      0
                      • S Offline
                        S Offline
                        stan23
                        wrote on last edited by
                        #11

                        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?

                        Viele Grüße
                        Marco

                        1 Reply Last reply
                        0
                        • andreaskosA Offline
                          andreaskosA Offline
                          andreaskos
                          wrote on last edited by
                          #12

                          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
                          0
                          • S Offline
                            S Offline
                            stan23
                            wrote on last edited by
                            #13

                            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.

                            Viele Grüße
                            Marco

                            1 Reply Last reply
                            0
                            • DutchmanD Offline
                              DutchmanD Offline
                              Dutchman
                              Developer Most Active Administrators
                              wrote on last edited by
                              #14

                              @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
                              0
                              • andreaskosA Offline
                                andreaskosA Offline
                                andreaskos
                                wrote on last edited by
                                #15

                                @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
                                0
                                • S Offline
                                  S Offline
                                  stan23
                                  wrote on last edited by
                                  #16

                                  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"}

                                  Viele Grüße
                                  Marco

                                  1 Reply Last reply
                                  0
                                  • andreaskosA Offline
                                    andreaskosA Offline
                                    andreaskos
                                    wrote on last edited by
                                    #17

                                    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
                                    0
                                    • T Offline
                                      T Offline
                                      Tefi
                                      wrote on last edited by
                                      #18

                                      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
                                      0
                                      • paul53P Offline
                                        paul53P Offline
                                        paul53
                                        wrote on last edited by
                                        #19

                                        @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.

                                        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 Reply Last reply
                                        0
                                        • T Offline
                                          T Offline
                                          Tefi
                                          wrote on last edited by
                                          #20

                                          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
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          46

                                          Online

                                          32.4k

                                          Users

                                          81.3k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe