Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

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

Moderatoren: Cyrelian, seppy

Antworten
Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von peter-pan »

Das ist genau, was weiter oben beschrieben wurde. Udo hat das schön strukturiert.

Code: Alles auswählen

rule "Stromverbrauch Tag Woche Monat Jahr"                                                              // Deutscher Zeichensatz zulässig
when
    Item Heizung_Zaehlerstand_errechnet changed                                                         // changed reicht.
then
    val ZonedDateTime zdt            = ZonedDateTime.now()                                              // jetzt
    val ZonedDateTime start_of_day   = zdt.with(LocalTime.MIDNIGHT)                                     // heute, Mitternacht
    val ZonedDateTime start_of_week  = start_of_day.minusDays(start_of_day.getDayOfWeek.getValue - 1)   // Montag 
    val ZonedDateTime start_of_month = start_of_day.withDayOfMonth(13)                                   // Erster Tag des Monats (1)
    val ZonedDateTime start_of_year  = start_of_day.withDayOfYear(286)                                    // Erster Tag des Jahres (1)

    val strom_Heute = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_day)   as Number).floatValue
    val strom_Woche = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_week)  as Number).floatValue
    val strom_Monat = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_month) as Number).floatValue
    val strom_Jahr  = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_year)  as Number).floatValue

    Heizung_Verbrauch_Tag.postUpdate(strom_Heute)
    Heizung_Verbrauch_Woche.postUpdate(strom_Woche)
    Heizung_Verbrauch_Monat.postUpdate(strom_Monat)
    Heizung_Verbrauch_Jahr.postUpdate(strom_Jahr)
end
Du musst nur Heizung_Zaehlerstand_errechnet durch heatQuellen_consumption ersetzen.

Edit: Für die Fortschreibung deiner Ergebnisse musst du natürlich noch die Verbrauchswerte für Tag, Woche, Monat und Jahr anlegen.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

oh73
Beiträge: 285
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von oh73 »

ich lese hir zwar immer mit,in der Hoffnung das meine PV-Anlage irgenwann mal angeschlossen wird!

Code: Alles auswählen

Edit: Wie läuft denn das mit deiner PV-Anlage ? Ich bin momentan auch am überlegen, ob ich mir so was auf's Dach tue. Hast du da evtl. ein paar Eckdaten?
nachdem ich meine Solarpanele jetzt schon über 2 Monate auf dem Dach habe, aber die Elektriker bekommen das nicht angeschlossen!

daher meine 1. Empfehlung ist zu überprüfen, wie sieht der Zählerschrank aus, ist der geiegnet um eine Pv-Anlage an zu schließen?
die Stadtwerke , oder auch andere Anbieter verlangen zum Anschluß der PV Anlage den neuesten Stand der TAB!
und das kann richtig ins Geld gehen!

die Leute gucken immer erst aufs Dach, ob das geignet ist, aber der Zälerschrank ist viel wichtiger!

meine Zählerschrank Anlage ist jetzt 25 Jahre alt und in meinen Augen gar nicht so schlecht!

wann ich meine mal angeschlossen bekomme ?? das weiß im Moment keiner!
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

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

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von udo1toni »

Ja, gerade in den letzten Jahren sind da einige Auflagen dazu gekommen. 25 Jahre erscheint lächerlich, gibt es doch Installationen, die über 100 Jahre alt sind (und noch betrieben werden), aber 25 Jahre alte Anlagen hätten eigentlich schon mindestens zwei Mal überholt worden sein müssen (spätestens alle 10 Jahre...) Das ist natürlich weit weg von der Realität :)

Aber so als Anekdote: Mein Arbeitgeber ist groß genug, um dazu verpflichtet zu sein, jährlich einen sogenannten Blackout Test durchführen zu müssen. Geht nur nach Absprache mit dem EVU, denn wenn bei uns die Schalter umgelegt werden, sind das auf einen Schlag 2,3 Megawatt Lastabfall, das sähe man sogar im nächstgelegenen Kernkraftwerk als Ausschlag :)
Im Rahmen einer solchen "Blackoutnacht" sollte in einer "kleinen" Unterverteilung etwas nachgerüstet werden. Und es war gut, dass die Unterverteilung gerade frei geschaltet war, denn beim Abnehmen der Verkleidung fielen mehrere Schrauben (von den Klemmen!) herunter. Der Schaltschrank war zu dem Zeitpunkt etwa 15 Jahre alt, aber eben nie gewartet worden.
Die Kollegen haben dann alle Schrauben "ein wenig" nachgezogen und waren fast eine Stunde zugange.

