Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. HowTo Frage: Selector.on mit change any

    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

    HowTo Frage: Selector.on mit change any

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

      Hallo,

      ich brauche wieder einmal Eure Hilfe. Ich suche schon seit Stunden und kann nichts brauchbares finden, wobei mein Anliegen eigentlich ganz einfach sein sollte:

      ich verwende einen Selector:

      var Selector_Homematic_Bewegung = $('channel[state.id=*.MOTION|*.PRESENCE_DETECTION_STATE](functions=Bewegung)');
      Selector_Homematic_Bewegung.on(function(obj) {
          var raum=room(obj);
          logs("Bewegugsmelder ausgelöst: "+ obj.name + " " + raum,"info","ffff00");
          raum_status_ermitteln();
      });
      
      

      Soweit funktioniert das auch, aber nur wenn sich der Zustand ändert.

      Nun meine Frage:

      Wie muss ich das Ereignis beschreiben, wenn alle Meldungen auslösen sollen.

      also so wie z.B.````
      on({id:/hm-rpc.2.*.1.PRESENCE_DETECTION_STATE/,change:'any'}, function (obj) { // Arbeitszimmer Präsenzmelder

      
      Vielen Dank für eure Hilfe
      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        Ich verstehe nicht ganz was du meinst :-).

        Der selector ist ein regex der also auf alles subscribet.

        Du möchtest aber nicht nur Änderungen sondern auch Updates als Event ?

        Wozu? Könntest du Mal den usw Case beschreiben?

        Sent from my iPhone using Tapatalk

        1 Reply Last reply Reply Quote 0
        • K
          Kamikaze last edited by

          Der Hintergrund in meinem Fall ist folgender:

          Erste Bewegung erkannt –> Licht für 5 Minuten an, gesteuert durch ein Script, dass den Lichtaktor mit einem Timer für 300 Sekunden aktiviert.

          Es soll keine Direktverknüfung genutzt werden.

          Zweite Bewegung wird innerhalb der 5 Minuten erkannt --> Licht wird wieder auf 5 Minuten gesetzt.

          ... solange wie Bewegung erkannt wird, bleibt das Licht von der letzten Bewegung für 5 Minuten an.

          Wird in diesem Zeitraum keine Bewegung mehr erkannt, geht das Licht aus.

          Jetzt kommt mein Problem. Mein Selector reagiert aber erst, wenn garantiert keine Bewegung mehr erkannt wird, d.h. die zweite Bewegung löst den Trigger nicht aus.

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

            Du hast keinen ob in deinem Script?

             $(selector).on(function(obj) {});
            

            Sent from my iPhone using Tapatalk

            1 Reply Last reply Reply Quote 0
            • K
              Kamikaze last edited by

              Hallo,

              das verstehe ich nicht. Das obj ist doch enthalten.

              var Selector_Homematic_Bewegung = $('channel[state.id=*.MOTION|*.PRESENCE_DETECTION_STATE](functions=Bewegung)');
              Selector_Homematic_Bewegung.on(function(obj) {
                  var raum=room(obj);
                  logs("Bewegugsmelder ausgelöst: "+ obj.name + " " + raum,"info","ffff00");
                  raum_status_ermitteln();
              });
              
              

              und vom Grundsatz her funktioniert das ja auch, bei der ersten Bewegungserkennung löst dieses Script aus.

              Aber nicht wenn innerhalb der eingestellten Zeit die gleiche Meldung noch einmal kommt, nämlich Bewegung erkannt.

              Wenn ich das klassisch mache mit:

              on({id:/hm-rpc.0.MEQ0538238.1.MOTION/,change:'any'}, function (obj) {  // Arbeitszimmer Präsenzmelder
                var raum=room(obj);
                logs("Direktangabe Bewegugsmelder ausgelöst: "+ obj.name + " " + raum,"info","ffff00");
                raum_status_ermitteln();
              });
              
              

              funktioniert alles soweit, wie ich das wünsche. Der Grund hierfür liegt daran, dass ich hier change: ' any' angeben kann.

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

                Probier doch Mal den selector mit on wie in der Dokumentation beschrieben anstatt Variable

                Sent from my iPhone using Tapatalk

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

                  Probier es mal mit RegExp:

                  on({id: /.*(\.MOTION|\.PRESENCE_DETECTION_STATE)/}, function (obj) { // triggert auf Aktualisierung
                  
                  1 Reply Last reply Reply Quote 0
                  • K
                    Kamikaze last edited by

                    Hallo,

                    da ich deinen Hinweis in der Doku nicht finden konnte, habe ich jetzt hierfür einen Workaround gefunden.

                    Es hat den Anschein, dass Selector_Homematic_Bewegung.on(function(obj) {}) nur auf Änderung reagiert.

                    Jetzt habe ich mir folgendes gebastelt.

                    `var bewegungname = [],  bewegungid = [],       bewegungstatus = [];
                    // ------------------------------------------------------------------------------------------------------------------------------------------------------
                    // Bewegungsmelder zusammenstellen
                    // ------------------------------------------------------------------------------------------------------------------------------------------------------
                    var Selector_Homematic_Bewegung = $('channel[state.id=*.MOTION|*.PRESENCE_DETECTION_STATE](functions=Bewegung)');
                    Selector_Homematic_Bewegung.each(function (id,i) {
                    	bewegungname[i] = getObject(id).common.name;
                    	bewegungid[i] = id;
                    	bewegungstatus[i] = getState(id).val;
                    	log ("Bewegungsmelder Name: " + bewegungname[i] + " Status: " +  bewegungstatus[i]); // +JSON.stringify(getObject(id)
                    });
                    
                    on({id:bewegungid,change:'any'}, function (obj) {  // Arbeitszimmer Präsenzmelder
                      logs("03 Direktangabe Bewegugsmelder ausgelöst: "+ obj.name ,"info","ffff00");
                    
                    });` 
                    
                    Jetzt löst er auf jede Aktualisierung aus. 
                    
                    Vielleicht hat ja noch jemand eine bessere Lösung, aber ich finde die scheinbar nicht.
                    
                    Trotzdem Danke für Eure Hilfe.[/i][/i][/i][/i][/i]
                    
                    1 Reply Last reply Reply Quote 0
                    • andreaskos
                      andreaskos last edited by

                      Da ich auch gerade nach diesem Thema gesucht habe und es ähnlich gemacht hab, hier noch eine Art, wie es noch einfacher geht. Einfach ein Array erstellen und darauf dann das ON lauschen lassen:

                      var IDs=[];
                      $(selector).each(function(id, i){
                         IDs.push(id) ;
                      });
                      
                      on({id: IDs, change: "any"}, function (obj){
                         // code
                      });
                      

                      LG, Andreas

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      443
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      2017
                      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