Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Optimus#1978#
Beiträge: 26
Registriert: 6. Feb 2024 14:29
Answers: 0

Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von Optimus#1978# »

Hallo,

es hat den Anschein, dass bei mir die Stromzählerwerte in OpenHAB mit dem Faktor 1.000 multiplizier werden.

Beispiel
Strombezug gesamt laut Zähler im Keller 3.039
Strombezug gesamt laut OpenHAB 3.039.000

Ich habe bisher keinerlei Rechenregeln eingerichtet, so dass eine fehlerhafte Berechnung nicht die Ursache sein kann.

Das gleiche Problem habe ich bei der Anzeige der Tageswerte.

Wie kann ich das korrigieren?

Viele Grüße
Optimus#1978#

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

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von udo1toni »

Wie kommt der Zählerwert nach openHAB? Wie sieht der Channel aus? Wie ist das Item definiert?
Grundsätzlich beherrscht openHAB an vielen Stellen UoM (Units of Measurement), es reicht dann evtl, die Unit anzupassen und openHAB damit mitzuteilen, dass der Zähler nicht kWh liefert, sondern Wh, und schon wird das Komma passend verschoben.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Optimus#1978#
Beiträge: 26
Registriert: 6. Feb 2024 14:29
Answers: 0

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von Optimus#1978# »

Ich habe in OpenStudioCode unter "home.items" die nachfolgenden Einträge gefunden. Ich muss also jeweils "kWh" durch "Wh" ersetzen? Ist das korrekt?

Code: Alles auswählen

Group 	Energy     	    	"Energie"					<energy> 
Number	Energy1		    	"Photovoltaik (kWh)[%.1f kWh]"			<energy>	(Energy)         { channel="modbus:data:meter1:3PEnergy:energy:number" }
Number	Energy2		    	"Heizung (kWh)[%.1f kWh]"			<energy>	(Energy)         { channel="modbus:data:meter2:3PEnergy:energy:number" }
Number	Energy3		    	"Warmwasser (kWh)[%.1f kWh]"			<energy>	(Energy)         { channel="modbus:data:meter3:1PEnergyin:energyin:number" }
Number 	Energyin	        "Energiebezug [%.0f kWh]"			<gauge>		(Energy)         { channel="smartmeter:meter:hausanschluss:1-0_1-8-0" }					
Number 	Energyout 	        "Energieeinspeisung [%.0f kWh]"		    	<solarplant>	(Energy)	 { channel="smartmeter:meter:hausanschluss:1-0_2-8-0" }

Group 	EnergyDay     	   	"Energie / Tag"					<energy> 
Number	EnergyDay1		"Photovoltaik / Tag (kWh)[%.1f kWh]"		<energy>	(EnergyDay)       
Number	EnergyDay2		"Heizung / Tag (kWh)[%.1f kWh]"		    	<energy>	(EnergyDay)  
Number	EnergyDay3		"Warmwasser / Tag (kWh)[%.1f kWh]"		<energy>	(EnergyDay)   
Number 	Energyinday	        "Energiebezug / Tag (kWh) [%.0f kWh]"		<gauge>		(EnergyDay)
Number 	Energyoutday            "Energieeinspeisung / Tag (kWh)[%.0f kWh]" 	<solarplant>	(EnergyDay)

Group 	EnergyWeek     	   	"Energie / Woche"						<energy> 
Number	EnergyWeek1		"Photovoltaik / Woche (kWh)[%.1f kWh]"      	<energy>	(EnergyWeek)       
Number	EnergyWeek2		"Heizung / Woche (kWh)[%.1f kWh]"		<energy>	(EnergyWeek)  
Number	EnergyWeek3		"Warmwasser / Woche (kWh)[%.1f kWh]"		<energy>	(EnergyWeek)   
Number 	EnergyinWeek	        "Energiebezug / Woche (kWh) [%.0f kWh]"		<gauge>		(EnergyWeek)
Number 	EnergyoutWeek           "Energieeinspeisung / Woche (kWh)[%.0f kWh]" 	<solarplant>	(EnergyWeek) 

Group 	EnergyMonth
...

Group 	Energy Year
...[/code

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

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von udo1toni »

Erstmal vorweg: Du meinst vermutlich Visual Studio Code: https://code.visualstudio.com/

Dann tut sich die nächste Frage auf, die eigentlich hätte am Anfang stehen müssen... Welche Version von openHAB nutzt Du? (welche exakte Version, ich nutze z.B. openHAB4.1.2 Release Build aka current stable oder auf deutsch die aktuelle Release Version - Release ist irgendwie in den deutschen Sprachschatz übergegangen...)

Dann, warum schreibt man im Label die Einheit dazu, wenn sie doch ohnehin beim Wert mit ausgegeben wird?
Und falls es sich nicht um eine extrem alte Version von openHAB handelt (älter als openHAB2.5.12), wäre es besser, die Items als QuantityType zu definieren. Bei den Modbus Channels (Energy1 bis Energy3) könnte das etwas tricky werden, bei den Smartmeter Channels sollte die Einheit aber eh schon vom Zähler mit kommen.

QuantityType: openHAB ist schon seit Jahren dazu in der Lage, in speziellen Number Items zusätzlich zum Zahlenwert auch die Einheit zu halten und mit zu übergeben. Der Punkt dabei ist: Du speicherst einen Wert z.B. in °C und lässt in anschließend in °F anzeigen. Dazu reicht es, das Item als Number:Temperature zu definieren und jeweils die Einheit mit anzugeben, Du brauchst keine Umrechnung vorzunehmen. Die Temperatur ist ein schillerndes Beispiel, weil die Umrechnung zwar einfach, aber für "normal veranlagte" Menschen nicht intuitiv im Kopf zu erledigen ist. Das funktioniert aber genauso auch mit einer Umrechnung von kWh nach Wh oder auch J oder kcal (!).
Nicht jeder Channel eignet sich gleichermaßen zur Verwendung mit QuantityType (bzw. UoM - Units of Measurement), aber ein Großteil der Addons unterstützt das Format inzwischen. Wenn man Things und Items über die Main UI einrichtet, wird openHAB automatisch entsprechende Items anbieten und auch die Formatierung passend wählen.
Das geht aber auch locker über Textdateien, mache ich auch so, aber zunächst mal wäre wichtig, welche Version von openHAB das ist...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Optimus#1978#
Beiträge: 26
Registriert: 6. Feb 2024 14:29
Answers: 0

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von Optimus#1978# »

Hallo,

ja natürlich, ich meinte Visual Studio Code.

Bei mir ist die Version OpenHAB 4.1.1 installiert.

Meine Anfrage bezieht sich (derzeit) nur auf die Einträge "Energyin" und "Energyout", also die Werte die vom Smartmeter (Zweirichtungsstromzähler des Messstellenbetreiber) zur Verfügung gestellt werden. (Für die Einträge Energy1 bis Energy3, die zwei Drehstromzähler und einen Wechselstromzähler betreffen und mit einem Modbus-Adapter verbunden sind, werden mir bislang noch gar keine Werte in OpenHAB angeliefert. Hier erscheinen in meiner Things-Liste noch diverse Fehlermeldungen. Darum will ich mich später kümmern).

Was also muss ich in meinen "home.items"-Einträgen (oder auch noch an anderer Stelle) konkret verändern, damit die Werte für den Strombezug und die Stromeinspeisung korrekt angeliefert werden?

Vielen Dank.

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

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von udo1toni »

Erstelle die Items korrekt als QuantityType Items:

Code: Alles auswählen

Number:Energy Energyin  "Energiebezug"       <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_1-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }
Number:Energy Energyout "Energieeinspeisung" <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_2-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }
Als icons kannst Du evtl. auch was anderes nehmen, grundsätzlich wäre es aber das energy Icon :) Die Tags sind für das Semantic Model wichtig, wenn Du das nciht verwenden willst, kannst Du die natürlich ebenfalls weg lassen. der Parameter unit gibt an, in welcher Einheit die Werte im Item gespeichert werden. Da die Werte schon bisher als Wh reingelaufen sind, ist vermutlich Wh sinnvoll. unit darf nur einmalig gesetzt werden, da eine Änderung an dieser Stelle Auswirkungen auf die Persistence hat, sprich, änderst Du später unit auf etwas anders, hast Du später potenziell in den Charts eine falsche Anzeige der alten Werte.
stateDescription=""[pattern="%.1f kWh"] gibt an, wie die Anzeige des Wertes geschehen soll. %.1f bedeutet eine Nachkommastelle, kWh ist jetzt aber nicht nur die Anzeige dieses Textes, sondern auch der Umrechnungsfaktor.
Das smartmeter Binding liefert die Werte schon mit passender Einheit an, so dass mit dieser Parametrierung alles passen sollte.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Optimus#1978#
Beiträge: 26
Registriert: 6. Feb 2024 14:29
Answers: 0

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von Optimus#1978# »

