Reading force event - graphical support

Begonnen von martinp876, 29 Dezember 2019, 11:29:15

Vorheriges Thema - Nächstes Thema

martinp876

Ich nutze generell event-on-change-reading .* was ich für sinnvoll halte um die Datenflut  und die Log-Datenbank Größe einzudämmen.
Bei Grafiken entsteht dabei - zumindest bei mir - ein Problem. Ich stelle die Temperaturen, Heizungseinstellungen,... (natürlich) zeitlich gruppiert dar. Also eine Darstellung für 2Tage/7Tage/31Tage.
Für die Grafik insbesondere der kurzen Zeiträume fehlt mir nun der Startwert.
Beispiel: Die eingestellte Temperatur des HK ist 18°C am Freitag 18:00. Ich ändere sie erst Sonntag 11:00 auf 19°C.
Die Grafik SVG wird bei einen Zeitraum 2Tage, also Sa 00:00 bis So 24:00 die Soll-Temp darstellen als Punkt am So 11:00.
1) ich brauche also einen Startpunkt der SVG Grafik welchem dem letzten gültigen für den Darstellungszeitraum entspricht
2) ich brauche eine Methode zur Verlängerung des letzten Wertes bis zur aktuellen Uhrzeit.

Wäre cool wenn man das in SVG Grafik lösen könnte.
Für den Startwert kann ich mir vorstellen, täglich um kurz nach 00:00 Uhr (alle) Readings einmal zu setzen - insbesondere die regelmäßigen.
Bezüglich der Readings werden ich jetzt jeweils Readings am Tagesende (23:55) und Tagesanfang (00:05) "forcen". Ich sehe gerade, dass "addEvent" die zielführende Methode ist. Das löst mein Problem 1) immer und das Problem 2) wenn ich nicht den aktuellen Tag betrachte.

Der typische Anwender sollte das nicht machen müssen. Das muss Standard sein - ohne Attribut, einfach immer.

So gesehen ändere ich gerade leicht meine Meinung: Es muss in SVG gelöst werden.
Das "forceReadingEvent" werde ich dennoch einführen da mein Betrachtungszeitraum typisch 1 Tag ist. Am Anfang UND am Ende des Tages.

martinp876

so, das mit den Readings um Mitternacht habe ich gelöst (hätte also nicht fragen müssen). Allerdings ist das nicht unbedingt für jeden, da schon die sub addEvent eigentlich nicht öffentlich ist.

define forceDayLog at *23:58:00 {my $rs = AttrVal("forceDayLog","logRead","");;foreach my $d(keys %defs){foreach my $r (grep /($rs)/,keys %{$defs{$d}{READINGS}}){addEvent($defs{$d},"$r: $defs{$d}{READINGS}{$r}{VAL}")}}}
attr forceDayLog userattr logRead
attr forceDayLog logRead measured-temp|desired-temp|ValvePosition|batteryLevel|humidity|temperature|level|brightness|luminosity|mypressure|pressure|phyLevel|pct|energy|load|current|frequency|power|voltage
define forceDayLog2 at *00:03:00 {my $rs = AttrVal("forceDayLog","logRead","");;foreach my $d(keys %defs){foreach my $r (grep /($rs)/,keys %{$defs{$d}{READINGS}}){addEvent($defs{$d},"$r: $defs{$d}{READINGS}{$r}{VAL}")}}}


Für die Allgemeinheit (sofern Bedarf) fehlt eine einfache Lösung wie bspw eine Option in "global"
Für die Graphik von "heute" fehlt in jeden Fall die Verlängerung bis "jetzt". Eigentlich auch die Implementierung des letzen gültigen Werts vor Grafig-beginn)