ESP_Easy nach openHAB über Json

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
glitzi
Beiträge: 4
Registriert: 4. Mai 2019 12:05
Answers: 0

ESP_Easy nach openHAB über Json

Beitrag von glitzi »

Hallo,

über ESP_Easy bekomme ich folgenden JSON

Code: Alles auswählen

{"Sensors":[
{
"TaskValues": [
{"ValueNumber":1,
"Name":"Wasser-Count",
"NrDecimals":0,
"Value":0
},
{"ValueNumber":2,
"Name":"Wasser-Total",
"NrDecimals":0,
"Value":0
},
{"ValueNumber":3,
"Name":"Wasser-Time",
"NrDecimals":0,
"Value":0
}],
"TaskEnabled":"true",
"TaskNumber":1
}
],
"TTL":60000
}
Wie müsste jetzt mein js File in openHAB aussehen damit ich die Werte

"Wasser-Count"
"Wasser Total"
"Wasser-Time"

extrahieren kann?

Danke für die Hilfe!

Gruß Mirco

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

Re: ESP_Easy nach openHAB über Json

Beitrag von udo1toni »

Du brauchst drei Items und kein js Fils, stattdessen musst Du die JSONPATH Transformation installieren.
Wenn Du mqtt2 verwendest, sieht das Thing so aus:

Code: Alles auswählen

Thing topic water "Wasserzähler" @ "mqtt" {
    Channels:
        Type number : count "Count" [ stateTopic= "espEasy/json", transformationPattern="JSONPATH:$.Sensors[0].TaskValues[?(@.Name=='Wasser-Count')].Value" ]
        Type number : total "Total" [ stateTopic= "espEasy/json", transformationPattern="JSONPATH:$.Sensors[0].TaskValues[?(@.Name=='Wasser-Total')].Value" ]
        Type number : time  "Time"  [ stateTopic= "espEasy/json", transformationPattern="JSONPATH:$.Sensors[0].TaskValues[?(@.Name=='Wasser-Time')].Value" ]
}
Das StateTopic muss natürlich angepasst werden, genau wie der konkrete Name des Things, aber das transformationPattern sollte so passen.
Man könnte auch für TaskValues[] innerhalb der eckigen Klammern 0, 1 und 2 schreiben, aber der angegebene Filter ist eindeutig, so dass es nicht zu Verwechslungen kommen kann, falls ein Sensorwert mal an andererer Stelle ausgeliefert wird.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

glitzi
Beiträge: 4
Registriert: 4. Mai 2019 12:05
Answers: 0

Re: ESP_Easy nach openHAB über Json

Beitrag von glitzi »

Hallo,

Danke erstmal, werde es heute gleich mal ausprobieren.

Den Weg über MQTT wollte ich umgehen und eine Abfrage über die http Seite mit mit der Json Ausgabe von ESPEasy gehen.

Macht MQTT mehr Sinn?

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: ESP_Easy nach openHAB über Json

Beitrag von sihui »

glitzi hat geschrieben: 25. Jan 2020 09:49 Macht MQTT mehr Sinn?
In Zusammenhang mit ESPEasy läuft MQTT über openHAB jedenfalls absolut stabil. Keine Transformation nötig.
Das jemand das über http versucht habe ich noch nicht gelesen ... aber man lernt ja immer wieder hinzu.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

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

Re: ESP_Easy nach openHAB über Json

Beitrag von udo1toni »

MQTT ist eine M2M Schnittstelle (Maschine zu Maschine) und wird hervorragend von openHAB unterstützt. Du kannst Moquette als Broker verwenden (das ist der embedded mqtt Broker, der sich über Paper UI bequem installieren lässt) oder auch Mosquitto. Mosquitto ist ein ausgewachsener Open Source mqtt Server, der den Standard meines Wissens vollständig unterstützt (z.B. auch verschlüsselte Verbindungen und User+Passwort Zugang), während Moquette nur die Grundfunkitionen bietet (kein User+Passwort, keine verschlüsselte Kommunikation), dafür aber direkt aus openHAB zu installieren und ohne weitere Konfiguration in Betrieb zu nehmen ist.
Es gibt auch noch andere Broker, ab wenn wir uns im openHAB Umfeld bewegen, dürften diese beiden Broker zusammen an der 100%-Marke kratzen ;)

