Hichi IR Wifi mqtt Werte auslesen

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
Ricotchet
Beiträge: 17
Registriert: 30. Okt 2019 18:54
Answers: 0

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von Ricotchet »

udo1toni hat geschrieben: 15. Jan 2023 18:01 Ah. Du nutzt drei Leseköpfe mit jeweils eingebautem WLAN?

Das Problem ist, dass auf dem identischen Topic völlig unterschiedliche JSON Objekte ausgeliefert werden.
Da hilft eine Verkettung von JSONPATH mit REGEX:

Code: Alles auswählen

Thing topic 1EMH12345678 "Z1 Hauptzähler" @ "MQTT" {
	Channels:
		Type string : z1_Power_curr  "Z1 Power Current" [
			stateTopic="tele/tasmota_F9A39A/SENSOR"
			transformationPattern="REGEX:(.*_curr.*)∩JSONPATH:$[0].Power_curr"
		]
		Type number : z1_180  "Z1 Zählwerk 1.8.0 (in)" [
			stateTopic="tele/tasmota_F9A39A/SENSOR",
			transformationPattern="REGEX:(.*_in.*)∩JSONPATH:$[0].Total_in"
		]
		Type number : z1_280  "Z1 Zählwerk 2.8.0 (out)" [
			stateTopic="tele/tasmota_F9A39A/SENSOR",
			transformationPattern="REGEX:(.*_out.*)∩JSONPATH:$[0].Total_out"
		]
}
Das ∩ bekommst Du bequem über den Hilfstext zum transformationPattern, oder halt von hier... ;)
REGEX liefert eine leere Zeichenkette, wenn der String nicht matcht, woraufhin JSONPATH keinen Versuch unternimmt, den Channel upzudaten.
Hi zusammen habe ein ähnliches Problem habe mich an dem Beispiel oben orientiert jedoch wird nur das Thing z1_Power_curr aktualisiert
in z1_total_in und z1_total_out steht Null

hier mein Code

Code: Alles auswählen

Thing topic hitchi "Hauptzähler" @ "Network" 
    {
    Channels:
        Type string : z1_Power_curr  "Power Current"       [stateTopic="tele/tasmota_107FA7/SENSOR", transformationPattern="REGEX:(.*_curr.*)∩JSONPATH:$.SML.Power_curr"]
        Type string : z1_total_in    "Energie Verbrauch"   [stateTopic="tele/tasmota_107FA7/SENSOR", transformationPattern="REGEX:(.*_in.*)∩JSONPATH:$.SML.Total_in"]
        Type string : z1_total_out   "Energie Einspeisung" [stateTopic="tele/tasmota_107FA7/SENSOR", transformationPattern="REGEX:(.*_out.*)∩JSONPATH:$.SML.Total_out"]
    }
Hier noch die Items

Code: Alles auswählen

Number hitchi_power "Netz Leistung [%.1f W]"         <energy> (OpenDTU) {channel="mqtt:topic:Mosquitto:hitchi:z1_Power_curr"}
Number hitchi_in    "Energie Bezug [%.3f kWh]"       <energy> (OpenDTU) {channel="mqtt:topic:3448a27a:hitchi:z1_total_in"}
Number hitchi_out   "Energie Einspeisung [%.3f kWh]" <energy> (OpenDTU) {channel="mqtt:topic:3448a27a:hitchi:z1_total_out"}
DIe JSONs sehen wie folgt aus

Code: Alles auswählen

{
  "Time" : "2023-08-02T18:29:10",
  "SML" : {
    "Power_curr" : 479
  }
}

Code: Alles auswählen

{
  "Time" : "2023-08-02T18:29:30",
  "SML" : {
    "Total_out" : 40
  }
}

Code: Alles auswählen

{
  "Time" : "2023-08-02T18:29:41",
  "SML" : {
    "Total_in" : 381
  }
}
Alle im selben Topic "tele/tasmota_107FA7/SENSOR""

Ricotchet
Beiträge: 17
Registriert: 30. Okt 2019 18:54
Answers: 0

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von Ricotchet »

Hab den Fehler Gefunden für die Doku lasse ich es hier stehen die Items waren falsch
so ist es richtig

Code: Alles auswählen

