NEWS
Beliebigen dp Type mit Javascript direkt auf Bool abfragen
-
Hallo,
ich habe in der Vis folgendes in einer CSS Eigenschaft verwendet um eine Farbe zuzuweisen:{vis-inventwo.0.CSS.Active}
Nun meine Frage:
Ist es auch irgendwie möglich, dass man Boolsche Werte sozusagen mit einem "inline" script zu erzeugen?
Ich würde gerne einem Widged (welches Bool erwartet) folgenden Wert zuweisen:{traccar.0.geofences.22.device_ids.indexOf(1) !== -1}
Geht das irgendwie?
-
@ben1983
Ich würde es in etwa so probieren{x:der.daten.punkt; x !== -1 ? true : false}
-
@ralf-2 sagte in Beliebigen dp Type mit Javascript direkt auf Bool abfragen:
{x:der.daten.punkt; x !== -1 ? true : false}
Habe es jetzt so eingesetzt... aber geht nicht... passt das mit dem indexOf?
{x:traccar.0.geofences.22.device_ids.indexOf(1); x !== -1 ? true : false}
-
@ben1983
Ich weis nicht wie der Datenpunkt aussieht.
Normalerweise kopiert man das direkt aus dem Objektbrowser:
Ich weiß nicht, ob bei dir wirklich das "(1)" dahinter richtig ist.
Welches Widget willst du denn benutzen?Edit
scheinbar funktionieren die Bindings bei ObjectID so nicht.
Was willst du genau machen? -
@ralf-2 natürlich ist es kein Bool, sonst ist natürlich klar, dass man den kopieren kann.
Es ist ein Array, das möchte ich überprüfen, ob es einen bestimmten Inhalt hat… Aber man muss es sicher noch parsen…. Muss ich später nochmal versuchen -
@ben1983 sagte in Beliebigen dp Type mit Javascript direkt auf Bool abfragen:
@ralf-2 natürlich ist es kein Bool, sonst ist natürlich klar, dass man den kopieren kann.
Es ist ein Array, das möchte ich überprüfen, ob es einen bestimmten Inhalt hat… Aber man muss es sicher noch parsen…. Muss ich später nochmal versuchenGeht auch mit einem Einzeiler. derAusdruck am Ende des Beispiel-codes ist ein bool:
const arr = ['bla','fasel','hieristnix']; (arr.indexOf('fasel')>-1)
-
@asgothian danke. Wie das in js geht, ist mir klar.
Die Frage war, wie ich es in vis in einem Objekt einbinden kann, damit man da auch nicht bool werte nutzen kann -
@ben1983
Ohne weitere Informationen kann man hier aber kaum helfen.- Wie sieht die Konfiguration des DP aus
- Was steht im Datenpunkt
- Wo in der VIS willst du das einsetzen
- Welches Widget willst du benutzen
- Welche Visualisierung benutzt du? Vis, Vis2, Jarvis,...
Ohne weitere Informationen bin ich hier raus.
-
@ralf-2 das ist eine allgemeine Frage, ob man in der Vis über JS Funktionen eine Abfrage anstelle des DP setzen kann. Nicht speziell auf ein DP oder Widged gemünzt.
-
@ben1983
Da die Eintragung des DP beim speichern der VIS eingepflegt wird: Nein -
@ralf-2 schade. Dachte es geht irgendwie, da es mit Farben ja auch geht.
-
@ben1983
Es gibt bestimmt ein Duzend Workarounds um das schnell hin zu bekommen
Aber ohne Infos -
@ralf-2 Was denn für Infos?
Ich möchte Ohne einen extra DP erstellen zu müssen,
in der Vis true oder false darstellen, indem ich eine JS Funktion eingebe, anstatt eines DP.das kann vergleich auf string sein, auf number, oder arry.
Konkret habe ich diesen DP:
{ "type": "state", "common": { "name": "Device IDs", "role": "json", "type": "string", "write": false, "read": true }, "native": {}, "from": "system.adapter.traccar.0", "user": "system.user.admin", "ts": 1740659209775, "_id": "traccar.0.geofences.22.device_ids", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Hier möchte ich in der Vis abfragen, ob in diesem DP, welcher ein Array enthält bspw. eine 22 vorkommt.
Das ist das Konkrete Vorhaben.
Habe nichts konkretes geschrieben, da ich es nicht für Sinnvoll erachte immer nur eine Lösung fpr EINEN Fall zu haben, deshalb die Frage nach etwas allgemeinem. -
Wahrscheinlich kommt das "Objekt" in vis als String an.
Das kannst du ja mal mit typeof prüfen.
Dann musst du das mit JSON.parse zunächst umwandeln und dann wie beschrieben darauf zugreifen. -
@oliverio Schon versucht...
{x = JSON.parse(traccar.0.devices.1.geofence_ids).indexOf(22); x !== -1 ? true : false} // oder {x = JSON.parse(getState("traccar.0.devices.1.geofence_ids").val).indexOf(22); x !== -1 ? true : false}
macht gar nichts
-
Das entspricht nicht der binding Konvention
{x:traccar.0.devices.1.geofence_ids; JSON.parse(x).indexOf(22) !== -1 ? true : false}
Habe das jetzt blind zusammengetippt.
Falls es nicht funktioniert muss ich das später selbst mal am Rechner ausprobierenDie Befehle aus dem javascriptadapter wie geState sind so nicht auf vis verfügbar.
Da muss man etwas mehr machen. -
@oliverio sagte in Beliebigen dp Type mit Javascript direkt auf Bool abfragen:
{x:traccar.0.devices.1.geofence_ids; JSON.parse(x).indexOf(22) !== -1 ? true : false}
OK, der code für bei dem Widged checkbox immer zu true und bei material checkbox immer zu false
-
habe mal ausprobiert.
JSON funktioniert in vis wohl nicht.
Das objekt wird falsch zusammen gebaut. -
@oliverio Schade. so ein Mist