Items - Units Of Measurement Error

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
B0LT
Beiträge: 13
Registriert: 19. Dez 2023 18:49
Answers: 0

Items - Units Of Measurement Error

Beitrag von B0LT »

Hallo zusammen,

ich bin gerade dabei meine Items zu überarbeiten bzw neue hinzufügen und gleich passendende "Units Of Measurement" zu vergeben.

folgendes passiert nun:
Wenn ich ein Item was so aussieht einfüge:

Code: Alles auswählen

Number:Energy               hmt2000_yield_total_2       "Ertrag Gesamt String 2"                { channel="mqtt:topic:mqtt:hmt2000:hmt2000_yield_total_2" }
Und es passend anzeigt dann funktioniert es (In den Item passt es!)

Passt die "Zuordnung" nicht dann kann man ja laut Wiki wie folgt es anpassen:

Code: Alles auswählen

Number:Speed "Rainfall" { unit="mm/h" }

Bei mir sieht das nun bei einen anderen Item so aus:

Code: Alles auswählen

Number:Energy hmt2000_yield_day_2    { unit="Wh" }      "Ertrag Heute String 2"                       { channel="mqtt:topic:mqtt:hmt2000:hmt2000_yield_day_2" }
Und das produziert immer einen Error, der wie folgt aussieht (Zeile / position wird nicht stimmen)

Code: Alles auswählen

2024-06-23 20:18:37.083 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'hoymiles_inveter.items'
2024-06-23 20:18:37.084 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'hoymiles_inveter.items' has errors, therefore ignoring it: [102,15]: extraneous input '{' expecting RULE_ID
Egal wo und wie ich { unit="Wh" } Platziere kommen immer diese Fehler.

Code: Alles auswählen

2024-06-23 19:58:27.512 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'hoymiles_inveter.items'
2024-06-23 19:58:27.513 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'hoymiles_inveter.items' has errors, therefore ignoring it: [96,110]: missing EOF at '{'

2024-06-23 19:58:34.501 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'hoymiles_inveter.items'
2024-06-23 19:58:34.502 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'hoymiles_inveter.items' has errors, therefore ignoring it: [96,70]: missing EOF at '"Ertrag Heute String 1"'
was mach ich falsch?
ich weiß einfach nicht weiter bzw was er von mir will

Vl hat jemand einen Tipp für mich?

System: OpenHAB 4.1.3

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

Re: Items - Units Of Measurement Error

Beitrag von udo1toni »

Nein, die Definition ist so nicht korrekt.
Ganz wichtig:
Es gibt drei Stellen, die alle korrekt konfiguriert werden müssen. Gehe dabei am besten in Richtung des Datenflusses, d.h., fang im Channel an, z.B. so:

Code: Alles auswählen

Type number : hmt2000_yield_total_2 "Yield total" [stateTopic="...", unit="Wh" ] 
Wobei die angegebene unit die korrekte Unit sein muss, also die, in der der Status geliefert wird.

Anschließend musst Du Dich entscheiden, in welchem Format der Wert gespeichert werden soll (das bezieht sich auf den reinen Zahlenwert im Item *) und auf die Persistence)
Als Item:

Code: Alles auswählen

Number:Energy hmt2000_yield_total_2 "Ertrag Gesamt String 2" { channel="mqtt:topic:mqtt:hmt2000:hmt2000_yield_total_2", unit="kWh" }
Wähle die "Speicher-Unit" mit Bedacht, denn Du kannst sie nachträglich nicht mehr ändern (ohne die vergangenen Persistence Daten zu verfälschen).

Als drittes kannst Du die Anzeige beeinflussen. Diesen Parameter kannst Du jederzeit anpassen, denn er betrifft ja nur die Anzeige.
Als Ergänzung zum Item:

Code: Alles auswählen

Number:Energy hmt2000_yield_total_2 "Ertrag Gesamt String 2" { channel="mqtt:topic:mqtt:hmt2000:hmt2000_yield_total_2", unit="Wh", stateDescription=""[pattern="%.2f MWs"] }
Hier wären es dann MegaWattSekunden. :)

Die drei Units können unterschiedlich sein, man könnte die Energiemenge z.B. sogar in kcal ausgeben lassen :) wichtig ist nur, dass im Channel die Unit zum gelieferten Wert passt (wird also vom Gerät vorgegeben), im Item so gewählt wird, dass es für die Persistence passt - die unit wird auch in der Analyze Funktion genutzt und kann meines Wissens dort (bisher) nicht angepasst werden - und im stateDescription Pattern so gewählt wird, wie man den Wert ablesen möchte.

Im Gegensatz zur Definition der Anzeige über das Label

Code: Alles auswählen

Number:Energy hmt2000_yield_total_2 "Ertrag Gesamt String 2 [%.1f kWh]" ...
funktioniert die Definition über das Pattern überall, also sowohl in der Sitemap als auch in der Main UI (ausgenommen die Itemliste, in der immer der nackte Status angezeigt wird, also der Wert exakt so, wie er im Item gehalten wird).

*) gemeint ist damit, wenn Du innerhalb einer Rule die Einheit vom Status strippst: value = (Item.state as Number).floatValue wird der Wert in dieser Einheit geliefert
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

B0LT
Beiträge: 13
Registriert: 19. Dez 2023 18:49
Answers: 0

Re: Items - Units Of Measurement Error

Beitrag von B0LT »

Weltklasse, danke dir Udo!

Funktioniert perfekt. Und das beeinflusst auch meine Rules nicht, die Berechnungen rennen ganz normal weiter 8-)
Und auch die Sitemap räumt sich wahnsinnig auf dadurch - weil man nicht alles nocnmals reinschreiben muss. Außer man will es nochmals unter anderen Namen anzeigen (so wie bei mir 2,3 items)

Das einzige was ich jetzt noch schauen muss ist was passiert wenn ich in bestehende Items eingreife wo schon seit Jahren daten vorhanden sind - aber eben noch keine "units" dabei sind.
Grafana wird damit wieder keine Freude haben, da er mir dann kurzfristig die daten doppelt anzeigt. Ja klar, weil ich das Item angreife und in der Influx nun was anderes dabei steht.

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

Re: Items - Units Of Measurement Error

Beitrag von udo1toni »

B0LT hat geschrieben: 25. Jun 2024 00:31 Das einzige was ich jetzt noch schauen muss ist was passiert wenn ich in bestehende Items eingreife wo schon seit Jahren daten vorhanden sind - aber eben noch keine "units" dabei sind.
Grafana wird damit wieder keine Freude haben, da er mir dann kurzfristig die daten doppelt anzeigt. Ja klar, weil ich das Item angreife und in der Influx nun was anderes dabei steht.
Ja, aber nein. :)

Es gilt der gleiche Grundsatz wie oben erwähnt, nur musst Du halt schauen, in welcher Einheit die Zahlen bisher persistiert wurden. Exakt diese Einheit setzt Du dann als Unit und alles ist gut, denn: Die Unit wird nicht in die Persistence geschrieben. Was auch der Grund dafür ist, dass man sie nur einmalig setzen darf :)
Innerhalb der Persistence steht nur ein nackter Zahlenwert, auch bei influxDB, wo man die Einheit sehr leicht mittels Tagging hätte hinzufügen können, aber dann verhielte sich diese eine Erweiterung anders als alle anderen Erweiterungen.
Beim Auslesen der Persistence nutzt openHAB dann die im Item eingestellte Unit, um den Wert korrekt wiederzugeben.
Bis OH3.x gab es den Parameter nicht und in der Folge immer wieder massive Probleme mit der Persistence, deshalb wurde er mit OH4 eingeführt :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten