Om toekomstige mensen zoals ik een beetje op weg te helpen een klein stukje proza, over welke stappen ik heb doorlopen om de Modbus verbinding op te zetten tussen mijn Home Assistant (nucje) en mn Growatt omvormer. Voordat ik mn proza ga schrijven, wil ik dit @
JanWatt en dit topic heel erg bedanken. Zonder jullie hulp a publiek en in dm was het mij nooit gelukt. Super bedankt Tweakers!
De wat en waarom?
Ik ben sinds kort begonnen met Home Assistant (HA) en wil onder andere efficienter omgaan met mijn eigen opwek via mijn zonnepanelen (met het oog op het stoppen van salderen in 2027). Hier wil ik diverse waarden van mijn zonnepanelen uitlezen en daar automatiseringen op loslaten. Wat bleek uit ervaring en de HA documentatie; de waarden via de Growatt server (username + password) uitlezen geeft authenticatieproblemen waarbij je meermaals 1 dag uitgesloten wordt van je account. Volgens de HA documentatie werkt de Api wel, maar dan krijg je alleen totalen terug in HA en geen actuele waarden zoals Power. Conclusie: ik zocht een andere manier om de gegevens in HA te krijgen & modbus is daar een manier voor.
Mijn omvormer
Ik heb een Growatt 5000MTL omvormer, geinstalleerd in 2015 (dus een relatief oud beestje).
Deze heeft een RS-232 aansluiting waar de shinewifi (datalogger) op aangesloten wordt. Deze wil ik in mijn geval niet meer gebruiken.
En hij deze heeft twee RS-485 (modbus) aansluitingen, waarvan ik er 1 in gebruik heb genomen:
:strip_exif()/f/image/C1fm7wCkjLYvxmDLpOYNBV56.jpg?f=fotoalbum_large)
Wat heb je allemaal nodig?
1. Een laptop
2. Een UTP-kabel
3. Een USB naar RS-485 (CPH340) dongle: bijvoorbeeld te koop voor 3 euro bij
https://www.tinytronics.n...-naar-rs485-adapter-ch340
4. Een multi meter om voltage/spanning te meten
5. Modbus Master (software) via github te verkrijgen:
https://github.com/ClassicDIY/ModbusTool/tree/masterDe stappen
Doorloop de stappen bij voorkeur overdag, als er zon(opbrengst) is. Ik heb eerst geprutst in de avond, bij geen zon. De omvormer is op dat moment uit & er kan dan geen verbinding mee worden gemaakt!
1.
Meet met een multi meter of er stroom op de modbus (RS-485) poorten staat. Er zou ongeveer 3 volt op moeten staan. In mijn geval was dit 3.31-3.32 volt.
Zo nee, dan is deze modbus poort mogelijk dicht en moet deze opengezet worden via bv. Growatt zelf.
Zo nee, de RS-232 poort is actief en deze moet je eerst verwijderen, omvormer uitzetten & spanningloos maken in de meterkast om na 1 minuut weer alles aan te zetten. Dit activeerd mogelijk de modbus poort. In mijn geval was dit niet nodig.
Zo ja, ga naar stap 2.
2.
- Pak een utp-kabel (lang genoeg om van je laptop naar de omvormer te kunnen) en strip de twee uiteinden zodat je de vier twisted pairs ziet (8 draden).
- Je hebt 2 twisted pairs aan iedere zijde nodig (4 enkele draden). Strip de pairs (+- 2 cm lang) tot op het koper en draai 2 kabels in elkaar. Zorg dat je dezelfde pairs gebruikt aan de andere kant!
:strip_exif()/f/image/IWquoHCMke1YSxItp13L1BO8.jpg?f=fotoalbum_large)
- Steek vervolgens een kant van de kabel in de modbus-aansluiting.
- Meet vervolgens met een multi meter de andere zijde van je gemaakte kabel. Hier moet ongeveer 1 volt op staan. In mijn geval was dit 1.6 volt.
Zo nee, probeer de kabel opnieuw in de modbus te steken, misschien maakt de kabel geen goede verbinding of moet je iets aanpassen aan jouw (koper) uiteinden.
Zo ja, ga door naar de volgende stap.
3.
Check op jouw omvormer wat het slave adress (COM-adress) is. In veel gevallen is dit gewoon 1, maar in mijn geval was het 22! Dit poortnummer heb je nodig om te communiceren met de omvormer.
4.
1. Verwijder nu de shinewifi (datalogger). Bij sommige omvormers is het niet mogelijk om 2 poorten tegelijk te gebruiken, dus of de RS-232 of de RS-485.
2. Verbindt de kabel met de omvormer -> RS485 naar usb dongle -> laptop.
3. Zet de omvormer uit (handmatig de fysieke knop omzetten) naar 0.
4. Maak de omvormer spanningloos (in de meterkast de zekering omlaag).
5. Wacht minimaal 1 minuut.
6. Zet alles weer aan.
5.
- Start nu op je laptop Modbus
Master op
- Voer de volgende waarden in:
Mode = RTU
Portname = COM1 of COM2 of COM3 of COM4 of COM6 enz enz. (deze waarde wordt door Windows zelf bepaald afhankelijk op welke usb-poort je de dongle hebt ingeprikt)
Baud = 9600
Parity = None
Data Bits = 8
Stop Bits = 1
Slave ID = 1 (of een andere waarde afhankelijk van je achterhaalde COM Adress op jouw omvormer! Ik had 22)
- Klik vervolgens op Connect. Onderin het scherm zou je moeten zien "Connected using RTU to COM#".
Zo nee, controleer je kabels. Zijn de twisted pairs gelijk aan iedere kant? Wissel de twisted pairs IN de modbus poort even om. Check de aansluiting op de RS485 naar USB dongle en zet ze opnieuw vast.
Zo ja, ga naar stap 6.
6.
Lees nu de eerste 10
Holding Registers uit.
- Start adress op 00 zetten.
- Size op 10 zetten.
- Klik vervolgens op Read Holding Register
Zie je een Read Succes onderin het scherm zoals hieronder, dan zit je goed! Er is verbinding en je kan communiceren met jouw omvormer!
7.
Nu gaan we naar home assistant. Verbindt je utp kabel ( Ik heb een 30 meter CAT 5e kabel gebruikt waar ik 3 meter van heb afgeknipt) van jouw omvormer naar jouw home assistant instance. In mijn geval een nucje met hierop Proxmox in een HA virtuele omgeving.
Als je de dongle hebt ingeprikt vergeet niet in proxmox de Dongle (usb) beschikbaar te maken in HA.
Maak met bv. File Editor in de root van home assistant een bestand aan met de naam: modbus.yaml en maak deze beschikbaar in configuration.yaml via de volgende code:
code:
1
| modbus: !include modbus.yaml |
Voordat je jouw modbus.yaml aanmaakt zoek de poort-id op van jouw RS-485 naar USB dongle. Deze vindt je onder hardware in jouw HA omgeving. In mijn geval is dit: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
Deze modbus.yaml gebruik ik, maar is voor iedereen anders natuurlijk:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| - name: GROWATT_MTL
#RS485to USB voor Growatt MTL
type: serial
baudrate: 9600
bytesize: 8
method: rtu
parity: N
port: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
stopbits: 1
sensors:
#3 Growatt
- name: Growatt_MTL_power
unique_id: Growatt_MTL_power
precision: 0
address: 11
scan_interval: 10
input_type: input
slave: 22
scale: 0.1
data_type: uint32
unit_of_measurement: W
state_class: measurement
device_class: power
#adress 11 is high, 12 is low: samen (uint32) maakt hem volledig
- name: Growatt_MTL_load
unique_id: Growatt_MTL_load
precision: 1
address: 3
#scan_interval: 10
input_type: holding
slave: 22
unit_of_measurement: "%"
- name: Growatt_MTL_total_energy
unique_id: Growatt_MTL_total_energy
precision: 1
address: 28
input_type: input
slave: 22
scale: 0.1
data_type: uint32
unit_of_measurement: kWh
state_class: total_increasing
device_class: energy
#Ik kijk nu naar adress 28 en 29, energy total high en low samen, door uint32 te gebruiken als data_type
- name: Growatt_MTL_Energy_Today
unique_id: growatt_MTL_energy_today
precision: 1
address: 26
input_type: input
slave: 22
scale: 0.1
data_type: uint32
unit_of_measurement: kWh
state_class: measurement
#Ik kijk nu naar adress 26 en 27, energy today high en low samen, door uint32 te gebruiken als data_type
- name: Growatt_Inverter_Status
slave: 22
address: 0
input_type: input
data_type: uint16
unit_of_measurement: ""
state_class: measurement
- name: Growatt_MTL_Inverter_Temperature
unique_id: growatt_mtl_inverter_temperature
slave: 22
address: 32
input_type: input
data_type: uint16
scale: 0.1
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement |
Voor het bepalen welke waarde op welk adress te vinden is moet je op het www, of via Growatt, de modbus documentatie raadplegen. Ik heb via de klantenservice van Growatt het document Growatt OLD_Growatt-PV-Inverter-Modbus-RS485-RTU-Protocol-V3-14.pdf gekregen waar exact staat vermeld welke waarde op welk adress staat.
Succes!