Is es korrekt, in den home.items die beiden nachfolgenden Änderungen vorzunehmen?

Code: Alles auswählen

Definition Item "Energyin" alt
Number  Energyin      "Energiebezug [%.0f kWh]"       <gauge>         (Energy)         { channel="smartmeter:meter:hausanschluss:1-0_1-8-0" }                                 

Definition Item "Energyin" neu
Number:Energy Energyin  "Energiebezug"       <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_1-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }


Definition Item "Energyout" alt
Number  Energyout     "Energieeinspeisung [%.0f kWh]"       <solarplant>    (Energy)         { channel="smartmeter:meter:hausanschluss:1-0_2-8-0" }

Definition Item "Energyout" neu
Number:Energy Energyout "Energieeinspeisung" <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_2-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }


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

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von udo1toni »

Ja, das sieht für mich gut aus.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Optimus#1978#
Beiträge: 26
Registriert: 6. Feb 2024 14:29
Answers: 0

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von Optimus#1978# »

Ich habe jetzt die beiden Einträge "Energyin" und "Energyout" wie oben angegeben in Visual Studio Code geändert.

Da bei allen übrigen Einträgen in der "home.items"-Liste zwischen den Spalten "Group" und "Betriebseinst" kein Doppelpunkt eingetragen war, habe ich versuchsweise beim neuen Eintrag "Energyout" den Doppelpunkt weggelassen:

Code: Alles auswählen

Group 	 Betriebseinst	   
Number	 Energy1	   ...	    	
Number	 Energy2	   ...	     	      
Number	 Energy3           ...  		    			
Number:Energy Energyin     "Energiebezug"            ....
Number  Energy Energyout   "Energieeinspeisung"   .... 
Anschließend habe ich den Befehl "File/Save" ausgeführt.

Er erscheint folgende Fehlermeldung:

Code: Alles auswählen

"Error while connecting to openHAB REST API. More information may be found int the openHAB Extension output"
Und "Show output" zeigt mir folgendes an:

Code: Alles auswählen

Usage of deprecated config => openhab.host <= detected.
Usage of deprecated config => openhab.port <= detected.
Usage of deprecated config => openhab.username <= detected.
Could not reload items for HoverProvider
---
    Error:
        Error while connecting to openHAB REST API.

    Message:
        Error: getaddrinfo ENOTFOUND openhabianpi
Ich habe mit daraufhin in OpenHAB meine "items" aufgerufen. Alle bisher angezeigten Einträge zu Energiebezug und Energieeinspeisung sind aus der Liste verschwunden. Vorhanden sind nur noch einige Räume meines Gebäudes, die ich zuvor angelegt hatte, um später dort Steuerungskomponenten zu installieren.

Was ist da schief gelaufen?

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

Re: Anzeige der Stromzählerwert um den Faktor 1.000 zu hoch

Beitrag von udo1toni »

Du kannst nicht einfach schreiben, was Du willst, es gibt genaue Regeln, wie eine Definition aussieht.

In Textdateien definierte Items müssen so definiert werden:

Code: Alles auswählen

itemtype itemname "labeltext [stateformat]" <iconname> (group1, group2, ...) ["tag1", "tag2", ...] {bindingconfig} // Reihenfolge muss eingehalten werden!
Dabei gilt: itemtype ist der Itemtyp, exakt einer aus einer Liste:

Code: Alles auswählen

Call
Color
Contact
DateTime
Dimmer
Group
Group:<itemtype>
Group:<itemtype>:<function>
Image
Location
Number
Number:<dimension>
Player
Rollershutter
String
Switch
Wenn Du also ein Group Item definierst, kannst Du optional diesem Group Item einen Itemtyp verpassen. Außerdem kannst Du einem typisierten Group Item auch noch Funktion zum zusammenfassen der Daten mitgeben.
Wenn Du ein Number Item hast, kannst Du die Dimension mit angeben. Das funktionert auch bei Group:Number Items, und auch bei Group:Number:<dimension> Items kannst Du eine Funktion mitgeben.
Die Funktion errechnet den Status für das Group Item anhand deren Member. Wenn Du z.B. ein Group:Number Item hast und die zwei Items Item1 und Item2 Member dieser Group sind, und Item1 den Wert 0 hält und Item2 den Wert 10, dann kannst Du mit der Funktion MIN als Wert 0 erhalten, mit der Funktion MAX bekommst Du 10, mit der Funktion AVG erhältst Du 5.
Weiterhin gibt es die Funktion COUNT, die kann z.B. bei einer Gruppe Contact ITems interessant sein, sie gibt Dir dann aus, wie viele der Member einen bestimmten Status haben (also z.B. Group:Contact:COUNT(OPEN) ergibt 3, weil von den 7 Membern drei den Status OPEN haben)
Und es gibt noch EQUALITY, was den Status der Items ergibt, sofern alle Member den gleichen Status haben, ansonsten aber UNDEF, sowie
EARLIEST und LATEST, was den Status des Items liefert, welches den ältesten/jüngsten Status hat.

itemname ist die ID des Items. es gilt, dass itemname nur die Zeichen des englischen Alphabets, die arabischen Ziffern sowie den Unterstrich enthalten dürfen. Groß/Kleinschreibung zählt für jedes Zeichen, das erste Zeichen muss zwingend ein Buchstabe sein. Erlaubt: Ein_tollerName_FUER__1_Item (auch wenn das ein Widerspruch in sich ist...) Nicht erlaubt: 1-Item (und zwar gleich doppelt...)

labeltext ist das angezeigte Label, [stateformat] bestimmt die Darstellung in einer Sitemap (und nur dort!).
iconname ist der Name des (evtl. dynamischen) Icons, welches in einer Sitemap oder auch in der Main UI gerendert werden soll, wenn ein Widget das Item verwendet.
group1 ist ein Group Item, ein Item kann beliebig vielen Groups zugeordnet werden, allerdings darf nur maximal eines dieser Group Items Teil des Semantic Model sein.
tag1 ist ein Tag (Schildchen), es gibt verschiedene Tags innerhalb openHAB, heutzutage sind sie meist Bestandteil des Semantic Model, womit openHAB dann verstehen kann, was das Item repräsentiert (z.B. ein Messwert, ein Steuersignal, ein Raum usw.)
bindingconfig schließlich gibt an, wie das Item mit einem oder mehreren Channels interagiert. Ein ITem muss nicht zwingend einem Channel zugeordnet sein. Außerdem können hier Metadaten für das Item definiert werden, z.B. bei Number:<dimension> Items die Unit, in der der Wert gespeichert wird und das Statusformat.

Exakt so ist es korrekt:

Code: Alles auswählen

Number:Energy Energyin  "Energiebezug"       <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_1-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }
Number:Energy Energyout "Energieeinspeisung" <energy> (Energy) ["Measurement","Energy"] { channel="smartmeter:meter:hausanschluss:1-0_2-8-0", unit="Wh", stateDescription=""[pattern="%.1f kWh"] }
Die Doppelpunkte haben eine Bedeutung und sind nicht optional, die Schlüsselworte müssen exakt so geschrieben werden, Du kannst lediglich den Itemanmen ändern (Energyin bzw. Energyout), das Label ändern, ein anderes als das energy Icon wählen, die Gruppenzugehörigkeit ändern oder auch das Statusformat (stateDescrption=""[pattern="...")
Wenn man Items definiert, dann sind nicht alle Parameter verbindlich, lediglich itemtype und itemname müssen zwingend angegeben werden. Alle anderen Parameter können - auch einzeln - entfallen, jedoch ist die Reihenfolge immer einzuhalten. Hast Du also ein Item ohne Gruppenzugehörigkeit definiert, so musst Du die Gruppe vor den Tags und nach dem Icon einfügen. Fehlen diese Elemente, so musst Du den Platz so wählen, dass Du diese Elemente ebenfalls ohne gegen die Regeln zu verstoßen einfügen könntest.

Die Fehlermeldungen haben nichts mit den veränderten Items zu tun. Du hast das openHAB Plugin in Visual Studio Code falsch konfiguriert, das ist alles.
dadurch funktionieren Itemliste und Thingliste nicht, außerdem kann das Plugin den Code von Rules nicht auf Fehler untersuchen oder inline aktuelle Status und Gruppenzugehörigkeiten der Items anzeigen.
Allerdings wird der fehlende Dopelpunkt dennoch weitreichende Folgen haben, dann damit ist die items-Datei ungültig. Entweder werden nur die ITems bis zu dem falsch definierten eingelesen, oder evtl. auch gar nicht (steht im openhab.log. Sinngemäß: ... loading <dateiname>.items -> ... has errors, therfor ignoring it )
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten