FHEM Forum

FHEM - Energiemanagement und Energieerzeugung => Solaranlagen => Thema gestartet von: Lythie am 22 Januar 2023, 20:55:34

Titel: Einbindung Sunny Tripower X 20 in fhem via HTTPMOD
Beitrag von: Lythie am 22 Januar 2023, 20:55:34
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.
Titel: Antw:Einbindung Sunny Tripower X 20 in fhem via HTTPMOD
Beitrag von: Lythie am 24 Januar 2023, 22:33:41
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
Titel: Aw: Einbindung Sunny Tripower X 20 in fhem via HTTPMOD
Beitrag von: FHEMAN am 16 Mai 2023, 00:10:01
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