Number      hitchi_power     "Netz Leistung [%.1f W]"                    <energy>     (OpenDTU)    {channel="mqtt:topic:Mosquitto:hitchi:z1_Power_curr"}
Number      hitchi_in        "Energie Bezug [%.3f kWh]"                          <energy>     (OpenDTU)    {channel="mqtt:topic:Mosquitto:hitchi:z1_total_in"}
Number      hitchi_out       "Energie Einspeisung [%.3f kWh]"                    <energy>     (OpenDTU)    {channel="mqtt:topic:Mosquitto:hitchi:z1_total_out"}

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

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von udo1toni »

Ich habe mal Dein Posting ein wenig editiert :) der besseren Lesbarkeit halber...
Und da kansnt Du dann auch direkt Dein Problem sehen: Das erste Item ist über die mqtt Bridge mit dem Namen Mosquitto verbunden, die beiden anderen Items jedoch mit der mqtt Bridge 3448a27a.

Edit: Super, Du hast den Fehler schon selbst gefunden :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

whenze
Beiträge: 26
Registriert: 27. Nov 2018 22:12
Answers: 0

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von whenze »

Guten Tag zusammen,
ich wollte mich mal mit einer Frage genau zu dem Hichi-Gerät reinmogeln...
Ich möchte mir in eine OH4 -Page den aktuellen Stromverbrauch darstellen lassen. Auch der Zählerstand in von Interesse.
Nach vielen Versuchen ist es mir gelungen, den MQTT-String in OH einzulesen. (Ist mein erster Anlauf mit MQTT)
Ich bekomme auch sekundenaktuell den Verbrauch dargestellt.
Der MQTT-String sieht folgendermaßen aus:

Code: Alles auswählen

14:01:17.470 MQT: tele/Stromzaehler/SENSOR = {"Time":"2023-08-10T14:01:17","SM":{"akt_Verbrauch":411}}
Der Thing (Code aus der UI) sieht wie folgt aus:

Code: Alles auswählen

UID: mqtt:topic:a9eeb17427:Stromzaehler
label: Stromzaehler
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:a9eeb17427
location: Keller
channels:
  - id: Standard
    channelTypeUID: mqtt:string
    label: Hichi Stromzähler
    description: ""
    configuration:
      stateTopic: tele/Stromzaehler/SENSOR
Als Channel habe ich dann eine Zahl definiert, die ich über den JasonPath "$.SM.akt_Verbrauch" auch darstellen kann.
Soweit so gut, ich habe da nur 2 Fragen:
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.

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.

Vielleicht hat ja jemand eine Idee....

Liebe Grüße

Wolfram

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

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von udo1toni »

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:

Code: Alles auswählen

%.1f kWh
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.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

whenze
Beiträge: 26
Registriert: 27. Nov 2018 22:12
Answers: 0

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von whenze »

Hallo Udo,
vielen Dank!
Ich habe einen Teil ausprobiert und wie immer, kaum macht man es richtig....
Ich muss mir das aber noch in Ruhe anschauen, so ganz verstanden habe ich noch nicht alles. Aber ich versuche mich durchzukämpfen....

Auf jeden Fall nochmals Danke!

Wolfram

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

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von udo1toni »

Gerne nachfragen :) ich neige halt dazu auszuschweifen...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

hongkongMike
Beiträge: 2
Registriert: 6. Nov 2023 16:20
Answers: 0

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von hongkongMike »

schultzi007 hat geschrieben: 31. Okt 2022 09:38 Oh, da habe ich mich falsch ausgedrückt - sorry.
Der Tasmota Hichi läuft und ich sehe auch die Werte über das Webinterface und auch im MQTT-Explorer.
In OH3 läuft der MQTT-Broker und auch das Think vom Tasmota ist "online".
In der Tasmota-Console sehe ich den mqtt string:

Code: Alles auswählen

09:28:56.762 MQT: tele/tasmota_E3A268/SENSOR = {"Time":"2022-10-31T09:28:56","Haus ":{"total_in":2948.718,"total_out":15252.411,"Power_curr":-1842}}
Über einen Link soll das Item den momentanen Strom verbrauch uns 2 andere Items die Zählerstände darstellen
Anzeigewert ist bei allen aber NULL.

Der Channel-MQTT State Topic ist

Code: Alles auswählen

tele/tasmota_E3A268/SENSOR
Der Channel-MQTT Command Topic ist ebenfalls

