Dies ist eine alte Version des Dokuments!
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