Die Verbindung über http ist natürlich ebenso möglich, allerdings ist http eher als Weg zu verstehen, wenn es anders nicht geht.
Noch dazu ist das http Binding bisher nicht nach openHAB2 portiert, das heißt, es handelt sich um eine V1 Binding. Für den Betrieb solcher Bindings benötigt openHAB eine Zwischenschicht (wird automatisch eingerichtet, wenn man V1 Bindings nutzt). Das ist zum jetzigen Zeitpunkt noch egal, aber in openHAB3 wird es dieses Compatibility Layer nicht mehr geben, die Pflege ist extrem aufwändig (letztlich wird eine openHAB1 Umgebung emuliert) und keiner der Entwickler ist bereit, sich weiter damit zu beschäftigen. Sprich: Wenn Du Dich jetzt davon abhängig machst, wirst Du später Probleme bekommen.

Natürlich wird http auch nach V2 portiert werden - dafür ist es als Kommunikationsweg einfach zu wichtig - aber dann wirst Du alles von Grund auf neu konfigurieren müssen, denn V1 Bindings und V2 Bindings sind von der Konfiguration her grundverschieden.

Also definitiv JA, mqtt ist wesentlich sinnvoller, sobald mqtt zur Verfügung steht.

Im Übrigen ist es wirklich simpel einzurichten: Broker installieren, Addon installieren, Zugangsdaten in Broker eintragen (falls gewünscht), im Addon eine Bridge erstellen, in der die Zugangsparameter zum Broker hinterlegt werden, im Device ebenfalls die Zugangsparameter für den Broker eintragen, unterhalb der Bridge für jedes Device ein Thing anlegen, unterhalb der Things für jede Eigenschaft einen Channel anlegen (also z.B. einen Number Channel für jeden Zählerstand, mit dem Topic und der Anweisung, wie die Daten zu interpretieren sind).

Es gibt außerdem nette Tools, um zu prüfen, was in mqtt passiert, z.B. mqtt.fx (PC) oder mqtt spy (java, sollte auf nahezu jeder Plattform laufen), aber auch solche die auf dem Handy laufen (sowohl Android als auch iOS) und zwar genauso kostenlos. Damit kann man dann die Kommunikation auf dieser Ebene überwachen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

glitzi
Beiträge: 4
Registriert: 4. Mai 2019 12:05
Answers: 0

Re: ESP_Easy nach openHAB über Json

Beitrag von glitzi »

Hallo,

danke für die umfangreiche Erklärung, werde mich jetzt mal an die MQTT Anbindung wagen.

Noch eine Frage an die Profis:

ich habe folgende Zeile in openHAB um den Zählerstand abzufragen, hier muss jedoch noch das "Komma" durch "Punkt" ersetzt werden.

Code: Alles auswählen

Number YL_Aktueller_Verbrauch_test "aktuell EG test [%.3f kWh]" <energy>    { http="<[http://10.10.10.150/a?f=j:5000:JSONPATH($.cs0)]" }
vorher habe ich dies durch folgenden Code gemacht, würde jetzt aber auf die js Files verzichten.

Code: Alles auswählen

http="<[http://10.10.10.150/a?f=j:5000:JS(getZaehlerStrom2.js)]

File:
JSON.parse(input).cs0.replace(",", ".").replace(" ", "");

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

Re: ESP_Easy nach openHAB über Json

Beitrag von udo1toni »

Wenn http hier die einzige Möglichkeit ist, musst Du auch bei der jetzigen Lösung bleiben.
Falls innerhalb des JSON Objekts Kommata als Dezimaltrennzeichen verwendet werden, müsste man eigentlich mal mit dem Hersteller sprechen ;)
Wenn es um mqtt geht, da kann man tatsächlich mehrere Transformations miteinander verketten. Die einfachste Variante wäre aber vermutlich dennoch, das tatsächlich mit JavaScript zu erledigen, wobei man halt das Problem hat, für jeden Channel eine eigene Datei anlegen zu müssen.
Alternativ lässt man das Ergebnis in einen String Channel schreiben, definiert je Channel zwei Items (eins String und eins Number), benennt diese geschickt, packt sie in zwei Gruppen und schreibt eine universelle Rule, welche sich um die Konvertierung kümmert. Die Rule reagiert dann auf Member of gString changed, sucht in gNumber das passende Item zum triggernden Item und speichert in diesem den konvertierten Wert. Hört sich kompliziert an, ist es aber im Grunde nicht.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten