da ich gerade selbst drübergestolpert bin, möchte ich hier gerne eine aktuelle Idee für das Einführen zwei neuer Datenpunkt-Funktionen in der ReGa zur Diskussion stellen.
Das aktuelle Problem ist, das es z.B. Geräte wie den HmIP-SMI55, etc. gibt der in einem einzelnen Kanal mehrere Datenpunkte vereint die regelmäßig vom Gerät aktualisiert werden, die aber eine andere Funktion bzw. im Grund inhaltlich nichts miteinander zu tun haben. So hat ein HmIP-SMI55 in Kanal 3 ja z.B. den Datenpunkt "MOTION" um die Bewegung (true/false) wiederzugeben, aber eben auch "CURRENT_ILLUMINATION" oder "ILLUMINATION" um den aktuellen Helligkeitswert wiederzugeben. Das Problem dabei ist jedoch (soweit ich das überblicke), das es aktuell nicht möglich ist herauszubekommen zu welcher Zeit eine konkrete Änderung (d.h. wann der Wert anders war als der letzte) des Datenpunktwertes stattgefunden hat.
Konkret zu sehen ist das z.B. an folgendem Beispielskript den man mal auf solche Bewegungsmelder mit Helligkeitsinformationen loslassen kann:
Code: Alles auswählen
string kanalname = "Licht-Bewegungsmelder:3";
string dpname = "MOTION";
WriteLine("DP: "#kanalname#":"#dpname);
WriteLine("DP Value: "#dom.GetObject(kanalname).DPByHssDP(dpname).Value());
WriteLine("DP LastValue: "#dom.GetObject(kanalname).DPByHssDP(dpname).LastValue());
WriteLine("DP Timestamp: "#dom.GetObject(kanalname).DPByHssDP(dpname).Timestamp());
WriteLine("DP LastTimestamp: "#dom.GetObject(kanalname).DPByHssDP(dpname).LastTimestamp());
WriteLine("DP LastTriggerTime: "#dom.GetObject(kanalname).DPByHssDP(dpname).LastTriggerTime());
! WriteLine("DP LastDPActionTime: "#dom.GetObject(kanalname).DPByHssDP(dpname).LastDPActionTime()) ; ! geht gar nicht
WriteLine("Kanal LastDPActionTime: "#dom.GetObject(kanalname).LastDPActionTime()) ;
WriteLine("Kanal LastTimestamp: "#dom.GetObject(kanalname).LastTimestamp()) ;
WriteLine("DONE“);
Code: Alles auswählen
DP: Licht-Bewegungsmelder:3:MOTION
DP Value: false
DP LastValue: false
DP Timestamp: 2023-06-12 09:25:09
DP LastTimestamp: 2023-06-12 09:22:41
DP LastTriggerTime: 1970-01-01 01:00:00
Kanal LastDPActionTime: 2023-06-12 09:25:09
Kanal LastTimestamp: 2023-06-12 09:25:09
DONE
Wenn man aber nun eben daran interessiert ist für diesen MOTION Datenpunkt herauszubekommen wann konkret der letzte Zeitpunkt war als der Datenpunkt "true" bzw. eben anders als aktuell war, dann hat man soweit ich das sehen kann keinerlei Möglichkeit das herauszubekommen.
Nun könnte man natürlich argumentieren das man doch einfach genau diese Value() vs. LastValue() doch so ändern sollte das hier immer eine Änderungsprüfung passieren sollte. D.h. Value() und LastValue() immer unterschiedlich sein müssten und er einfach eine weitere Value-Änderung auf den selben wert (false -> false) komplett ignorieren sollte. So ganz sicher bin ich mir hier jedoch nicht ob das so eine kluge Idee wäre bzw. was das dann konkret für Auswirkungen hätte wenn man das nun so anpassen würde.
Deshalb wäre hier vielleicht die Alternative eine weitere Funktion "LastChangeValue()" und "LastChangeTimestamp" einzuführen die einerseits den konkreten Wert der letzten Änderung != des aktuellen Wertes beinhaltet und eben auch den Zeitpunkt dieser letzten Änderung.
Bevor ich mich nun aber eben ans Werk mache möchte ich diese Idee natürlich gerne gerade bei unseren "ReGa-Experten" zur Diskussion stellen damit sichergestellt ist, das ich nicht irgendetwas gedanklich übersehe bzw. es vllt. doch einen anderen einfacheren Weg gibt oder man doch einfach nur die Logik wie Value() und LastValue() gesetzt werden ändern/repaieren sollte..
Daher wäre es natürlich schön wenn soviele ReGa-Interessierte Entwickler wie möglich hier beim Brainstorming mitmachen könnten bevor ich mich nun ans Werk mache
