Also, gegeben ist ein Balkonkraftwerk dessen Leistung ich mit einem Shelly Plug S messe.
Ich weiß auch den Wechselrichter kann man mit teurem Zubehör z.B. Gatewaystick auslesen. Brauch ich aber nicht, weil der Shelly völlig ausreicht.
Ich möchte nun mit dem Shelly einen kwh Zähler im OH erstellen, der sich nie automatisch zurücksetzt also remanent ist. Der Shelly Plug S hat gegenüber dem 3EM nur einen kWh Zähler, der sich jedoch bei Stromausfall oder Neustart zurücksetzt.
Ich habe nun folgende Items erstellt:
„Einspeisung 1Min Schnitt“ wird aus dem Shelly Channel erzeugt, ebenso wie „Einspeisung ab Neustart [kWh]“. „Einspeisung_TOTAL [kWh]“ ist mein Endloszähler.
Rule im EMCA Script:
Der Code sollte durch die Kommentare selbsterklärend sein .
Code:
Code: Alles auswählen
/*
Ermitteln eines remanenten Totalzählerstandes (Shelly Plug S):
Der bestehende Zählerstand wird durch den neuen minütlichen Durchnittsverbrauch den der Shelly im Channel liefert, aufsummiert.
Das Item 'Einspeisung_TOTAL_kWh' ist der TOTAL kWh Zähler der sich nicht resettet, weil OH verwaltet.
Info: Reset des Zählers mit einer zweiten Rule und z.B. betätigen eines Switches. Item 'Einspeisung_TOTAL_kWh' mit sich selbst mal 0 nehmen.
*/
var eT = itemRegistry.getItem('Einspeisung_TOTAL_kWh').getState () ; // TOTAL kWh Zähler OH verwaltet (ungebunden)
var e1M = itemRegistry.getItem('Einspeisung_1Min_Schnitt').getState () ; // Channelwert vom Shelly (Wattverbrauch im 1 Min Durchschnitt)
var t1M = 0.016666667 ; // Dezimalwert von einer Minute für die kWh Berechnung = 1/60stel Stunde
// Step 1
var kWh = (e1M * t1M)/1000 ; // Berechnung nach der allgemeinen kWh Formel
// Step 2
events.postUpdate('Einspeisung_TOTAL_kWh', kWh + eT) ; // Poste das Ergebnis der kWh Formel an das Item 'Einspeisung_TOTAL_kWh' und rechne den alten 'Einspeisung_TOTAL_kWh' Wert noch dazu.
// Der Shelly postet einmal pro Minute den Schnittwert, d.h. die Rule wird durch die Triggerbedingung einmal pro Min. gestartet.
Ich wäre natürlich dankbar, wenn hier jemand noch eine andere Idee hat wie man ein Item einmal im Leben mit dem Wert 0 initialisiert. Komisch, wenn man es mit „number“ deklariert, dass nicht automatisch als Initialwert eine 0 hineingeschrieben wird.
Meine initialisieren Lösung war vielleicht ein bisschen unprofessionell, aber hat halt funktioniert. Der Zähler wird persistiert und regelmäßig gesichert.