Seite 1 von 3

Sonnenbatterie Daten auslesen per JSON

Verfasst: 29. Mär 2020 21:10
von HomerJ.S.
Hi Leute,

ich nutze Openhab nun schon ne ganze Weile, die meisten meiner Things sind MQTT Teile. Da hab ich kürzlich auch den Wechsel auf MQTT2 mitgemacht. Da kann ich mich noch dunkel daran erinnern, dass Openhab die Textdateien nicht mehr nutzt (oder bezieht sich das nur auf MQTT?).

Aber nun zum eigentlichen Thema.
Ich hab seit neustem eine Solarbatterie von Sonnen. Da gibt's kein Binding dafür, aber die Batterie hat eine Seite auf der sie ihre Daten per JSON zur Verfügung stellt. Für mich sind da einige Daten interessant, z.B. ob die Batterie voll ist, weil ich dadurch andere Verbraucher steuern möchte.
Hier mal ein Bild der JSON Seite:
Bildschirmfoto von 2020-03-29 20-56-01.png
Soweit so gut. Meine Recherchen zu dem Thema haben mich etwas verwirrt. Ich hab zwar die Beschreibung wie man das einbindet gefunden, aber ich werd irgendwie nicht schlau draus.
Zum Einen kann ich die Webseite in den Cache laden - muss ich das oder kann ich das tun?
Dann wird beschrieben, dass ich das Binding konfigurieren muss und weiter unten in der Anleitung (openhabdoc.readthedocs.io - http Binding) wird beschrieben, dass ich ein item anlegen muss (in dem dann die Adresse wieder drin steht). Dann wird da noch von einer getValue.js Datei gesprochen, ist die nun wieder ein Kann oder ein Muss?
Und was mich total verwirrt ist, dass die ganzen Anleitungen immer für die Version 1 von Openhab sind und demnach alles in den Dateien geregelt wird. Aber seit 2.0 oder 2.4 soll man doch nur noch mit der Paper UI arbeiten. In der Paper UI kann ich aber nur das Binding installieren, eine Webseite kann ich da nicht eingeben.

Kurzum ich bin verwirrt und bitte um ein klein wenig Hilfe.

Vielen Dank,
Homer

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 30. Mär 2020 14:47
von udo1toni
Schade, dass Du nur einen Screenshot sendest und nicht das zurückgelieferte JSON Objekt (Auf Rohdaten umschalten und als Code hier posten)

Das http Binding ist ein V1 Binding, das heißt, es kann eigentlich nur über Textdateien konfiguriert werden. Eigentlich deshalb, weil Du zumindest einen Teil der Konfiguration (den http Cache) auch über Paper UI vornehmen kannst, indem Du dort auf Configuration->Bindings->Http->Expert Mode gehst und anschließend die Parameter mittels Add Parameter hinzufügst. Du brauchst zum einen einen Cache Namen, z.B. solarbat, dann eine URL und ein Updateinterval. Eingegeben wird das dann als

Code: Alles auswählen

solarbat.url=http://192.168.1.12:8080/api/v1/status
und

Code: Alles auswählen

solarbat.updateInterval=60000
für einmal in der Minute.
Die Verknüpfung zu den Items erfolgt nun zwingend über eine *.items Datei, da Paper UI nicht in der Lage ist, die Verknüpfungen zu V1 Bindings herzustellen. z.B. für PAC_total_W:

Code: Alles auswählen

Number SB_PAC_total_W "PAC total [%.0f W]" { http="<[solarbat:60000:JSONPATH($.PAC_total_W)]" }
Die JSONPATH Transformation muss installiert sein, ebenso natürlich das http Binding-
Der angegebene Pfad sollte eigentlich passen, genau kann ich das aber nur sagen, wenn ich die gelieferten Rohdaten sehe.

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 30. Mär 2020 20:10
von HomerJ.S.
Hi,

danke für die schnelle Antwort. Das war ja dann doch einfacher als gedacht. Genau wie du beschrieben hast funktioniert's auch. Ich hab mich dann doch dafür entschieden die PaperUI außen vor zu lassen, wenn ich schon an die Dateien ran muss ist's dort doch einfacher.

Für alle die das auch umsetzen wollen hier mein funktionierender Code:
Die http.cfg im Ordner services :

Code: Alles auswählen

solarbat.url=http://192.168.1.12:8080/api/v1/status
solarbat.updateInterval=60000
Und meine sonnen.items hat diesen Eintrag:

Code: Alles auswählen

