NEWS
VIS - dynamische Object ID / Feldreferenz
-
Ich hätte da mal eine Frage zu den Feldern von Widgets.
Ist es ggf. möglich den Eintrag - bspw. bei der "Object ID" - mit "Platzhaltern" oder "Variablen" zusammenzusetzen?Ein Beispiel:
Sagen wir der "Name" eines Widgetelements lautet "admin"
Der Eintrag in "Object ID" würde hierzu "system.adapter.admin.0.alive" lauten.Nun habe ich sehr viele dieser Elemente anzulegen und müßte ja überall sowohl den Namen als auch die Object ID ändern.
Ich würde also gerne in der Object ID so etwas in der Art Eintragen können:
- "system.adapter.%Name%.0.alive"
oder - "system.adapter.%WidgetNr.Name%.0.alive"
Somit soll also die "Object ID" den Wert eines Feldes (hier "Name") übernehmen.
Ist so eine Referenz auf ein Widget-Feld denkbar/möglich?
- "system.adapter.%Name%.0.alive"
-
@BBTown würde mich auch interessieren...
-
@BBTown
Hallo, hast du schon eine Lösung gefunden ? -
-
@ice987
Es geht darum Faceplate-technologie anzuwenden.
z.B. habe ich mehrere dieser Instanzen welche immer die gleiche Struktur haben und möchte ein Grafikelement welches fest mit bestimmten Members (Datenpunkten) von z.B. "Current" verbunden ist. Somit kann ich das Grafikelement mehrfach einsetzen ohne jedesmal alle Objekt-ID zu bearbeiten, ich ändere nur den Pfad bzw. den Strukturnamen.
Beispiel: "wetherunderground.0.forecast.current" wird an das Grafikelement übergeben. Alle Parameter innerhalb "current" sind bereits fest im Grafikelement verschaltet. -
@bungee71 Moin und schöne Weihnachten.
Nein, ich habe leider keine Lösung, da ich seinerzeit keine Antwort auf meine Anfrage bekam, ich selbst habe kein ausreichend tiefes Verständnis um anders als per Anfrage zu einer Lösung zu kommen -
@BBTown
In welchem/n Widget/s möchtest du die Werte aus dem Ordnerwetherunderground.0.forecast.current
ausgeben? -
@ice987 sagte in VIS - dynamische Object ID / Feldreferenz:
@bungee71
@BBTown
@Communicatorgeht das in die gewünschte Richtung?
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. -
Das kannst du mithilfe von Bindings realisieren.
anbei ein kleines Beispiel:
Das Binding in der Objekt Id musst dann so gestaltet sein
0_userdata.0.binding.{0_userdata.0.binding.variable}
Ergebnis:
-
@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}.JahresverbrauchIn 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.
-
@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_valueVersuche 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.
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. -
Ich kann das bestätigen, was @MeinzIsAs sagt. Gibt es hierfür vielleicht eine Lösung?
-
@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.
-
@oliverio ok, dann weiß ich bescheid und kann ein Workaround implementieren. Danke!
-
@mrfenyx kannst du den Workaround erläutern? Ich bin da nicht so fit habe aber das selbe Problem.
-
@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
-
@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 -
@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. -
@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.
-
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.