Moderne Automaten haben heute oftmals schraublose Klemmanschlüsse mindestens ausgangsseitig, und auch auf der Eingangsseite gibt es inzwischen Klemmlösungen. dazu kommen Vorschriften, welche Räume zwingend über Fi-Schalter abgesichert sein müssen (Außen, Feuchträume, Küche, Schlafbereich, Wohnbereich dringend empfohlen usw.).
Natürlich gibt es Bestandsschutz, aber an mancher Stelle wäre auch ein Nachrüstzwang sehr sinnvoll, gerade um eine Handhabe bei Vermietern zu haben.
Brandschutzschalter sind auch so ein Ding, äußerst sinnvoll, wenn Kabel nicht durchgehend in Putz verlegt sind, sondern z.B. hinter Holzvertäfelungen oder in Trockenbauwänden in Holzständerbauweise.

Und bei Anschluss einer PV-Anlage ist auch noch zu beachten, dass sich das Lastprofil des Haushalts damit radikal ändert, auch da gibt es ja Vorschriften, wie der Lastgang aussehen darf.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von Snatsch »

also wären das die Items ?

Code: Alles auswählen

    val strom_Heute = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_day)   as Number).floatValue
    val strom_Woche = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_week)  as Number).floatValue
    val strom_Monat = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_month) as Number).floatValue
    val strom_Jahr  = (Heizung_Zaehlerstand_errechnet.deltaSince(start_of_year)  as Number).floatValue
ohne das val ?
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

zinnik
Beiträge: 173
Registriert: 7. Sep 2021 11:28

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von zinnik »

Nein die items musst in OH anlegen entweder per Texteditor oder über die Ui

Verbrauch_Tag
Verbrauch_Woche
Verbrauch_Monat
Verbrauch_Jahr

Die Benennung kannst du selbst bestimmen.
Und dann als Number Item anlegen.
openhab 4.1.0.M Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v8.3.3 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 8kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von peter-pan »

Snatsch hat geschrieben: 27. Okt 2022 19:31ohne das val ?
Nein.

Ich habe die Werte eingesetzt. Du kannst sie jetzt so benutzen.

Code: Alles auswählen

rule "Stromverbrauch Tag Woche Monat Jahr"                                                              // Deutscher Zeichensatz zulässig
when
    Item heatQuellen_consumption changed                                                         // changed reicht.
then
    val ZonedDateTime zdt            = ZonedDateTime.now()                                              // jetzt
    val ZonedDateTime start_of_day   = zdt.with(LocalTime.MIDNIGHT)                                     // heute, Mitternacht
    val ZonedDateTime start_of_week  = start_of_day.minusDays(start_of_day.getDayOfWeek.getValue - 1)   // Montag 
    val ZonedDateTime start_of_month = start_of_day.withDayOfMonth(13)                                   // Erster Tag des Monats (1)
    val ZonedDateTime start_of_year  = start_of_day.withDayOfYear(286)                                    // Erster Tag des Jahres (1)

    val strom_Heute = (heatQuellen_consumption.deltaSince(start_of_day)   as Number).floatValue
    val strom_Woche = (heatQuellen_consumption.deltaSince(start_of_week)  as Number).floatValue
    val strom_Monat = (heatQuellen_consumption.deltaSince(start_of_month) as Number).floatValue
    val strom_Jahr  = (heatQuellen_consumption.deltaSince(start_of_year)  as Number).floatValue

    Heizung_Verbrauch_Tag.postUpdate(strom_Heute)
    Heizung_Verbrauch_Woche.postUpdate(strom_Woche)
    Heizung_Verbrauch_Monat.postUpdate(strom_Monat)
    Heizung_Verbrauch_Jahr.postUpdate(strom_Jahr)


Lediglich für diese vier Items Heizung_Verbrauch_Tag - Heizung_Verbrauch_Tag musst du noch die Items anlegen, damit du da auch Werte speichern kannst. Die können aber auch anders heissen. so wie du das willst.
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von Snatsch »

vielen Dank für eure Hilfe :)
Die Rule habe ich jetzt so

Code: Alles auswählen

rule "Gasverbrauch Tag Woche Monat Jahr"                                                              // Deutscher Zeichensatz zulässig
when
    Item heatQuellen_consumption changed                                                         // changed reicht.
then
    val ZonedDateTime zdt            = ZonedDateTime.now()                                              // jetzt
    val ZonedDateTime start_of_day   = zdt.with(LocalTime.MIDNIGHT)                                     // heute, Mitternacht
    val ZonedDateTime start_of_week  = start_of_day.minusDays(start_of_day.getDayOfWeek.getValue - 1)   // Montag 
    val ZonedDateTime start_of_month = start_of_day.withDayOfMonth(27)                                   // Erster Tag des Monats (1)
    val ZonedDateTime start_of_year  = start_of_day.withDayOfYear(300)                                    // Erster Tag des Jahres (1)

    val Gasverbrauch_Heute = (heatQuellen_consumption.deltaSince(start_of_day)   as Number).floatValue
    val Gasverbrauch_Woche = (heatQuellen_consumption.deltaSince(start_of_week)  as Number).floatValue
    val Gasverbrauch_Monat = (heatQuellen_consumption.deltaSince(start_of_month) as Number).floatValue
    val Gasverbrauch_Jahr  = (heatQuellen_consumption.deltaSince(start_of_year)  as Number).floatValue

    Gas_Verbrauch_Tag.postUpdate(Gasverbrauch_Heute)
    Gas_Verbrauch_Woche.postUpdate(Gasverbrauch_Woche)
    Gas_Verbrauch_Monat.postUpdate(Gasverbrauch_Monat)
    Gas_Verbrauch_Jahr.postUpdate(Gasverbrauch_Jahr)
end
Meine Item zeigen mir folgende Werte
Screenshot (52).png
verstehe jedoch nicht warum der Verbrauch in der Woche höher ist als der im Jahr
habe ich noch etwas falsch gemacht oder ist das weil noch nicht genügend Date da sind :?:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

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

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von udo1toni »

Grundsätzlich müssen die Ausdrücke zum Berechnen der Startzeitpunkte so aussehen:

Code: Alles auswählen

    val ZonedDateTime zdt            = ZonedDateTime.now()                                              // jetzt
    val ZonedDateTime start_of_day   = zdt.with(LocalTime.MIDNIGHT)                                     // heute, Mitternacht
    val ZonedDateTime start_of_week  = start_of_day.minusDays(start_of_day.getDayOfWeek.getValue - 1)   // Montag 
    val ZonedDateTime start_of_month = start_of_day.withDayOfMonth(1)                                   // Erster Tag des Monats (1)
    val ZonedDateTime start_of_year  = start_of_day.withDayOfYear(1)                                    // Erster Tag des Jahres (1)
Der kleine, aber feine Unterschied liegt in den letzten zwei Zeilen im Absolutwert 1. Der Monat fängt am 1. an, genau wie das Jahr am 1. Tag anfängt.

