SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
zinnik
Beiträge: 190
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von zinnik »

Hallo die Herrn,

Ich möchte das gleiche machen nur meine Standard percistence ist influxdb. ich habe es so probiert aber "Heizung_Verbrauch_Tag" bleibt bei NULL.

Code: Alles auswählen

rule "Heizung Verbrauch Tag berechnen"
when
    Item Heizung_Zaehlerstand_errechnet received update
then
val diff = Heizung_Zaehlerstand_errechnet.deltaSince(ZonedDateTime.now.with(LocalTime.MIDNIGHT),"influxdb")
    logInfo("wpsum","Heizung: gelieferte Differenz ist {}",diff)
    Heizung_Verbrauch_Tag.postUpdate(diff as Number)
end
Was mache ich falsch?
openhab 4.2.0 Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v10.2.2 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 12kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Wie ist das Item Heizung_Zaehlerstand_errechnet definiert? Hast Du geprüft, ob auch Daten in InfluxDB vorliegen?
Es wäre vermutlich sinnvoller, als Trigger changed statt received update zu verwenden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 190
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von zinnik »

udo1toni hat geschrieben: 13. Okt 2022 07:36 Wie ist das Item Heizung_Zaehlerstand_errechnet definiert? Hast Du geprüft, ob auch Daten in InfluxDB vorliegen?
Es wäre vermutlich sinnvoller, als Trigger changed statt received update zu verwenden.
Ich glaube ich habe es hinbekommen. Ist es richtig das erst ein Wert angezeigt wird wenn der laufende tag vorbei ist und dann wird aber ganz normal in Minuten takt der Wert geschrieben in "Heizung_Verbrauch_Tag".

Das Item "Heizung_Zaehlerstand_errechnet" ist als Number definiert.
Aber wie gesagt seit 0:00 Uhr habe ich werte.

Das Item "Heizung_Zaehlerstand_errechnet" setzt sich auch wieder aus zwei Items zusammen was ich in einer Rule berechnen lasse.
Hintergrund: bei meiner PV Anlage ist nach dem Messkonzept C3 angeschlossen wo man einen Bezugs/Einspeisezähler hat und einen Haustrom Zähler
Der Strom für die Wärmepumpe ist nur ablesbar wenn man beide Zähler subtrahiert :roll: .


In den anderen rules hier im Beitrag ist immer "received update" angeben. Worin liegt denn der Unterschied zwischen upate und changed?

Danke Udo du bist echt eine Super Hilfe ;)
openhab 4.2.0 Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v10.2.2 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 12kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Ja, die Methode .deltaSince(ZonedDateTime.now.with(LocalTime.MIDNIGHT),"influxdb") kann natürlich erst einen gültigen Wert liefern, wenn um Mitternacht des Vortages (bzw. um 0:00:00 Uhr) auch schon ein gültiger Wert im Item vorhanden war (und die Persistence zu diesem Zeitpunkt bereits gearbeitet hat).
Damit ist der Rest eigentlich hinfällig, bis auf die offene Frage nach dem Unterschied.

openHAB bietet viele verschiedene Trigger für Rules. Hier geht es um den Status eines Items, da gibt es zwei verschiedene Trigger, zum einen received update und zum anderen changed. Wie der Name schon sagt, ändert sich bei changed etwas (nämlich der Status des Items), während bei received update einfach nur der Status aktualisiert wurde.
Jedem changed Ereignis geht ein received update Ereignis voraus, aber nicht jedem received update Ereignis folgt auch ein changed Ereignis :)

Oder mit einem konkreten Beispiel:
Ein Switch Item hat den Zustand ON. Nun empfängt es ein Update auf OFF.
Zuerst gibt es den update Trigger, weil ja eine Aktualisierung des Status empfangen wurde. Im Verlauf der Verarbeitung des Updates stellt sich nun heraus, dass der neue Status vom alten Status abweicht. Das führt zu einem weiteren Trigger, changed.
Im umgekehrten Fall (alter Zustand ON, es erfolgt ein Update auf ON) unterscheidet sich der neue Status nicht vom alten Status. Es wird kein changed Ereignis ausgelöst.

received update kann z.B. sinnvoll sein, wenn ich über einen Bewegungsmelder einen Countdown starte. Bei jedem Update soll der Countdown erneut beginnen, so dass das Licht erst ausgeht, wenn der Countdown komplett ablaufen konnte, ohne dass es ein erneutes ON Update gab.

Bei der Bestimmung eines Differenzwertes hat es aber keinen Sinn, bei gleichen Ausgangswerten ständig neu zu rechnen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 190
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von zinnik »

Vielen dank für deine Erklärung udo1toni.

Könntest du mir in dem Beitrag auch weiterhelfen?
viewtopic.php?p=48677#p48677

Hier geht es nun um den Wochen Monats und Jahresverbrauch
openhab 4.2.0 Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v10.2.2 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 12kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

zinnik
Beiträge: 190
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von zinnik »

Ich habe hier auch nochmal eine Frage.

