Ich habe mir erlaubt, Dein Posting etwas aufzuhübschen
Bitte möglichst immer daran denken, Code als Code zu markieren, das macht es besser lesbar und man kann auch besser damit hantieren. Elementar bei yaml: yaml nutzt Einrückungen. Die Forensoftware entfernt alle Einrückungen - in der Folge stimmt also der angezeigte Code so gar nicht.
Aber auch andere Dinge können durchaus von der Forensoftware verändert werden, außer bei Code...
Auch Logausgaben sind als Code zu betrachten, damit der Zeilenumbruch nicht am Fenster ausgerichtet wird.
Zu Deinen Fragen:
whenze hat geschrieben: ↑10. Aug 2023 15:12
Im Log wird natürlich jede Sekunde ein Eintrag geschrieben, kann ich das irgendwie begrenzen oder komplett ausschalten? Alle anderen Meldungen gehen da ziemlich schnell unter.
Im Prinzip Nein, wobei es zwei Möglichkeiten gibt: 1. Du schaltest sämtliches Logging, Item Changes betreffend aus - eher keine Option, Du möchtest ja vielleicht doch das eine oder andere sehen.
2. Du definierst einen Filter im Logging. Damit kannst Du auf Itemebene (also anhand eines Filters, der auf bestimmte Itemnamen filtert) logzeilen unterdrücken. Ist aber nicht ganz einfach einzurichten, und wieder hast Du ein Problem, nämlich im Zweifel kein Logging, anhand dessen Du irgendwas kontrollieren könntest.
whenze hat geschrieben: ↑10. Aug 2023 15:12
Und ich bekomme immer folgenden Fehler im Log:
Code: Alles auswählen
2023-08-10 15:01:59.231 [WARN ] [ofiles.JSonPathTransformationProfile] - Could not transform state '{"Time":"2023-08-10T14:01:58","SM":{"akt_Verbrauch":413}}' with function '$.SM.Zaehlerstand' and format '%s'
Das Ziel, den aktuellen Stromverbrauch darzustellen, passt aber, der Wert in der Page stimmt. Nur die Größe des Logging und der Fehler stören mich.
Dieser Fehler ist leicht erklärbar, wenn Du Dir die Payload (nicht MQTT-String, sowas gibt es nicht...) in der Meldung anschaust, so kommt dort das feld
Zaehlerstand gar nicht vor.
Um das Problem lösen zu können musst Du die Definition Deines Channels ändern.
Wenn Du tatsächlich nur den einen Wert abgreifst (nur ein Item mit dem Channel verknüpft, nur ein JSONPath angegeben), sollte es reichen, in der incomming state Transformation ein passendes REGEX einzutragen. Gewöhnlich wird man aber stattdessen den Channel direkt auf number umstellen, schon wegen UoM (Units of Measurement)
Das sieht dann so aus:
Code: Alles auswählen
UID: mqtt:topic:a9eeb17427:Stromzaehler
label: Stromzaehler
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:a9eeb17427
location: Keller
channels:
- id: Zaehlerstand
channelTypeUID: mqtt:number
label: Hichi Stromzähler
description: ""
configuration:
stateTopic: tele/Stromzaehler/SENSOR
transformationPattern: REGEX:(.*Zaehlerstand.*)∩JSONPATH:$.SM.Zaehlerstand
unit: Wh
- id: Verbrauch
channelTypeUID: mqtt:number
label: Hichi Stromzähler
description: ""
configuration:
stateTopic: tele/Stromzaehler/SENSOR
transformationPattern: REGEX:(.*akt_Verbrauch.*)∩JSONPATH:$.SM.akt_Verbrauch
unit: W
Diese Channel verknüpfst Du dann mit zwei Number Items, welche Du dank UoM nun als Number:Energy bzw. Number:Power definierst, und zwar mit der Einheit Wh (bzw. W) - sowohl in dem Feld, welches den Namen unit trägt als auch in der stateDescription, dort kannst Du aber auch gerne kWh bzw. kW angeben:
In der Folge zeigt Dir das eine Item den Zählerstand in kWh mit einer Nachkommastelle an. Das andere Item zeigt die aktuell bezogene Leistung in Watt an. Den Verbrauch über z.B. den letzten Tag bekommst Du dann über die Persistence vom Zählerstand als Differenz zum Startzeitpunkt.
Ganz wichtig: Kontrolliere die Einheiten noch mal, da kommt es nämlich auf den Zählertyp an, was da kommt (ob Wh oder kWh). Die bezogene Leistung hingegen wird fast sicher immer in W übermittelt.
Das Zusammenspiel bei UoM: Im Channel kommt ein Wert an - bei mqtt immer als reiner Zahlenwert, deshalb muss über den Parameter unit erst definiert werden, welche Einheit zum Wert gehört.
Im Item bewirkt der Parameter unit, dass der angelieferte Wert in dieser Einheit im Item gespeichert wird. So wird der Wert auch in die Persistence übernommen (ohne Einheit).
Die stateDescription bezieht sich ausschließlich auf die Anzeige des Wertes.
Alle UoM Werte werden von openHAB vollautomatisch umgerechnet, soweit dies möglich ist, Du könntest Dir die bezogene Leistung also auch in Gigawatt oder Milliwatt anzeigen lassen, oder in Joule, in Kalorien... PS sind aber bisher nicht integriert...
Dein eigentliches Problem mit den Fehlermeldungen verschwindet durch die zusätzliche Transformation mit REGEX. Dabei werden hier zwei Transformations hintereinander verwendet, und da hier eine Schnittmenge gebildet wird, wird auch das betreffende Zeichen verwendet (welches nicht über die normale Tastatur erreichbar ist, dafür aber in der UI beim betreffenden Parameter im Hilfetext steht. transformationPattern gehört zu den Advanced Options.
Es sollte klar sein, dass der REGEX Transformation Service installiert sein muss.
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet