Zeit zwischen Statusänderung berechnen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
MGK
Beiträge: 14
Registriert: 19.09.2017, 07:05
Danksagung erhalten: 1 Mal

Zeit zwischen Statusänderung berechnen

Beitrag von MGK » 10.05.2022, 11:41

Hallo in die Runde,

da mein Stromzähler "Itron ACE3000 Typ 260" leider nur den aktuellen Zählerstand in 0,1kWh Schritten an den IEC Sensor sendet, würde ich gerne die ungefähre aktuelle Leistung anhand der Statusänderungen vom Zählerstand berechnen.
Meine geplante Rechung wäre 360000 durch die Zeit zwischen der Statusänderung (in Sekunden) zu rechnen.
Hier mal ein paar Beispiele, anhand von meinen Daten:
10684,6 kWh 06:45:36 -> 10684,7 kWh 07:20:07 = 34:31 = 2071s -> 360000 / 2071 = 173,3 W/h
10684,7 kWh 07:20:07 -> 10684,8 kWh 08:03:17 = 43:10 = 2590s -> 360000 / 2590 = 139 W/h
10684,8 kWh 08:03:17 -> 10684,9 kWh 09:00:49 = 56:43 = 3452s -> 360000 / 3452 = 104,3 W/h

Hier ein Log von den Daten:
01.PNG
Soweit nun zu Theorie.
Hat einer von Euch eine Idee wie man sowas per Script programmieren könnte?
Die Werte von Timestamp und LastDPActionTime stimmen leider nicht mit den Statusänderungszeiten überein, diese zeigen nur die letzte Aktualisierung an.
Richtig schön wäre es, wenn auch nur die Zähleränderung um 0,1 ausgewertet würde, da der Stromzähler gelegenlich auch mal 0 bzw. Blödsinn sendet.

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Zeit zwischen Statusänderung berechnen

Beitrag von Tyfys » 10.05.2022, 20:44

MGK hat geschrieben:
10.05.2022, 11:41
10684,8 kWh 08:03:17 -> 10684,9 kWh 09:00:49 = 56:43 = 3452s -> 360000 / 3452 = 104,3 W/h
Ich hab mal Deinen so beschriebenen Gedankenweg in HM-Script übertragen:
(je nach dem wie die Daten tatsächlich vorliegen muss noch etwas fine tuning gemacht werden )

Code: Alles auswählen

!angenommen, Daten liegen so vor
string zeit_alt = "08:03:17";
string zeit_akt = "09:00:49";
string S_kWh_alt = "10684,8";
string S_kWh_akt = "10684,9";

!umwandeln in Zahl
real kWh_alt = S_kWh_alt.Replace(",", ".").ToFloat();
real kWh_akt = S_kWh_akt.Replace(",", ".").ToFloat();

!Zeitdifferenz in Sekunden
integer sek_dif = (zeit_akt.ToTime() - zeit_alt.ToTime()).ToInteger();

!berechnen wenn Zähleränderung um 0,1 
! dazu alles um Faktor 10 erhöhen
if (((kWh_akt * 10) - (kWh_alt * 10)) == 1.0)
{
    WriteLine(sek_dif);
    var Wh = (360000.000 / sek_dif).ToString(1);
    WriteLine(Wh);
    WriteLine(Wh.Type());
    !oder zum weiterrechnen
    real Wh = (360000.000 / sek_dif).ToString(1).ToFloat();
    WriteLine(Wh);
    WriteLine(Wh.Type());

}
Vielleicht hilft es Dir weiter.
Gruß
Harry

Benutzeravatar
Baxxy
Beiträge: 10779
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2205 Mal

Re: Zeit zwischen Statusänderung berechnen

Beitrag von Baxxy » 11.05.2022, 17:14

Hmm, normalerweise sendet der HM-ES-TX-WM (ist es doch, oder?) seine Werte immer im ~3 Minuten Raster.
Zumindest mach das meiner (FW: 1.2) mit ES-LED so.
Kann natürlich sein das der mit FW: 2.5 und ES-IEC nichts sendet wenn keine Änderung stattfand. Oder aber influx speichert nur geänderte Werte.
Ich würde das erstmal mittels Protokollierung über die WebUI prüfen.

Dein Vorhaben ist zwar nicht unmöglich, aber schwierig umzusetzen.
Normalerweise rechnet man ja von einer Sendung zur nächsten.
Die geringe Auflösung (0,1kWh) gepaart mit der geringen Leistung aus dem Beispiel (104.3 - 173.3 W/h) führt aber dazu das sich der Verbrauch (von einer Sendung zur nächsten) manchmal nicht ändert. Das Ergebnis wäre 0.0 W/h, braucht also erst gar nicht berechnet werden.

Die WebUI (oder besser die ReGa) hat aber maximal 2 Werte eines Datenpunktes parat. Den aktuellen Wert ( .Value() ) und den vorherigen Wert ( .LastValue() ). Will man mit "älteren Werten" rechnen muss man diese in SysVars zwischenspeichern.

Um auch für Reboots gewappnet zu sein müsste man also Wert und Zeitstempel in eine SysVar schreiben.
Bei Aktualisierung dann zuerst prüfen ob sich der Wert verändert hat.
Wenn nein --> nichts tun
Wenn ja --> Berechnungen wie von @Tyfys gezeigt durchführen, dann neuen Wert und neuen Zeitstempel wieder in die SysVar schreiben.

Mir wäre das viel zu ungenau um den Aufwand zu betreiben. :wink:

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“