Ich habe noch ein einzelnes Solarpanel als sogenanntes Balkonkraftwerk damit messe ich mit einem MyStrom Plug die Leistung. In der Mystrom App wird mir auch die Erzeugung am Tag angezeigt aber als Chanels erhalte ich in Openhab nur die Momentane Leitung in W als Number Item.

Ich möchte jetzt die erzeugte Energie für den Tag haben wenn alles funktioniert dann auch gerne für Woche Monat und Jahr.

Ich habe mir hier folgende Rule abgeleitet oder versucht zusammen zu basteln aber irgendwie liefert mir diese keine plausiblen glaubhaften Werte.

Könnte mir hier jemand helfen :roll:

Code: Alles auswählen

rule "Solarpanel Ertrag Tag"
when
    Item Solarpanel_PowerConsumption received update         // momentane Leistung in Watt

then
// Verbrauch Tag
// SolarThermie_Waermemenge_KW.postUpdate((SolarThermie_Waermemenge_W.state as Number) / 1000)
//Solarpanel_Ertrag_Tag.postUpdate((Solarpanel_PowerConsumption.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number))
    val Verbrauch = (Solarpanel_PowerConsumption.deltaSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number)
        logInfo("bedarfwm","Tagesverbrauch: {}",Verbrauch)
        Solarpanel_Ertrag_Tag.postUpdate(Verbrauch)

end
Vielen Dank zinnik
openhab 4.2.0 Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v10.2.2 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 12kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Nein, das funktioniert so nicht. Also, mal abgesehen von der unglücklichen Benennung des Items :), Du misst Leistung, also Watt, möchtest aber Arbeit erfassen, also z.B. Ws oder gebräuchlicher kWh. Die Rule bestimmt die Differenz zwischen der Leistung um Mitternacht und jetzt, das entspricht zumindest in unseren Breitengraden exakt der momentanen Leistung, weil um Mitternacht eine Leistung von 0 Watt abgegeben wird.

Du müsstest aber die Leistung über die Zeit aufsummieren. Aus verschiedenen Gründen wird das vermutlich nicht gut funktionieren, allen voran die zeitliche Auflösung.
Was Du probieren kannst: prüfe, ob die Messwerte regelmäßig kommen und prüfe, ob Du die Zykluszeit (also den Abstand zwischen zwei Messungen) auf einen geringen Wert einstellen kannst, z.B. 10 Sekunden. Jetzt kannst Du das Item mit everyUpdate persistieren lassen. Es ist hierbei enorm wichtig, dass auch wirklich jeder Messwert in der Datenbank landet, dass die Messwerte regelmäßig kommen und dass diese Messwerte auch genau so zur Verfügung stehen.
Anschließend sollte es möglich sein, den Durchschnittswert auszulesen, mittels

Code: Alles auswählen

val Leistung = Solarpanel_PowerConsumption.averageSince(ZonedDateTime.now().with(LocalTime.MIDNIGHT)) as Number
Außerdem brauchst Du dann noch die Zeit seit Mitternacht, z.B. in Sekunden:

Code: Alles auswählen

val Sekunden = (now.toInstant.toEpochMilli - now.with(LocalTime.MIDNIGHT)).toInstant.toEpochMilli)/1000
Eventuell geht auch

Code: Alles auswählen

now.get(Chronofield.SECOND_OF_DAY)
Jetzt multiplizierst Du beide Werte miteinander und erhältst Ws (sofern die Leistung in Watt gemessen wurde, natürlich) - und wenn Du noch durch 3600000 teilst, hast Du kWh.
Wie genau dieser Wert ist, hängt vor allem davon ab, wie gleichmäßig die Produktion im Messzeitraum ist. Weniger Messungen => weniger Speicherbedarf und weniger Last, aber auch potenziell größere Abweichungen.

EDIT: Typo im Code
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 190
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von zinnik »

Nein, das funktioniert so nicht. Also, mal abgesehen von der unglücklichen Benennung des Items
Ja sorry ich hab das damals nicht umbenant und einfach so übernommen wie es aus der Schaltsteckdose kam. Leider kann man das ja nicht nachträglich umbenennen :(
Jetzt multiplizierst Du beide Werte miteinander und erhältst Ws (sofern die Leistung in Watt gemessen wurde, natürlich) - und wenn Du noch durch 3600000 teilst, hast Du kWh.
Welche beiden Werte muss ich multiplizieren? Muss ich mir dann noch ein Item für Ws anlegen?

PS: Stimmt die Persist datei so

eigentlich persistiere ich alle Items

Code: Alles auswählen

Strategies {
	everyMinute 	: "0 * * * * ?"
        everyHour 	: "0 0 * * * ?"
        everyDay  	: "0 0 0 * * ?"
	

        // if no strategy is specified for an Item entry below, the default list will be used
       default = everyChange

}

Items {
group*     : strategy = everyChange, restoreOnStartup 			//persist all direct members of the group 'group'
item       : strategy = everyChange, everyUpdate, everyHour 		// persist the item 'item'
otherItem     								// no strategy set, so use default strategy for item 'otherItem'
*          						: strategy = everyChange, restoreOnStartup
EnergiePC_Power						: strategy = everyChange, restoreOnStartup
Badtemp_Temperature					: strategy = everyChange, restoreOnStartup
BMW530dxDrive						: strategy = everyChange, restoreOnStartup
BMW530dxDrive_Koordinaten				: strategy = everyChange, restoreOnStartup
HausanschlussStrom_Power				: strategy = everyChange, restoreOnStartup
Heizung_Verbrauch_Tag					: strategy = everyChange, restoreOnStartup
Heizung_Verbrauch_Woche					: strategy = everyChange, restoreOnStartup
Heizung_Verbrauch_Monat					: strategy = everyChange, restoreOnStartup
Heizung_Verbrauch_Jahr					: strategy = everyChange, restoreOnStartup
Solarpanel_PowerConsumption				: strategy = everyUpdate, restoreOnStartup


}


Lg zinnik
openhab 4.2.0 Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v10.2.2 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 12kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von udo1toni »

Also, Du misst die Leistung, Watt. Die Persistence kann dir also auch nur Watt liefern.
Die Arbeit (oder Energie) ist die Leistung mal die Zeit, über die die gleiche Leistung erbracht wird.

Deshalb musst Du, um die Arbeit (Watt * Sekunde = Ws oder auch Kilowatt * Stunde = kWh) die durchschnittliche Leistung mit der Zeit multiplizieren, über die die Leistung anliegt.

Die Berechnung ist eine interne Berechnung, deshalb musst Du sie nicht in einem Item speichern, es sei denn, Du möchtest das unbedingt.

Weitergehende Erklärung: Es handelt sich eigentlich um ein Integral. Die Persistence liefert die die Leistung über die Zeit, die kannst Du in einen Graphen aufmalen. Das Integral ist dann die von der entstehenden Kurve bedeckte Fläche. Da der Verlauf der Messkurve keiner gewöhnlichen mathematischen Formel folgt (es ist ja eine Reihe von Messwerten) kann man das Integral nicht "einfach so" ausrechnen. Stattdessen muss man die Fläche (bildhaft) in lauter schmale Rechtecke aufteilen (Höhe = Leistung, Breite = Zeit) und diese Flächen aufaddieren. Da es nun aber recht aufwändig ist, die Dauer für jeden Messwert zu bestimmen und jeden Messwert einzeln auszulesen, nähern wir uns, indem wir die durchschnittliche Höhe über den gesamten betrachteten Zeitraum nehmen und mit der Dauer des betrachteten Zeitraums multiplizieren (bildlich ist der Durchschnitt ja eine Gerade konstanter Höhe über den betrachteten Zeitraum und die Fläche unter der Linie ist einfach zu berechnen)
Zur Visualisierung:
Dies ist die Leistung meiner PV-Anlage
Screenshot 2022-10-26 113512.png
Und dies ist die eingespeiste Energie (die Linie steigt natürlich nur bei Überschuss...)
Screenshot 2022-10-26 113436.png
Wenn ich aber die insgesamt gelieferte Energie betrachten will, muss ich die Fläche unter der oberen Linie kennen.
Weil man unten links Avg. = 1,34 K erkennen kann und der betrachtete Zeitraum exakt 12 Stunden ist, kann ich mit 12 * 1,34 ganz einfach ausrechnen, dass hier 16,08 kWh generiert wurden. (Stimmt übrigens nicht, es waren nur etwa 9 kWh an dem betrachteten Tag, woran Du erkennen kannst, dass die Messwerte offensichtlich nicht vollständig sind, womit der ermittelte Durchschnitt zu hoch ist.)
zinnik hat geschrieben: 26. Okt 2022 03:13 Leider kann man das ja nicht nachträglich umbenennen
Ja. Oder nein. :) Du kannst ein bestehendes Item nicht umbenennen, aber Du kannst ein neues Item an den selben Channel koppeln.
Allerdings musst Du dann, um keine bereits persistierten Daten zu verlieren, openHAB kurz beenden, die neue .rrd Datei löschen und die alte .rrd Datei so umbenennen, dass sie zum neuen Item passt.
Oder Du nimmst ein anderes (neues) Gerät, welches schon von Beginn an für die Aufgabe gedacht ist...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 190
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: SOLVED - Verbrauch von heute (seit Mitternacht) anzeigen

Beitrag von zinnik »

Ok danke, ich muss mal schauen ob dieese item Solarpanel_PowerConsumption überhaupt richtig persistiert. Obwohl ich eigentlich laut meiner persist Datei alle items in Oh3 persistiere, hatte dieses bis heute 14.30 uhr keine Daten erst wo ich openhab per browser geöffnet habe hat es persistiert in der influxdb. Fand ich komisch eigentlich müssten da daten von über ein Jahr drin sein.
openhab 4.2.0 Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v10.2.2 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 12kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

Antworten