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.
    • 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
                              • Ben1983
                                Ben1983 @paul53 last edited by

                                @paul53 Nee, aber danke für den Tipp, damit sollte es ja klappe.
                                Aber genau überlagt reicht es mir ja auch so... und so mit dem Selector und der Wildcard ist auch ganz gut 🙂

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

                                  @paul53 sag mal kann ich auch irgendwie sowas wie die each Funktion vom selector mit ner RegEx machen? Bspw. Mit sowas wie getState()?

                                  Ist ja cool, dass ich die RegEx beim on() verwenden kann, mich würde auch interessieren, welche States die RegEx erfüllen.

                                  So könnte auch alles ohne selector funktionieren.

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

                                    @ben1983 sagte: interessieren, welche States die RegEx erfüllen.

                                    Da wird wohl nichts weiter übrig bleiben, als die RegEx möglichst genau für die $Selector.each-Schleife nachzubilden.

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

                                      @paul53 ok. Schade.
                                      Kann man die Wildcard „*“ auch mehrfach nutzen?

                                      Also nicht nur:

                                      Adapter.0.folder.*
                                      

                                      Sondern auch:

                                      Adapter.0.folder.*.myfolder.*
                                      

                                      Geht sowas?

                                      Mit RegEx alle ids die passen raus finden, wäre halt optimal, denn dann bräuchte man keinen Selector, aber so wäre es auch cool.

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

                                        @ben1983 sagte: Geht sowas?

                                        Ja.

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

                                          @paul53 sehr geil. Das funktioniert super.
                                          Jetzt geht mit dem selector nur das mir dem .on() bei beschreiben und nicht änderung noch nicht.

                                          Klar, das geht über den regex mit on(), aber dann ist es wieder ne andere funktion.
                                          Aber das wird man wohl oder übel akzeptieren müssen 😉

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          892
                                          Online

                                          31.7k
                                          Users

                                          79.8k
                                          Topics

                                          1.3m
                                          Posts

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