NEWS
Zeitdifferenz in Bindings?
-
ok dann schritt für schritt
- lege ein input widget an und setze es auf deinen datenpunkt
0_userdata.0.Aqara_max_Updatezeit - trage mal in diesen datenpunk eine minutenzahl ein
- trage diesen ausdruck in einem input widget in color ein. problem ist, das hier die Farbe sich nur auf das Inputlabel auswirkt und nicht auf die Farbe der Eingabezahl.
{akt:system.adapter.admin.0.alive.ts; zstempel:deconz.0.Sensors.33.temperature.lc; uptime:{0_userdata.0.Aqara_max_Updatezeit x 60000}; akt - zstempel > uptime ? "red" : "#4d4f51"}
das müsste es gewesen sein.
- lege ein input widget an und setze es auf deinen datenpunkt
-
-
Hi,
ich hoffe, ich darf mich mit meinem Anliegen hier mit dranhängen:
Ich habe ein Binding, welches eine Bedingung abprüft. Als Ergebnis soll einer von zwei Datenpunkten ausgegeben werden. Das funktioniert auch. Problem: Ich bekomme diese Werte nicht formatiert.
Ohne die Abfrage funktioniert die Formatierung 1a.Binding Formatierung:
{tr-064.0.devices.Handy-S9.lastActive-ts;date(DD.MM.YYYY hh:mm)}
Abfrage:
{a:fb-checkpresence.0.Name.presence;b:tr-064.0.devices.Handy-S9.lastActive-ts;c:tr-064.0.devices.Handy-S9.lastInactive-ts;a == "false" ? c :: b}
Wie bekomme ich nun das Ergebnis der Abfrage wieder als Datum?
VG -
@Coffeelover Hi, da du weder mit "c" noch mit "b" rechnest, müsste es funktionieren den TS vorher zu konvertieren. Versuche mal:
{a:fb-checkpresence.0.Name.presence; b:tr-064.0.devices.Handy-S9.lastActive-ts;date(DD.MM.YYYY hh:mm); c:tr-064.0.devices.Handy-S9.lastInactive-ts;date(DD.MM.YYYY hh:mm); a == "false" ? c : b}
-
@SBorg Danke, das habe ich versucht. Leider ohne Erfolg, es wird weiterhin UNIX ausgegeben. Habe es auch noch mit einer Klammer versucht, aber auch das klappt nicht.
-
@Coffeelover Ist der Timestamp ein "echter" Unix oder wie beim ioB üblich einer in Nanosekunden? Sonst müsstest du ihn vorher noch mit 1000 multiplizieren.
-
Das müsste funktionieren.
Du hattest übrigens hinten 2 Doppelpunkte{a:fb-checkpresence.0.Name.presence;b:tr-064.0.devices.Handy-S9.lastActive-ts;c:tr-064.0.devices.Handy-S9.lastInactive-ts;a == "false" ? vis.formatDate(parseInt(c),"DD.MM.YYYY hh:mm") : vis.formatDate(parseInt(b),"DD.MM.YYYY hh:mm")}
Hintergrund für diese Notation.
Aufgrund deiner Notation (Datenpunkt wird einer Variable zugewiesen, Fragezeichenoperator)
wird das Konstrukt intern in javascript umgewandelt.Dadurch erkennt vis den vis-Befehl date(DD.MM.YYYY hh:mm) nicht mehr und man muss
die vis-javascript-funktion aufrufen. Diese nennt sich formatDate.Da die Zuweisung eines Datenpunkts zu einer Variable immer als string interpretiert wird und der ursprüngliche Datentyp nicht beachtet wird (hat was mit dem folgenden Issue zu tun https://github.com/ioBroker/ioBroker.vis/issues/263) und die formatDate für timestamps nur mit number funktioniert, muss die variable nochmal in ein int umgewandelt werden.
Ohne debugging in den vis-code hätte ich das auch nicht richtig aufschreiben können.
-
-
@Coffeelover
ich hab nochmal reingeschaut.
das wird vor Ausführung irgendwo ausgefiltert.
von daher kein Problem.
Aber formal für javascript ist es falsch und führt im normalen Programmcode zu einem Fehler -
@OliverIO Wieder was gelernt.