Number  sonnen_ladezustand  "Batterie Ladezustand [%d %%]"  <battery>    { http="<[solarbat:60000:JSONPATH($.USOC)]" }
Number  sonnen_produktion  "Solaranlage Produktion [%d W]"  <sun>    { http="<[solarbat:60000:JSONPATH($.Production_W)]" }
Number  sonnen_verbrauch  "Stromverbrauch aktuell [%d W]"  <energy>    { http="<[solarbat:60000:JSONPATH($.Consumption_W)]" }
Number  sonnen_einspeisung  "Solaranlage Einspeisung [%d W]"  <energy>    { http="<[solarbat:60000:JSONPATH($.GridFeedIn_W)]" }
Number  sonnen_ladung  "Batterie Transfer [%d W]"  <energy>    { http="<[solarbat:60000:JSONPATH($.Pac_total_W)]" }
So wird mir der Ladezustand, die aktuelle Stromproduktion, der aktuelle Verbrauch, Netzeinspeisung und Ladung angezeigt. Es gäbe noch mehr Infos, aber das reicht mir.


Nochmal danke!

Servus
Homer

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 5. Jan 2021 12:17
von mr.b4
Hallo, ich würde das gern in OH3 anwenden.
Das HTML Binding ist jetzt ja grafisch zu konfigurieren.

U.a lässt sich JSON als Datentyp auswählen? Ist das zu tun?

Über welches Label wird der Bezug "solarbat" zum Item hergestellt?

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 5. Jan 2021 14:37
von HomerJ.S.
Hi,
nach dem Upgrade auf OH3 ist das textbasierte Thing verschwunden. Ich musste also ein neues anlegen.

Zuerst das neue HTTP Binding installieren.
Dann ein HTTP Thing anlegen - die Base URL lautet bei mir: http://192.168.1.12:8080/api/v1/status
Danach wird ein Channel angelegt und für jeden Wert einen eigenes Item verlinkt. Das Profil des Items ist dann JSONPATH und die JSONPath Expression ist z.B. Production_W (also so wie der Wert in der API angezeigt wird.
Bei den Items ist wichtig, dass im Label die Art des Wertes definiert wird, bei meinem Production_W sieht das so aus: Solaranlage Produktion [%d W] - wenn man das nicht macht dann wird der Wert nicht in der Sitemap angezeigt.
Bildschirmfoto von 2021-01-05 14-31-45.png
Bildschirmfoto von 2021-01-05 14-31-53.png
Bildschirmfoto von 2021-01-05 14-32-17.png
Ich hoffe das war verständlich.

Servus
Homer

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 5. Jan 2021 17:14
von int5749
mr.b4 hat geschrieben: 5. Jan 2021 12:17 Hallo, ich würde das gern in OH3 anwenden.
Das HTML Binding ist jetzt ja grafisch zu konfigurieren.
Das ist so ja nicht ganz richtig. Es kann auch grafisch konfiguriert werden, es geht aber auch über eine .things Datei

z.B. am Beispiel des Abfallkalenders

Code: Alles auswählen

Bridge http:url:abfallkalender "Abfallkalender" @ "Internet" [
	baseURL="https://www.umwelt-webmedia.de/caldownload/bc250e0a4bc5b85jennjdf41b0f524c9.ics",
	  refresh=360,
	  ignoreSSLErrors=false,
	  commandMethod="GET",
	  timeout=3000,
	  bufferSize=2048
	] {
		Channels:
			Type string : ABF1_NAME				"Nächste Abholung"			[ stateTransformation="JS:abfall_naechste_abholung_name.js", mode="READONLY"]
			Type datetime : ABF1_DATE			"Datum nächste Abholung"	[ stateTransformation="JS:abfall_naechste_abholung_datum.js", mode="READONLY"]
			Type string : ABFALL_ICAL_heute		"Abholung heute"			[ stateTransformation="JS:abfall_heute.js", mode="READONLY"]
			Type string : ABFALL_ICAL_morgen	"Abholung morgen"			[ stateTransformation="JS:abfall_morgen.js", mode="READONLY"]
		}
Ich bevorzuge die Konfiguration über die Datein ;-) Ob dies gut ist, weiß ich nicht, aber für mich ist es hilfreicher die Dinge zu verstehen und zu sichern.

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 5. Jan 2021 17:52
von HomerJ.S.
@int5749
Ich bevorzuge die Konfiguration über die Datein ;-) Ob dies gut ist, weiß ich nicht, aber für mich ist es hilfreicher die Dinge zu verstehen und zu sichern.
Ich seh das grundsätzlich genauso wie du. Die grafische Oberfläche hat sicher ihre Vorteile, aber wenn da was nicht 100% dokumentiert ist sucht man ewig nach ner Lösung.
Aber, ich bin mit OH2.2 eingestiegen und hab damals fast alles mit MQTT gemacht. Irgendwann kam dann das Update und ich konnte meine ganzen Things und Items neu anlegen, weil die Textdatei nicht mehr unterstützt wurde und somit verschwanden. Und bei dem HTTP Binding ist mir das jetzt wieder passiert, auch wenn es einen Weg gibt es trotzdem mit der Textdatei zu machen.
Ich denke der Weg geht hin zur grafischen Oberfläche, was sicher Segen und Fluch zugleich ist. Aber für eine breitere Userbasis ist das wohl der einzige Weg.
Ich werde jetzt alles was geht grafisch machen um solche Probleme zu vermeiden, allerdings hoffe ich dass meine Textrules für immer unterstützt werden.

