Fehlermeldung in openhab.log

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
toto1975
Beiträge: 47
Registriert: 8. Jan 2016 10:47
Answers: 1

Fehlermeldung in openhab.log

Beitrag von toto1975 »

Hallo in die Runde,

erstmal vielen Dank hier ans Forum, ohne euch hätte ich den Stromzähler wohl nie ans laufen bekommen. Es funktioniert jetzt alles soweit und die Daten werden mir auch korrekt in openHAB angezeigt.

Allerdings bekomme ich nun jede Menge Warnungen in Openhab angezeigt.

Code: Alles auswählen

2023-08-31 08:38:39.851 [WARN ] [ofiles.JSonPathTransformationProfile] - Could not transform state '{"Time":"2023-08-31T07:38:39","MT175":{"P":358.00}}' with function '$.['MT175'].L2' and format '%s'
2023-08-31 08:38:39.852 [WARN ] [ofiles.JSonPathTransformationProfile] - Could not transform state '{"Time":"2023-08-31T07:38:39","MT175":{"P":358.00}}' with function '$.['MT175'].L3' and format '%s'
2023-08-31 08:38:39.853 [WARN ] [ofiles.JSonPathTransformationProfile] - Could not transform state '{"Time":"2023-08-31T07:38:39","MT175":{"P":358.00}}' with function '$.['MT175'].L1' and format '%s'
2023-08-31 08:38:39.854 [WARN ] [ofiles.JSonPathTransformationProfile] - Could not transform state '{"Time":"2023-08-31T07:38:39","MT175":{"P":358.00}}' with function '$.['MT175'].E_in' and format '%s'
Kann es damit zusammenhängen das ich die einzelnen Items als Number bzw. Number:Power, Number:Energy, usw. formatiert habe aber das Generic MQQT Thing als String? Welche Einstellung muss ich ändern um diese ganzen Fehler zu beseitigen?

Viele Grüße
Torsten

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

Re: Fehlermeldung in openhab.log

Beitrag von udo1toni »

Nein.
Der Punkt ist, dass die Payload

Code: Alles auswählen

{
    "Time": "2023-08-31T07:38:39",
    "MT175": {
        "P":358.00
    }
}
den abgefragten Wert (z.B. L2) nicht enthält. Die Payload enthält ein JSON Objekt, aber dieses Objekt ist dynamisch und der Sender stellt nicht in jedem Telegramm alle Datenpunkte bereit.
Um die Warnmeldungen loszuwerden, musst Du die Transformation verketten, so:

Code: Alles auswählen

incommingValueTransformation: REGEX:(.*L2.*)∩JSONPATH:$.['MT175'].L2
Es werden also jeweils zwei Transformations ausgeführt, wobei die erste eine Regular Expression ist (selbstredend muss der REGEX Transformation Service installiert sein). Die Verknüpfung beider Transformations erfolgt mit dem Symbol ∩ (findest Du am einfachsten im Hilfstext des Feldes für die Transformation) REGEX gibt einen leeren String weiter, falls der Begriff L2 nicht im Objekt vorkommt, womit JSONPATH dann halt nichts zu parsen hat.

Die Verkettung von Transformations funktioniert leider nur direkt im Channel. Du solltest als Channeltyp für numerische Werte unbedingt auch Number wählen. Dann steht ein zusätzlicher Parameter unit zur Verfügung, in dem Du die gelieferte Einheit einträgst (also z.B. kWh für Kilowattstunden oder auch Ws für Wattsekunden, je nachdem, was der gewählte Datenpunkt liefert. Nur dann wird UoM (UnitsOfMeasurement) im restlichen System auch korrekt funktionieren.
In openHAB4 muss außerdem bei jedem UoM Item der ab OH4 im UoM Item ebenfalls vorhandene Parameter unit gesetzt werden, mit einer zum Typ passenden Einheit - welche Du hier wählst, ist aber Dir überlassen (für Number:Energy z.B. Ws, kWh, MWa, GJ, kcal...). Hier wird festgelegt, in welcher Einheit der konkrete Wert im Item vorliegt. In dieser Größe wird der Wert auch persistiert.
Schließlich kannst Du über die Metadaten des Items (State Description -> pattern) festlegen, wie der Wert dargestellt wird (auch hier hast Du freie Wahl unter den zum QuantityType passenden Einheiten). Die unit sollte einmalig festgelegt werden, das Pattern kannst Du jederzeit ändern. In der Sitemap kannst Du außerdem noch über das Label die Ausgabe des Wertes beeinflussen :) So viele Möglichkeiten, sich zu verheddern...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

toto1975
Beiträge: 47
Registriert: 8. Jan 2016 10:47
Answers: 1

Re: Fehlermeldung in openhab.log

Beitrag von toto1975 »

Hallo Udo,

vielen Dank für die schnelle Antwort. Den REGEX Transformation Service habe ich installiert (war noch das einfachste :D )

Wo wird der Code eingefügt? Ich habe ein Item unter den Channel angelegt. Unter Profile habe ich JSONPATH ausgewählt und bei JSONPath Ausdruck "$.['MT175'].L2" eingefügt.
2023-08-31 15_14_55-openHAB und 13 weitere Seiten - Persönlich – Microsoft​ Edge.png
Ich kann auch nur ein Punkt auswählen entweder JSONPATH oder REGEX.

PS: Der Negative Wert ist korrekt da an L2 der Microwechselrichter hängt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Fehlermeldung in openhab.log

Beitrag von udo1toni »

toto1975 hat geschrieben: 31. Aug 2023 15:20 Ich kann auch nur ein Punkt auswählen entweder JSONPATH oder REGEX.
Ich ziere mich selbst:
udo1toni hat geschrieben: 31. Aug 2023 12:29 Die Verkettung von Transformations funktioniert leider nur direkt im Channel.
Das Profile ist dafür nicht geeignet, das Profile MUSS aus Standard gesetzt sein.
Nutze stattdessen für jeden Wert einen eigenen Channel (alle Channel mit identischem stateTopic). Definiere die Channel als Number und setze schon im Channel die incomming Value Transformation (Show Advanced anhaken)
Und nutze gleich noch die Unit im Channel, so dass der Wert direkt mit der korrekten Einheit weitergereicht wird.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

toto1975
Beiträge: 47
Registriert: 8. Jan 2016 10:47
Answers: 1

Re: Fehlermeldung in openhab.log

Beitrag von toto1975 »

Perfekt, jetzt habe ich es verstanden und es funktioniert.

Vielen Dank

toto1975
Beiträge: 47
Registriert: 8. Jan 2016 10:47
Answers: 1

Re: Fehlermeldung in openhab.log

Beitrag von toto1975 »

Perfekt, jetzt habe ich es verstanden und es funktioniert.

Vielen Dank

Antworten