Stromverbrauch und Kosten analysieren | ECMA Script

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
Benutzeravatar
xvs03
Beiträge: 11
Registriert: 28. Dez 2021 18:33

Stromverbrauch und Kosten analysieren | ECMA Script

Beitrag von xvs03 »

Hallo, ich wollte mal einen Beitrag zu einem für Mich brennenden Thema erstellen.
Die Stromkosten explodieren, weshalb ich mir ein Shelly 3EM Smartmeter in den Zählerschrank eingebaut habe und in mein openHAB eingebunden habe um mal ein Monitoring zu haben was so geht.
Nun möchte ich mit den „Rohdaten“ die mir über das 3EM bereitgestellt werden mir verschiedene Analysedaten über „Rules“ ermittelt/berechnet“ bereitstellen lassen.

Herausgekommen ist dann das (Die Preise sind fiktiv):
Layout.png
Ich habe den Ansatz gewählt mit dem „Total Zählerstand“ zu arbeiten um dann weiter mit ungebundenen Items meine Statistik zu erstellen.
Anmerkung: Der Stromverbrauch vom letzten Monat ist noch nicht vorhanden, weil ich darüber noch keine Daten habe. Die „Rules“ kann man aber nach Belieben für jeden Zeitraum skalieren. Projekt läuft seit 1. Juni.

Los geht’s. Die „live“ Verbräuche und Zählerstände stellt der 3EM eh schon bereit. Also Item mit Channel verlinken und fertig.
Damit die dargestellten Zahlen gut aussehen kann man noch ein Meta Data | State Description machen wenn die Einheiten nicht passen.
Für Stromverbrauch: %.3f kWh
Für Stromkosten: %.2f €

Vorher noch ein wichtiger Hinweis zum ECMA Scripting:
Die Item UID sollte vor dem abspeichern der Rule entweder leer sein zwischen den Hochkommas oder ein auch vorhandenes Item UID enthalten. Ich habe festgestellt, dass das JavaScript ( openhab-js) der Rule Übersichtsseite abstürzt oder sich in einer Schleife fängt und der Browser überlastet wird, sollte eine nicht vorhandene UID eingetragen sein. Sollte dies der Fall sein, müsst ihr die Rule löschen. Dabei ist Geduld gefragt, weil die WEB UI Seite Rules, auf Scroll und Klickbefehle nur mit ca. 30 Sekunden Verzögerung reagiert. War bei mir so Chrome,Firefox,Vivaldi. Um die Instanz braucht man sich keine Sorgen machen, die läuft normal weiter, ist wohl ein Frontendproblem. Am besten die UID´s die man benötigt in den Editor kopieren und von da aus in das Script einfügen, damit man nicht als die Seiten wechseln muss.

Stromverbrauch/Kosten „heute“, „gestern“ ab 0 Uhr: < zum testen kann man natürlich jede andere Zeit nehmen
1. Erstellen der Items mit Number Format.
2. Rule erstellen die um 0 Uhr jeden Tag eine Aktion durchführt (Cronjob) | für Monatsverbräuche entsprechend einmal im Monat eine weitere Rule
rule_0_uhr.png
3. ECMA Code der „Then“ Aktion die dann immer um 0 Uhr einmal durchlaufen soll

Code: Alles auswählen

/*
Durchführung einer Werteübertragung in nichtgebundene Items um 0 Uhr jeden Tag
Wichtig die Reihenfolge, damit nicht der Zähler zurückgesetzt oder upgedated wird, bevor die alten Werte übertragen wurden*/



/*  Step 1:
    Übertragung des kwh Tagesverbrauchs auf Item Verbrauch Gestern
    */

events.postUpdate('Gesamtverbrauch_gestern',itemRegistry.getItem('Gesamtverbrauch_kWh_heute').getState ());


/*  Step 2:
    Übertragung der kwh Tageskosten auf Item Kosten Gestern
    */

events.postUpdate('Stromkosten_Gestern_0',itemRegistry.getItem('Stromkosten_heute_0').getState ());