Code: Alles auswählen

tele/tasmota_E3A268/SENSOR
Die JSON Transformation ist :

Code: Alles auswählen

JSONPATH:$.Haus.Power_curr
Irgendwas scheint da vielleicht falsch zu sein ?!
Ich habe auch das Problem (vier Werte in einem String), nutze einen Hitchi Lesekopf auf Apator Picus.
udo1toni hat ja ein Script veröffentlich, ich weiss nur nicht wo und wie ich das Jason Skript eintragen kann

hongkongMike
Beiträge: 2
Registriert: 6. Nov 2023 16:20
Answers: 0

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von hongkongMike »

udo1toni hat geschrieben: 31. Okt 2022 10:48 Ja, das ist falsch :)

Punkt eins: MQTT benötigt immer und ausnahmslos zwei unterschiedliche Topics, falls auf einem Channel sowohl gesendet als auch empfangen wird, stateTopic und commandTopic sind niemals gleich gesetzt.
Punkt zwei: Mag ja sein, dass Tasmota hier noch die Möglichkeit bietet, Befehle anzunehmen, nötig ist das aber sicher nicht. Also lass bitte das commandTopic im Zweifel komplett leer.
Punkt drei: Da das Topic drei Informationen überträgt, die Du alle haben willst (und eine vierte, auf die Du eventuell verzichten kannst, die aber auch interessant sein kann), wäre es sinnvoll, den Channel mehrfach zu verlinken. dazu muss die stateTransformation leer bleiben und der Channel muss von Typ String sein. Codeansicht:

Code: Alles auswählen

UID: mqtt:topic:mosquitto:hichi
label: Anbindung Stromzähler
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:mosquitto
channels:
  - id: json
    channelTypeUID: mqtt:string
    label: JSON Objekt
    description: ""
    configuration:
      stateTopic: tele/tasmota_E3A268/SENSOR
Nun hast Du das gesamte JSON Objekt in einem String und kannst Items zu diesem Channel hinzufügen.

Vorschag hierzu:

Code: Alles auswählen

Number   hichi_in    "Bezug"             {channel="mqtt:topic:mosquitto:hichi"[profile="transform:JSONPATH", function="$.['Haus'].total_in"]}
Number   hichi_out   "Einspeisung"       {channel="mqtt:topic:mosquitto:hichi"[profile="transform:JSONPATH", function="$.['Haus'].total_out"]}
Number   hichi_power "aktuelle Leistung" {channel="mqtt:topic:mosquitto:hichi"[profile="transform:JSONPATH", function="$.['Haus'].Power_curr"]}
DateTime hichi_date  "Messung von"       {channel="mqtt:topic:mosquitto:hichi"[profile="transform:JSONPATH", function="$.Time"]}
Leider gibt es keine Code-Anzeige für Items, deshalb muss ich hier auf das Format der *.items Dateien zurück greifen.
Ich habe hier auf das Semantic Model verzichtet, weil es für die Funktion irrelevant ist.
Die Konfiguraiton habe ich bei mir getestet, sieht dann so aus:
Screenshot 2022-10-31 104755.png

Die wichtigsten Punkte: Dein JSONPATH Ausdruck stimmt nicht. :) Und die JSONPATH Transformation gehört hier in den Link zwischen Channel und Item, das ist effizienter.

Achso... Warum muss der JSONPATH Ausdruck so komisch aussehen? Weil hinter dem Wort "Haus" noch ein Leerzeichen folgt. Vermutlich kannst Du das in Tasmota konfigurieren, dann wäre es das einfachste, das Leerzeichen zu entfernen, dann funktioniert auch der "normale" JSONPATH $.Haus.total_in usw. Das ist aber nur ein Detail ;)
Ich habe auch das Problem wie schultzi007, es werden in einem String 3 Werte plus time angezeigt (in der Konsole von Hichi in der Web Ansicht, ebenso im Broker)

Du hast dazu ein script erstellt, das ich gern verwenden würde, ich weiss aber nicht wo und wie ich das nutzen kann.

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

Re: Hichi IR Wifi mqtt Werte auslesen

Beitrag von udo1toni »

Nein, kein Script.

Poste bitte mal das vollständige Objekt, welches im Topic ankommt (und das Topic selbst).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten