Autor Thema: Solar Wechselrichter direkter API Aufruf  (Gelesen 554 mal)

Offline stefan.apetz

  • New Member
  • *
  • Beiträge: 11
  • fhem - geil, aber da geht noch was :-)
Solar Wechselrichter direkter API Aufruf
« am: 07 August 2018, 16:11:09 »
Hallo,

nachdem meine Versuche meinen Solar Wechselrichter entweder über meinen Gavazzi Zähler oder das Solar Portax einzubinden in fhem nicht so verliefen wie ich wollte, möchte ich nun über die direkte API des Wechselrichters gehen.

Dazu kann man den Wechselrichter aufrufen mit http://192.168.178.55/api/realTimeData.html

Zurück kommt folgender http-response:

{"method":"uploadsn","version":"Solax_SI_CH_2nd_20160912_DE02","type":"AL_SE","SN":"CD2360D3","Data":[6.9,7.8,163.4,281.6,13.6,239.5,3184,37,14.3,5643.1,2542,1127,2196,57.61,0.13,7,27,99,0.0,1125.8,,,,,,,,,,,,,,,,,,,,,,2649.00,2325.50,,,,,,,,50.02,,,0.0,0.0,0,0.00,0,0,0,0.00,0,9,0,0,0.00,0,9],"Status":"2"}
Ich habe in einem Home Assistant Forum auch die Bedeutung der einzelnen Array-Positionen gefunden:

Live datastream
1: PV1 Current
2: PV2 Current
3: PV1 Voltage
4: PV2 Voltage
5: Grid Current
6: Grid Voltage
7: Grid Power
8: Inner Temp
9: Solar Today
10: Solar Total
11: Feed In Power
12: PV1 Power
13: PV2 Power
14: Battery Voltage
15: Battery Current
16: Battery Power
17: Battery Temp
18: ???
19: Battery Capacity
20: Solar Total 2

42: Energy to Grid
43: Energy from Grid

51: Grid Frequency

54: EPS Voltage
55: EPS Current
56: EPS VA
57: EPS Frequency

63: ???
68: ???
69: Status

Diese Werte möchte ich auch in fhem nutzen und alle zehn Sekunden abfragen.

Dazu habe ich ein httpmod Device definiert:

define SolaxData HTTPMOD http://192.168.178.55/api/realTimeData.html 10
attr SolaxData userattr get01JSON get01Name reading01Name reading01Regex requestHeader1 stateFormat userattr
attr SolaxData extractAllJSON 1
attr SolaxData get01JSON MyData
attr SolaxData get01Name MyValue
attr SolaxData reading01Name Data
attr SolaxData reading01Regex "Data":+\[(.*)\]
attr SolaxData requestHeader1 Content-Type: application/json
attr SolaxData room Solax
attr SolaxData showBody 1
attr SolaxData verbose 5

Ich erhalte jetzt in einem Reading (Data) alle Werte zurück:

Data
5.7,8.3,198.9,272.1,14.0,239.8,3308,37,14.3,5643.2,2658,1133,2258,57.61,0.14,7,27,99,0.0,1125.8,,,,,,,,,,,,,,,,,,,,,,2649.10,2325.50,,,,,,,,49.99,,,0.0,0.0,0,0.00,0,0,0,0.00,0,9,0,0,0.00,0,9

Frage: wie komme ich am geschicktesten an die im JSON Objekt in der Liste stehenden Werte zurück und Mappe die dann auf obige Gestalt auf die schönen Namen?

Interessant ist: wenn ich auf dem Objekt extractAllJSON anwende erhalte ich im Log einen Fehler:

