Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. $-Selektor und Funktion?

    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

    $-Selektor und Funktion?

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

      Hi,

      irgendwie kriege ich es gerade nicht hin mit dem $-Selektor nach Funktionen zu filtern.
      Ich habe folgende Objekte:
      iobrokre-alias-plugs.PNG
      In jedem der Ordner gibt es einen state "state" den ich selektieren möchte für alle Geräte mit Funktion "Hintergrundbeleuchtung" (id: enums.functions.backlight).

      Probiert habe ich die folgenden (und auch mal Reihenfolge [] und () vertauscht, was nichts geändert hat):

      $('state(functions="backlight")[id=alias.0.plugs.*.state]'); //liefert einfach alle ...
      $('state(functions="Hintergrundbeleuchtung")[id=alias.0.plugs.*.state]'); //0 Elemtente ausgewählt
      

      Mit

      $('state(rooms="esszimmer")[id=alias.0.plugs.*.state]')
      

      kriege ich korrekt "{"0":"alias.0.plugs.ColaUhr.state","length":1}" als Ergebnis. Warum schaffe ich es nicht mit Funktion? grübel

      Jemand eine Idee?

      Dank 🙂
      Garfonso

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

        @Garfonso sagte:

        "Hintergrundbeleuchtung" (id: enums.functions.backlight).

        Dann muss (functions=backlight) verwendet werden; mit dem Namen funktioniert es nicht.

        @Garfonso sagte in $-Selektor und Funktion?:

        //liefert einfach alle ...

        Hast Du nach dem Zuordnen des Gewerkes mal die Javascript-Instanz neu gestartet ? Der Puffer ist sonst nicht aktuell.

        Schau mal in die Doku unter Objekttypen: Gerät sollte Eltern von Kanälen sein und nicht umgekehrt.

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

          @paul53 said in $-Selektor und Funktion?:

          @Garfonso sagte:

          "Hintergrundbeleuchtung" (id: enums.functions.backlight).

          Dann muss (functions=backlight) verwendet werden; mit dem Namen funktioniert es nicht.

          wenn functions=backlight in den String so einfüge, kriege ich wieder alle nicht nur die in Hintergrundbeleuchtung.

          @Garfonso sagte in $-Selektor und Funktion?:

          //liefert einfach alle ...

          Hast Du nach dem Zuordnen des Gewerkes mal die Javascript-Instanz neu gestartet ? Der Puffer ist sonst nicht aktuell.

          Sollte schonmal passiert sein, habe es zur Sicherheit nun noch einmal gemacht -> keine Änderung.

          Schau mal in die Doku unter Objekttypen: Gerät sollte Eltern von Kanälen sein und nicht umgekehrt.

          Hast recht, habe channel durch folder ersetzt.

          1 Reply Last reply Reply Quote 0
          • T
            ticaki Developer last edited by

            Kann zwar nicht dein Problem lösen jedoch diese 3 Strings funktionieren bei mir problemlos.

            'state[role=switch](functions=beleuchtung)'
            'state[role=value.temperature][state.id=linkeddevices.0.Haus.*](functions=temperatursensor)'
            'state[id=deconz.*.1.*](functions=beleuchtung)'
            
            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @ticaki last edited by

              @ticaki sagte:

              funktionieren bei mir problemlos.

              Bei mir funktioniert es ebenfalls mit z.B.

              $('(functions=fenster)[id=alias.0.*]').each(function(id, i) {
                  log(id);
              });
              

              wobei das Gewerk "Fenster" einem Gerät zugeordnet ist.

              1 Reply Last reply Reply Quote 0
              • Garfonso
                Garfonso Developer last edited by

                ok, danke für die Rückmeldungen.

                Dann gucke ich mal, ob es an der anderen Zuordnung liegt (obwohl es mit Raum so klappt).

                1 Reply Last reply Reply Quote 0
                • Garfonso
                  Garfonso Developer last edited by Garfonso

                  Ok.. strange... da muss ich mal suchen oder ein issue aufmachen, glaube ich...

                  Das hier funktioniert, aber nur, wenn der Javascript Adapter nicht alle states abonniert.

                  $('[id=alias.0.plugs.*.state](functions=backlight)').each((id) => log(id));
                  

                  Wenn ich das aktiviere, dann spukt er wieder alle states aus. Wenn es deaktiviert ist, kommen nur, die, die ich will.

                  //EDIT: Ok, daran lag es auch nicht... keine Ahnung, woran es genau liegt... eine Instanz, die wenige Skripte hat, funktioniert meistens (aber auch nicht immer). Die Instanz, wo viele Skripte drauf laufen und die ich seltener Neustarte produziert das Problem.
                  Es gibt auch ein Issue dazu: https://github.com/ioBroker/ioBroker.javascript/issues/523 - mal sehen, ob ich was finden kann (aber da ich noch nicht weiß, wie man es reproduziert, ist das schwierig... hm).

                  Hans-Zwiesel created this issue in ioBroker/ioBroker.javascript

                  closed Aufzählungen: Objekte ohne Funktion werden mit aufgeführt #523

                  1 Reply Last reply Reply Quote 0
                  • T
                    ticaki Developer last edited by ticaki

                    Danke für das Wühlen nach dem Fehler. Ich denke das mein Problem mit "rooms" auch daran gelegen hatte. Hatte in fast allen Lampen-Objekten einen zweiten nicht löschbaren Raum drin, den ich mit:

                                if (enumObj.common.members.findIndex((a) => {return obj.includes(a)}) == -1 ) return;
                    

                    säubern mußte.

                    Mit functions hatte ich aber kein einziges Problem.

                    Garfonso 1 Reply Last reply Reply Quote 0
                    • Garfonso
                      Garfonso Developer @ticaki last edited by

                      @ticaki
                      Gut, das du schreibst. 😉 Der Fehler ist in 4.5.0 behoben (in latest jetzt).

                      Der Fehler war so, dass sich die functions und rooms eine Objektes auf die höchsten Eltern übertragen haben. Und zwar immer nur die vom ersten betrachteten Objekt. Die haben die dann an alle ihre Kinder weitervererbt (was auch so gedacht ist). Besonders verwirrend war, das die Reihenfolge der Objekte dabei zufällig ist und der Fehler damit nicht immer auftritt (also er passiert schon immer, aber oft passiert halt nichts schlimmes -> der war schon recht lange da).

                      Also aus meinem Screenshot am Anfang als Beispiel:
                      Wenn der state "alias.0.plugs.Deko_Einfahrt.state" als erstes genommen wird, wird dabei auch das devices "alias.0.plugs.Deko_Einfahrt" betrachtet mit Funktion "Hintergrundbeleuchtung" und "Steckdose" und Raum "Innenhof". Diese drei Eigenschaften wurden dann falscherweise an "alias.0" vererbt -> für den Rest der Laufzeit haben alle Objekte in alias.0 diese Eigenschaften vererbt bekommen (die Vererbung nach unten, also von alias.0.plugs.Deko_Einfahrt auf alias.0.plugs.Deko_Einfahrt.state ist, wie im Admin angedeutet, so vorgesehen. Aber nach oben ist natürlich Quatsch). -> jedenfalls, wenn ein Objekt mit "Hintergrundbeleuchtung" als erstes angefasst wurde, hatten alle Objekte diese Funktion, wenn nicht, dann lief es richtig.

                      Vermutlich tritt der Fehler sehr selten auf, wenn die meisten states auf einer Ebene keine Funktionen / Räume haben. Aber in meinem Fall trat es halt recht häufig auf. Und ja, Räume sind genauso betroffen gewesen.

                      So, nun behoben. Gleichzeitig wurde auch das Cache Update verbessert -> wenn es sonst da keine Fehler gibt, sollten enum-Updates jetzt auch keinen Neustart vom javascript adapter mehr erfordern (habe ich aber nicht ausführlich getestet).

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      612
                      Online

                      31.9k
                      Users

                      80.1k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      849
                      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