NEWS
ModBus Hilfe - Azzurro ZCS
-
@kodo_sh hi, ja, das habe ich schon hinbekommen. ich schreibe gleich etwas mehr dazu, wie das geht, welche hardware man braucht, configs, etc.
-
Lösung
Hardware
Um die Daten ber ModBus zu lesen, braucht man eine physiskalische Verbindung zum Wechselrichter. Dafür muss man einen RS485 zu USB Adapter kaufen. Ich habe mehrere solche Adapter probiert und fast keiner davon funktioniert richtig, außer dem hier: https://smile.amazon.de/gp/product/B082D5PXJ4/.
Zusätzlich braucht man auch etwas, was die Daten dann zukünftig liest. Ich habe eine RaspberryPi dafür benutzt.
Als nächstes muss man die Verbindung zwischen dem Wechselrichter und dem RS485 Adapter machen. Das ist eigentlich das "schwierige" Teil, da bei dem Wechselrichter nur 2 Pins verfügbar sind und eine passende Klemme wird nicht mitgeliefert. Ich hatte zufällig etwas gefunden was mit ein bisschen "Handarbeit" gepasst hat. Den RS485 Port findest du beim WR auf der unteren Seite, wo auch alle anderen Kabel rauskommen.
Sobald die Verbindung physikalisch steht, kann man den Stick in der RasPi einstecken. Mit dem Befehl
lsusb
kann man dann prüfen ob der Stick erkannt wird. Es soll ein Gerät angezeigt, ähnlich wie dieser:Bus 001 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
.Software
Für einfaches, lokales Testen kann man das Tool mbpoll. Installation passiert dann laut Doku so:
wget -O- http://www.piduino.org/piduino-key.asc | sudo apt-key add - echo 'deb http://raspbian.piduino.org stretch piduino' | sudo tee /etc/apt/sources.list.d/piduino.list sudo apt update sudo apt install mbpoll
Da ich eigentlich nur dieses eine Gerät an den USB Ports des RasPis angebunden habe, hat es die Adresse
/dev/ttyUSB0
. Wenn mehrere USB Geräte verbunden sind, musst du herausfinden auf welche Adresse der RS485 Adapter läuft. Dann kann man sowas ausführen, um zu schauen ob alles läuft:mbpoll -m rtu /dev/ttyUSB0 -b 9600 -P none -r 531 -0 -1 -v
. Im besten Fall kommt dann ein Wert heraus und nicht eine Fehlermeldung. Leider funktioniert es bei mir so nicht zuverlässig (bin mir nicht sicher wieso und da ich es eigentlich nicht so benutzen würde, ist es mir eigentlich egal).Bei mir läuft ioBroker eigentlich auf einer anderen RasPi, die zu weit weg ist um die direkt am WR zu verbinden. Deswegen benutze ich auf dem RasPi dass am WR verbunden ist ein zusätzliches Tool, ein sogenanntes ModBus RTU to TCP Gateway. Die software heißt mbusd. Wie man es baut und installiert steht im Link, ist nicht so schwierig. Sobald die Installation durch ist, braucht man eine Config Datei. Ich benutze das hier:
# Serial port device name device = /dev/ttyUSB0 # Serial port speed (Folow on your PLC or Modbus Device config) speed = 9600 # Serial port mode (Folow on your PLC or Modbus Device config) mode = 8n1 # RS-485 data direction control type (addc, rts, sysfs_0, sysfs_1) trx_control = addc # Sysfs file to use to control data direction # trx_sysfile = ############# TCP port settings ############# # TCP server port number port = 502 # Maximum number of simultaneous TCP connections maxconn = 32 # Connection timeout value in seconds timeout = 60 ######### Request/response settings ######### # Maximum number of request retries retries = 3 # Pause between requests in milliseconds pause = 100 # Response wait time in milliseconds wait = 500
Die Datei soll man im Ordner
/etc/mbusd
alsmbusd-ttyUSB0.conf
speichern (oder wenn nicht ttyUSB0, dann die richtige Adresse / Serial Port). Dann kann man mbusd als Service aktivieren indem man dieses Befehl ausführt:systemctl enable mbusd@ttyUSB0.service
. Auch hier, ttyUSB0 mit der eigentlichen Adresse ersetzen, falls notwendig. Mit dem Befehljournalctl -u mbusd@<serial port>.service -f -n 10
kann man sehen was da gerade passiert, im besten fall, keine FehlerWenn das erstmal geht, dann kann man nochmal mbpoll ausprobieren
mbpoll localhost -r 531 -0 -1 -v
. Wenn alles richtig ist, dann bekommt man etwas ähnliches wie das hier:debug enabled Set device=localhost mbpoll 1.4-25 - FieldTalk(tm) Modbus(R) Master Simulator Copyright © 2015-2019 Pascal JEAN, https://github.com/epsilonrt/mbpoll This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions; type 'mbpoll -w' for details. Connecting to [localhost]:502 Connecting to [localhost]:502 Set response timeout to 1 sec, 0 us Protocol configuration: Modbus TCP Slave configuration...: address = [1] start reference = 531, count = 1 Communication.........: localhost, port 502, t/o 1.00 s, poll rate 1000 ms Data type.............: 16-bit register, output (holding) register table -- Polling slave 1... [00][01][00][00][00][06][01][03][02][13][00][01] Waiting for a confirmation... <00><01><00><00><00><05><01><03><02><00><E1> [531]: 225
Noch eine wichtige Info die man zukünftig braucht ist die IP Adresse vom RasPi. Wenn man es nicht schon kennt dann bekommt man es über den Befehl
ifconfig
.Die richtige ModBus Adresse finden
Ein weiteres wichtiges Stück Info ist, wie man die Adressen aus der Dokumentation zu dem "übersetzt" was mbpoll, ioBroker oder ein anderer ModBus Master braucht. Wichtig sind hier 2 Sachen zu verstehen:
- die Adressen in der Anleitung sind im Hexadecimal eingetragen. Diese muss man zu Decimal konvertieren. Z.B habe ich die Adresse 0x0200 (Running State). 0x0200 in Decimal ist 512. Rechner finden man online, hier z.B. https://www.rapidtables.com/convert/number/hex-to-decimal.html
- bei ioBroker (und auch andere ModBus Master) spricht man die sogenannten "Holding Register" an indem man die Adresse die man vorher bekommen hat, 512, zu 40001 addiert. Also, um das "Running State" in ioBroker anzuzeigen, braucht man die Adresse 40513.
ioBroker Config
Nun zum spannenden Teil. In ioBroker braucht man den modbus adapter. Sobald dieser installiert ist und eine Instanz zur Konfiguration verfügbar ist, soll man diese ungefähr wie folgt konfigurieren:
Dann springt man zu den Holding Registers und fängt an, die einzelnen Adresse hinzuzufügen. Ich habe schon ziemlich viele schon bei mir hinzugefügt also teile ich diese gerne mit euch:
_address name description unit type len factor offset formula role room poll wp cw isScale 40513 operating_status Operating Status uint16be 1 1 0 value true false false false 40519 grid_voltage Grid Voltage V uint16be 1 0.1 0 value true false false false 40520 grid_current Grid Current A int16be 1 0.01 0 value true false false false 40525 grid_frequency Grid Frequency Hz uint16be 1 0.01 0 value true false false false 40526 batt_charge_discharge_power Battery Charge / Discharge Power W int16be 1 10 0 value true false false false 40527 batt_voltage Battery Voltage V uint16be 1 0.1 0 value true false false false 40528 batt_charge_discharge_current Battery Charge / Discharge Current A int16be 1 0.01 0 value true false false false 40529 batt_soc Battery Status of Charge % uint16be 1 1 0 value true false false false 40530 batt_temp Battery Temperature °C uint16be 1 1 0 value true false false false 40531 grid_power Grid Power: to Grid + / From Grid - W int16be 1 10 0 value true false false false 40532 load_power Household Consumption W uint16be 1 10 0 value true false false false 40533 batt_inverter_power Battery Inverter Power: Discharge + / Charge - W int16be 1 10 0 value true false false false 40534 pv_power_gen PV Generated Power W uint16be 1 10 0 value true false false false 40535 eps_output_voltage EPS Output Voltage V uint16be 1 0.1 0 value true false false false 40536 eps_output_power EPS Output Power kW uint16be 1 0.01 0 value true false false false 40537 daily_energy Daily Energy kW uint16be 1 0.01 0 value true false false false 40538 daily_energy_to_grid Daily Energy to Grid kW uint16be 1 0.01 0 value true false false false 40539 daily_energy_from_grid Daily Energy from Grid kW uint16be 1 0.01 0 value true false false false 40540 daily_energy_load Daily Energy Load kW uint32sw 2 0.01 0 value true false false false 40541 total_energy Total Energy kW uint32be 2 1 0 value true false false false 40543 total_energy_to_grid Total Energy to Grid kW uint32be 2 1 0 value true false false false 40545 total_energy_from_grid Total Energy from Grid kW uint32be 2 1 0 value true false false false 40547 total_energy_load Total Energy Load kW uint32be 2 1 0 value true false false false 40549 batt_daily_charge Daily Energy Charging Battery kW uint16be 1 0.01 0 value true false false false 40550 batt_daily_discharge Daily Energy Discharging Battery kW uint16be 1 0.01 0 value true false false false 40551 batt_total_charge Total Energy Charging Battery kW uint32be 2 1 0 value true false false false 40553 batt_total_discharge Total Energy Discharging Battery kW uint32be 2 1 0 value true false false false 40561 grid_voltage Grid Voltage V uint16be 1 0.1 0 value true false false false
Um diese zu importieren, hier drauf clicken und dann dort direkt einfügen:
Das war es schon. Ich hoffe das es hilft. Wenn es fragen dazu gibt, einfach reinschreiben
-
@mrfenyx Danke für deine Mühe
das schaut alles schon mal ganz klasse aus.
Ich habe am Azzurro das LAN-Modul, ein direktes auslesen per TCP ist wohl nicht möglich oder?
Ich werde die Tage nochmal mit dem Support telefonieren.Anderenfalls werde ich mein Glück mit einem 484/POE LAN Adapter versuchen. Der USB Dongle mit Raspi ist mir irgendwie etwas zuviel.
Sobald ich neue Infos habe, gebe ich sie gerne weiter.
Gruß und ein schönes 2023
-
@kodo_sh dir auch ein gutes 2023 und erstmal viel Glück mit dem Support. Bei mir waren die leider nicht wirklich freundlich oder hilfreich. Ich habe am WR das WiFi Modul aber es wird nur dafür benutzt um die Daten an Azzurro selbst zu schicken und für deren (Web)App. Leider werden diese Daten auch sehr unregelmäßig und selten versandt und ich konnte die auch nicht "abfangen".
Wenn du es ohne RasPi und Dongle irgendwie schaffst, lass es mich bitten wissen -
Hey @mrfenyx, vielen Dank für die gute Beschreibung der todos. Wir haben in vier Wochen unseren installationstermin. Ich denke mit der Übersicht kann man schon etwas anfangen. Danke dafür.
Ich nutze auf jeden Fall als kleines danke schön, den Smileys Link ️
Mich würde nur mal interessieren, wie deine. Verbindung am Azzurro zu den Pins des modbus rtu aussieht. Hast du zufällig ein Foto?
Hattest du mit dem Gedanken gespielt einen rs232 zu lan Converter zu statt des rpi zu nutzen?
Viele Grüße
-
@etsob Viel Glück mit der Installation. Wegen RS232 zu LAN, nein, habe ich nicht überlegt. Ich habe einige RPIs die bei mir rumliegen also war das für mich eigentlich die einzige Lösung die ich mir angeschaut habe. Hier noch einige Fotos zu der Verbindung. Ich habe dafür ein sogenanntes Twisted Pair benutzt (sind eigentlich die Kabel, die man in einem LAN Kabel finden - ein Paar davon habe ich benutzt.
- Die 4 Schrauben entfernen und Deckel Öffnen
- So sieht die Verbindung am USB Stick aus
- So sieht die Verbindung am WR aus
Für mich war eigentlich das größte Problem ein "Adapter" zu finden - das grüne Teil. Mein Elektriker hatte sowas bei uns "vergessen" und ich habe es ein bisschen gefeilt und es hat glücklicher weise gepasst.
- Die 4 Schrauben entfernen und Deckel Öffnen
-
Perfekt. Danke dir
-
@mrfenyx Vielen Dank für die tolle Anleitung,
mit ihr ist es mir gelungen meinen Azzurro ZCS HYD 15000 Wechselrichter auszulesen!
Allerdings haben die 3-Phasen Wechselrichter wohl andere Adressen als die 1-Phasigen.
Falls jemand die Adressen bzw. die Holding Register dafür brauchen kann stelle ich sie gerne hier rein. -
@ehi Hallo ich habe den selben Wechselrichter habe aber das Modbus Protokoll nicht könntest du mir das schicken?
Danke -
@andi-5 sagte in ModBus Hilfe - Azzurro ZCS:
habe aber das Modbus Protokoll nicht könntest du mir das schicken?
wenn du die Registerbeschreibung meinst ist die oben im Thread
https://forum.iobroker.net/post/910443
sehr weit unten -
@homoran Danke aber ich brauche die Adressen vom 3 Phasen Wechselrichter. Ich bin neu auf dem Gebiet und das ist mein erster Versuch.
Danke -
@andi-5 Gibt es denn da Unterschiede bezüglich der Register? In dem Pdf ist generell die Rede von Storage and Hybrid Invertern. Ich wäre jetzt davon ausgegangen, dass es keinen Unterschied macht ob ein oder dreiphasig.
-
@korhorlefor kann ich noch nicht sagen aber Ehi hat geschrieben dass die 3-Phasen Wechselrichter wohl andere Adressen als die 1-Phasigen haben.
-
@andi-5 versuch nochmal unter https://openwb.de/forum/download/file.php?id=14331&sid=b0cb172e8faa221ead96bc3424bf151f dein Glück. Das ist die Registerbeschreibung der Sofar Wechselrichter. Die sollen baugleich sein mit Azzurro.
-
@Andi-5 meine Anleitung bezieht sich auf einen 3-Phasen Wechselrichter. Die Register da drin sollten gehen. Hier aber auch die komplette Definition: ModBus-RTU Communication Protocol Ibrido monofase e 3000SP.pdf
UPDATE: ach, jetzt verstehe ich! @Andi-5 braucht die Modbus Register von 1-phasigem Wechselrichter!
-
Hat jemand mal den oben genannte USB RS485 Adapter mit dem ZCS Azzurro HYD 10000 verbunden? Ich versuche das gerade über die Com-Schnittstelle, wundere mich aber, dass der WR überhaupt nicht antwortet. Über Erfahrungen damit wäre ich dankbar.
-
Ich hatte ein Kontaktfehler. Es geht nun.
Es handelt sich bei mir um zwei WR HYD 15000, die im Master Slave Betrieb arbeiten.
Mit dem Rs485 Adapter gehe ich über die Com Schnittstelle auf die Pins 1 und 3 des ersten WR. Dann wird der erste WR(Master) mit den Pins 2 und 4 auf die Pins 1 und 3 des zweiten WR (Slave) verbunden.
Das ist zwar entgegen der Skizze im Handbuch aber nach den Bezeichnung aus der Tabelle macht es so Sinn. Über die unterschiedlichen Modbus Ids kann man dann unabhängig auf beide WR zugreifen. -
@mrFenyx noch eine Frage zu deiner Lösung. Wäre es denkbar, dass man das ganze nicht per LAN sondern per WLAN umsetzt via Raspi? Hast du dazu entsprechende Erfahrungen?
Danke schon mal
-
@marmic der HF2211 S ist dein Freund - der wandelt Modbus RTU in TCP über dein WLAN. Bei Ali knapp 20 Euros...
-
@alex-sch Danke für die Info resp. Hinweis. Werde mir das Teil mal anschauen.