Hi Leute,
so wie einige von euch stand ich auch vor der Aufgabe, die Impulse eines S0-Stromzählers auszuwerten und Statistiken und Diagramme heraus zu bekommen.
Nachdem ich hier im Forum zwar einige Ansätze aber keine wirklichen Lösungen für die Berechnung von z.B. "Wieviel kWh wurden heute schon verbraucht?" gefunden hab, dachte ich mir, ich poste mal hier meine Lösung, vielleicht hilft sie dem einen oder anderen.
Als erstes hab ich mir Items definiert, die mir die Minuten seit Mitternacht berechnen und bereit stellen (das zweite ist zum Komfort schon ein fertig formatierter String für .db() Abfragen, z.B. '30i' = 30 Minuten):
Für meine Wärmepumpe, die an dem Stromzähler dran hängt, hab ich dann zwei weitere Items, wobei in das "Impuls" Item direkt die Impulse des S0-Zählers reinkommen und das "Gesamt" Item den Gesamt-kWh-Stand aufnimmt. Ein Watch auf das Impuls-Item ruft eine externe Logik auf, welche den kWh Stand erhöht:
Die aktuelle Leistung berechne ich näherungsweise (wie auch andere hier im Forum) über die Zeitabstände zwischen den Impulsen. Durch den autotimer Eintrag wird die Leistung auf 0 zurückgesetzt, wenn länger als 1 Minute kein Impuls mehr kommt:
So, und hier jetzt noch die eigentlich interessanten Berechnungen der verbrauchten kWh heute, gestern und vorgestern. Mit ein paar Änderungen kann man sicher schnell auch "diese Woche", "letztes Monat" etc. machen.
Hoffe, es hilft jemandem. 
LG Stefan
so wie einige von euch stand ich auch vor der Aufgabe, die Impulse eines S0-Stromzählers auszuwerten und Statistiken und Diagramme heraus zu bekommen.
Nachdem ich hier im Forum zwar einige Ansätze aber keine wirklichen Lösungen für die Berechnung von z.B. "Wieviel kWh wurden heute schon verbraucht?" gefunden hab, dachte ich mir, ich poste mal hier meine Lösung, vielleicht hilft sie dem einen oder anderen.
Als erstes hab ich mir Items definiert, die mir die Minuten seit Mitternacht berechnen und bereit stellen (das zweite ist zum Komfort schon ein fertig formatierter String für .db() Abfragen, z.B. '30i' = 30 Minuten):
Code:
[zeit] [[minutenseitmitternacht]] type = num enforce_updates = yes crontab = init | * * * * = 1 eval = int(((sh.now() - sh.now().replace(hour=0, minute=0, second=0, microsecond=0)).total_seconds()) // 60) [[[dbstr]]] type = str cache = on eval_trigger = zeit.minutenseitmitternacht eval = str(sh.zeit.minutenseitmitternacht()) + 'i'
Code:
sh.waermepumpe.verbrauch.gesamt(sh.waermepumpe.verbrauch.gesamt() + 0.01)
Code:
[[[aktuell]]] knx_dpt = 14 type = num sqlite = yes eval = 0 if int(value) == 0 else max(36 / sh.waermepumpe.verbrauch.gesamt.prev_age(), 0) eval_trigger = waermepumpe.verbrauch.gesamt autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW) enforce_updates=yes cache = on
Code:
[[[heute]]] knx_dpt = 14 type = num sqlite = yes cache = on crontab = * * * * = 1 eval = sh.waermepumpe.verbrauch.gesamt() - sh.waermepumpe.verbrauch.gesamt.db('max', sh.zeit.minutenseitmitternacht.dbstr(), sh.zeit.minutenseitmitternacht.dbstr()) eval_trigger = waermepumpe.verbrauch.gesamt [[[gestern]]] knx_dpt = 14 type = num sqlite = yes cache = on crontab = 0 0 * * = 1 eval = sh.waermepumpe.verbrauch.gesamt() - sh.waermepumpe.verbrauch.gesamt.db('max', '1d','1d') [[[vorgestern]]] knx_dpt = 14 type = num sqlite = yes cache = on crontab = 0 0 * * = 1 eval = sh.waermepumpe.verbrauch.gesamt.db('max', '1d', '1d') - sh.waermepumpe.verbrauch.gesamt.db('max', '2d','2d')

LG Stefan
Kommentar