NEWS
Wenn Datenpunkt älter als 14 Tage, dann
-
@paul53 sagte in Wenn Datenpunkt älter als 14 Tage, dann:
Mit Vis kennen sich andere besser aus.
Da war mir nicht eingefallen wie ich letzte Änderung in einem Binding einsetzen kann.
Jetzt muss ja ein eigener State mit true/false befüllt werden und das Binding darauf verwendet werden.Aber ich fürchte wenn es heisst
@lukas-vfl99 sagte in Wenn Datenpunkt älter als 14 Tage, dann:
für ein Lagersystem. Jetzt würde ich gerne auf der Vis anzeigen wenn ein Objekt dort schon länger als 14 Tage liegt.
Dass es sich nicht nur um 5 Objekte jandelt für die man ein Lagesystem baut
-
ein binding könnte so aussehen
{lastchange:0_userdata.0.test1.lc;((new Date()-lastchange)/1000/60/24)>14}
durch das anhängen von lc an den datenpunktnamen, erhält man den zeitstempel der letzen änderung. ich hoffe ich habe die umrechnung von millisekunden in tage korrekt berechnet, bitte nochmal prüfen
-
@oliverio sagte: umrechnung von millisekunden in tage korrekt berechnet
60 --> 3600
-
@oliverio Dann braucht @Lukas-VFL99 das Skript gar nicht, oder?
Allerdings müsste das dann in Border.color oder backgroun.color eingetragen und noch die Farben in dem Binding definiert werden. -
@homoran
das hat er ja nicht gesagt. er will nur was anzeigen.
Wir schauen wie es weitergeht.
Er hat auf jedenfall schon mal ein true oder ein false
da noch ein ?: Operator dran zu machen ist ja nicht schwer -
@oliverio @Homoran danke schonmal für eure schnelle Rückmeldung.
Bis jetzt sieht die Vis so aus
Das ganze sind circa 75 Plätze die als basic-HTML einen Datenpunkt wiedergeben.
In der Background.color steht bis jetzt --> {wert:0_userdata.0.Papa.Platz1; wert == "fällig" ? "#e31c0e": wert == "" ? "#039403" : "#203d75"}.
Damit lasse ich die Farbe auf grün ändern wenn der Datenpunkt leer ist. Wenn ich euch jetzt richtig verstanden habe müsste ich da also noch eine If-Abfrage rein schreiben oder?
Die würde dann ja ungefähr so aussehen --> {lastchange:0_userdata.0.Papa.Platz1.lc; lastchange == "((new Date()-lastchange)/1000/60/24)>14" ? "#d6061f": wert:0_userdata.0.Papa.Platz1; wert == "fällig" ? "#e31c0e": wert == "" ? "#039403" : "#203d75"} -
@OliverIO So ich habe gerade noch mal ein wenig rum gespielt und getestet.
Ich schaffe es jetzt, dass sich der Hintergrund nach 2 Minuten ändert. Allerdings schaffe ich es nicht das sich der Hintergrund ändert wenn nichts im Datenpunkt steht wie mache ich das? Also wie führe ich mein vorheriges Binding mit dem neuen zusammen?Mein altes Binding --> {wert:0_userdata.0.Papa.Platz1; wert == "" ? "#039403" : "#203d75"}
Mein neues Binding zum testen --> {lastchange:0_userdata.0.Papa.Platz1.lc;((new Date()-lastchange)/1000/60)>2 ? "#d6061f" : "#00000"} -
@lukas-vfl99
das sind 2 bedingungen und ergibt insgesamt 4 zustände<14 & ==""
<14 & ==""14 & !=""
14 & !=""dazu musst du mit mehreren verschachtelten ?: operatoren arbeiten. da kann man leicht fehler machen. aber den abruf der 2 parameter und logische verknüpfung habe ich dire beispielhaft hier:
{lastchange:0_userdata.0.Papa.Platz1.lc;wert:0_userdata.0.Papa.Platz1;((new Date()-lastchange)/1000/60)>2 && wert == ""? "#d6061f" : "#00000"}
Die verschachtelungen musst du selbst austüfteln. am besten die verschiedenen Anteile immer in Klammer setzen sonst überlagern sich die verschiedenen Bedingungen noch
-
@lukas-vfl99 sagte in Wenn Datenpunkt älter als 14 Tage, dann:
wie führe ich mein vorheriges Binding mit dem neuen zusammen?
ich hätte (bei Standardwidgets) das neue Binding im Rahmen gesetzt, so dass ein roter Rahmen entsteht, wenn > 14 Tage.
Achtung
Die Anzahl Bindings je View ist begrenzt!ich weiß nicht mehr wie, ob auf Anzahl Zeichen, oder Anzahl Binings.
Bei 80 Widgets mit je 2 Bindings alleine in diesem View läppert sich das -
@homoran
ja ist richtig, die begrenzung liegt bei 50, allerdings pro widget und nicht pro view
https://github.com/ioBroker/ioBroker.vis/blob/70b05af47dfd768ea0e6ca463310783f4c68fe5e/www/js/visUtils.js#L34 -
@oliverio sagte in Wenn Datenpunkt älter als 14 Tage, dann:
allerdings pro widget
if (oid.length > 50) {
console.warn('Too many bindings in one widget: ' + oid.length + '[max = 50]');ist das die ganze Begrenzung?
50 (IDs???) pro Widget wird schon schwierig, oder worauf bezieht sich das? -
@homoran
ja pro widget, also keine gefahr.
es könnte von der performance etwas schwierig werden, aber probier einfach mal -
@oliverio @Homoran danke danke danke
Hab's jetzt folgender Maßen gelöst. Muss morgen Mal gucken ob die Umrechnung in Tage passt aber die 2 Minuten funktionieren sehr gut soweit.{lastchange:0_userdata.0.Papa.Platz1.lc;wert:0_userdata.0.Papa.Platz1;((new Date()-lastchange)/1000/60) > 2 ? "#d6061f" : wert == "" ? "#FFFFF" : "#00000"}