Einbindung Sunny Tripower X 20 in fhem via HTTPMOD

Begonnen von Lythie, 22 Januar 2023, 20:55:34

Vorheriges Thema - Nächstes Thema

Lythie

Hallo zusammen,

seit November bin ich glücklicher Besitzer des STX20 und wollte ihn nun noch in fhem integrieren. Leider bietet der STX20 kein modbus, es sind nur die http-Ports offen (80/443) und ersterer macht sofort einen redirect an Port 443 (https).

pi@raspberrypi:~ $ nmap 192.168.178.114
Starting Nmap 7.80 ( https://nmap.org ) at 2023-01-22 20:42 CET
Nmap scan report for 192.168.178.114
Host is up (0.00065s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 0.28 seconds


Zweites Problem war, dass das ssl-Zertifikat ungültig ist. Das musste ich meinem Raspberry also erstmal beibringen. Dazu habe ich das Zertifikat heruntergeladen (SMA3015507xyz.local ist der lokale DNS-Name des Wechselrichters in meinem LAN. Die Nummer nach "SMA" ist meine Seriennummer, die habe ich hier etwas maskiert mit dem xyz. Im Browser müsstet ihr auch https://sma3015507xyz.local eintippen können und kommt auf den Wechselrichter (sofern ihr im LAN/WLAN seid).
Das Zertifikat dem Raspi bekannt machen geht dann wie folgt:

pi@raspberrypi:~ $ openssl s_client -showcerts -connect SMA3015507xyz.local:443 </dev/null
...
-----BEGIN CERTIFICATE-----
MIIERDCCAyygAwIBAgIFFbsF63wwDQYJKoZIhvcNAQELBQAwgawxCzAJBgNVBAYT
...
WU4CxWcOTmJRIerZ0m4FHnlZw+lk/PjtU0E7yxMm8iarWBwKwVFHrg==
-----END CERTIFICATE-----
...


Dann allle Zeilen von BEGIN zu END einschließlich der BEGIN/END-Zeilen in eine Datei /usr/local/share/ca-certificates/stx.crt reinkopieren. Anschließend sudo update-ca-certificates Anschließend sollte ein wget https://sma3015507xyz.local erstmal erfolgreich durchlaufen.

Dann musste ich etwas mit der HTTPMOD-Konfiguration und dem Verhalten des Webinterfaces herumspielen, insb. der Loginprozess war nicht sooo einfach. Folgende Konfiguration zieht nun die aktuelle Leistung sowie die Gesamtenergiemenge in zwei Readings.

define STX20 HTTPMOD https://sma3015507xyz.local/api/v1/widgets/gauge/power?componentId=IGULD:SELF&type=PvProduction 60
# Global variables
attr STX20 enableControlSet 1
attr STX20 enableCookies 0
attr STX20 room PV
attr STX20 handleRedirects 1

# First check whether you need forms based authentication
attr STX20 reAuthRegex .*401 Please login.*|.*400 Illegal character.*|.*500 Server Error.*
attr STX20 clearSIdBeforeAuth 1
# Seems to use OQuth2-authorization. access_token needs to be passed in as "Authorization: Bearer <access_token>".
attr STX20 sid1IdRegex .*access_token\"\:\"([a-zA-Z0-9\.\-\_\~\+\/]*).*\".*
attr STX20 sidURL https://sma3015507xyz.local/api/v1/token
# Pass-in your usernamen and password for your local web interface of your SMA (seems to be synced with your account on sunnyportal.com)
attr STX20 sidData grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD
attr STX20 sidHeader1 Content-Type: application/x-www-form-urlencoded
attr STX20 sidHeader2 Accept: application/json, text/plain, */*

# Get actual power generated from the URL of the define statement above which is the gauge element on the main page
attr STX20 requestHeader1 Authorization: Bearer $sid
attr STX20 requestHeader2 Accept: application/json
attr STX20 requestHeader3 Sec-Fetch-Dest: empty
attr STX20 requestHeader4 Sec-Fetch-Mode: cors
attr STX20 requestHeader5 Sec-Fetch-Site: same-origin
attr STX20 requestHeader6 Accept-Encoding: gzip, deflate, br
attr STX20 reading10JSON value
attr STX20 reading10Name STX20power
# When now power is generated the API returns NaN which I want to be converted to a number
attr STX20 reading10OMap NaN:0

# Get total energy generated by STX20 from the API called in the detailed dashboard
attr STX20 get01URL https://sma3015507xyz.local/api/v1/measurements/live
attr STX20 get01Header1 Authorization: Bearer $sid
attr STX20 get01Data [{"componentId":"Plant:1"}]
# Use get01ExtractAllJSON to find the correct field name
attr STX20 get01JSON 06_values_01_value
# Tried it with regex but did not succeed with this...
#attr STX20 get01JSON .*TotWhOut\.Pv\"\,\"componentId\"\:\"Plant\:1\"\,\"values\"\:\[\{\"time\"\:\"[0-9\-T\:\.Z]+\"\,\"value\"\:([0-9\.0-9]+)\}\]\}
attr STX20 get01Name STX20totalEnergy
attr STX20 get01Poll 1


Ihr müsste natürlich wieder die Seriennummer (also den DNS-Namen des Wechselrichters) sowie euren Username und euer Passwort korrigieren.

Anschließend habe ich einfach meinem influxDBLogger im Define-Statement hinten das STX20 angehangen, damit die PV-Readings auch in die InfluxDB gelogged werden.

define influxDB InfluxDBLogger http://localhost:8086 FHEM-bucket Mythz,STX20


Vielleicht kann man das auch anwenden, um das Sunnyportal anzuzapfen. Das habe ich nicht versucht, für heute reicht's mir.
Rasbpi 4 mit Originalnetzteil, fhem zur Heizungsanbindung, vzlogger für Stromzähler, httpmod für Tibber-Bridge, influxDB und Grafana, PV S/O mit 23kWp ÜE, THZ403Sol inkl. 2 Kollektoren, ohne Zirkulationspumpe, Bau aus 2011 als KfW70/EnEV2009 mit 255qm Fläche, Jahresheizwärmebedarf 12.500 kWh/a

Lythie

Ich hatte beim nmap-Scan nur nach TCP-Ports gescanned (und nur http/s gefunden), aber Speedwire ist ja udp. Mit nmap -sU <IP> wird 9522 auch als offen angezeigt. D.h. über Speedwire müsste dann auch wieder SMAInverter gehen, s. https://forum.fhem.de/index.php/topic,56080.1155.html
Rasbpi 4 mit Originalnetzteil, fhem zur Heizungsanbindung, vzlogger für Stromzähler, httpmod für Tibber-Bridge, influxDB und Grafana, PV S/O mit 23kWp ÜE, THZ403Sol inkl. 2 Kollektoren, ohne Zirkulationspumpe, Bau aus 2011 als KfW70/EnEV2009 mit 255qm Fläche, Jahresheizwärmebedarf 12.500 kWh/a

FHEMAN

Na prima, ich bin zu einer sehr ähnlichen Lösung gekommen. Wieso lese ich deinen Betrag erst jetzt :(
Ergänzen möchte ich noch kurz:

1. SSL ist nicht notwendig, es funktioniert auch ohne.
2. Modbus geht, ist aber unvollständig implementiert (die dokumentierten Register zeigen teils falsche Werte an)
3. Speedwire geht nicht, auch nicht über SMAInverter und Sunny Explorer

Meine etwas schmalere Lösung ist hier: https://forum.fhem.de/index.php?msg=1275982
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB