Elja schreef op vrijdag 14 juli 2023 @ 23:55:Deye SUN-12K-SG04LP3 bedienen vanuit Home Assistant
De Deye inverters zijn populair als omvormer bij het gebruiken van thuisaccu’s. Helaas is de integratie met Home Assistant nog niet standaard beschikbaar. In deze beschrijving vind je een manier om de Deye SUN-12K-SG04LP3 te koppelen met Home Assistant. Dit werkt waarschijnlijk ook uitstekend voor de 5/6/8 en 10K versie.
De optionele Wifi-dongle voor de Deye is voldoende als je alleen data wilt uitlezen (bekijk
https://github.com/StephanJoubert/home_assistant_solarman en
https://github.com/Stepha...istant_solarman/issues/88).
Wil je ook de Deye kunnen bedienen, dan werkt dit (momenteel) via de Dongle nog niet lekker helaas. Om dit voor elkaar te krijgen koppelen we een ESP32 board aan de Deye. De ESP32 kun je via wifi koppelen aan jouw Home Assistant.
Benodigdheden:
- ESP32
https://www.tinytronics.n...en-bluetooth-board-cp2102
- TTL to RS485 module
https://www.benselectroni...l-to-rs485-converter.html
- Kabeltjes om de boards met elkaar te verbinden
https://www.tinytronics.n...-male-male-10cm-10-draden
- Breadboard om de printplaatjes op te bevestigen en te verbinden
https://www.tinytronics.n...breadboard-170-points-wit
- UTP splitter (alleen indien BMS poort op de Deye bezet is)
https://www.allekabels.nl...886/netwerk-splitter.html
- USB-mini (data) kabel (voeding voor je EPS32)
- USB voeding (voeding voor je EPS32)
- 2x UTP kabels (t568b, niet te lang, 30 centimeter tot 1 meter zal meestal genoeg zijn)
Hardware
Pak je kniptang, soldeerbout en wat soldeertin erbij. We gaan het EPS32 board verbinden met de TTL to RS485 board. Daarnaast maken we het TTL to RS485 board vast aan drie kabeltjes van een UTP kabel.
Als je dit nog nooit gedaan hebt; kijk er een Youtube filmpje over. Het is niet zo moeilijk en als het helemaal mis gaat, verspil je hooguit een paar tientjes aan materiaal.
Hier is het schema met hoe je alles moet verbinden met elkaar:
[Afbeelding]
Het EPS32 board kun je op het breadboard plaatsen. Je hoeft dan daarop niet te solderen. Voor het TTL to RS485 board is solderen wel nodig.
Het resultaat ziet er dan ongeveer zo uit:
[Afbeelding]
EPS32 en TTL to RS485 module
Sluit een USB kabel aan op het EPS32 board. Op het EPS32 board moet een rood lampje gaan knipperen. Op de TTL to RS485 module gaat het TX lampje branden. Als je de software erop geflashed hebt (zie hieronder) gaat om de vijf seconden ook het RX lampje even flikkeren.
Gaat alleen het RX lampje constant branden? Dan heb je waarschijnlijk de RX en TX omgedraaid tussen het EPS32 board en het TTL ro RS485 board. Dan gaat het niet werken.
Instellingen Deye
Op de Deye kun je onder ‘Advanced functions’ de Modbus SN instellen op 01. Wil je dit liever niet aanpassen, pas het dan later aan in de code die je naar de EPS32 flashed. Let op: als je de poort aanpast van de default waarde ‘0’, dan kun je hem niet terugzetten op 0 daarna. Ik weet niet zeker of het verschil maakt, maar ik heb hem daarnaast ook op ‘Master’ gezet.
Bij het aanpassen van deze instellingen gaat je Deye waarschijnlijk piepen. Je kunt de piep uitzetten in het basismenu. Na een paar minuten accepteert de Deye de nieuwe instellingen en stopt het gepiep.
[Afbeelding]ESP32 verbinden met Home Assistant
Installeer ESPHome op je Home Assistant:
https://esphome.io/guides/getting_started_hassio.html
Koppel als eerste je ESP32 board aan je Home Assistant met behulp van ESPHome. Dit moet je doen terwijl je ESP32 board aan je computer gekoppeld is.
Zorg ervoor dat je eerst de benodigde driver voor je EPS32 board geïnstalleerd hebt. In mijn geval was het de driver voor de CP2102.
https://www.silabs.com/de...vcp-drivers?tab=downloads
Lukt het niet om verbinding te maken tussen je computer en de ESP32? De kans is groot dat dit aan de gebruikte USB kabel ligt. Deze moet namelijk ook de data kunnen versturen (niet alleen stroom leveren). Probeer dus eventueel meerdere kabeltjes.
Je board gevonden via ESPHome op Home Assistant of met behulp van
https://web.esphome.io/? Dan kun je ‘prepare for firs use’ gebruiken om je ESP32 board te koppelen aan je Home Assistant installatie. Als hij klaar is kun je het ESP32 board ook koppelen aan je wifi netwerk. Zo kun je in de toekomst over-the-air updates uitvoeren.
Vanaf nu vind je jouw ESP32 board ook terug in ESPHome op je Home Assistant en kun je hem ‘adopten’.
[
Afbeelding]
Druk nu op ‘install’, zodat er een basisconfiguratie aangemaakt wordt met je encryption key. Bij mij liep de eerste installatie fout tijdens het proces. Op zich niet erg, want je wilt toch je eigen yaml bestand gaan gebruiken.
We gaan de gegeneerde code van ESPHome nu opnemen in het besturingsbestand dat we op de ESP32 willen zetten.
@mahagen heeft hiervoor al een mooie yaml gereed die je kunt gebruiken:
https://github.com/kababoom/esphome-for-deye
Kopieer zijn bestand en plak het in zijn geheel achter de standaard code die ESPHome gegenereerd heeft. Verwijder nu de delen uit de code van @mahagen die dubbel zijn. Pas het ota password aan naar een string naar je keuze.
Standaard staat de modbus poort waarmee gecommuniceerd wordt in de code op kanaal 1. In de Deye is kanaal 0 echter de standaard instelling. Mijn advies zou zijn dit in je Deye aan te passen naar kanaal 1. Let op: als je van kanaal 0 afgaat kun je niet meer terug naar kanaal 0. Hij springt dan gelijk naar kanaal 16. Lijkt me een bugje.
code:
1
2
3
4
5
6
| modbus_controller:
- id: ${modbus_controller_id}
address: 0x1
modbus_id: modbus1
setup_priority: -10
update_interval: 5sec |
Er zijn bij dit bestand nog een aantal aanpassingen die je moet doen op basis van jouw situatie. Je moet namelijk aangegeven op welke plek de tx en rx pin zitten op je ESP32 board. Dit is het gedeelte van de code dat je moet aanpassen:
code:
1
2
3
4
5
6
| uart:
id: mod_bus
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
stop_bits: 1 |
De poortnummers die je moet gebruiken kun je terugvinden in het schema van je ESP32 board. Bij het EPS32 boaard dat ik gebruik zijn het port GPIO16 en GPIO17.
[Afbeelding]
Wat ook direct handig is om aan te passen zijn de maximum waarden waarmee je wilt kunnen laden en ontladen. Die zijn afhankelijk van jouw batterijconfiguratie.
Ik heb het dan over sun3p_Maximum_battery_charge_current, sun3p_Maximum_battery_discharge_current en sun3p_Maximum_battery_grid_charge_current. Volgens mij is het verstandig niet de maximale waarde te gebruiken die je accu aankan, maar daar net iets onder te gaan zitten. Zeker op het gebied van laden. Sneller laden is op termijn slechter voor je accu.
In mijn geval heb ik bijvoorbeeld de slider voor het maximaal laadvermogen gezet op 180 A.
code:
1
2
3
4
5
6
7
8
9
10
11
12
| - platform: modbus_controller
use_write_multiple: true
modbus_controller_id: ${modbus_controller_id}
id: sun3p_Maximum_battery_charge_current
name: "sun3p-Maximum battery charge current"
address: 108
step: 1
unit_of_measurement: A
min_value: 1
max_value: 180
mode: slider
value_type: U_WORD |
De volgende stap is het installeren van dit yaml bestand op je ESP32. In principe heel eenvoudig; opslaan en op ‘Install’ klikken.
Mijn Raspberry Pi 4 met 1 gigabyte geheugen bleek helaas niet voldoende geheugen te hebben om de boel te compilen. Hij geeft dan na een paar minuten druk bezig te zijn geweest een foutmelding. Die ontstaat door simpelweg een tekort aan geheugen.
Daarom had ik een workaround nodig. Ik heb gekozen voor de VMWare route. Installeer VMWare (de gratis versie) op je desktop pc en installeer daar dan weer een Home Assistant installatie op. Op die Home Assistant zet je ESPHome.
Hier een handige video over het installeren van VMWare op je Windows pc:
YouTube: Install Home Assistant On Windows In Under 4 Minutes!
Aangezien je lokaal waarschijnlijk ook al je eigen Home Assistant hebt draaien kun je de VMWare versie waarschijnlijk het best bereiken door het lokale adres te gebruiken: 192.168.0.x:8123 (het exacte adres wordt in je VMWare scherm getoond).
Je Windows PC zal geen moeite hebben via VMWare (met voldoende resources toegewezen) om de yaml te compilen.
[Afbeelding]
Kies eerst voor ‘manual download’ bij ‘install’ en dan voor ’Modern format’.
Na het compilen wordt automatisch het .dat bestand gedownload.
Sluit je VMWare installatie af. Gebruik de webversie van ESPHome (
https://web.esphome.io/) om de .dat file naar je ESP32 te flashen.
Je bent nu gereed om de ESP32 board aan te sluiten op de BMS poort van je Deye.
[Afbeelding]
EPS32 aansluiten op de BMS UTP poort
Als in de BMS poort al een kabel in zit, zoals bij mij die van de accu’s, dan kun je een UTP splitter gebruiken. Hierdoor kun je twee kabels samenvoegen tot één. De BMS kabel schijnt geen gebruik te maken van de groene, oranje en oranje/wit kabeltjes uit de UTP kabel.
[Afbeelding]
UTP Splitter
Om het geheel mooi af te werken kun je natuurlijk een doosje op maat 3D printen. Ik heb het de eenvoudige manier gedaan; een lasdoosje van de Praxis.
[Afbeelding]
De stroom krijgt het EPS32 boardje van een USB lader en de USB kabel. Het is natuurlijk handig om de stekker die je hierbij gebruikt op de back-up load van de accu te zetten. Dan kun je immers ook als de stroom uitvalt (in elk geval lokaal) nog via Home Assistant de accu bedienen.
Als alles goed werkt gaat er 1 rood lampje aan het op EPS32 board en op het TTL to RS485 board brandt het TX lampje en knippert om de 5 seconden even het RX lampje.
Je kunt nu in Home Assistant bij ’Apparaten en Diensten’ je ESP32 als het goed is terugvinden onder ESPHome. Mogelijk moet je hem hier nog even akkoord geven (configuratie maken).
Je kunt nu je accu bedienen vanuit Home Assistant en het systeem automatiseren!
[Afbeelding]
Let op: Deze methode werkt met een Deye met de firmware versie 2005-1121-1807 of hoger.
Voor juli 2022 zat de modbus op een andere poort voor 3 fase hybride Deye.
Bij een oudere Deye kan het dus zijn dat je eerste de firmware moet upgraden. Hiervoor moet je een mail met serienummer sturen naar service@deye.com.cn.
Veel succes!
Met dank aan @
mahagen en @
Domba!