HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

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

HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von Baxxy » 22.04.2024, 17:18

Vorwort:
Seitdem der HmIP-ESI auf dem Markt ist gibt es für alle energiemessenden HmIP-Geräte die erweiterten Verbrauchszähler.
(Verbrauch heute / Verbrauch gestern / Verbrauch vergangene 7 Tage / Verbrauch vergangene 30 Tage)
Man bekommt sie indem man die (energiemessenden) HmIP-Geräte aus der Zentrale löscht und neu anlernt oder indem man >> meiner Anleitung << folgt.

Umgesetzt wird das auf der Zentrale über 2 systeminterne Programme (pro Mess-Kanal).
Das altbekannte 'prgXXXCounter' wurde etwas erweitert und ein neues 'prgSetEnergyValuesAtMidnight' kam hinzu.

Die erweiterten Verbrauchszähler sind recht nett, leider hat sich eQ-3 entschlossen die Daten nicht in Systemvariablen zu schreiben sondern diese als Metadaten an den jeweiligen Mess-Kanal zu hängen. Somit kommt man da erstmal nur mittels HM-Script ran.

Inzwischen kam in einem Thread der Wunsch auf diese erweiterten Verbrauchszähler (sowie den Zählerstand eines ESI-GAS) in Systemvariablen zu haben um diese z.B. in einer Visu anzeigen zu können. Man kann diese SysVar's dann natürlich auch als Trigger in WebUI-Programmen nutzen.

Also habe ich mich mal drangesetzt...
(und das beispielhaft für einen ESI-GAS umgesetzt)

Vorbereitung:
  • A: wir legen uns (bis zu) 5 Systemvariablen (Typ: Zahl) an die dann die 4 erweiterten Verbrauchszähler (und bei Bedarf den Zählerstand) beinhalten.
    Wie sie genannt werden ist egal, der Wertebereich sollte grob zum Inhalt passen. Die vergebenen Namen kopieren wir für später in eine Zwischenablage ('Notepad')
    Hier ein Entwurf:
    RM_Gaszähler_SysVars_Entwurf.JPG
Durchführung Teil 1:
  • B: wir speichern/notieren die Seriennummer vom ESI-GAS in eine Zwischenablage und merken/speichern uns auch die Kanalnummer vom Mess-Kanal. (:2 beim ESI-GAS)
  • C: wir gehen in die Programm-Übersicht, drücken unten auf den Button "systeminterne Programme einblenden" und filtern die Ansicht anschließend über den Namensfilter (oben links) mit der Seriennummer vom ESI-GAS. Es sollte(n) ein/oder mehrere Programme übrig bleiben, wir öffnen (bearbeiten) das Programm welches die korrekte Kanalnummer am Ende hat (:2 beim ESI-GAS)
  • D: wir "öffnen" das (im DANN) enthaltene Script und notieren uns als erstes die ID die in der ersten Zeile abgefragt wird. (Beispielhaft: 8396)
  • E: wir gehen zum Ende des Scripts und fügen folgende Zeilen (noch innerhalb der schließenden geschweiften Klammer) ein.

    Code: Alles auswählen

    object oOwnZaehlerstand_SysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Zählerstand");
    object oOwnVerbrauchHeuteSysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch heute");
     if (oOwnZaehlerstand_SysVar) { oOwnZaehlerstand_SysVar.State(sysVarVal + diffVal); }
     if (oOwnVerbrauchHeuteSysVar) { oOwnVerbrauchHeuteSysVar.State(energy0 + diffVal); } 
    Der Block muss dann so aussehen:

    Code: Alles auswählen

    if (tmp_devVal != 0) {oSysVarEnergyCounterOldVal.State(devVal);
    oSysVarEnergyCounter.State(sysVarVal + diffVal);
    ! Save todays energy consumption
    chn.MetaData('energy0',energy0 + diffVal);
    object oOwnZaehlerstand_SysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Zählerstand");
    object oOwnVerbrauchHeuteSysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch heute");
     if (oOwnZaehlerstand_SysVar) { oOwnZaehlerstand_SysVar.State(sysVarVal + diffVal); }
     if (oOwnVerbrauchHeuteSysVar) { oOwnVerbrauchHeuteSysVar.State(energy0 + diffVal); }
    }
    :!: Die Objektnamen müssen dann ggf. noch durch eure vergebenen SysVar-Namen ersetzt werden!
    Beispiel: Die SysVar für Verbrauch heute heißt "Mein heutiger Gasverbrauch", also muss die entsprechende Object-Zeile wie folgt aussehen:

    Code: Alles auswählen

    object oOwnVerbrauchHeuteSysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Mein heutiger Gasverbrauch");
    :!:
  • F: Wir schließen das Scriptfenster und anschließend das Programm mit "OK" und ab jetzt sollten die beiden SysVars (bei Aktualisierung des ESI) mit Daten gefüllt werden.