Servus

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 5. Jan 2021 23:18
von mr.b4
Vielen Dank für die Anleitung.
Leider stelle ich mich trotzdem etwas ungeschickt an. Es kommt nur "Null" an...
Bei "Add Channel" sind Label und Identifier frei zu befüllen?
Sind die Werte als String oder Number zu handhaben?
Wenn ich Bild2 richtig verstehe, dann sind es 5 items pro channel? oder seh ich das falsch?
Sind Format und Einheit bei Channel oder Item einzustellen? letzteres bietet ja unter advanced ein Feld.

Entschuldigt die vielen Fragen, aber ich hab leider schon sehr viele Stunden ver****, und evtl nur aufgrund eines fehlenden Neustarts die richtige Konfiguration übersehen.

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 6. Jan 2021 09:40
von udo1toni
HomerJ.S. hat geschrieben: 5. Jan 2021 17:52 ich bin mit OH2.2 eingestiegen und hab damals fast alles mit MQTT gemacht. Irgendwann kam dann das Update und ich konnte meine ganzen Things und Items neu anlegen, weil die Textdatei nicht mehr unterstützt wurde und somit verschwanden. Und bei dem HTTP Binding ist mir das jetzt wieder passiert, auch wenn es einen Weg gibt es trotzdem mit der Textdatei zu machen.
Der Punkt ist an dieser Stelle aber ein anderer. Du hast unter OH2.2 mit mqtt1 gearbeitet und hast das dann später auf mqtt2 umgestellt. mqtt2 ist grundsätzlich anders zu konfigurieren als mqtt1, das wurde auch explizit erklärt. Mit http ist es das gleiche: Du steigst von http1 auf http2 um (auch wenn http2 nie für openHAB2 offiziell zur Verfügung stand - ich habe es unter OH2.5.10 laufen, weil ich es damals als Testballon eingerichtet habe).
bei http ist es sogar so, dass die Konfiguration fast 1:1 zu übernehmen ist, weil der http cache von http1 jetzt halt ein Thing ist und die Konfiguration der Items einfach in den Channels eingetragen wird.

Things ließen sich aber immer auch über Textdatei konfigurieren, daran hat sich auch nichts geändert. Unter OH3 sollte man aber besser das Thing über die UI anlegen und anschließend (bei Bedarf) den Rest über yaml konfigurieren.

Re: Sonnenbatterie Daten auslesen per JSON

Verfasst: 6. Jan 2021 10:53
von HomerJ.S.
@mr.b4
Beim Channel sind nur Label und Identifier zu befüllen, der Channel ist bei mir ein String (das ist aber egal, glaub ich)
Die Items sind Number.
Channel brauchst du nur den einen, wieviel Items du zu dem verlinkst liegt bei dir, für jeden Wert den du aus dem JSON extrahieren willst ein Item. Ich hab halt diese fünf, weil die anderen Werte für mich nicht interessant sind. Also für die Produktion ein Item, für den Ladezustand ein Item usw.
Die Werte werden bei den Items angegeben, geht ja nicht anders der Channel enthält ja verschiedene Werte. Beim Channel ist nix weiter zu konfigurieren.
Hier nochmal ein Bild eines Items:
Bildschirmfoto von 2021-01-06 10-46-43.png.jpg
Ich hoffe das bringt dich weiter. Frag nochmal nach wenn's nicht klappen will, keine Scheu dafür ist das Forum da.

Servus