Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. VIS - dynamische Object ID / Feldreferenz

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    VIS - dynamische Object ID / Feldreferenz

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

      @BBTown
      In welchem/n Widget/s möchtest du die Werte aus dem Ordner wetherunderground.0.forecast.current ausgeben?

      1 Reply Last reply Reply Quote 0
      • BBTown
        BBTown @ice987 last edited by

        @ice987 sagte in VIS - dynamische Object ID / Feldreferenz:

        @bungee71
        @BBTown
        @Communicator

        geht das in die gewünschte Richtung?


        84BC0C73-442C-43A5-80CA-A123C13E632F.jpeg

        Moin ice987,

        ja, so war mein seinerzeitiger Ansatz. Ich muss nur zugeben, dass dies ja bereits mehr als ein Jahr her ist, musste ich mich selbst erst einmal wieder reindenken.

        Und .... ich selbst habe mir seinerzeit manuell anders beholfen und die Anforderung selbst nicht mehr.
        Womöglich ist es ja dennoch ein interessanter Ansatz die eingegebenen Informationen ansprechen zu können.

        Scrounger 1 Reply Last reply Reply Quote 0
        • Scrounger
          Scrounger Developer @BBTown last edited by

          @BBTown

          Das kannst du mithilfe von Bindings realisieren.

          anbei ein kleines Beispiel:
          12c478c6-dd4d-4381-a8a9-864c85d1b2cb-grafik.png

          Das Binding in der Objekt Id musst dann so gestaltet sein 0_userdata.0.binding.{0_userdata.0.binding.variable}

          Ergebnis:
          variable.gif

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

            @Scrounger
            Ich würde das Thema gerne noch einmal aufgreifen.
            Ich möchte eine Objekt ID dynamisch realisieren.
            Das Ganze sieht zur Zeit so aus:
            javascript.0.Allgemeine_Programme.Stromverbrauch.Waschmaschine.{javascript.0.Allgemeine_Programme.Stromverbrauch.Aktuelles_Jahr}.Jahresverbrauch

            In der Variable javascript.0.Allgemeine_Programme.Stromverbrauch.Aktuelles_Jahr steht das aktuelle Jahr in diesem Fall 2021.
            Es wird mir aber kein Wert angezeigt (Material Design - Bar Chart von Scrounger).

            Rufe ich die Variable javascript.0.Allgemeine_Programme.Stromverbrauch.Waschmaschine.2021.Jahresverbrauch in einem anderen Feld des Charts (z.B.: im Layout des Datensatzes als Beschriftung) direkt auf, wird auch der Wert im Chart richtig angezeigt.

            Es sieht so aus, als ob die zusammengestellte Variable nur richtig gelesen wird, wenn das "Original" einmal direkt aufgerufen wird.

            Vielleicht hat jemand von Euch eine Lösung für mich.

            Besten Dank schon mal.

            mrFenyx 1 Reply Last reply Reply Quote 0
            • C
              cromit last edited by

              @meinzisas
              Hallo,
              ich bin auch auf der Suche, dynamische Objekt IDs zu erzeugen.
              z.T. hatte das schon funktioniert, z.B. um Icons abhängig von einer Variable auszuwählen:
              siehe hier, so funktioniert es z.B. für die variablen WetterIcons mit Sonne und Wolken:
              /vis.0/Wetter/Wolken/{daswetter.0.NextDays.Location_1.Day_2.Wetter_Symbol_id}.png
              In {} steht im Prinzip einfach nur eine Zahl/Text und die entsprechenden Icons liegen im Ordner /vis.0/Wetter/Wolken/...

              Nun möchte ich dies für diese statische Object ID ebenfalls anwenden und daswetter.0 durch daswetter.1 ersetzen:
              daswetter.0.NextDays.Location_1.Day_1.Maximale_Temperatur_value

              Versuche ich das aber hiermit, funktioniert es nicht (in "0_userdata.0.Variablen.WetterOrt" steht eine Zahl oder Zeichenkette)!?
              daswetter.{0_userdata.0.Variablen.WetterOrt}.NextDays.Location_1.Day_1.Maximale_Temperatur_value
              Also ich ersetze die 0 in diesem String durch eine Variable (Zahl oder Zeichenkette).

              Ich habe von daswetter mehrere Instanzen
              und möchte nun einfach zwischen verschiedenen Orten umschalten.

              Aber leider leider funktioniert das nicht.
              Nur, wenn ich manuell im Editor in der Object ID von .0. auf .1. wechsle, dann funktioniert es natürlich.

              2309d0dd-008c-4247-ae76-4d5149f7a3b5-grafik.png
              In diesem Fall steht "Grötzingen" für "daswetter.0.NextDays..."
              Unter "daswetter.1.NextDays..." würden die Daten für einen anderen Ort angezeigt werden.
              Aber ich will das im Editor ja nicht ständig für alle Objekte ändern.

              1 Reply Last reply Reply Quote 0
              • mrFenyx
                mrFenyx @MeinzIsAs last edited by

                Ich kann das bestätigen, was @MeinzIsAs sagt. Gibt es hierfür vielleicht eine Lösung?

                OliverIO 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @mrFenyx last edited by

                  @mrfenyx
                  nein gibt es leider nicht.
                  das hängt damit zusammen wie vis mit den bindings umgeht.
                  vis sammelt bei start einmal alle objectIDs ein und abonniert diese beim server.
                  alles was da nicht bekannt ist, kennt vis nicht.

                  man kann allerdings selber einen datenpunkt abrufen. allerdings muss man sich dann um das regelmäßige abholen und aktualisieren dann selber kümmern.

                  mrFenyx 1 Reply Last reply Reply Quote 0
                  • mrFenyx
                    mrFenyx @OliverIO last edited by

                    @oliverio ok, dann weiß ich bescheid und kann ein Workaround implementieren. Danke!

                    R 1 Reply Last reply Reply Quote 0
                    • R
                      RomN @mrFenyx last edited by

                      @mrfenyx kannst du den Workaround erläutern? Ich bin da nicht so fit habe aber das selbe Problem.

                      mrFenyx 1 Reply Last reply Reply Quote 0
                      • mrFenyx
                        mrFenyx @RomN last edited by

                        @romn sorry, ich weiß nicht mehr wofür ich das benutzen wollte aber ich denke, ich habe es letztendlich leider nicht geschafft und es gelassen 😞

                        Frederik Buss 1 Reply Last reply Reply Quote 0
                        • Frederik Buss
                          Frederik Buss @mrFenyx last edited by

                          @mrfenyx @OliverIO Die Lösung ist von @Scrounger beschrieben: Bindings über erstellte Objekten realisieren. Ich habe das für meine Sonos Steuerung so umgesetzt:

                          Ins Objekt 0_userdata.0.SonosAuswahl schreibt ein Auswahlbutton den Pfad (z.B. "alias.0.WohnEsszimmer.SonosWozi") als Wert (Zeichenkette) rein.
                          Somit kann dann über einen Inventwo Switch z.B. die Lautstärke nur für den ausgewählten Speaker geändert werden. Die Objekt-ID sieht dann so aus: {0_userdata.0.SonosAuswahl}.VOLUME
                          Das funktioniert sehr stabil mit den Inventwo Buttons, allerdings nicht mit dem img-src Element, warum auch immer. Das kann nicht damit zusammenhängen, wie vis mit bindings umgeht, da die Objekt-IDs beim Start bekannt sind - mit den Inventwo Buttons geht es auch wie gewünscht.
                          Da ich auch das aktuelle Album Cover anzeigen möchte ist mein Workaround für jedes Gerät ein Element anzulegen und die Sichtbarkeit in Abhängigkeit vom Auswahl-Objekt zu steuern:
                          Sichtbarkeit bei 0_userdata.0.SonosAuswahl == alias.0.WohnEsszimmer.SonosWozi

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @Frederik Buss last edited by Homoran

                            @frederik-buss ääähm?
                            die referenzierten user haben vor einem, bzw. vor einem halben Jahr gepostet.
                            Die zitierte Lösung ist schon fast 3 Jahre alt.

                            Frederik Buss 1 Reply Last reply Reply Quote 0
                            • Frederik Buss
                              Frederik Buss @Homoran last edited by

                              @homoran Ist mir bewusst, ich habe nur genau für diesen Fall eine Lösung gesucht und nur diesen Thread gefunden. Ich dachte dass meine Lösung vielleicht jemandem hilft. War vielleicht mit den Zitaten etwas ungeschickt geschrieben.

                              OliverIO 1 Reply Last reply Reply Quote 0
                              • OliverIO
                                OliverIO @Frederik Buss last edited by

                                @frederik-buss

                                Alternativ legt man die widgets für alle Player an, legt sie übereinander und regelt die Sichtbarkeit des richtigen widgets dann über einen anderen Regler.

                                Wie man es macht, ist es immer ein wenig umständlich und führt, bei Änderung zu mehrfachpflegeaufwand.

                                Frederik Buss 1 Reply Last reply Reply Quote 0
                                • Frederik Buss
                                  Frederik Buss @OliverIO last edited by

                                  @oliverio Naja, bei den Bildern bin ich bei Dir. Die Inventwo Widget funktionieren aber per Binding so wie ich mir das vorstelle. Hast Du eine Idee warum dasselbe beim "String img src" Widget nicht funktioniert?

                                  OliverIO 1 Reply Last reply Reply Quote 0
                                  • OliverIO
                                    OliverIO @Frederik Buss last edited by

                                    @frederik-buss

                                    du kannst mal mit den developer tools des browsers schauen, wie die werte dann im browser tatsächlich ankommen.
                                    also einfach auf die stelle rechtsklicken und dann "untersuchen" auswählen.
                                    dann müsstest du dir den link anschauen können.

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

                                      Ist diese "indirekte" adressierung nun in vis möglich oder nicht? Ich hatte mir überlegt das in meine webui einzubauen, wenn es in vis möglich ist, würde ich es gerne gleich machen.

                                      Finde {} als platzhalter eig. gut, glaube aber das { und } keine verbotenen werte in iobroker signalen sind (wobei die nutzt warscheinlich so gut wie keiner).

                                      OliverIO 1 Reply Last reply Reply Quote 0
                                      • OliverIO
                                        OliverIO @jogibear9988 last edited by

                                        @jogibear9988

                                        Dynamische objectIDs gehen nicht.
                                        Also das berechnen des id zur Laufzeit.
                                        Vis sammelt zum Start im runtime Mode erst allle ids ein und abonniert die vom Server.
                                        Erst dann wird vis über alle Änderungen informiert und stellt diese dann dar.

                                        Im edit Mode werden alle datenpunkte abonniert
                                        Ich nehme an das macht die sofortige Darstellung von Daten einfacher sobald ein Widget hinzugefügt und der id eingetragen wurde

                                        Frederik Buss 1 Reply Last reply Reply Quote 0
                                        • Frederik Buss
                                          Frederik Buss @OliverIO last edited by

                                          @oliverio Ich bin mir nicht ganz sicher was Du damit meinst, vielleicht verstehe ich den Ausdruck "dynamische Objekt ID's" auch falsch. Folgendes Beispiel geht aber recht zuverlässig:
                                          Inventwo Widget Laustärke erhöhen oder senken, je nachdem welches Objekt ausgewählt wurde.
                                          Objekt ID: {0_userdata.0.SonosAuswahl}.VOLUME
                                          Inhalt von 0_userdata.0.SonosAuswahl: alias.0.WohnEsszimmer.SONOS-Gruppe oder alias.0.WohnEsszimmer.SonosTerrasse usw.

                                          OliverIO 1 Reply Last reply Reply Quote 0
                                          • OliverIO
                                            OliverIO @Frederik Buss last edited by OliverIO

                                            @frederik-buss

                                            ja genau das. vis kennt am anfang den eigentlichen datenpunkt nicht, da er ja gemäß der Auswahl erst zusammengebaut wird.
                                            Sofern ich mich erinnere müsste vis dann das auch verschachtelt erkennen, was so nicht eingebaut ist

                                            Ausgangssituation
                                            {javascript.0.datenpunk.{javascript.0.auswahl}}
                                            1.Schritt den Inhalt des datenpunkts auswahl ermitteln und im ausdruck ersetzen
                                            2.Schritt den Inhalt des so dynamisch zusammengesetzten datenpunktID ermitteln.
                                            

                                            wie schon geschrieben. wenn vis runtime startet, müssen alle datenpunkte bekannt sein. vis scannt alle widgets und anderen inhalte nach dem Inhalt von {}, erkennt die datenpunkte und abonniert sie dann beim server, so das die aktualisierungen dann dem client mitgeteilt werden.
                                            nach dem start findet dieser prozess nicht mehr statt.

                                            Zur Lösung deines Problems:
                                            Lege für jede einzelne Möglichkeit ein widget an und lege sie direkt übereinander (beim erstellen evtl noch nicht gleich, sondern erst wenn es funktioniert). Die Sichtbarkeit des widgets kannst du dann über den Datenpunkt Auswahl steuern, in dem du den Datenpunkt Auswahl im Abschnitt visibility des jeweiligen widgets einträgst und eine entsprechende Vergleichsoperation einträgst

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            813
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            vis
                                            13
                                            37
                                            4501
                                            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