SmartMeter in OpenHab

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

Moderatoren: Cyrelian, seppy

Daniel1Wilhelm
Beiträge: 5
Registriert: 10. Nov 2023 10:06
Answers: 0

SmartMeter in OpenHab

Beitrag von Daniel1Wilhelm »

Guten Tag,

ich habe in meinem Haus ein SmartMeter am Stromzähler installiert, dass mir kontinuierlich (also bei jeglicher Änderung) folgende Werte liefert, die auch in OH persistiert werden

Gesamtenergieverbrauch in kWh
Momentanverbrauch aller Phasen in W
Momentanverbrauch der einzelnen Phasen in W

Nun möchte ich mehr oder weniger eine Berechnung der entsprechenden Werte auf Tages / Wochen / Monat und Jahresverbrauch machen.

Mit dem Gesamtenergieverbrauch hab ich das schon hinbekommen, da es ja genug Beispiele gab, um die Gesamtenergie entsprechend der Intervalle zu berechnen.

Jetzt würde ich das gleiche gerne mit dem Verbrauch der einzelnen Phasen machen, finde aber hierfür keinen Anhaltspunkt um das zu berechnen...

Theoretisch sollte es einfach sein, da diese Werte kontinuierlich aufgezeichnet werden... Sie müssten dann nur auf 24h hochgerechnet bzw. addiert werden und beim Tages / Wochen / Monatswechsel entsprechend genullt werden.

Vielleicht hat ja jemand eine Idee...


Gruß Daniel

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

Re: SmartMeter in OpenHab

Beitrag von udo1toni »

Herzlich willkommen im openHAB Forum!

Warum willst Du denn da überhaupt rechnen? Dafür gibt es doch die Persistence!

Für den Momentanverbrauch ist es allerdings nicht sinnvoll, Summen oder Differenzen zu bilden, stattdessen benötigst Du den Mittelwert. Wenn die Werte persistiert werden, sollte eine Abfrage á la

Code: Alles auswählen

Momentanverbrauch.averageSince(Startzeitpunkt,"persistenceservice")
ausreichen. Startzeitpunkt wäre dann z.B. now.with(LocalTime.MIDNIGHT) oder auch now.with(firstDayOfMonth).with(LocalTime.MIDNIGHT).
Wahlweise kann man auch

Code: Alles auswählen

Momentanverbrauch.averageBetween(Startzeitpunkt,Endzeitpunkt,"persistenceservice")
nutzen, um beliebige Zeiträume zu messen.
Das gleiche geht für den Zählerstand (kWh) mit deltaSince bzw. deltaBetween, hier wird dann die Differenz gebildet.
Für den Momentanverbrauch könnten auch noch minimumSince und maximumSince interesant sein (auch diese gibt es in der Between-Variante).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Daniel1Wilhelm
Beiträge: 5
Registriert: 10. Nov 2023 10:06
Answers: 0

Re: SmartMeter in OpenHab

Beitrag von Daniel1Wilhelm »

Eigentlich geht es mir darum, zu ermitteln welche Phase über den Tag hinweg den meisten Verbrauch hat, da ich ein Balkonkraftwerk ohne Speicher installieren will.
Dieses soll dann an die entsprechende Phase geklemmt werden.

Danke schonmal für die Antwort vorher, dass bringt mich schon ein wenig weiter.

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: SmartMeter in OpenHab

Beitrag von nw378 »

Es sollte eigentlich egal sein, an welche Phase das BKW angeschlossen wird.

Spätestens wenn Du das BKW beim Netzbetreiber ameldest, tauschen die Dir ganz flink deinen Zähler aus, damit der nicht rückwärts läuft.
Die allermeisten (alle?) neuen Zähler (vllt. auch schon dein vorhandener) arbeiten saldierend, das heißt, die einzelnen Phasen werden gegeneinander verrechnet.

Also, auch wenn der BKW Strom eingespeist wird, und du auf einer anderen Phase Strom aus dem Netz beziehst, wird dies gegeneinander verrechnet.

siehe auch: https://machdeinenstrom.de/welchen-stro ... kraftwerk/
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

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

Re: SmartMeter in OpenHab

Beitrag von udo1toni »

Tatsächlich sollte der Anschluss keinen Einfluss auf die Stromrechnung haben, weil die Zähler des EVU saldierend zählen müssen (also eingespeister Strom auf z.B. Phase 1 muss vom bezogenen Strom aus Phase 2 und 3 abgezogen werden).
Technisch ist es natürlich sinnvoll, die Anlage tatsächlich dort einspeisen zu lassen, wo auch der Strombedarf herrscht.

Wie gesagt, es gibt für den maximalen Bezug maximumSince. averageSince solltest Du aber auch nicht außer Acht lassen. Die mittlere Abweichung (deviationSince) wäre in dem Zusammenhang vermutlich ebenfalls interessant.

Die möglichen Abfragen:

minimum -> Minimum
maximum -> Maximum
deviation -> mittlere Abweichung
evolution -> Entwicklung

Since -> seit Zeitpunkt x bis jetzt
Between -> zwischen Zeitpunkt x und Zeitpunkt y

Die Werte werden zeitlich gewichtet, das möchte man nicht zu Fuß erledigen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Daniel1Wilhelm
Beiträge: 5
Registriert: 10. Nov 2023 10:06
Answers: 0

Re: SmartMeter in OpenHab

Beitrag von Daniel1Wilhelm »

Vielen Dank... werde das gleich mal probieren

Daniel1Wilhelm
Beiträge: 5
Registriert: 10. Nov 2023 10:06
Answers: 0

Re: SmartMeter in OpenHab

Beitrag von Daniel1Wilhelm »

udo1toni hat geschrieben: 10. Nov 2023 22:34 Herzlich willkommen im openHAB Forum!

Warum willst Du denn da überhaupt rechnen? Dafür gibt es doch die Persistence!

Für den Momentanverbrauch ist es allerdings nicht sinnvoll, Summen oder Differenzen zu bilden, stattdessen benötigst Du den Mittelwert. Wenn die Werte persistiert werden, sollte eine Abfrage á la

Code: Alles auswählen

Momentanverbrauch.averageSince(Startzeitpunkt,"persistenceservice")
ausreichen. Startzeitpunkt wäre dann z.B. now.with(LocalTime.MIDNIGHT) oder auch now.with(firstDayOfMonth).with(LocalTime.MIDNIGHT).
Wahlweise kann man auch

Code: Alles auswählen

Momentanverbrauch.averageBetween(Startzeitpunkt,Endzeitpunkt,"persistenceservice")
nutzen, um beliebige Zeiträume zu messen.
Das gleiche geht für den Zählerstand (kWh) mit deltaSince bzw. deltaBetween, hier wird dann die Differenz gebildet.
Für den Momentanverbrauch könnten auch noch minimumSince und maximumSince interesant sein (auch diese gibt es in der Between-Variante).
Hört sich jetzt vielleicht wie ein Anfänger an ;-)....

weiße ich das jetzt in einer Rule oder direkt per Item zu?

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

Re: SmartMeter in OpenHab

Beitrag von udo1toni »

Die "alte" Art das zu erledigen ist tatsächlich über zusätzliche Items und Rules, die den Items die entsprechenden Werte zuweisen.

Ich bin mit der Main UI bzw. deren Widgets noch nicht so vertraut, man kann dort aber auch sehr tiefgreifende Manipulationen mit Code vornehmen, sprich, eventuell könnte man auch direkt Widgets programmieren, welche die Werte dann darstellen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.2, LXC), mit openHABian eingerichtet

Daniel1Wilhelm
Beiträge: 5
Registriert: 10. Nov 2023 10:06
Answers: 0

Re: SmartMeter in OpenHab

Beitrag von Daniel1Wilhelm »

Also das mit den Durchschnittsverbräuchen der einzelnen Phasen läuft jetzt wunderbar.

Jetzt hab ich nur noch ein Problem...

Es geht um die Gesamtverbräuche, aufgeschlüsselt nach Tag, Woche, Monat und Jahr...
Dazu gab es ja im Forum einige Beispiele.
Das mit dem Verbrauch pro Tag funktioniert einwandfrei, nur bei den Werten für Woche, Monat und Jahr gibt er derzeit als Ergebnis immer NULL aus.
Nach meinem Verständnis nach sollte er aber zumindest ein paar Werte ausspucken, zumindest seit dem der Grundwert persistiert ist.

Vielleicht kommt er auch nicht mit den grundlegenden Startwerten bzw. Auswertezeiträumen klar....

Ich poste mal anbei die entsprechende Rule...

Code: Alles auswählen

rule "Stromverbrauch Tag/Woche/Monat/Jahr"

when

    Time cron " 0/5 * * ? * * * "  //alle 5 sec.
   
then
    
    val  ZonedDateTime 	zdt = ZonedDateTime.now()
    val  dayOfWeek = (ZonedDateTime.now.with(LocalTime.of(0,0,0,0)).getDayOfWeek.getValue)
    
    var  ZonedDateTime 	start_of_day = zdt.toLocalDate().atStartOfDay(zdt.getZone())                        //Startpunkt Tagesverbrauch
    var  ZonedDateTime 	start_of_week2 = zdt.minusDays(7)(zdt.getZone())                                    //Startpunkt Wochenverbrauch Variante 1
    var  ZonedDateTime 	start_of_week = zdt.minusDays(dayOfWeek -1)(zdt.getZone())                          //Startpunkt Wochenverbrauch Variante 2
    var  ZonedDateTime 	start_of_month = zdt.withDayOfMonth(1).toLocalDate().atStartOfDay(zdt.getZone())    //Startpunkt Monatsverbrauch
    var  ZonedDateTime 	start_of_year = zdt.withDayOfYear(332).toLocalDate().atStartOfDay(zdt.getZone())    //Startpunkt Jahresverbrauch

    var strom_Heute = KEZaehlerTotal.deltaSince(start_of_day) as Number             //Gesamtverbrauch pro Tag, Rücksetzung um Mitternach --> funktioniert
    var strom_Woche = KEZaehlerTotal.deltaSince(start_of_week) as Number            // --> funktioniert nicht
    var strom_Woche2 = KEZaehlerTotal.deltaSince(start_of_week2) as Number          // --> funktioniert nicht
    var strom_Monat = KEZaehlerTotal.deltaSince(start_of_month) as Number           // --> funktioniert nicht
    var strom_Jahr = KEZaehlerTotal.deltaSince(start_of_year) as Number             // --> funktioniert nicht

    var StromL1 = KEZaehlerCL1.averageSince(now.with(LocalTime.MIDNIGHT),"rrd4j")   //Durchschnittsverbrauch der einzelnen Phasen --> funktioniert
    var StromL2 = KEZaehlerCL2.averageSince(now.with(LocalTime.MIDNIGHT),"rrd4j")   //Durchschnittsverbrauch der einzelnen Phasen --> funktioniert
    var StromL3 = KEZaehlerCL3.averageSince(now.with(LocalTime.MIDNIGHT),"rrd4j")   //Durchschnittsverbrauch der einzelnen Phasen --> funktioniert

    postUpdate(StromVerbrauchHeute, strom_Heute)        // --> funktioniert
    
    postUpdate(StromVerbrauchWoche, strom_Woche)        // --> Ergebnis NULL
    postUpdate(StromVerbrauchWoche2, strom_Woche2)      // --> Ergebnis NULL
    postUpdate(StromVerbrauchMonat, strom_Monat)        // --> Ergebnis NULL
    postUpdate(StromVerbrauchJahr,  strom_Jahr)         // --> Ergebnis NULL

    postUpdate(DurchschnittL1,  StromL1)                // --> funktioniert
    postUpdate(DurchschnittL2,  StromL2)                // --> funktioniert
    postUpdate(DurchschnittL3,  StromL3)                // --> funktioniert

end
Bei der Berechnung des Durchschnittverbrauches der einzelnen Phasen sieht es auch irgendwie viel einfacher aus... (Danke an udo1toni)

Vielen Dank

Gruß Daniel

nw378
Beiträge: 199
Registriert: 22. Sep 2018 10:38
Answers: 4

Re: SmartMeter in OpenHab

Beitrag von nw378 »

Wie lange fütterst du denn schon deine Datenbank?

Wenn da noch keine Daten vorliegen, ist es klar, dass ein NULL folgt.
openHAB 4.1.0 @ RPi 4 / SSD - InfluxDB2 und Grafana @ Synology Docker - KNX

Antworten