Hoymiles Wechselrichter
Aktuelle Balkon-PV-Komplettanlagen enthalten häufig Mikrowechselrichter der Firma hoymiles. Es gibt aber offenbar auch bereits umgebrandete Modelle anderer Hersteller.
Eine Integration in Volkszähler ist sehr einfach und auf einem Raspberry Pi 4 erfolgreich getestet. Basis ist die dankenswerterweise verfügbare „ahoy“ Software https://github.com/lumapu/ahoy/tree/main/tools/rpi basierend auf der Python RF24 library https://github.com/nRF24/pyRF24.
Hardware
Es gibt offenbar inzwischen auch hoymiles Wechselrichter mit eingebauten WiFi, zumindestens aber die Modelle HM600 usw kommunizieren mit einer sogenannnten DTU. Diese kann von hoymiles gekauft werden und die Datenverarbeitung passiert in der hoymiles cloud - oder eben wir nutzen alternativ den Volkszähler.
Die DTU ist ein 2.4GHz Funkmodul mit einem proprietärem Top-Level-Protokoll, auf unterer Ebene aber standardisiert und damit ist der Wechselrichter über kleine Funkmodule des Typs NRF24L01+ ansprechbar (wichtig das Plus, es gibt offenbar auch ähnliche Varianten, die aber die benötigte Funkfrequenz nicht unterstützen). Beispiel: https://www.makershop.de/module/funk/nrf24l01 Dieses Funkmodul wird mit dem RPi verkabelt wie hier beschrieben: https://tutorials-raspberrypi.de/funkkommunikation-zwischen-raspberry-pis-und-arduinos-2-4-ghz
Entgegen den Hinweisen, die auf verschiedenen Seiten zu finden sind, funktioniert dies problemlos einfach so und
- eine separate 3.3V Stromversorgung ist nicht nötig
- ein separater Kondensator scheint auch verzichtbar
Software
Auf der „ahoy“ Seite sind verschiedene Methoden beschrieben, der erprobte und wahrscheinlich einfachste Weg ist aber der folgende:
[1] Installation pyRF24 [2] Installation ahoy [3] Configuration Wechselrichter und Volkszähler middleware [4] Einrichten als OS Service (läuft nicht im vzlogger)
Installation pyRF24
Einfach
pip3 install pyrf24
oder evtl nur pip anstelle pip3, je nach vorhandenem OS/Python.
Installation ahoy
Es werden ein paar Abhängigkeiten benötigt:
pip3 install crcmod pyyaml paho-mqtt SunTimes
Danach brauchen wir ein Installationsdirectory und clonen den benötigten Teil des Git repo hierhin:
mkdir ~/ahoy cd ~/ahoy git clone https://github.com/lumapu/ahoy/tree/main/tools/rpi
Danach:
sh install.sh
Das Script erfragt verschiedene Punkte:
- alle libraries können installiert werden
- libcurses ist optional
- Install using SPIDEV (default), also einfach Enter
- Das Gateway Example ist optional
Config
In tools/rpi befindet sich jetzt ein File namens ahoy.yml.example, welches kopiert wird:
cd tools/rpi cp ahoy.yml.example ahoy.yml
und angepasst.
Zum einen muss unbedingt die Seriennummer des Wechselrichters (zu finden auf dessen Rückseite) an mehreren Stellen eingetragen werden. Zweitens benötigen wir die URL der Volkszähler middleware und schliesslich die zu sendenden Werte (die wie üblich mit VZ Channel-UUIDs verknüpft werden müssen). Für eine direkte Integration mit Volkszähler wird influxdb oder mqtt nicht benötigt. Die GPS Koordinaten des Standortes eintragen.
Das Ganze sieht dann z.B. so aus:
ahoy: interval: 15 transmit_retries: 5 logging: filename: 'hoymiles.log' # DEBUG, INFO, WARNING, ERROR, FATAL level: 'INFO' max_log_filesize: 1000000 max_log_files: 5 sunset: disabled: false latitude: 51.3255 longitude: 12.3395 altitude: 100 # List of available NRF24 transceivers nrf: - ce_pin: 22 cs_pin: 0 txpower: 'low' # default txpower (min,low,high,max) volkszaehler: disabled: false inverters: - serial: 11410123456 url: 'http://vz-server:8000/middleware.php' channels: - type: 'ac_power0' uid: 'c9671a60-1808-11ef-8039-4ba60d7468c1' dtu: serial: 99978563001 name: my_DTU_name inverters: - name: 'Dach' serial: 11410123456 txpower: 'low' # txpower per inverter (min,low,high,max) strings: # list all available strings - s_name: 'String 1 left' # String 1 name s_maxpower: 395 # String 1 max power in inverter - s_name: 'String 2 right' # String 2 name s_maxpower: 400 # String 2 max power in inverter - s_name: 'String 3 up' # String 3 name s_maxpower: 405 # String 3 max power in inverter - s_name: 'String 4 down' # String 4 name s_maxpower: 410 # String 4 max power in inverter
Danach war nur noch das Verlinken von ein paar libraries nötig, die beim Starten des Scripts nicht gefunden wurden:
cd tools/rpi ln -s ~/.local/lib/python3.7/site-packages/pyrf24/libcpp_rf24.so . ln -s ~/.local/lib/python3.7/site-packages/pyrf24/libcpp_rf24_network.so . ln -s ~/.local/lib/python3.7/site-packages/pyrf24/libcpp_rf24_mesh.so .
Test
Starten des Scripts von Hand:
sudo python3 -um hoymiles --log-transactions --verbose --config ./ahoy.yml
Um das SPI Interface ansprechen zu können, werden root Rechte benötigt. Dieses Kommando sagt fast nichts und sollte sich aber auch nicht beenden. Statt dessen sollte im log file hoymiles.log in etwa sowas auftauchen:
more hoymiles.log 2024-05-25 19:30:00.1716658200 DEBUG: 2024-05-25 19:30:00.640391 Transmit 11 bytes channel 75: 15 84 22 03 10 78 56 30 01 82 3d 2024-05-25 19:30:00.1716658200 DEBUG: Received 27 bytes channel 3: 95 84 22 03 10 84 22 03 10 02 4f 1e 00 00 71 76 00 00 02 e4 08 d1 13 87 00 b4 de 2024-05-25 19:30:01.1716658201 DEBUG: Payload: 00 01 00 08 00 02 00 00 01 28 00 40 00 bc 00 00 4f 1e 00 00 71 76 00 00 02 e4 08 d1 13 87 00 b4 00 00 00 08 03 e8 01 29 00 03 df f4 2024-05-25 19:30:01.1716658201 DEBUG: http://vz-server:8000 "GET /middleware.php/data/c9671a60-1808-11ef-8039-4ba60d7468c1.json?operation=add&ts=1716658201217&value=18.0 HTTP/1.1" 200 26
Installieren als OS Service
Auch hierzu ist schon alles vorbereitet:
sudo systemctl enable `pwd`/ahoy_system.service
Vorher noch das dort enthaltene WorkingDirectory anpassen. Aus der Kommandozeile das „–verbose“ entfernen, um die Menge der Log-Daten zu reduzieren.