Solltest Du für diesen Tag allerdings noch keine Messwerte haben, weil das Item heatQuellen_consumption noch nicht so lange persistiert wird, wird Dir dann kein Wert angezeigt bzw. die Rule bricht mit einer nullPointerException ab. Deshalb hat zinnik an den beiden Stellen keine 1 eingetragen (Stichtag war der 13., deshalb oben 13 für den Monatg und 286 für das Jahr, womit die Rule bei ihm sicher Werte findet).
Die Persistence bietet leider keine Option, herauszufinden, wann der erste Messwert geliefert wurde. Leider ist es auch so, dass die Persistence es nicht mag, wenn die Untergrenze einer Abfrage vor dem ersten persistierten Wert liegt (hab'sch grad ausprobiert...), es gibt also leider keine Lösung, als selbst dafür Sorge zu tragen, dass die Rule sinnvolle Werte abliefert. Einzige mir möglich erscheinende Option:

Code: Alles auswählen

rule "Gasverbrauch Tag Woche Monat Jahr"                                                              // Deutscher Zeichensatz zulässig
when
    Item heatQuellen_consumption changed                                                         // changed reicht.
then
    val ZonedDateTime zdt            = ZonedDateTime.now()                                              // jetzt
    val ZonedDateTime start_of_day   = zdt.with(LocalTime.MIDNIGHT)                                     // heute, Mitternacht
    val ZonedDateTime start_of_week  = start_of_day.minusDays(start_of_day.getDayOfWeek.getValue - 1)   // Montag 
    val ZonedDateTime start_of_month = start_of_day.withDayOfMonth(1)                                   // Erster Tag des Monats (1)
    val ZonedDateTime start_of_year  = start_of_day.withDayOfYear(1)                                    // Erster Tag des Jahres (1)

    var Gasverbrauch_Heute = -1
    var Gasverbrauch_Woche = -1
    var Gasverbrauch_Monat = -1
    var Gasverbrauch_Jahr  = -1

    if(heatQuellen_consumption.deltaSince(start_of_day) instanceof Number)
        Gasverbrauch_Heute = (heatQuellen_consumption.deltaSince(start_of_day)   as Number).floatValue
    if(heatQuellen_consumption.deltaSince(start_of_week) instanceof Number)
        Gasverbrauch_Woche = (heatQuellen_consumption.deltaSince(start_of_week)  as Number).floatValue
    if(heatQuellen_consumption.deltaSince(start_of_month) instanceof Number)
        Gasverbrauch_Monat = (heatQuellen_consumption.deltaSince(start_of_month) as Number).floatValue
    if(heatQuellen_consumption.deltaSince(start_of_year) instanceof Number)
        Gasverbrauch_Jahr  = (heatQuellen_consumption.deltaSince(start_of_year)  as Number).floatValue

    Gas_Verbrauch_Tag.postUpdate(Gasverbrauch_Heute)
    Gas_Verbrauch_Woche.postUpdate(Gasverbrauch_Woche)
    Gas_Verbrauch_Monat.postUpdate(Gasverbrauch_Monat)
    Gas_Verbrauch_Jahr.postUpdate(Gasverbrauch_Jahr)
end
Die lokalen Konstanten werden zu Variablen (var statt val). Sie werden zunächst mit einem offensichtlich unsinnigen Wert belegt (-1)
Nun wird der eigentliche Wert hinterlegt, falls es sich um eine gültige Zahl handelt (Prüfung auf instanceof Number)
Generalisiert ist diese Lösung zwar auch nicht hübsch, aber sollte funktionieren, einfacher ist es zweifellos (zumal wir den 28. haben), die Rule so zu lassen, wie sie ist und am 1.11. den Wert in withDayOfMonth() auf 1 zu ändern, sowie an Neujahr withDayOfYear() eine 1 einzutragen.
Und bis zu den Stichtagen mit offensichtlich verkehrten Werten zu leben - man weiß ja, woran es liegt...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Snatsch
Beiträge: 343
Registriert: 9. Jan 2021 22:55

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von Snatsch »

Vielen Dank für deine super Erklärung :) Ich werde zum 1.11. den Wert auf 1 setzen. Eine Frage oder 2 hätte ich noch ;) Da der Wert in kwh ausgegeben wird und ich aber einen Flüssiggastank habe würde ich gerne das die kwh in Liter umgerechnet werden. Habe gelesen das eine kwh Gas mit 0,1522 Litern Gas erzeugt wird, dann hätte ich noch den Preis pro Tag, Woche und Jahr. Muss ich dazu eine Rule haben oder kann man das über die Metadata machen ? Für den Preis muss ich bestimmt wieder 4 Items anlegen Preis_Tag, Preis_Woche,.... oder
openhab4.1.1 auf Pi 4 im Docker Portainer /Grafana&InfluxDB auf Pi 3 in Docker Portainer

Benutzeravatar
peter-pan
Beiträge: 2564
Registriert: 28. Nov 2018 12:03
Answers: 25
Wohnort: Schwäbisch Gmünd

Re: Stromverbrauch für Tag, Woche, Monat, Jahr berechnen

Beitrag von peter-pan »

udo1toni hat geschrieben: 28. Okt 2022 10:49 Der kleine, aber feine Unterschied liegt in den letzten zwei Zeilen im Absolutwert 1. Der Monat fängt am 1. an, genau wie das Jahr am 1. Tag anfängt.
Sorry, ich war wieder (schnell und) schlampig (copy/paste). Asche über meinem Haupt. Ich gelobe Besserung :oops: :oops: :oops: ;)
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.1.1 openhabian

Antworten