Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] RegEx im $ Selector möglich?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] RegEx im $ Selector möglich?

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

      ist im Selector eine RegEx möglich?

      Oder nur eine WIldcard mit *?

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

        @ben1983 sagte: ist im Selector eine RegEx möglich?

        Nein. Der Javascript-Adapter macht aus dem Selektor eine RegEx.

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

          @paul53 Ah ok, danke.
          Ich war mir fast sicher ich hätte es schon mal gemacht, aber war wohl mit ne Wildcard.

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

            @ben1983 sagte: ich hätte es schon mal gemacht

            Im on() kann RegEx verwendet werden.

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

              @paul53 Ich wollte gerade den Selector mit WIldcard benutzen ...

              $(`state[id=${idStartAutomatikstati}.*]`).each((id)=>{
                  const elementname = id.substring(id.lastIndexOf(".") + 1,id.length);
                  automatikstatus[elementname] = getState(id).val;
              });
              

              Funktioniert.

              Aber das hier:

              $(`state[id=${idStartAutomatikstati}.*]`).on((obj)=>{
                  log(obj._id);
                  const elementname = obj._id.substring(obj._id.lastIndexOf(".") + 1,obj._id.length);
                  const value = getState(obj._id);
                  log(elementname);
                  automatikstatus[elementname] =  value.val;
                  if(!value.ack){
                      setState(obj._id,value.val,true);
                  }       
              });
              

              Da kommt in der ersten Zeile "undefined" als log und das on reagiert nur auf Änderung.
              Ist das mit der Änderung so korrekt. Damit könnte ich ja noch leben, aber warum ist obj._id undefined?

              Edit:

              OK, ich muss "id" nicht "_id" verwenden.

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

                @ben1983 sagte: Ist das mit der Änderung so korrekt.

                Ja.

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

                  @paul53 So ist es jetzt eine allgemeine Lösung und ich kann über die States weitere Stati als element der internen Automatikstruktur hinzufügen.

                  // automatikstati
                  // Wildcard definieren
                  let idStartAutomatikstati = "0_userdata.0.Produktiv.Pool.Waermepumpe.automatikstati";
                  let automatikstatus = {};
                  $(`state[id=${idStartAutomatikstati}.*]`).each((id)=>{
                      const elementname = id.substring(id.lastIndexOf(".") + 1,id.length);
                      automatikstatus[elementname] = getState(id).val;
                  });
                  
                  $(`state[id=${idStartAutomatikstati}.*]`).on((obj)=>{
                      log(obj.id);
                      const elementname = obj.id.substring(obj.id.lastIndexOf(".") + 1,obj.id.length);
                      const value = getState(obj.id);
                      log(elementname);
                      automatikstatus[elementname] =  value.val;
                      if(!value.ack){
                          setState(obj.id,value.val,true);
                      }       
                  });
                  
                  // Funktion zum setzen der Werte
                  function setAutomatikstati(elementname){
                      setState(`${idStartAutomatikstati}.${elementname}`,automatikstatus[elementname],true);
                  };
                  
                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Ben1983 last edited by

                    @ben1983
                    Zeile 13 würde ich optimieren:

                        const value = obj.state;
                    

                    wobei der Bezeichner value nicht optimal ist. Es handelt sich um den Zustand (state).

                    Ben1983 2 Replies Last reply Reply Quote 0
                    • Ben1983
                      Ben1983 @paul53 last edited by Ben1983

                      @paul53 stimmt.
                      ach den state liefert er grad mit. cool.

                      habe es dann so gemacht:

                      // automatikstati
                      // Wildcard definieren
                      let idStartAutomatikstati = "0_userdata.0.Produktiv.Pool.Waermepumpe.automatikstati";
                      let automatikstatus = {};
                      $(`state[id=${idStartAutomatikstati}.*]`).each((id)=>{
                          const elementname = id.substring(id.lastIndexOf(".") + 1,id.length);
                          automatikstatus[elementname] = getState(id).val;
                      });
                      
                      $(`state[id=${idStartAutomatikstati}.*]`).on((obj)=>{
                          if(!obj.state.ack){
                              const elementname = obj.id.substring(obj.id.lastIndexOf(".") + 1,obj.id.length);
                              automatikstatus[elementname] =  obj.state.val;
                              setState(obj.id,obj.state.val,true);
                          }       
                      });
                      
                      // Funktion zum setzen der Werte
                      function setAutomatikstati(elementname){
                          setState(`${idStartAutomatikstati}.${elementname}`,automatikstatus[elementname],true);
                      };
                      
                      // Automatikstati zurücksetzen
                      function setzeAutomatikstatiZurueck(){
                          for(const stati in automatikstatus){
                              automatikstatus[stati] = false;
                              setAutomatikstati(stati);
                          }
                      }
                      
                      1 Reply Last reply Reply Quote 0
                      • Ben1983
                        Ben1983 @paul53 last edited by

                        @paul53 Wenn ich im selctor das Objekt logge, dann kommt:

                        o	javascript.0 (3299) script.js.Garten.Pool.Wärmepumpe: {"id":"0_userdata.0.Produktiv.Pool.Waermepumpe.automatikstati.warteAufGeringeLeistung","newState":{"val":true,"ts":1686679813843,"ack":false,"lc":1686679813843,"from":"system.adapter.admin.0","q":0,"user":"system.user.admin"},"oldState":{"val":false,"ts":1686679759809,"ack":true,"lc":1686679759805,"from":"system.adapter.javascript.0","q":0,"c":"script.js.Garten.Pool.Wärmepumpe","user":"system.user.admin"},"state":{"val":true,"ts":1686679813843,"ack":false,"lc":1686679813843,"from":"system.adapter.admin.0","q":0,"user":"system.user.admin"}}
                        

                        aber es gibt ja auch obj.name

                        Warum taucht das nicht mit log(JSON.stringify(obj) auf?

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

                          @ben1983 sagte: es gibt ja auch obj.name

                          obj.name gibt es nicht.

                          @ben1983 sagte in [gelöst] RegEx im $ Selector möglich?:

                          Warum taucht das nicht mit log(JSON.stringify(obj) auf?

                          Das habe ich mich auch schon gefragt. Logge mal obj.common.

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

                            @paul53 oh ja. Meinte ja obj.common.name

                            Warum logt er das common nicht mit. So meinte ich es.

                            Die Frage ist eigentlich, was alles verfügbar ist in

                            A: dem selector.on()

                            B: getObject()

                            Es ist unterschiedlich, oder?

                            Und obj._Id meldet „undefined“
                            obj.Id geht.

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

                              @ben1983 sagte: was alles verfügbar ist in
                              A: dem selector.on()

                              Siehe Doku zu den Funktionen des Javascript-Adapters.

                              @ben1983 sagte in [gelöst] RegEx im $ Selector möglich?:

                              B: getObject()

                              Liefert nur die statischen Eigenschaften eine Objektes.

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

                                @paul53 sagte in [gelöst] RegEx im $ Selector möglich?:

                                @ben1983 sagte: was alles verfügbar ist in
                                A: dem selector.on()

                                Siehe Doku zu den Funktionen des Javascript-Adapters.

                                OK.... aber z.B. geht auch
                                obj.name ..... und das steht nicht in der Doku und wird auch nicht geloggt.

                                @ben1983 sagte in [gelöst] RegEx im $ Selector möglich?:

                                B: getObject()

                                Liefert nur die statischen Eigenschaften eine Objektes.

                                Was genau ist das denn alles?

                                paul53 2 Replies Last reply Reply Quote 0
                                • paul53
                                  paul53 @Ben1983 last edited by

                                  @ben1983 sagte: Was genau ist das denn alles?

                                  Siehe Doku Kernkonzept, Abschnitt "Objekte".

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

                                    @paul53 ok, ich schau mal.

                                    Nur beim on() passt es ja auch nicht. ist es mal erweitert worden?

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

                                      @ben1983 sagte: aber z.B. geht auch obj.name

                                      Stimmt. Habe bisher nur obj.common.name verwendet. Ist vielleicht mal um obj.name erweitert worden?

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

                                        @paul53 Aber nur beim
                                        on()

                                        beim getObject() gibts den nicht

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

                                          @paul53 ist es möglich die $(selector).on() reaktion auch noch anderes einzustellen, als "NUR" auf Änderungen?

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

                                            @ben1983 sagte: ist es möglich die $(selector).on() reaktion auch noch anderes einzustellen, als "NUR" auf Änderungen?

                                            Ich wüsste nicht wie.
                                            Hast Du es mal mit on({id: RegEx}, cb) versucht?

                                            Ben1983 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            880
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            26
                                            735
                                            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