Durchführung Teil 2:
  • G: wir gehen wieder zu C, nur dieses mal nutzen wir als Namensfilter die ID aus D. Es sollte ein Programm übrig bleiben ('prgSetEnergyValuesAtMidnightID') was wir wieder öffnen (bearbeiten) und das darin enthaltenen Script bearbeiten.
  • H: Hier müssen nun folgende Zeilen nach der letzten schließenden geschweiften Klammer, aber vor dem Rest des Scriptes eingefügt werden:

    Code: Alles auswählen

    object oOwnVerbrauchHeuteSysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch heute");
    object oOwnVerbrauchGesternSysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch gestern");
    object oOwnVerbrauchLetzte7SysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch letzte 7 Tage");
    object oOwnVerbrauchLetzte30SysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch letzte 30 Tage");
    if (oOwnVerbrauchLetzte7SysVar) { oOwnVerbrauchLetzte7SysVar.State(energy7); }
    if (oOwnVerbrauchLetzte30SysVar) { oOwnVerbrauchLetzte30SysVar.State(energy30); }
    if (oOwnVerbrauchGesternSysVar) { oOwnVerbrauchGesternSysVar.State(energy0); }
    if (oOwnVerbrauchHeuteSysVar) { oOwnVerbrauchHeuteSysVar.State(0.0); }
    Der Block muss dann so aussehen:

    Code: Alles auswählen

    energy30 = energy30 + val;
    loop = loop +1;
    }
    object oOwnVerbrauchHeuteSysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch heute");
    object oOwnVerbrauchGesternSysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch gestern");
    object oOwnVerbrauchLetzte7SysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch letzte 7 Tage");
    object oOwnVerbrauchLetzte30SysVar = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("Gaszähler - Verbrauch letzte 30 Tage");
    if (oOwnVerbrauchLetzte7SysVar) { oOwnVerbrauchLetzte7SysVar.State(energy7); }
    if (oOwnVerbrauchLetzte30SysVar) { oOwnVerbrauchLetzte30SysVar.State(energy30); }
    if (oOwnVerbrauchGesternSysVar) { oOwnVerbrauchGesternSysVar.State(energy0); }
    if (oOwnVerbrauchHeuteSysVar) { oOwnVerbrauchHeuteSysVar.State(0.0); }
    chn.MetaData('energy7', energy7);
    chn.MetaData('energy30', energy30);
    ! Reset energy0 (today) - a new day begins
    chn.MetaData('energy0', 0.0);
    Auch hier müssen die Objektnamen ggf. noch durch eure vergebenen SysVar-Namen ersetzt werden!
  • I: Wir schließen das Scriptfenster und anschließend das Programm mit "OK". Nun sollten um 00:00 die3 SysVars mit den berechneten Daten gefüllt werden und die "Gaszähler - Verbrauch heute" auf 0.0 gesetzt werden.
Hinweise:
Das Beispiel ist jetzt für den ESI-GAS.
Grundsätzlich sollte das auch für den ESI-LED und ESI-IEC funktionieren, wobei man beim IEC die 'Zählerstand-SysVar' nicht bräuchte.
Für die altbekannten HmIP-Messaktoren (PSM/FSM/BSM/USBSM) sollte das auch nutzbar sein.

Da ich keinen ESI zum testen habe kann es sein das die Daten ggf. noch umgerechnet werden müssen. Da würde ich dann Anhand von Feedback die Scriptzeilen bei Bedarf aktualisieren.

Nur Systemvariablen die anhand ihres Namens gefunden werden, werden auch beschrieben. Man kann also problemlos SysVars die man nicht braucht weglassen. Der SysVar-Name und der Name des jeweiligen Objekts im Script muss übereinstimmen, ansonsten wird halt nichts gefüllt.

Auch wenn wir hier im "Keine Fragen" - Bereich sind darf natürlich nachgefragt und auch Feedback gegeben werden.

Viel Erfolg!

Dirk1962
Beiträge: 1
Registriert: 23.12.2018, 10:21

Re: HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von Dirk1962 » 17.05.2024, 11:08

Hallo Baxxy,

vielen Dank, dass Du Dich dem Thema angenommen hast und allen diese hervorragende Anleitung zur Verfügung gestellt hast.
Für den Gaszähler funktioniert sie einwandfrei.
Beim Stromzähler muss man aber bei "Durchführung Teil 1"etwas anders vorgehen.

B: wir speichern/notieren die Seriennummer vom ESI-Strom in eine Zwischenablage und merken/speichern uns auch die Kanalnummer vom Mess-Kanal. (:2 beim ESI-Strom)
C: wir gehen in die Programm-Übersicht, drücken unten auf den Button "systeminterne Programme einblenden" und filtern die Ansicht anschließend über den Namensfilter (oben links) mit der Seriennummer vom ESI-Strom. Es sollte(n) ein/oder mehrere Programme übrig bleiben, wir öffnen (bearbeiten) das Programm (prg_EnergyCounter_XXX) welches die korrekte Kanalnummer am Ende hat (:2 beim ESI-Strom)
D: wir "öffnen" das (im DANN) enthaltene Script und notieren uns als erstes die ID die in der ersten Zeile abgefragt wird. (Beispielhaft: 8396)
E: wir gehen zum Ende des Scripts und fügen folgende Zeilen (vor der letzten schließenden geschweiften Klammer) ein.

Der Rest ist wie von Dir beschrieben.

Viele Grüße
Dirk


FreakyDaddy
Beiträge: 11
Registriert: 20.09.2021, 17:20
System: CCU
Hat sich bedankt: 1 Mal

Re: HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von FreakyDaddy » 22.05.2024, 13:52

Baxxy vielen Dank...

Das Auslesen der Metadaten Heute, Gestern, 7Tage und 30Tage funktioniert super...
Ich habe das mit meinen HmIP-PSM und HmIP-FSM16 umgesetzt.

Für diejenigen, die die Metadaten dann auch mal zurücksetzen wollen, hier mein ganz einfaches Reset-Skript ("77997" ist die Kanal-ID des Gerätes):
Reset_Metadaten.JPG
Reset_Metadaten.JPG (11.92 KiB) 213 mal betrachtet
Nun habe ich aber noch eine Frage an die Experten.
Ich würde gerne die CCU-Zähler und die Geräte-Zähler meiner HmIP-PSM und HmIP-FSM16 per Skript zurücksetzen. Bisher bin ich da leider erfolglos...
Ich weiß, dass man den CCU-Zähler manuell in der WebUI z.B. auf "0.0" setzen kann und dass man den Geräte Zähler durch stromlos schalten manuell zurücksetzen kann. Aber die Geräte sind teils schwer zugänglich verbaut und ich würde diese gerne bei Bedarf per Skript zurücksetzen wollen.
Hier ein Screenshot aus der WebUI, damit klar ist, welche Werte ich meine:
Zaehler.JPG
Wenn jemand eine Idee und am besten noch eine Lösung hätte, würde ich mich sehr darüber freuen...
Vielen Dank!

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

Re: HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von Baxxy » 22.05.2024, 17:58

FreakyDaddy hat geschrieben:
22.05.2024, 13:52
Ich würde gerne die [...] Geräte-Zähler meiner HmIP-PSM und HmIP-FSM16 per Skript zurücksetzen. Bisher bin ich da leider erfolglos...
Das wirst du auch bleiben da der Gerätezähler einzig durch Spannungsverlust (und auch wenn der Wert "überlauft") genullt wird.
Andere Methoden sind bisher nicht bekannt.
FreakyDaddy hat geschrieben:
22.05.2024, 13:52
Ich würde gerne die CCU-Zähler [...] meiner HmIP-PSM und HmIP-FSM16 per Skript zurücksetzen. Bisher bin ich da leider erfolglos...
Das muss nicht so bleiben. Die CCU-Zähler sind nur systeminterne Systemvariablen. Deren Namen findest du in den jeweiligen "Counter"-Programmen/Scripten.

Code: Alles auswählen

object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_24054_000B98A9AB90C2:5'); 
Damit kannst du dann mittels Script alles damit machen was du möchtest. :wink:

FreakyDaddy
Beiträge: 11
Registriert: 20.09.2021, 17:20
System: CCU
Hat sich bedankt: 1 Mal

Re: HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von FreakyDaddy » 22.05.2024, 18:08

Das mit dem CCU Zähler geht... DANKE!

Ich hatte aber gehofft, dass ich den Gerätezähler auch per Skript zurücksetzen kann, ohne ihn spannungslos zu machen.

Ist halt in der WebUI mein "innerer Monk" der den auch zurücksetzen möchte. :-)

FreakyDaddy
Beiträge: 11
Registriert: 20.09.2021, 17:20
System: CCU
Hat sich bedankt: 1 Mal

Re: HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von FreakyDaddy » 24.05.2024, 11:02

@Baxxy: Ich dachte, es würde mit deinem Ansatz funktionieren.

Aber das Problem tritt immer nur spontan auf und es ging einige Tage tadellos. Bis vor etwa einer Stunde... :-/

Vielleicht noch kurz vorab:
In diesem konkreten Fall betrifft es den HmIP-FSM16 (Strommesser-Unterputz), um die Einspeisung unserer Photovoltaikanlage (Balkonkraftwerk bis 800W) zu monitoren.

Also der CCU-Energiezähler (vorgestern auf "0" gesetzt) sowie auch der Wert von "Verbrauch Heute" waren bis vor etwa einer Stunde plausibel bei etwa 0,8kWh. Der Wert "Verbrauch Gestern" stimmt auch zu 99,5% mit dem Wert aus dem Wechselrichter der Photovoltaikanlage überein.
Und irgendwann plötzlich springt der CCU-Energiezähler auf einen Wert, der um etwa 372kWh höher ist. Und der Wert von "Verbrauch Heute" ist dann plötzlich auch etwa 372kWh höher.
Wann genau und warum die Zähler sporadisch um einen so großen Wert zu hoch springen, erklärt sich mir bis heute nicht.

Vielleicht hat ja jemand noch Ideen an der Stelle.

Deswegen hier mal alles, was ich dazu von mir aus liefern kann:

Geräte Einstellungen:
In den Geräte Einstellungen des HmIP-FSM16 habe ich eigentlich nicht viel verändert, nur die Geräte-LED ausgeschaltet (Ch1) und den Modus in "Einspeisemodus" (Ch5) umgestellt. Ich bin mir aber nicht sicher, welchen Einfluss die Einstellungen aus dem Messwertkanal (ch5) auf Fehlmessungen haben.
Hier die Einstellungen des Gerätes:
HmIP-FSM16_Ch0-1.JPG
HmIP-FSM16_Ch2-4.JPG
HmIP-FSM16_Ch5-6.JPG
CCU-Programm:
Hier mein CCU-Programm (systeminternes Programm), welches zu diesem Gerät gehört. Aus meiner Sicht ist das alles richtig, weil das ja vom System erstellt wurde. Oder sollte hier die Bedingung anders sein?
CCU3_Programm.JPG
Skript:
Hier noch das zugehörige Skript, welches ja vom System erstellt wurde. Hier habe ich am Ende nur von Baxxy die Ergänzung reinkopiert, um die einzelnen Werte in Systemvariablen zu schreiben:
CCU3_PV-Skript.txt
(1.88 KiB) 7-mal heruntergeladen
Das XXX_Midnight_XXX Programm/ Skript kann ich ausschließen, dass hier etwas falsch ist, weil dieses ja nur einmalig jeweils um Mitternacht ausgeführt wird und Zähler-Fehler immer nur tagsüber auftritt.

Hier noch den aktuellen Status des Gerätes aus der WebUI, wo die Werte auch alle zu sehen sind:
WebUI-CCU3_HmIP-FSM16.JPG
Einzige gefühlte Vermutung ist, dass dieser Zähler-Fehler nur auftritt, wenn die Photovoltaikanlage mehr als 500W erzeugt. Aber auch dann trotzdem nur sporadisch und zufällig.
Es kann mal einige Tage korrekt funktionieren und dann gibt es auch Tage, wo das häufiger am Tag passiert.

Ich verzweifle leider mittlerweile etwas daran. Aber vielleicht hat ja hier noch jemand eine glänzende Idee...

Vielen Dank schon mal im Vorraus...


FreakyDaddy
Beiträge: 11
Registriert: 20.09.2021, 17:20
System: CCU
Hat sich bedankt: 1 Mal

Re: HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von FreakyDaddy » 24.05.2024, 11:59

Das ist vermutlich die einzige Möglichkeit...

Aber das geht über meine Fähigkeiten glaub ich hinaus... Oder werden sowieso irgendwo logs geschrieben, die ich einfach auslesen kann?

Ich könnte zur Sicherheit auch nochmal das Gerät komplett abmelden, auf Werkseinstellungen zurücksetzen und neu anlernen. Und dann nur auf "Einsepisemodus" umstellen, das Einschaltverhalten bei Spannungszufuhr auf EIN umstellen und dann beobachten, wie sich das Gerät verhält. Also wenigstens über eine Woche nur in der WebUI beobachten.

Erst danach würde ich die Ergänzungen ggf. wieder ins Skript einbauen.

Sollte der Fehler aber immer noch existieren, weiß ich natürlich immer noch nicht, ob es vom Energy-Counter oder vom "systemerstellten Skript" kommt.

Den Reset könnte ich sicherlich in den nächsten Tagen dann mal machen...

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

Re: HowTo - erweiterte CCU3/RM Verbrauchszähler (heute/gestern/letzte 7 Tage/letzte 30 Tage) in eigene SysVars schreiben

Beitrag von Baxxy » 24.05.2024, 12:32

FreakyDaddy hat geschrieben:
24.05.2024, 11:59
Ich könnte zur Sicherheit auch nochmal das Gerät komplett abmelden...
Kannst du machen. Dabei werden ja dann wieder die original Programme/Scripte angelegt.
Meine "SysVar-Erweiterung" hat aber keinen Einfluss auf die Funktion des Original-Scriptes da diese erst "an der Reihe ist" wenn das Original schon durch ist.
FreakyDaddy hat geschrieben:
24.05.2024, 11:59
Oder werden sowieso irgendwo logs geschrieben,
Erstmal nicht. Man kann aber die Kanäle protokollieren und sieht das dann im Systemprotokoll.
Da mir das zu viele Daten sind mach mal im Script testen:

Code: Alles auswählen

dom.GetObject('HmIP-RF.000B9F29A27A2E:5.ENERGY_COUNTER').DPArchive(true);
Damit wird nur der ENERGY_COUNTER Datenpunkt protokolliert. Wenn du den FSM kurz stromlos machst wird der ENERGY_COUNTER auf "0" gesetzt.
Das macht dann die Auswertung leichter.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“