2018.08.07 16:05:46 4 : SolaxData: GetUpdate called (update)
2018.08.07 16:05:46 4 : SolaxData: update timer modified: will call GetUpdate in 10.0 seconds at 2018-08-07 16:05:56
2018.08.07 16:05:46 4 : SolaxData: AddToQueue adds update, initial queue len: 0
2018.08.07 16:05:46 5 : SolaxData: AddToQueue adds type update to URL http://192.168.178.55/api/realTimeData.html, no data, header Content-Type: application/json, retry 0
2018.08.07 16:05:46 5 : SolaxData: HandleSendQueue called, qlen = 1
2018.08.07 16:05:46 4 : SolaxData: HandleSendQueue sends request type update to URL http://192.168.178.55/api/realTimeData.html, No Data, header: Content-Type: application/json timeout 2
2018.08.07 16:05:46 5 : HttpUtils url=http://192.168.178.55/api/realTimeData.html
2018.08.07 16:05:46 5 : HttpUtils request header: GET /api/realTimeData.html HTTP/1.0 Host: 192.168.178.55 User-Agent: fhem Accept-Encoding: gzip,deflate Content-Type: application/json Content-Length: 0
2018.08.07 16:05:46 4 : http://192.168.178.55/api/realTimeData.html: HTTP response code 200
2018.08.07 16:05:46 5 : HttpUtils http://192.168.178.55/api/realTimeData.html: Got data, length: 307
2018.08.07 16:05:46 5 : HttpUtils response header: HTTP/1.1 200 OK Server: MySocket Server Date: TEST Content-Type: text/html Content-Length: 307 Connection: close Accept-Ranges: bytes
2018.08.07 16:05:46 4 : SolaxData: Read callback: request type was update retry 0, Body: {"method":"uploadsn","version":"Solax_SI_CH_2nd_20160912_DE02","type":"AL_SE","SN":"CD2360D3","Data":[4.0,10.7,228.8,173.3,11.6,236.6,2689,37,15.1,5643.8,2035,915,1854,57.61,0.11,6,27,99,0.0,1125.8,,,,,,,,,,,,,,,,,,,,,,2649.60,2325.50,,,,,,,,50.01,,,0.0,0.0,0,0.00,0,0,0,0.00,0,9,0,0,0.00,0,9],"Status":"2"}
2018.08.07 16:05:46 3 : SolaxData: error while parsing JSON data: malformed JSON string, neither array, object, number, string or atom, at character offset 198 (before ",,,,,,,,,,,,,,,,,,,,...") at (eval 312) line 1.
2018.08.07 16:05:46 5 : SolaxData: ExtractSid called, context reading, num
2018.08.07 16:05:46 4 : SolaxData: CheckAuth decided no authentication required
2018.08.07 16:05:46 3 : SolaxData: no parsed JSON structure available
emlog'>2018.08.07 16:05:46 5 : SolaxData: Read starts parsing response to update with defined readings: 012018.08.07 16:05:46 5 : SolaxData: ExtractReading Data with regex /"Data":+\[(.*)\]/...2018.08.07 16:05:46 5 : SolaxData: 1 capture group(s), matchlist = 4.0,10.7,228.8,173.3,11.6,236.6,2689,37,15.1,5643.8,2035,915,1854,57.61,0.11,6,27,99,0.0,1125.8,,,,,,,,,,,,,,,,,,,,,,2649.60,2325.50,,,,,,,,50.01,,,0.0,0.0,0,0.00,0,0,0,0.00,0,9,0,0,0.00,0,92018.08.07 16:05:46 4 : SolaxData: ExtractReading for reading01-1 sets Data to 4.0,10.7,228.8,173.3,11.6,236.6,2689,37,15.1,5643.8,2035,915,1854,57.61,0.11,6,27,99,0.0,1125.8,,,,,,,,,,,,,,,,,,,,,,2649.60,2325.50,,,,,,,,50.01,,,0.0,0.0,0,0.00,0,0,0,0.00,0,9,0,0,0.00,0,92018.08.07 16:05:46 4 : SolaxData: Read response to update matched Reading(s) Data2018-08-07 16:05:46 HTTPMOD SolaxData Data: 4.0,10.7,228.8,173.3,11.6,236.6,2689,37,15.1,5643.8,2035,915,1854,57.61,0.11,6,27,99,0.0,1125.8,,,,,,,,,,,,,,,,,,,,,,2649.60,2325.50,,,,,,,,50.01,,,0.0,0.0,0,0.00,0,0,0,0.00,0,9,0,0,0.00,0,9
2018.08.07 16:05:46 5 : SolaxData: HandleSendQueue called, qlen = 02018-08-07 16:05:52 CUL_HM HM_5A501E ResndFail


Ich bin für jeden Hinweis dankbar.

Offline felixm

  • New Member
  • *
  • Beiträge: 15
Antw:Solar Wechselrichter direkter API Aufruf
« Antwort #1 am: 03 September 2018, 19:34:42 »
Hallo Stefan,ich habe zwar einen ganz anderen Wechselrichter. Aber mein Modul für Solaredge macht nichts anderes als regelmäßig einen JSON Datensatz abzurufen und auszulesen. Dank der Hilfe von CoolTux ist das Modul inzwischen relativ stabil und vielleicht eine gute Grundlage für dich?

Offline stefan.apetz

  • New Member
  • *
  • Beiträge: 11
  • fhem - geil, aber da geht noch was :-)
Antw:Solar Wechselrichter direkter API Aufruf
« Antwort #2 am: 05 September 2018, 11:08:14 »
Hallo,

danke für die Rückmeldung. Ich habe zwischenzeitlich im GITHub unter https://github.com/GitHobi/solax eine Integration für einen anderen Solar Wechselrichter gefunden und den eingebaut. Der läuft prima.

Ich hatte mich dann mit Hobby noch ein wenig ausgetauscht, so dass das Modul parametrisierbar wird (eigene IP zum Wechselrichter etc.).

Wäre klasse, wenn Hobby das als generelles Modul ins FHEM Git mit aufnehmen würde. Dann könnte das ggf. von einer größeren Gemeinde weiter bearbeitet werden.

Das Modul in Verbindung mit TabletUI ist echt super einsetzbar.

LG
Stefan