Wallbox JSON Frage, die 100ste :)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mr.b4
Beiträge: 67
Registriert: 11. Sep 2019 16:57
Answers: 0

Wallbox JSON Frage, die 100ste :)

Beitrag von mr.b4 »

Hallo,

ich habe meine Wallbox das WBEC Projekt gegönnt und erhalte die Daten u.A per JSON.
Ein "Umweg" über MQTT (auch möglich) scheint mir nicht sinnvoll, da ich ausser OH keinen entsprechenden "Partner" für das Gerät hätte.

So sehen die Daten aus

Code: Alles auswählen

{"wbec":{"version":"v0.4.5","bldDate":"Aug 18 2022 08:59:35","timeNow":"22:13:47"},"box":[{"busId":1,"version":"108","chgStat":2,"currL1":0,"currL2":0,"currL3":0,"pcbTemp":307,"voltL1":243,"voltL2":244,"voltL3":242,"extLock":1,"power":0,"energyP":0,"energyI":7.924,"energyC":0,"currMax":16,"currMin":6,"logStr":"00.779.2909/01 2116 005718","wdTmOut":60000,"standby":4,"remLock":1,"currLim":75,"currFs":0,"lmReq":0,"lmLim":255,"resCode":"0"}],"modbus":{"state":{"lastTm":945043,"millis":949851}},"rfid":{"enabled":false,"release":false,"lastId":""},"pv":{"mode":0,"watt":0},"wifi":{"mac":"8C:AA:B5:7B:3F:6D","rssi":-74,"signal":52,"channel":13}}
Ein HTML Thing habe ich schon erstellt, ebenso einen String Channel, und würde jetzt gern über die ITEMs die Werte abgreifen.
Allerdings ist das ja leicht verschachtelt (eckige Klammern).
Wie muss ich den JSON Path Ausdruck gestalten um z.B. currLim zu erhalten? Wie löse ich die Umrechnung der Einheiten am elegantesten?

Vielen Dank!

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

Re: Wallbox JSON Frage, die 100ste :)

Beitrag von udo1toni »

mr.b4 hat geschrieben: 5. Sep 2022 22:36 Ein "Umweg" über MQTT (auch möglich) scheint mir nicht sinnvoll, da ich ausser OH keinen entsprechenden "Partner" für das Gerät hätte.
Da herrscht ein Missverständnis.
MQTT ist einfach ein Kommunikationsprotokoll, genau wie http(s). MQTT ist dabei sehr einfach konfigurierbar und hat einen entscheidenden Vorteil: die Kommunikation läuft immer über Push. Natürlich kann ein Push auch angefordert werden. Bei http(s) muss openHAB aber gewöhnlich in regelmäßigen Abständen einen Pull auslösen, egal ob sich nun etwas geändert hat oder nicht, werden also Daten transportiert.
MQTT hat auch einen eingebauten Mechanismus, um zu prüfen, ob der Client erreichbar ist. Bei http(s) läuft es darauf hinaus, dass die Anfrage an den Client irgendwann in ein Timeout läuft. MQTT ist also schlicht das bessere Protokoll für M2M (Machine to Machine) Kommunikation.

Es ist auch nicht weiter schwer in Betrieb zu nehmen - Du benötigst lediglich den Broker (das ist gewöhnlich mosquitto, kann bei einer openHABian Installation einfach über openhabian-config installiert werden) und musst dann halt in openHAB eine mqtt Bridge einrichten (der Zugriff auf den Broker), im anderen mqtt Client (der Wallbox) die Zugangsdaten hinterlegen und zum Abschluiss noch ein generic mqtt Thing für die Wallbox in openHAB anlegen.
Wie gesagt, wenn man mal davon ausgeht, dass der Broker und die Bridge eingerichtet sind (also gleiche Voraussetzungen wie bei http, wo auch ein http Server vorausgesetzt ist), reduziert sich die Einrichtung dann auf das Hinterlegen der korrekten Topics und die Einrichtung von JONPATH zum zerlegen der Nachrichten.

Letzteren Schritt musst Du bei http ebenfalls machen.

Nun zu Deinem eigentlichen Problem, dem JSON:

Es bietet sich an (weil es hier ja um Read Only geht), das JSON Objekt in einem String Channel zu speichern. Auf diese Weise benötigst Du nur einen Channel (ob nun http oder mqtt spielt keine Rolle). Zu diesem Channel legst Du mehrere Links zu verschiedenen Items an. Dabei dürfen diese Items auch einen anderen Typ als String haben, z.B. Number.
Innerhalb des Links kannst Du nun (ein installiertes JSONPATH mal vorausgesetzt) eine JSONPATH angeben.
Um das Ganze etwas besser zu verstehen hier mal eine benutzerfreundliche Formatierung des JSON Objekts:

Code: Alles auswählen

{
	"wbec": {
		"version": "v0.4.5",
		"bldDate": "Aug 18 2022 08:59:35",
		"timeNow": "22:13:47"
	},
	"box": [
		{
			"busId": 1,
			"version": "108",
			"chgStat": 2,
			"currL1": 0,
			"currL2": 0,
			"currL3": 0,
			"pcbTemp": 307,
			"voltL1": 243,
			"voltL2": 244,
			"voltL3": 242,
			"extLock": 1,
			"power": 0,
			"energyP": 0,
			"energyI": 7.924,
			"energyC": 0,
			"currMax": 16,
			"currMin": 6,
			"logStr": "00.779.2909/01 2116 005718",
			"wdTmOut": 60000,
			"standby": 4,
			"remLock": 1,
			"currLim": 75,
			"currFs": 0,
			"lmReq": 0,
			"lmLim": 255,
			"resCode": "0"
		}
	],
	"modbus": {
		"state": {
			"lastTm": 945043,
			"millis": 949851
		}
	},
	"rfid": {
		"enabled": false,
		"release": false,
		"lastId": ""
	},
	"pv": {
		"mode": 0,
		"watt": 0
	},
	"wifi": {
		"mac": "8C:AA:B5:7B:3F:6D",
		"rssi": -74,
		"signal": 52,
		"channel": 13
	}
}
Der Ursprung des Baums wird in openHAB als $ dargestellt, die Trennung der Ebenen erfolgt bei JSONPATH über einen Punkt, die Namen der Knoten werden ausgeschrieben, Unbenannte Datensätze können Null-basiert gezählt werden und werden dann in eckigen Klammern geschrieben.
Deshalb ergibt sich für currLim folgender Ausdruck: $.box[0].currLim also im Knoten box der 1. (0) Datensatz, dort der Parameter currLim. Ergebnis ist dann 75 für obiges JSON Objekt.

Es gibt mit Visual Studio Code (bitte nicht mit Visual Studio verwechseln) einen tollen Editor, der mit zehntausenden Plugins erweitert werden kann. Unter anderem JSONPATH Status Bar ist ein Plugin, welches in der Statuszeile des Editors direkt anzeigt, wie der JSONPATH zum Element lautet, auf welchem gerade der Cursor steht.

Es gibt natürlich noch mächtige Tools, um z.B. aus einer Menge Datensätze denjenigen auszuwählen, bei dem ein bestimmter Parameter innerhalb des Datensatzes einen bestimmten Wert hat, z.B. die busId. Wenn Du mehrere Wallboxen dieses Typs hättest, würdest Du nur mit einer Box kommunizieren und alle Daten aller Boxen erhalten, jede in einem eigenen Datensatz. Dabei gibt es keine festgelegte Reihenfolge der Datensätze, die kann auch von Message zu Message wechseln. Hier ist es aber einfach, weil Du ja nur eine Wallbox hast.
Einen Zeitstempel von modbus bekommst Du z.B. über $.modbus.state.lastTm, dort gibt es keine unterschiedlichen Datensätze, also auch keine eckigen Klammern.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mr.b4
Beiträge: 67
Registriert: 11. Sep 2019 16:57
Answers: 0

Re: Wallbox JSON Frage, die 100ste :)

Beitrag von mr.b4 »

Vielen Dank für die ausführliche Antwort.
So funktioniert das jetzt schon mal! Und mein Verständnis für JSON ist gewachsen.
Da ich für das Zigbee-Zeug schon MQTT am Start habe, werde ich wohl aufgrund der genannten Vorteile die Box demnächst auch so einbinden.

mr.b4
Beiträge: 67
Registriert: 11. Sep 2019 16:57
Answers: 0

Re: Wallbox JSON Frage, die 100ste :)

Beitrag von mr.b4 »

Hallo zusammen,

es geht weiter mit der Wallbox.

Dort gibt es jetzt ein Feature zum PV Laden.
Den eingestellten Status kann ich über JSON auslesen.

Der Betriebsmodus (siehe unten) wird über einen HTML Befehl eingestellt.

Deaktiviert (0)
Aus (1)
PV-Laden (2)
Min+PV-Laden (3)

http://wbec.local/pv?pvMode=1

Nach zwei Stunden probieren am HTML Binding, meine Frage nun ins Forum, wie stelle ich den Channel ein damit ich den Befehl mit (0-3) generieren kann.

https://github.com/steff393/wbec/wiki/P ... chussladen
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Re: Wallbox JSON Frage, die 100ste :)

Beitrag von udo1toni »

Ist die Wallbox weiterhin über http angebunden, oder betrifft die Anbindung nun ausschließlich die zusätzliche Funktion? Wie ist das Thing definiert (insbesondere die baseURL)?
Es gibt grundsätzlich zwei verschiedene Methoden, einen Befehl per http abzusetzen, das sind GET und POST. Du musst prüfen, welche der beiden Methoden Du benötigst, um einen Befehl zur Box zu senden.
Außerdem wirst Du für den Parameter einen Platzhalter in der URL mit angeben müssen, das wäre %2$s (%2 ist das command, $s ist die Formatierung als String)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

mr.b4
Beiträge: 67
Registriert: 11. Sep 2019 16:57
Answers: 0

Re: Wallbox JSON Frage, die 100ste :)

Beitrag von mr.b4 »

Danke. ja, es geht "nur" um dieses Feature.
Die anderen Datenpunke hab ich über MQTT gemacht.

Mit einer kleinen Rule konnte ich mir da auch behelfen um die 4 Status abzusetzen.
Vielleicht schreib ich mal den Entwickler an, er möge das auch ins MQTT übernehmen...

Antworten