/*  Step 3:
    Nimmt täglich um 0 Uhr den Status des Items "Gesamtverbrauch_Kw_h" und überträgt es in das Item "Zaehlerstand_total_um_0_uhr" */

events.postUpdate('Zaehlerstand_total_um_0_uhr',itemRegistry.getItem('Gesamtverbrauch_Kw_h').getState ());
Wenn ich die Kommentare weglasse, sind das 3 Zeilen Code für die ganze Zahlenschieberei.

Jetzt habe ich die tatsächlichen Verbräuche/Zählerstände festgehalten/übertragen. Nun kann ich meinen Stromtarif darüberlegen und bekomme die Kosten angezeigt.

4. Rule erstellen die die Stromkosten aus meinen Verbrauchsdaten errechnet:
rule_kosten.png
5. ECMA Code der „Then“ Aktion die die Stromkosten für „heute“ live ausrechnet

Code: Alles auswählen

/* Stromtarif 1.6.22 - 31.5.23 bei XXX Strom AG

    Grundgebühr Monat: XX,XX €
    kWh Preis: XX,XX ct
    */

events.postUpdate('Stromkosten_heute_0', itemRegistry.getItem('Gesamtverbrauch_kWh_heute').getState () * 0.XXXX + 0.XX) ;

/* Die erste Zahl hinter dem * ist der kWh Preis (variable Kosten), die Zahl hinter dem + ist die Zählergrundgebühr auf einen Tag gebrochen (Fixkosten) */
Durch diese Rule bekommen wir einen „live“ wert der bei mir ca. jede Minute aktualisiert wird. Dieser wird ja dann um 0 Uhr mit in das „gestern“ Item übertragen.

Zum Schluss noch ein paar Erklärungen:
Ich habe mich bewusst gegen org.openhab.core.persistence.extensions.PersistenceExtensions , wie deltaSince() und MIDNIGHT() etc. entschieden, weil ich zum zum Stichtag meine Abrechnung haben möchte und nicht von jetzt now() um z.B. 30 zurückblicken möchte.
Ich habe mich gegen DSL Rules entschieden, weil ich den neuen ECMA Script Ansatz, auch in Verbindung mit Blocky einfach viel intuitiver finde. Aber muss jeder selbst wissen.
Ich würde Mich im Forum über mehr ECMA Rules Lösungen freuen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 13932
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Stromverbrauch und Kosten analysieren | ECMA Script

Beitrag von udo1toni »

Sehr hübsch.

Aber was was intuitiv betrifft, hätte ich mal eine Frage:
Warum soll

Code: Alles auswählen

events.postUpdate('Gesamtverbrauch_gestern',itemRegistry.getItem('Gesamtverbrauch_kWh_heute').getState ());
intuitiver sein als

Code: Alles auswählen

Gesamtverbrauch_gestern.postUpdate(Gesamtverbrauch_kWh_heute.state)
?

Bitte nicht als Angriff oder Versuch, Dich umzustimmen verstehen, nur, ich begreife nicht, was da nun intuitiver ist.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
xvs03
Beiträge: 11
Registriert: 28. Dez 2021 18:33

Re: Stromverbrauch und Kosten analysieren | ECMA Script

Beitrag von xvs03 »

Ja du hast Recht, in der Zeilenprogrammierung sind DSL und ECMA ähnlich.
Jetzt kann ich aber als jemand, der den ich sage mal "Anwendern der Zunkunft" zeigen möchte, wie schnell ich in Blocky, eine etwas aufwendigere Regeloperation einfach mit "Blöcken" zusammen ziehen kann, wie der Herr Mauch (YouTube) in Scratch, dann einfach umschalten kann und das Script sehe, nun mal nicht von DSL überzeugen.
Da ist ECMA bzw. Blocky meiner Meinung nach innovativer und intuitiver als DSL und ein klasse Ansatz.
Aber jeder wie er möchte.

Benutzeravatar
udo1toni
Beiträge: 13932
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Stromverbrauch und Kosten analysieren | ECMA Script

Beitrag von udo1toni »

Ja, wobei das nun daran liegt, dass Blockly ECMA Code erzeugt. Was auch der Grund ist, warum überhaupt ECMA an Bord ist. :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten