Hoe modbus communicatie te starten op een growatt omvormer?

Pagina: 1 2 Laatste
Acties:

Acties:
  • +1 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
cotton_eye_joe schreef op dinsdag 25 februari 2025 @ 20:02:
Ik ben bezig om een export limit op een growatt 40ktl3-x te maken via modbus. Momenteel ben ik aan het testen modbus registers cyclisch te schrijven (03 active P rate)

Nu lees ik op een ander forum dat het niet verstandig is om deze waarde te vaak te schrijven aangezien deze nieuwe waarde op het eeprom wordt opgeslagen. Ivm beperkt aantal schrijfacties van een eeprom zou deze snel falen.

Hebben jullie hier ervaringen mee? Is er iemand die al langere tijd register waarden veranderd en zijn daar problemen mee ondervonden?

Zijn er meer mensen met een zelf geknutselde export limit functie? Gebruiken jullie hiervoor ook register 03? Of zijn er andere/betere opties?

Kleine edit:

Ik zie bijvoorbeeld ook register 123 (exportLimitPowerRate) iemand die hier ervaring mee heeft?
De exportLimitPowerRate is voor als je een modbus energiemeter rechtstreeks gekoppeld hebt met de omvormer.
Dan kan de omvormer helemaal zelf je export limiteren.

Juiste manier is register 3 te gebruiken.
Zolang je via register 2 niet aangeeft dat het opgeslagen hoeft te worden zie ik geen enkele reden waarom de eeprom belast zou worden.

Acties:
  • +1 Henk 'm!

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 14:23

Beekforel

Is eigenlijk geen vis

Ik weet niet of dit nou helemaal het juiste topic is, maar ik wil toch even delen wat ik in elkaar heb gezet.

YAML:
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
sensor:
  - platform: homeassistant
    name: "Home Assistant Power Production"
    entity_id: sensor.power_production
    id: gridproduction

  - platform: template
    id: limitpercentage
    name: "Possible limit"
    unit_of_measurement: "%"
    lambda: |-
      float value;
      if (id(gridproduction).state == 0) {
        value = 100.0f;
      } else {
        value = abs(((id(gridproduction).state * 1000) - id(gridactivepower).state) * 100 / id(gridactivepower).state) + 10.0f;
      }

      // Ensure value never exceeds 100%
      value = std::min(value, 100.0f);

      // Only publish if the switch is enabled
      if (id(publish_limit_enabled).state) {
        id(limit).publish_state(value);
      }

      return value;
    update_interval: 60s

switch:
  - platform: template
    id: publish_limit_enabled
    name: "Enable Limit Publishing"
    optimistic: true


Ik haal de waarde die ik naar het grid exporteer op uit HA en gebruik deze om het limitpercentage te berekenen. Omdat ik wel wat wil exporteren voeg ik er nog 10% aan toe. De switch zorgt dat de waarde ook daadwerkelijk gezet wordt, wanneer deze uit staat is het alleen logging. De lambda berekening heeft ChatGPT voor mij bedacht, zag er wel ok uit.

Wat mij opvalt is dat de omvormer vrij traag reageert op het zetten van het percentage. Ik heb de update interval daarom nu op 60 seconden staan maar ik denk dat dit alsnog te laag is. De limit waarde lijkt ook vaak terug te springen naar 100% of juist naar 1%, ben er niet achter waardoor dit komt.

[edit]Bij nader inzien vraag ik mij af of dit wel werkt. Het berekenen van het percentage gaat prima, het publiceren ook. Maar de omvormer pikt het niet op. Als ik het handmatig zet met de slider die ik in ESPhome heb reageert hij er wel op...

[ Voor 6% gewijzigd door Beekforel op 26-02-2025 11:33 ]


Acties:
  • +1 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
Beekforel schreef op woensdag 26 februari 2025 @ 11:16:
Ik weet niet of dit nou helemaal het juiste topic is, maar ik wil toch even delen wat ik in elkaar heb gezet.

YAML:
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
sensor:
  - platform: homeassistant
    name: "Home Assistant Power Production"
    entity_id: sensor.power_production
    id: gridproduction

  - platform: template
    id: limitpercentage
    name: "Possible limit"
    unit_of_measurement: "%"
    lambda: |-
      float value;
      if (id(gridproduction).state == 0) {
        value = 100.0f;
      } else {
        value = abs(((id(gridproduction).state * 1000) - id(gridactivepower).state) * 100 / id(gridactivepower).state) + 10.0f;
      }

      // Ensure value never exceeds 100%
      value = std::min(value, 100.0f);

      // Only publish if the switch is enabled
      if (id(publish_limit_enabled).state) {
        id(limit).publish_state(value);
      }

      return value;
    update_interval: 60s

switch:
  - platform: template
    id: publish_limit_enabled
    name: "Enable Limit Publishing"
    optimistic: true


Ik haal de waarde die ik naar het grid exporteer op uit HA en gebruik deze om het limitpercentage te berekenen. Omdat ik wel wat wil exporteren voeg ik er nog 10% aan toe. De switch zorgt dat de waarde ook daadwerkelijk gezet wordt, wanneer deze uit staat is het alleen logging. De lambda berekening heeft ChatGPT voor mij bedacht, zag er wel ok uit.

Wat mij opvalt is dat de omvormer vrij traag reageert op het zetten van het percentage. Ik heb de update interval daarom nu op 60 seconden staan maar ik denk dat dit alsnog te laag is. De limit waarde lijkt ook vaak terug te springen naar 100% of juist naar 1%, ben er niet achter waardoor dit komt.
Stap 1: bereken je eigen verbruik.
Dus grid power + solar power.
Bijvoorbeeld -10000W grid + 20000W solar = 10000W eigen verbruik.
Niets met abs doen, dan krijg je verkeerde waardes, en je eigen verbruik zal immers nooit negatief zijn.

Step 2: benodigd percentage van omvormer vermogen.
Omvormer is 40000W, dus omvormer moet 10000W / 40000W * 100 = 25%

Acties:
  • 0 Henk 'm!

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 14:23

Beekforel

Is eigenlijk geen vis

@brambo123 ik wil de export naar grid limiteren, dan dek ik automatisch mijn eigen gebruik ook. Ik heb meerdere omvormers die opwek leveren dus mijn gedachte was ik limiteer de zwaarste.

Maar je zegt dat het percentage dus berekend moet worden obv de maximale capaciteit van de omvormer?

Maar goed, afgezien van hoe ik tot het percentage kom. Het werkt dus niet op de manier die ik nu heb bedacht.

[ Voor 14% gewijzigd door Beekforel op 26-02-2025 11:39 ]


Acties:
  • 0 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
Beekforel schreef op woensdag 26 februari 2025 @ 11:38:
@brambo123 ik wil de export naar grid limiteren, dan dek ik automatisch mijn eigen gebruik ook. Ik heb meerdere omvormers die opwek leveren dus mijn gedachte was ik limiteer de zwaarste.

Maar je zegt dat het percentage dus berekend moet worden obv de maximale capaciteit van de omvormer?

Maar goed, afgezien van hoe ik tot het percentage kom. Het werkt dus niet op de manier die ik nu heb bedacht.
Met meerdere omvormers moet je alle omvormers meten, of een closed-loop feedback.
Met feedback loop krijg je iets als:
Grid geeft -5000W, wil naar 0, vermogen 12.5% naar beneden, dus 87.5%.
Volgende metingen...
Grid geeft -5000W, nog eens 12.5% naar beneden, dus 75%
Grid geeft 1000W, moet 2.5% naar boven, dus 77.5%

Acties:
  • 0 Henk 'm!

  • cotton_eye_joe
  • Registratie: Juni 2016
  • Laatst online: 04-07 15:10
brambo123 schreef op woensdag 26 februari 2025 @ 08:41:
[...]


Juiste manier is register 2 te gebruiken.
Zolang je via register 2 niet aangeeft dat het opgeslagen hoeft te worden zie ik geen enkele reden waarom de eeprom belast zou worden.
Top,bedankt. Register 2 had ik helemaal over het hoofd gezien.

Acties:
  • 0 Henk 'm!

  • cotton_eye_joe
  • Registratie: Juni 2016
  • Laatst online: 04-07 15:10
Beekforel schreef op woensdag 26 februari 2025 @ 11:38:
@brambo123

Maar je zegt dat het percentage dus berekend moet worden obv de maximale capaciteit van de omvormer?

Maar goed, afgezien van hoe ik tot het percentage kom. Het werkt dus niet op de manier die ik nu heb bedacht.
1 procent is een honderdste van je totale (max) omvormer vermogen. Als je bijvoorbeeld een 40kW omvormer hebt is een procent altijd 400W, onafhankelijk van wat de omvormer op dat moment levert.

Als je weet hoeveel er teveel of te weinig wordt teruggeleverd weet je dus hoeveel stapjes je omhoog/omlaag moet vanaf het vorige percentage...

Als je regelt op basis van vorig percentage hoef je niet alle omvormers te meten.

[ Voor 5% gewijzigd door cotton_eye_joe op 26-02-2025 18:40 ]


Acties:
  • 0 Henk 'm!

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 14:23

Beekforel

Is eigenlijk geen vis

cotton_eye_joe schreef op woensdag 26 februari 2025 @ 18:33:
[...]


1 procent is een honderdste van je totale (max) omvormer vermogen. Als je bijvoorbeeld een 40kW omvormer hebt is een procent altijd 400W, onafhankelijk van wat de omvormer op dat moment levert.

Als je weet hoeveel er teveel of te weinig wordt teruggeleverd weet je dus hoeveel stapjes je omhoog/omlaag moet vanaf het vorige percentage...

Als je regelt op basis van vorig percentage hoef je niet alle omvormers te meten.
Ah ok dan wordt het wel een wat andere rekensom inderdaad. Zal er nog eens mee spelen.
cotton_eye_joe schreef op woensdag 26 februari 2025 @ 18:26:
[...]


Top,bedankt. Register 2 had ik helemaal over het hoofd gezien.
Heb je nou de quote aangepast? :? Het gaat om register 3 toch?

Acties:
  • +1 Henk 'm!

  • cotton_eye_joe
  • Registratie: Juni 2016
  • Laatst online: 04-07 15:10
Beekforel schreef op woensdag 26 februari 2025 @ 19:16:
[...]


Heb je nou de quote aangepast? :? Het gaat om register 3 toch?
Haha, waarschijnlijk wel. Ik had hem eerst in mijn eigen bericht verkeerd en had hem toen gewijzigd. Althans dat dacht ik, dat bleek in de quote te zijn. Ik dacht hem weer terug veranderd te hebben maar blijkbaar niet :P

Register 2 is voor wel of niet opslaan van de waarde van oa register 3 in het geheugen

Register 3 is voor het zetten van het maximale omvormer vermogen.

Acties:
  • +2 Henk 'm!

  • firecaps30
  • Registratie: September 2011
  • Laatst online: 08:41
Update over mijn export limit experiment in een ander topic: firecaps30 in "Growatt omvormer plus batterij, smart meter nodig?"

@Beekforel Wellicht voor jou ook interessant, ik heb ook meerdere (2) omvormers en ik probeer hiermee beide op export limit te krijgen door via een P1-Modbus dongle een Eastrom SDM630 te simuleren. Uiteindelijk heb je voor elke omvormer een aparte dongle nodig, dus een P1 splitter zal ook nodig zijn.

Misschien een idee om de boel te bundelen in een apart topic? het grote growatt topic?

Acties:
  • +1 Henk 'm!

  • bpssoftware
  • Registratie: Maart 2021
  • Laatst online: 05-07 15:34
Tinusvolkel schreef op dinsdag 25 februari 2025 @ 21:45:
Tegen de tijd dat m’n contract afloopt / salderen eraf gaat is verdiepen in de shinewilan-x2, dit “project” heeft nu nog niet zoveel prio :)

Maar heb hier de growatt energie meter al op m’n hoofdaansluiting zitten en die heeft een eigen modbus met de inverter. Maar neem aan dat die naar het werkgeheugen schrijft en dan adhv de exportlimit setting bepaald of ie wel of niet moet terugleveren.
Maar heb nog niet echt met deze setting getest.
De Growatt Smartmeter werkt niet via dezelfde interface als "pc" modbus interface. Hier acteert de computer namelijk als master.
Op de growatt heb je de mogelijkheid om een seperate modbus aansluiting naar "smart meter", hierbij is de growatt de master en "smart meter" de slave.

In de kerstvakantie heb ik een module gemaak en wat software growatt van "smart meter" te voorzien door middel van de HomeWizard P1 meter. Code is nog niet echt clean, maar bij interesse zou ik het project binnenkort kunnen delen.

Om terug te komen op de export limit. Wat de Growatt doet is kijken naar het actuele vermogen op de P1 meter, wanneer dit negatief is en ingesteld is dat je zero export mag hebben, zal hij dus zijn vermogen terug gaan knijpen.
Stel je omvormer levert nu zelf 3kW terug en de P1 meter geeft een netto vermogen van -1200 Watt, dan zal de omvormer dus 3000 terugschroeven naar 1800

  • Tinusvolkel
  • Registratie: Augustus 2014
  • Laatst online: 14:34
bpssoftware schreef op donderdag 27 februari 2025 @ 07:11:
[...]


De Growatt Smartmeter werkt niet via dezelfde interface als "pc" modbus interface. Hier acteert de computer namelijk als master.
Op de growatt heb je de mogelijkheid om een seperate modbus aansluiting naar "smart meter", hierbij is de growatt de master en "smart meter" de slave.

In de kerstvakantie heb ik een module gemaak en wat software growatt van "smart meter" te voorzien door middel van de HomeWizard P1 meter. Code is nog niet echt clean, maar bij interesse zou ik het project binnenkort kunnen delen.

Om terug te komen op de export limit. Wat de Growatt doet is kijken naar het actuele vermogen op de P1 meter, wanneer dit negatief is en ingesteld is dat je zero export mag hebben, zal hij dus zijn vermogen terug gaan knijpen.
Stel je omvormer levert nu zelf 3kW terug en de P1 meter geeft een netto vermogen van -1200 Watt, dan zal de omvormer dus 3000 terugschroeven naar 1800
Goed bezig (y) en heb hier de energiemeter idd op een andere poort aangesloten.
Afbeeldingslocatie: https://tweakers.net/i/1b3a_lpEJ_8qsJjWJq872HS_9Hc=/fit-in/4000x4000/filters:no_upscale():strip_exif()/f/image/5DNNNv9GHofSv3TQ12vyQDPm.png?f=user_large
Merk trouwens wel dat als ik via de homewizard kijk dat hij nog een 50w aan het terugleveren is, als de batterij het huis aan het voeden is. Maar hoe is dat bij jullie?

Strava | 8600 Wp zzo | 1600 Wp nnw


  • firecaps30
  • Registratie: September 2011
  • Laatst online: 08:41
bpssoftware schreef op donderdag 27 februari 2025 @ 07:11:
[...]

In de kerstvakantie heb ik een module gemaak en wat software growatt van "smart meter" te voorzien door middel van de HomeWizard P1 meter. Code is nog niet echt clean, maar bij interesse zou ik het project binnenkort kunnen delen.
Hier ben ik heel benieuwd naar! Dus als je het kunt delen, graag. Dan heb ik misschien die P1 Modbus dongles ook niet nodig..

Acties:
  • +1 Henk 'm!

  • jadjong
  • Registratie: Juli 2001
  • Laatst online: 13:36
cotton_eye_joe schreef op dinsdag 25 februari 2025 @ 21:55:
Dat is een growatt meter, zou mooi zijn als bekend is welke registers growatt zelf gebruikt voor deze functie. Misschien is het een register dat in de documentatie als 'reserved' staat. Zit inderdaad verschil in of hij vanuit het werkgeheugen ook naar de eeprom schrijft of niet. Heb een test gedaan met register 3, deze staat na schrijven en vervolgens een reset op de laatst geschreven waarde. Dat lijkt me geen goed nieuws. Morgen eens wat klooien met register 123 :)
Werkt met een standaard Eastron meter(SDM230-Modbus) en die registers staan in de manual.

  • firecaps30
  • Registratie: September 2011
  • Laatst online: 08:41
Inderdaad, in mijn geval de SDM630 emulator welke ook werkt. De Growatt branded Eastron meters lijken geen andere registers te gebruiken. In ieder geval niet voor de voor de omvormer relevante registers.

Acties:
  • +1 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
Gaan nu natuurlijk een beetje offtopic...
Maar ben poosje terug eens bezig geweest met printplaat die P1 omzet naar 3x modbus :*)
Want tja, alles moet tegenwoordig eigen energiemeter.
De laadpaal, omvormers, slimme verbruikers, enz...
Heb je straks meterkasten vol met doorgeluste energiemeters :X

Acties:
  • +1 Henk 'm!

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 13:21
Is een esp met modbus hier (de discussie om zelf load balncing te knutselen / meerdere p1 meters benodigd) niet een oplossing voor waar aan voorbij gegaan wordt?

Esp op de meter pinnen aansluiten en via welk domotica/web/mqtt/scripts systeem kan er toch gewoon aangestuurd worden?
Als je bv zowel de p1 als die esp via mqtt laat praten ben je er toch al?
Dan loop je ook niet tegen “individuele meters “ probleem aan.

Of zie ik iets over het hoofd?

[ Voor 9% gewijzigd door sjorsjuhmaniac op 27-02-2025 12:19 ]


  • firecaps30
  • Registratie: September 2011
  • Laatst online: 08:41
sjorsjuhmaniac schreef op donderdag 27 februari 2025 @ 12:17:
Is een esp met modbus hier niet een oplossing voor waar aan voorbij gegaan wordt?

Esp op de meter pinnen aansluiten en via welk domotica/web/mqtt/scripts systeem kan er toch gewoon aangestuurd worden?
Als je bv zowel de p1 als die esp via mqtt laat praten ben je er toch al?
Dan loop je ook niet tegen “individuele meters “ probleem aan.

Of zie ik iets over het hoofd?
De smartstuff dongles die ik nu heb doet dat: https://smart-stuff.nl/product/p1-naar-modbus-dongle/

Ik ben niet zo thuis in programmeren/ESP dus heb iets kant en klaar gekocht.

Krijg vanmorgen trouwens wel wat gekke waarden binnen vanuit de dongle, denk dat mijn stranded UTP kabel die ik hiervoor heb gebruikt toch niet zo geschikt is :+

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
sjorsjuhmaniac schreef op donderdag 27 februari 2025 @ 12:17:
Is een esp met modbus hier (de discussie om zelf load balncing te knutselen / meerdere p1 meters benodigd) niet een oplossing voor waar aan voorbij gegaan wordt?

Esp op de meter pinnen aansluiten en via welk domotica/web/mqtt/scripts systeem kan er toch gewoon aangestuurd worden?
Als je bv zowel de p1 als die esp via mqtt laat praten ben je er toch al?
Dan loop je ook niet tegen “individuele meters “ probleem aan.

Of zie ik iets over het hoofd?
Zodra je accu aan je growatt hybride omvormer hangt ben je eigenlijk verplicht een energiemeter te gebruiken.

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 13:21
Aah. Niet bij stilgestaan dat esp misschien niet direct bekend is. De bordjes en volledig werkende voorbeeld configuraties voor monitoring en handmatig control staan hier op het forum.

[ Voor 11% gewijzigd door sjorsjuhmaniac op 27-02-2025 12:26 ]


  • bpssoftware
  • Registratie: Maart 2021
  • Laatst online: 05-07 15:34
firecaps30 schreef op donderdag 27 februari 2025 @ 12:20:
[...]


De smartstuff dongles die ik nu heb doet dat: https://smart-stuff.nl/product/p1-naar-modbus-dongle/

Ik ben niet zo thuis in programmeren/ESP dus heb iets kant en klaar gekocht.

Krijg vanmorgen trouwens wel wat gekke waarden binnen vanuit de dongle, denk dat mijn stranded UTP kabel die ik hiervoor heb gebruikt toch niet zo geschikt is :+
Heb deze meter ook geprobeerd, helaas zijn aantal registers niet aanwezig die growatt wil hebben. Voor power limiting zal het waarschijnlijk wel werken, maar niet voor alles.

Voorbeeld wat Growatt anders doet dan die implementatie is dagtotalen ipv meter totalen gebruiken in bepaalde registers.

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 13:21
bpssoftware schreef op donderdag 27 februari 2025 @ 12:55:
[...]


Heb deze meter ook geprobeerd, helaas zijn aantal registers niet aanwezig die growatt wil hebben. Voor power limiting zal het waarschijnlijk wel werken, maar niet voor alles.

Voorbeeld wat Growatt anders doet dan die implementatie is dagtotalen ipv meter totalen gebruiken in bepaalde registers.
Zo te zien op die website is het een esp. Ik zou hem eens openmaken en kijken of je niet gewoon andere firmware erop kan zetten. Wie weet kan je hen dan krijgen zoals je wilt, met die andere registers.

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 14:23

Beekforel

Is eigenlijk geen vis

sjorsjuhmaniac schreef op donderdag 27 februari 2025 @ 17:07:
[...]


Zo te zien op die website is het een esp. Ik zou hem eens openmaken en kijken of je niet gewoon andere firmware erop kan zetten. Wie weet kan je hen dan krijgen zoals je wilt, met die andere registers.
Je moet dan wel weten welke registers er nodig zijn natuurlijk... Growatt is hier niet echt duidelijk over zover ik kan vinden.

De route die ik heb gekozen lijkt ook niet helemaal te werken. Ik heb de ShineWifi stick omgeflashed naar esphome (al jaren geleden) en daarin modbus communicatie toegevoegd (zie een paar postst terug). Ik kan daar wel wat mee limiteren maar het lijkt niet heel stabiel.
Ik denk dat ik toch maar een aparte esp ga bouwen met een modbus tranciever en deze op de modbus aansluiting van de omvormer ga aansluiten en zo proberen een Eastron meter te simuleren.

@firecaps30 een dedicated/centraal topic voor dit onderwerp is wellicht een goed idee, misschien kan dat ook dit topic worden?

Acties:
  • +1 Henk 'm!

  • bpssoftware
  • Registratie: Maart 2021
  • Laatst online: 05-07 15:34
sjorsjuhmaniac schreef op donderdag 27 februari 2025 @ 17:07:
[...]


Zo te zien op die website is het een esp. Ik zou hem eens openmaken en kijken of je niet gewoon andere firmware erop kan zetten. Wie weet kan je hen dan krijgen zoals je wilt, met die andere registers.
De module is inderdaad gebaseerd op ESP32-C3 als ik me het goed kan herinneren. Ik heb zelf uiteindellijk deze route niet genomen omdat ik twee omvormers heb en dus ook twee P1 poorten extra in gebruik moet nemen en kabels moet trekken.

Zelf heb ik gekozen om de HomeWizard P1 meter het telegram bericht via de API op te halen via een ESP32 met modbus controller die verbonden is met de omvormer (per omvormer).

De MIC en MOD omvormers van Growatt vragen de volgende registers uit:
fc = 4, address = 0 , length = 36 = Volt / Amps
fc = 4, address = 52, length = 30 = Total Power
fc = 4, address = 200, length = 6 = Line to Line
fc = 4, address = 342, length = 4 = Total kWh, total kvarh

In de firmware versies zit er wel een verschil in de lengte die ze per keer opvragen, met name voor de eerste twee requests.

De SDM630 module die ik emuleer draai op slave address 2 met baudrate van 9600. (standaard growatt instellingen)

Dit zijn een beetje de registers die gebruikt worden, ik heb het nog niet heel net in Excel gezet, maar even uit mijnhobby code gepakt
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
79
80
81
82
83
84
85
#define REG_IR_Phase1_L2NVolt 0 // 0
#define REG_IR_Phase2_L2NVolt 1 // 2
#define REG_IR_Phase3_L2NVolt 2 // 4

#define REG_IR_Phase1_Current 3 // 6
#define REG_IR_Phase2_Current 4 // 8
#define REG_IR_Phase3_Current 5 // 10

#define REG_IR_Phase1_Power 6 // 12 - Watts
#define REG_IR_Phase2_Power 7 // 14 - Watts
#define REG_IR_Phase3_Power 8 // 16 - Watts
// VA
#define REG_IR_Phase1_VA 9 // 18 - VA
#define REG_IR_Phase2_VA 10 // 20 - VA
#define REG_IR_Phase3_VA 11 // 22 - VA
// VAr
#define REG_IR_Phase1_VAr 12 // 24 - VAr
#define REG_IR_Phase2_VAr 13 // 26 - VAr
#define REG_IR_Phase3_VAr 14 // 28 - VAr
  // Power Factor 
#define REG_IR_Phase1_PF 15 // 30 
#define REG_IR_Phase2_PF 16 // 32 
#define REG_IR_Phase3_PF 17 // 34 
// Phase angle [deg] 
#define REG_IR_Phase1_PA 18 // 36 - degrees
#define REG_IR_Phase2_PA 19 // 38 - degrees
#define REG_IR_Phase3_PA 20 // 40 - degrees
// Average to neutral [V]
#define REG_IR_AverageToNeutral 21 // 42 - Volt
// Average line current [A]
#define REG_IR_AverageLineCurrent 23 // 46 - Amps
// Sum of currentsw [A]
#define REG_IR_SumOfCurrents 24 // 48 - Amps
// Total system power [W]
#define REG_IR_TotalSystemPower 26 // 52 - Watts
// Total system volt amps. [VA]
#define REG_IR_SystemVoltAmps 28 // 56 - VoltAmp
// Total system VAr
#define REG_IR_SystemVAr 30 // 60 - VAr
  // Total system Power Factor
#define REG_IR_SystemPF 31 // 62 - Pf
  // Total system phase angle
#define REG_IR_SystemPhaseAngle 33 // 66 - angle
  // System Frequency [Hz]
#define REG_IR_GridFrequency 35 // 70 - Hz
  // Total import [kWh]
#define REG_IR_TotalImportkWh 36 // 72 - kWh - DAGWAARDE
  // Total Export [kWh]
#define REG_IR_TotalExportkWh 37 // 74 - kWh - DAGWAARDE
  // Total import [kVArh]
#define REG_IR_TotalImportkVArh 38 // 76 - kVArh - DAGWAARDE
  // Total Export [kVArh]
#define REG_IR_TotalExportkVArh 39 // 78 - kVArh - DAGWAARDE
  // Total VAh
#define REG_IR_TotalVAh 40 // 80 - kVAh
  // Total Ah
#define REG_IR_TotalAh 41 // 82 - Ah
  // Total system demand [W]
#define REG_IR_TotalSystemDemand 42 // 84 - Watt
  // Maximum total system power demand [VA]
#define REG_IR_MaximumTotalSystemDemand 43 // 86 - VA
  // Total system VA demand 
#define REG_IR_TotalSystemVADemand 50 // 100 - VA
#define REG_IR_MaximumTotalSystemVADemand 51 // Maximum total system VA demand -  102 - VA
  // Neutral current demand. - 104 - Amps
  // Maximum neutral current demand - 106 - Amps
  // Line 1 to Line 2 volts. - 200 - Volts
  #define REG_IR_L1toL2Voltage 100 // 200 - Voltage
  // Line 2 to Line 3 volts. - 202 - Volts
  #define REG_IR_L2toL3Voltage 101 // 202 - Voltage
  // Line 3 to Line 1 volts. - 204 - Volts
  #define REG_IR_L3toL1Voltage 102 // 204 - Voltage
  // Average line to line volts. - 206 - Volts
  #define REG_IR_AverageLine2LineVoltage 103 // 206 - Voltage
  // Neutral current. - 224 - Amps
  // Phase 1 L/N volts THD - 234 - %
  // Phase 2 L/N volts THD - 236 - %
  // Phase 3 L/N volts THD - 238 - %
  // Phase 1 Current THD - 240 - %
  // Phase 2 Current THD - 242 - %
  // Phase 3 Current THD - 244 - %
  // Average line to neutral volts THD - 248 - %
  // ....
#define REG_IR_TotalkWh   171  // Total kwh(3) - 342 - kWh
#define REG_IR_Totalkvarh 172  // Total kvarh(3) - 344 - kvarh


Het grootste verschil met de "standaard" SDM630 is dat TotalImportkWh / TotalExportkWh een dagtotaal is en niet een meter totaal. Voer je dit wel als een meterwaarde op, dan heb je hele leuke plaatjes op growatt en gekoppeld eventueel met HomeAssistant :)

Overigens is de SDM630 gewoon compatible met single phase omvormer! De code wil ik eerst nog opschonen voordat ik die op Github ga zetten

Acties:
  • +1 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
bpssoftware schreef op donderdag 27 februari 2025 @ 21:59:
[...]
Overigens is de SDM630 gewoon compatible met single phase omvormer!
[...]
Voor helderheid:
Single phase energiemeter is SDM230.
Deze heeft dezelfde registers als de SDM630, alleen wat lege waardes.
Omvormer bepaald type meter op basis van slave adres.
Even uit mijn hoofd, mogelijke meters:
adres 1: Eastron SDM230 single phase
adres 2: Eastron SDM630 three phase
adres 3: Chint DDSU666 single phase
adres 4: Chint DTSU666 three phase

Acties:
  • 0 Henk 'm!

  • firecaps30
  • Registratie: September 2011
  • Laatst online: 08:41
Ik heb een verzameltopic aangemaakt: Het Growatt topic

Acties:
  • +4 Henk 'm!

  • Knielen
  • Registratie: December 2009
  • Nu online
Even aan het stoeien geweest hoe ik zonder extra hardware toch het vermogen van mijn MIC 2500TL-X kan aanpassen. Ik heb een ShineLan-X, die volgens mij nog niet te flashen is.

Al langere tijd lees ik de gegevens van de omvormer uit met de Grott (Server) applicatie, werkt erg stabiel en je gegevens gaan niet meer naar Growatt. Je kan via de GrottServer ook aanpassingen doen aan het register:

Commands die ik gebruikt heb om te schrijven naar het register zijn PUT commands via Node-Red:

0% power:
code:
1
http://<IP>:5782/inverter?command=register&register=3&inverter=<SN inverter>&value=0&format=dec


100% power:
code:
1
http://<IP>:5782/inverter?command=register&register=3&inverter=<SN inverter>&value=100&format=dec


Uitlezen van ingestelde vermogen is via een GET command:
code:
1
http://<IP>:5782/inverter?command=register&register=3&inverter=<SN inverter>&format=dec

Acties:
  • 0 Henk 'm!

  • Blackraven
  • Registratie: November 2007
  • Laatst online: 04-07 07:33
Knielen schreef op zondag 23 maart 2025 @ 10:09:
Even aan het stoeien geweest hoe ik zonder extra hardware toch het vermogen van mijn MIC 2500TL-X kan aanpassen. Ik heb een ShineLan-X, die volgens mij nog niet te flashen is.

Al langere tijd lees ik de gegevens van de omvormer uit met de Grott (Server) applicatie, werkt erg stabiel en je gegevens gaan niet meer naar Growatt. Je kan via de GrottServer ook aanpassingen doen aan het register:

Commands die ik gebruikt heb om te schrijven naar het register zijn PUT commands via Node-Red:

0% power:
code:
1
http://<IP>:5782/inverter?command=register&register=3&inverter=<SN inverter>&value=0&format=dec


100% power:
code:
1
http://<IP>:5782/inverter?command=register&register=3&inverter=<SN inverter>&value=100&format=dec


Uitlezen van ingestelde vermogen is via een GET command:
code:
1
http://<IP>:5782/inverter?command=register&register=3&inverter=<SN inverter>&format=dec
Leuke functionaliteit, ik wil het uiteindelijk via de interne rest-functie van HA inplementeren.
Ik probeer dit eerst even curl te doen om de output te testen, maar dan krijg ik zoiets als dit:
code:
1
2
3
4
5
6
7
input:
curl -X GET http://127.0.0.1:5782/inverter?command=register&register=3&inverter=5FZJ123456&format=dec
output:
[1] 3893590
[2] 3893591
[3] 3893592
tweakers@net-NUC7i3DNKE:~$ no or no valid invertid specified


Wat gaat hier nog mis?
Edit: "vergeten"
code:
1
2
3
4
input:
curl -X GET "http://127.0.0.1:5782/inverter?command=register&register=3&inverter=5FZJ123456&format=dec"
output:
{"value": 100}

Hier kan ik wel mee verder, dank! :*)

Edit 2:
Ik kreeg eerst de PUT commando's niet aan de praat.
Hier een exacte kopie van wat ik wil:
ebbz in "Growatt omvormers automatisch schakelen bij negatieve prijs"
Na een hoop getweak, kwam ik er achter waarom PUT niet werkt.
Ik had ooit een hoop gezeik gehad met grott waarbij Growatt de servers pushte en ik had in mijn Docker config het volgende staan om server verandering te voorkomen:
code:
1
gblockcmd=True

Dit blokkeert dus ook je eigen PUT... 8)7
code:
1
gblockcmd=False

En nu werkt het als een zonnetje
(eigenlijk werkt de omvormer nu niet meer als het zonnetje te goed schijnt 8) )

[ Voor 21% gewijzigd door Blackraven op 01-05-2025 14:23 ]

WP: ME PUHZ-SW75YAA+EHST20D-VM2C2+ESP | EVSE: SmartEVSE v2 | PV: 11kWp Growatt


Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
Ik ben tegen cross posten, maar toch even een check hier. Zie in het Growatt topcic mijn Modbus vragen. Ik heb dus een Growatt inverter met Ark batterij (met smart scheduling en AI functionaliteit). Ik wil graag de batterij via modbus uitlezen in ha. Krijg het voor geen mogelijkheid voorelkaar. Heeft hier iemand de met smart scheduling en AI functionaliteit én een modbus interface naar HA?

Nota bene: Zie ook het growatt topic hoe ik de koppeling maak. Ik heb deze info van het HA forum.

Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
Hi, ik ben al weken aan het stoeien om Modbus aan te krijgen op mijn MIN 4600TL-XH inverter. Krijg het niet voor elkaar. Ik krijg de foutmelding: Modbus command to device=1 register=0xC15 no response received.

Wat heb ik nu:
Wemos D1 mini
485 naar ttl bordje

485 naar ttl bordje => Wemos D1 mini
VCC => heb ik op V5 aangesloten
TXD -=> D6

Ik zie hier veel bovenstaande melding maar wel dat mensen het werken hebben gekregen, ik denk echt HOE dan?

Vragen:
- is bovenstaande goed aangesloten
- Is Wemos D1 mini een handig bordje?
- Nog andere feedback?
RXD => D7
GND => GND
B- => Pin 4 Sys com poort
A+ => Pin 3 Sys Com poort
GND => niet aangesloten


Afbeeldingslocatie: https://tweakers.net/i/St77Hv-4kzr7GmBCTnXSB4Qc2A0=/x800/filters:strip_icc():strip_exif()/f/image/2jQTS9UUj4642dJ3cGSonW7L.jpg?f=fotoalbum_large

Afbeeldingslocatie: https://tweakers.net/i/gKdKL-YfsTy_gAoYVQpBhs4opZ8=/x800/filters:strip_icc():strip_exif()/f/image/9bgqJtRK4kokgR9L535Plv2v.jpg?f=fotoalbum_large


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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
esphome:
  name: test-logger
  friendly_name: "ESP Logging Test"
  
esp8266:
  board: d1_mini

# Enable logging
logger:
  baud_rate: 0
  level: VERY_VERBOSE
  
# Enable Home Assistant API
api:

ota:
  platform: esphome
  

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Optional manual IP


captive_portal:

web_server:
  port: 80

time:
  - platform: homeassistant
    id: homeassistant_time

uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: D6
  rx_pin: D7

modbus:
  id: modbus1
  uart_id: gw_uart

modbus_controller:
  - id: growatt
    address: 0x01
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 15s

sensor:
  - platform: modbus_controller
    name: "${devicename} DcPower"
    address: 5
    register_type: "read"
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
        
  - platform: modbus_controller
    name: "${devicename} DcVoltage"
    address: 3
    register_type: "read"
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} DcInputCurrent"
    address: 4
    register_type: "read"
    unit_of_measurement: A
    device_class: current
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} AcFrequency"
    address: 37
    register_type: "read"
    unit_of_measurement: Hz
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.01
  
  - platform: modbus_controller
    name: "${devicename} AcVoltage"
    address: 38
    register_type: "read"
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  
  - platform: modbus_controller
    name: "${devicename} AcOutputCurrent"
    address: 39
    register_type: "read"
    unit_of_measurement: A
    device_class: current
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} AcPower"
    address: 40
    register_type: "read"
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} EnergyToday"
    address: 53
    register_type: "read"
    unit_of_measurement: kWh
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} EnergyTotal"
    address: 55
    register_type: "read"
    unit_of_measurement: kWh
    state_class: total_increasing
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

    
  - platform: modbus_controller
    name: "${devicename} Temperature"
    address: 3093
    register_type: "read"
    unit_of_measurement: C
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

switch:
  - platform: modbus_controller
    name: "${devicename} Enabled"
    address: 0
    register_type: coil

number:
  - platform: modbus_controller
    name: "${devicename} MaxOutputPct"
    address: 3
    value_type: U_WORD
    min_value: 0
    max_value: 100
    entity_category: config

Acties:
  • 0 Henk 'm!

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 13:21
@konehead
Zomaar wat gedachten:
- zeker weten dat je de juiste pins op de omvormer hebt?
- gecontroleerd in je inverter instellingen dat die ook echt device is 1 gebruikt?
- pinout van de wemos ge-triple checked?
- waarom aarde niet aangesloten?
- ik heb nog de definitie “stop bit = 1” in mijn esphome config
-

Acties:
  • 0 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
konehead schreef op donderdag 26 juni 2025 @ 20:19:
Hi, ik ben al weken aan het stoeien om Modbus aan te krijgen op mijn MIN 4600TL-XH inverter. Krijg het niet voor elkaar. Ik krijg de foutmelding: Modbus command to device=1 register=0xC15 no response received.

Wat heb ik nu:
Wemos D1 mini
485 naar ttl bordje

485 naar ttl bordje => Wemos D1 mini
VCC => heb ik op V5 aangesloten
TXD -=> D6

Ik zie hier veel bovenstaande melding maar wel dat mensen het werken hebben gekregen, ik denk echt HOE dan?

Vragen:
- is bovenstaande goed aangesloten
- Is Wemos D1 mini een handig bordje?
- Nog andere feedback?
RXD => D7
GND => GND
B- => Pin 4 Sys com poort
A+ => Pin 3 Sys Com poort
GND => niet aangesloten


[Afbeelding]

[Afbeelding]


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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
esphome:
  name: test-logger
  friendly_name: "ESP Logging Test"
  
esp8266:
  board: d1_mini

# Enable logging
logger:
  baud_rate: 0
  level: VERY_VERBOSE
  
# Enable Home Assistant API
api:

ota:
  platform: esphome
  

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Optional manual IP


captive_portal:

web_server:
  port: 80

time:
  - platform: homeassistant
    id: homeassistant_time

uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: D6
  rx_pin: D7

modbus:
  id: modbus1
  uart_id: gw_uart

modbus_controller:
  - id: growatt
    address: 0x01
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 15s

sensor:
  - platform: modbus_controller
    name: "${devicename} DcPower"
    address: 5
    register_type: "read"
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
        
  - platform: modbus_controller
    name: "${devicename} DcVoltage"
    address: 3
    register_type: "read"
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} DcInputCurrent"
    address: 4
    register_type: "read"
    unit_of_measurement: A
    device_class: current
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} AcFrequency"
    address: 37
    register_type: "read"
    unit_of_measurement: Hz
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.01
  
  - platform: modbus_controller
    name: "${devicename} AcVoltage"
    address: 38
    register_type: "read"
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
  
  - platform: modbus_controller
    name: "${devicename} AcOutputCurrent"
    address: 39
    register_type: "read"
    unit_of_measurement: A
    device_class: current
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} AcPower"
    address: 40
    register_type: "read"
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} EnergyToday"
    address: 53
    register_type: "read"
    unit_of_measurement: kWh
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1
    
  - platform: modbus_controller
    name: "${devicename} EnergyTotal"
    address: 55
    register_type: "read"
    unit_of_measurement: kWh
    state_class: total_increasing
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

    
  - platform: modbus_controller
    name: "${devicename} Temperature"
    address: 3093
    register_type: "read"
    unit_of_measurement: C
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
    - multiply: 0.1

switch:
  - platform: modbus_controller
    name: "${devicename} Enabled"
    address: 0
    register_type: coil

number:
  - platform: modbus_controller
    name: "${devicename} MaxOutputPct"
    address: 3
    value_type: U_WORD
    min_value: 0
    max_value: 100
    entity_category: config
Voeg eens debug: toen aan je uart.
Dan krijg je alle tx en rx data te zien.
Dus:
code:
1
2
3
4
5
6
uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: D6
  rx_pin: D7
  debug:


Edit:
Zo te zien heeft je RS485 board ook ledjes.
Knippert er iets van die lampjes?

En persoonlijk vind ik alles waar nog een esp8266 op zit behoorlijk verouderd.
Meest is tegenwoordig toch wel minimaal een ESP32, of nog nieuwer de ESP32-S3 of ESP32-C3

Edit2:
RX en TX lijken omgewisseld.
Je TX in esphome is een transmitter, die moet dus op receiver van RX485 board.

[ Voor 3% gewijzigd door brambo123 op 26-06-2025 21:06 ]


Acties:
  • +1 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
sjorsjuhmaniac schreef op donderdag 26 juni 2025 @ 20:56:
@konehead
Zomaar wat gedachten:
- zeker weten dat je de juiste pins op de omvormer hebt?
- gecontroleerd in je inverter instellingen dat die ook echt device is 1 gebruikt?
- pinout van de wemos ge-triple checked?
- waarom aarde niet aangesloten?
- ik heb nog de definitie “stop bit = 1” in mijn esphome config
-
Dank!
- Ja: pin omvormer 3 x gecheckt. Pin 3 en 4
- Ja: Modbus 1
- Ja, pinout 3x gecheckt ook met Chat
- aarde op omvormer: is dit een must?
- Check, ik zal ook stop bit = 1 toevoegen

Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
brambo123 schreef op donderdag 26 juni 2025 @ 20:59:
[...]

Voeg eens debug: toen aan je uart.
Dan krijg je alle tx en rx data te zien.
Dus:
code:
1
2
3
4
5
6
uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: D6
  rx_pin: D7
  debug:


Edit:
Zo te zien heeft je RS485 board ook ledjes.
Knippert er iets van die lampjes?

En persoonlijk vind ik alles waar nog een esp8266 op zit behoorlijk verouderd.
Meest is tegenwoordig toch wel minimaal een ESP32, of nog nieuwer de ESP32-S3 of ESP32-C3

Edit2:
RX en TX lijken omgewisseld.
Je TX in esphome is een transmitter, die moet dus op receiver van RX485 board.
Dank!
Moet er nog iets meer bij, of alleen "debug:'?

Reply on edit: Ja er zit een lampje en die knipper! Is het beter als ik een ESP32 bordje koop? gaat dit het verschil maken? Deze Wemos had ik nog liggen :)

Reply om Edit 2: JA!!! heb ik omgewisseld, geen verschil in uitkomst :(

Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
konehead schreef op donderdag 26 juni 2025 @ 21:21:
[...]


Dank!
Moet er nog iets meer bij, of alleen "debug:'?

Reply on edit: Ja er zit een lampje en die knipper! Is het beter als ik een ESP32 bordje koop? gaat dit het verschil maken? Deze Wemos had ik nog liggen :)

Reply om Edit 2: JA!!! heb ik omgewisseld, geen verschil in uitkomst :(
@brambo123 Ik heb debug aangezet en D7 en D6 in de code gewisseld. Zie hieronder de zeer frustrerende foutmelding. Moet/kan ik nog meer aanzetten qua debug?

code:
1
2
3
4
5
6
7
uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: D7
  rx_pin: D6
  debug:
     direction: BOTH


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
79
80
81
82
83
84
85
21:36:09][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x25 count 5
[21:36:09][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:09][V][modbus:226]: Modbus write: 01.04.00.25.00.05.21.C2 (8)
[21:36:09][V][modbus_controller:570]: Command sent 4 0x25 5 send_count: 2
[21:36:09][D][uart_debug:114]: >>> 01:04:00:25:00:05:21:C2
[21:36:09][V][modbus:043]: Stop waiting for response from 1
[21:36:09][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x25 count 5
[21:36:09][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:09][V][modbus:226]: Modbus write: 01.04.00.25.00.05.21.C2 (8)
[21:36:09][V][modbus_controller:570]: Command sent 4 0x25 5 send_count: 3
[21:36:09][D][uart_debug:114]: >>> 01:04:00:25:00:05:21:C2
[21:36:10][V][modbus:043]: Stop waiting for response from 1
[21:36:10][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x25 count 5
[21:36:10][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:10][V][modbus:226]: Modbus write: 01.04.00.25.00.05.21.C2 (8)
[21:36:10][V][modbus_controller:570]: Command sent 4 0x25 5 send_count: 4
[21:36:10][D][uart_debug:114]: >>> 01:04:00:25:00:05:21:C2
[21:36:10][V][modbus:043]: Stop waiting for response from 1
[21:36:10][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x25 count 5
[21:36:10][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:10][V][modbus:226]: Modbus write: 01.04.00.25.00.05.21.C2 (8)
[21:36:10][V][modbus_controller:570]: Command sent 4 0x25 5 send_count: 5
[21:36:10][D][uart_debug:114]: >>> 01:04:00:25:00:05:21:C2
[21:36:10][V][modbus:043]: Stop waiting for response from 1
[21:36:10][D][modbus_controller:039]: Modbus command to device=1 register=0x25 no response received - removed from send queue
[21:36:10][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x35 count 4
[21:36:10][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:10][V][modbus:226]: Modbus write: 01.04.00.35.00.04.E1.C7 (8)
[21:36:10][V][modbus_controller:570]: Command sent 4 0x35 4 send_count: 1
[21:36:10][D][uart_debug:114]: >>> 01:04:00:35:00:04:E1:C7
[21:36:10][V][modbus:043]: Stop waiting for response from 1
[21:36:10][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x35 count 4
[21:36:10][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:10][V][modbus:226]: Modbus write: 01.04.00.35.00.04.E1.C7 (8)
[21:36:10][V][modbus_controller:570]: Command sent 4 0x35 4 send_count: 2
[21:36:10][D][uart_debug:114]: >>> 01:04:00:35:00:04:E1:C7
[21:36:11][V][modbus:043]: Stop waiting for response from 1
[21:36:11][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x35 count 4
[21:36:11][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:11][V][modbus:226]: Modbus write: 01.04.00.35.00.04.E1.C7 (8)
[21:36:11][V][modbus_controller:570]: Command sent 4 0x35 4 send_count: 3
[21:36:11][D][uart_debug:114]: >>> 01:04:00:35:00:04:E1:C7
[21:36:11][V][modbus:043]: Stop waiting for response from 1
[21:36:11][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x35 count 4
[21:36:11][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:11][V][modbus:226]: Modbus write: 01.04.00.35.00.04.E1.C7 (8)
[21:36:11][V][modbus_controller:570]: Command sent 4 0x35 4 send_count: 4
[21:36:11][D][uart_debug:114]: >>> 01:04:00:35:00:04:E1:C7
[21:36:11][V][modbus:043]: Stop waiting for response from 1
[21:36:11][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x35 count 4
[21:36:11][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:11][V][modbus:226]: Modbus write: 01.04.00.35.00.04.E1.C7 (8)
[21:36:11][V][modbus_controller:570]: Command sent 4 0x35 4 send_count: 5
[21:36:11][D][uart_debug:114]: >>> 01:04:00:35:00:04:E1:C7
[21:36:11][V][modbus:043]: Stop waiting for response from 1
[21:36:11][D][modbus_controller:039]: Modbus command to device=1 register=0x35 no response received - removed from send queue
[21:36:11][V][modbus_controller:043]: Sending next modbus command to device 1 register 0xC15 count 1
[21:36:11][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:11][V][modbus:226]: Modbus write: 01.04.0C.15.00.01.23.5E (8)
[21:36:11][V][modbus_controller:570]: Command sent 4 0xC15 1 send_count: 1
[21:36:12][D][uart_debug:114]: >>> 01:04:0C:15:00:01:23:5E
[21:36:12][V][modbus:043]: Stop waiting for response from 1
[21:36:12][V][modbus_controller:043]: Sending next modbus command to device 1 register 0xC15 count 1
[21:36:12][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:12][V][modbus:226]: Modbus write: 01.04.0C.15.00.01.23.5E (8)
[21:36:12][V][modbus_controller:570]: Command sent 4 0xC15 1 send_count: 2
[21:36:12][D][uart_debug:114]: >>> 01:04:0C:15:00:01:23:5E
[21:36:12][V][modbus:043]: Stop waiting for response from 1
[21:36:12][V][modbus_controller:043]: Sending next modbus command to device 1 register 0xC15 count 1
[21:36:12][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:12][V][modbus:226]: Modbus write: 01.04.0C.15.00.01.23.5E (8)
[21:36:12][V][modbus_controller:570]: Command sent 4 0xC15 1 send_count: 3
[21:36:12][D][uart_debug:114]: >>> 01:04:0C:15:00:01:23:5E
[21:36:12][V][modbus:043]: Stop waiting for response from 1
[21:36:12][V][modbus_controller:043]: Sending next modbus command to device 1 register 0xC15 count 1
[21:36:12][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:12][V][modbus:226]: Modbus write: 01.04.0C.15.00.01.23.5E (8)
[21:36:12][V][modbus_controller:570]: Command sent 4 0xC15 1 send_count: 4
[21:36:12][D][uart_debug:114]: >>> 01:04:0C:15:00:01:23:5E
[21:36:13][V][modbus:043]: Stop waiting for response from 1
[21:36:13][V][modbus_controller:043]: Sending next modbus command to device 1 register 0xC15 count 1
[21:36:13][VV][uart.arduino_esp8266:198]:     Flushing
[21:36:13][V][modbus:226]: Modbus write: 01.04.0C.15.00.01.23.5E (8)
[21:36:13][V][modbus_controller:570]: Command sent 4 0xC15 1 send_count: 5
[21:36:13][D][uart_debug:114]: >>> 01:04:0C:15:00:01:23:5E

Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
sjorsjuhmaniac schreef op donderdag 26 juni 2025 @ 20:56:
@konehead
Zomaar wat gedachten:
- zeker weten dat je de juiste pins op de omvormer hebt?
- gecontroleerd in je inverter instellingen dat die ook echt device is 1 gebruikt?
- pinout van de wemos ge-triple checked?
- waarom aarde niet aangesloten?
- ik heb nog de definitie “stop bit = 1” in mijn esphome config
-
Ik heb de aarde aangesloten van TLL bordje naar de wemos. Ik kan ook de aarde aansluiten van TLL bordje naar de inveter? Had gehoopt dat er in de Sys Com connecter een aardepin zou zitten, die zit er dus niet in. Waar moet je de aarde aansluiten van het TLL bordje?

Acties:
  • 0 Henk 'm!

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 05-07 15:46
Aarde van TTL bord naar inverter is niet perse nodig. Ik heb dat niet aangesloten en het werkt prima. Wat ik echter wel moest doen was een extra 150Ohm weerstand in het midden van de kabel tussen omvormer en reader maken.

Het luistert blijkbaar erg nauw hoeveel afstand je kabel is (in mijn geval +/- 50cm) en of je de weerstanden goed hebt aangesloten. Ik heb nu dus EN een 150Ohm weerstand direct op de plug in mijn omvormer, en nog een 2e 150Ohm weerstand in het midden van de kabel zitten en daarmee werkt het nu.

Kia E-Niro 2019 Executiveline. OTGW/HA Enthousiasteling.


Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
Dutchess_Nicole schreef op vrijdag 27 juni 2025 @ 11:39:
Aarde van TTL bord naar inverter is niet perse nodig. Ik heb dat niet aangesloten en het werkt prima. Wat ik echter wel moest doen was een extra 150Ohm weerstand in het midden van de kabel tussen omvormer en reader maken.

Het luistert blijkbaar erg nauw hoeveel afstand je kabel is (in mijn geval +/- 50cm) en of je de weerstanden goed hebt aangesloten. Ik heb nu dus EN een 150Ohm weerstand direct op de plug in mijn omvormer, en nog een 2e 150Ohm weerstand in het midden van de kabel zitten en daarmee werkt het nu.
Ow echt, heb je daar een foto van? Ik heb een kabel van 2 meter.. Nooit gedacht aan een weerstand..

[ Voor 4% gewijzigd door konehead op 27-06-2025 13:11 ]


Acties:
  • 0 Henk 'm!

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 13:21
konehead schreef op vrijdag 27 juni 2025 @ 08:54:
[...]


Ik heb de aarde aangesloten van TLL bordje naar de wemos. Ik kan ook de aarde aansluiten van TLL bordje naar de inveter? Had gehoopt dat er in de Sys Com connecter een aardepin zou zitten, die zit er dus niet in. Waar moet je de aarde aansluiten van het TLL bordje?
Aarde aan je wemos idd. Niet aan de inverter

Acties:
  • 0 Henk 'm!

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 13:21
konehead schreef op vrijdag 27 juni 2025 @ 13:11:
[...]


Ow echt, heb je daar een foto van? Ik heb een kabel van 2 meter.. Nooit gedacht aan een weerstand..
Pak eens 30cm om te testen. Werkt dat, dan kan je verder proberen met die 2m.

Modbus werkt zoals zo veel protocollen door een hoog/laag op de datakabels te zetten. Weerstand van de kabel/systeem beïnvloedt het verschil tussen een hoog en een laag waardoor het mis kan gaan.

Edit:

Ik heb zo’n 50cm zonder gedoe met weerstandjes.

[ Voor 6% gewijzigd door sjorsjuhmaniac op 27-06-2025 13:44 ]


Acties:
  • 0 Henk 'm!

  • Tinusvolkel
  • Registratie: Augustus 2014
  • Laatst online: 14:34
Afbeeldingslocatie: https://protosupplies.com/wp-content/uploads/2019/02/SCM-TTL-to-RS-485-Adapter-Module-Connections-1.jpg

Je kan R0 nog shorten om de 120 ohm termination resistor toe te voegen in het circuit.
Verder verwacht ik dat de bus in de omvormer zelf ook al 120 ohm is afgesloten.
@Dutchess_Nicole wat is de beredenering geweest om een weerstand toe te voegen in het midden van de transmissielijn?

Modbus (rs485) zou een 1200meter moeten kunnen overbruggen, dus ik verwacht dat het dan met 30cm nog net wel werkt met niet juist geplaatste afsluitweerstanden en met 50cm niet meer.

Is die kabel zelf getwisted? verwacht dat een ethernetkabel prima gaat werken.

[ Voor 24% gewijzigd door Tinusvolkel op 27-06-2025 14:04 ]

Strava | 8600 Wp zzo | 1600 Wp nnw


Acties:
  • 0 Henk 'm!

  • firecaps30
  • Registratie: September 2011
  • Laatst online: 08:41
@konehead Waarom gebruik je niet zo een simpele modbus - USB adapter die je in je Pi/PC steekt waar Home Assistant op draait? Zoals deze, en installeer je de Solax Modbus integratie?

Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
sjorsjuhmaniac schreef op vrijdag 27 juni 2025 @ 13:43:
[...]


Pak eens 30cm om te testen. Werkt dat, dan kan je verder proberen met die 2m.

Modbus werkt zoals zo veel protocollen door een hoog/laag op de datakabels te zetten. Weerstand van de kabel/systeem beïnvloedt het verschil tussen een hoog en een laag waardoor het mis kan gaan.

Edit:

Ik heb zo’n 50cm zonder gedoe met weerstandjes.
Ingekort, helaas:

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
[14:24:21][C][logger:211]: Logger:
[14:24:21][C][logger:211]:   Max Level: VERY_VERBOSE
[14:24:21][C][logger:211]:   Initial Level: VERY_VERBOSE
[14:24:21][C][logger:217]:   Log Baud Rate: 0
[14:24:21][C][logger:217]:   Hardware UART: UART0
[14:24:21][C][uart.arduino_esp8266:118]: UART Bus:
[14:24:21][C][uart.arduino_esp8266:119]:   TX Pin: GPIO13
[14:24:21][C][uart.arduino_esp8266:120]:   RX Pin: GPIO12
[14:24:21][C][uart.arduino_esp8266:122]:   RX Buffer Size: 256
[14:24:21][C][uart.arduino_esp8266:124]:   Baud Rate: 9600 baud
[14:24:21][C][uart.arduino_esp8266:124]:   Data Bits: 8
[14:24:21][C][uart.arduino_esp8266:124]:   Parity: NONE
[14:24:21][C][uart.arduino_esp8266:124]:   Stop bits: 1
[14:24:21][C][uart.arduino_esp8266:133]:   Using software serial
[14:24:21][C][modbus:166]: Modbus:
[14:24:21][C][modbus:168]:   Send Wait Time: 250 ms
[14:24:21][C][modbus:168]:   CRC Disabled: NO
[14:24:21][C][modbus.number:083]: modbus.numberModbus Number '${devicename} MaxOutputPct'
[14:24:22][C][homeassistant.time:010]: Home Assistant Time:
[14:24:22][C][homeassistant.time:010]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[14:24:22][V][modbus:043]: Stop waiting for response from 1
[14:24:22][V][modbus_controller:043]: Sending next modbus command to device 1 register 0xC15 count 1
[14:24:22][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:22][V][modbus:226]: Modbus write: 01.04.0C.15.00.01.23.5E (8)
[14:24:22][V][modbus_controller:570]: Command sent 4 0xC15 1 send_count: 5
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} DcPower'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'W'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'power'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} DcVoltage'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'V'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'voltage'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} DcInputCurrent'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'A'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'current'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcFrequency'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'Hz'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcVoltage'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'V'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'voltage'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcOutputCurrent'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'A'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'current'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcPower'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'W'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'power'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} EnergyToday'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'kWh'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'energy'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} EnergyTotal'
[14:24:22]modbus_controller.sensor  State Class: 'total_increasing'
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'kWh'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'energy'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][D][uart_debug:114]: >>> 01:04:0C:15:00:01:23:5E
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} Temperature'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'C'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'temperature'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:thermometer'
[14:24:22][C][modbus_controller.switch:079]: modbus_controller.switchModbus Controller Switch '${devicename} Enabled'
[14:24:22]modbus_controller.switch  Restore Mode: disabled 
[14:24:22][C][captive_portal:089]: Captive Portal:
[14:24:22][C][web_server:285]: Web Server:
[14:24:22][C][web_server:285]:   Address: test-logger.local:80
[14:24:22][C][esphome.ota:073]: Over-The-Air updates:
[14:24:22][C][esphome.ota:073]:   Address: test-logger.local:8266
[14:24:22][C][esphome.ota:073]:   Version: 2
[14:24:22][C][safe_mode:018]: Safe Mode:
[14:24:22][C][safe_mode:019]:   Boot considered successful after 60 seconds
[14:24:22][C][safe_mode:019]:   Invoke after 10 boot attempts
[14:24:22][C][safe_mode:019]:   Remain for 300 seconds
[14:24:22][C][api:182]: API Server:
[14:24:22][C][api:182]:   Address: test-logger.local:6053
[14:24:22][C][api:192]:   Using noise encryption: NO
[14:24:22][C][mdns:122]: mDNS:
[14:24:22][C][mdns:122]:   Hostname: test-logger
[14:24:22][V][mdns:126]:   Services:
[14:24:22][V][mdns:128]:   - _esphomelib, _tcp, 6053
[14:24:22][V][mdns:131]:     TXT: friendly_name = ESP Logging Test
[14:24:22][V][mdns:131]:     TXT: version = 2025.6.1
[14:24:22][V][mdns:131]:     TXT: mac = e8db84daba1b
[14:24:22][V][mdns:131]:     TXT: platform = ESP8266
[14:24:22][V][mdns:131]:     TXT: board = d1_mini
[14:24:22][V][mdns:131]:     TXT: network = wifi
[14:24:22][V][mdns:128]:   - _http, _tcp, 80
[14:24:22][C][modbus_controller:349]: ModbusController:
[14:24:22][C][modbus_controller:349]:   Address: 0x01
[14:24:22][C][modbus_controller:349]:   Max Command Retries: 4
[14:24:22][C][modbus_controller:349]:   Offline Skip Updates: 0
[14:24:22][C][modbus_controller:356]: sensormap
[14:24:22][C][modbus_controller:358]:  Sensor type=1 start=0x0 offset=0x0 count=1 size=1
[14:24:22][C][modbus_controller:358]:  Sensor type=3 start=0x3 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=3 start=0x3 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=3 start=0x5 offset=0x0 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x4 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x2 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x4 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x6 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x35 offset=0x0 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x35 offset=0x4 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0xC15 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:362]: ranges
[14:24:22][C][modbus_controller:364]:   Range type=1 start=0x0 count=1 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=3 start=0x3 count=1 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=3 start=0x5 count=2 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0x4 count=1 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0x25 count=5 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0x35 count=4 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0xC15 count=1 skip_updates=0
[14:24:22][C][modbus_controller:367]: server registers
[14:24:22][V][modbus:043]: Stop waiting for response from 1
[14:24:22][D][modbus_controller:039]: Modbus command to device=1 register=0xC15 no response received - removed from send queue
[14:24:27][V][modbus_controller:232]: Updating modbus component
[14:24:27][VV][modbus_controller:236]: Updating range 0x0
[14:24:27][V][modbus_controller:198]: Range : 0 Size: 1 (1) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x3
[14:24:27][V][modbus_controller:198]: Range : 3 Size: 1 (3) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x5
[14:24:27][V][modbus_controller:198]: Range : 5 Size: 2 (3) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x4
[14:24:27][V][modbus_controller:198]: Range : 4 Size: 1 (4) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x25
[14:24:27][V][modbus_controller:198]: Range : 25 Size: 5 (4) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x35
[14:24:27][V][modbus_controller:198]: Range : 35 Size: 4 (4) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0xC15
[14:24:27][V][modbus_controller:198]: Range : C15 Size: 1 (4) skip: 0
[14:24:27][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:27][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:27][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:27][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 1
[14:24:27][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 2
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 3
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 4
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][VV][modbus:054]: Modbus received Byte  255 (0Xff)
[14:24:28][V][modbus:036]: Clearing buffer of 1 bytes - timeout
[14:24:28][D][uart_debug:114]: <<< FF
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 5
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][VV][modbus:054]: Modbus received Byte  255 (0Xff)
[14:24:28][V][modbus:036]: Clearing buffer of 1 bytes - timeout
[14:24:28][D][uart_debug:114]: <<< FF

Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
firecaps30 schreef op vrijdag 27 juni 2025 @ 14:07:
@konehead Waarom gebruik je niet zo een simpele modbus - USB adapter die je in je Pi/PC steekt waar Home Assistant op draait? Zoals deze, en installeer je de Solax Modbus integratie?
Goede vraag! Daar was ik mee begonnen (heb zo'n stick en ook de WIFI variant zelfs). Om heel eerlijk te zijn was dat mijn droom implementatie. Maar krijg daar dezelfde foutmelding. Ik ben ook in contact met @Growatt hierover.

Zij zeggen:
The wifi-stick can worked with SYSCOM. Beacuse without the stick we cannot setting your inverter. When you get your IP addres s you can use this command to check if the ShineWiFi-X's Modbus TCP port is open. [Test-NetConnection -ComputerName x.x.x.x -Port 502]


Dat heb ik gedaan, resultaat:
Connection to 192.168.1.72 port 502 [tcp/asa-appl-proto] succeeded!
192.168.1.72 port 80 (tcp) failed: Connection refused

Reply terug: This shows the inverter and wifi sitck is correct. You may check your Home Assistant settimg.
8)7 8)7 8)7 8)7 8)7 8)7

Acties:
  • 0 Henk 'm!

  • arro3038
  • Registratie: November 2023
  • Laatst online: 14:04
konehead schreef op vrijdag 27 juni 2025 @ 14:25:
[...]


Ingekort, helaas:

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
[14:24:21][C][logger:211]: Logger:
[14:24:21][C][logger:211]:   Max Level: VERY_VERBOSE
[14:24:21][C][logger:211]:   Initial Level: VERY_VERBOSE
[14:24:21][C][logger:217]:   Log Baud Rate: 0
[14:24:21][C][logger:217]:   Hardware UART: UART0
[14:24:21][C][uart.arduino_esp8266:118]: UART Bus:
[14:24:21][C][uart.arduino_esp8266:119]:   TX Pin: GPIO13
[14:24:21][C][uart.arduino_esp8266:120]:   RX Pin: GPIO12
[14:24:21][C][uart.arduino_esp8266:122]:   RX Buffer Size: 256
[14:24:21][C][uart.arduino_esp8266:124]:   Baud Rate: 9600 baud
[14:24:21][C][uart.arduino_esp8266:124]:   Data Bits: 8
[14:24:21][C][uart.arduino_esp8266:124]:   Parity: NONE
[14:24:21][C][uart.arduino_esp8266:124]:   Stop bits: 1
[14:24:21][C][uart.arduino_esp8266:133]:   Using software serial
[14:24:21][C][modbus:166]: Modbus:
[14:24:21][C][modbus:168]:   Send Wait Time: 250 ms
[14:24:21][C][modbus:168]:   CRC Disabled: NO
[14:24:21][C][modbus.number:083]: modbus.numberModbus Number '${devicename} MaxOutputPct'
[14:24:22][C][homeassistant.time:010]: Home Assistant Time:
[14:24:22][C][homeassistant.time:010]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[14:24:22][V][modbus:043]: Stop waiting for response from 1
[14:24:22][V][modbus_controller:043]: Sending next modbus command to device 1 register 0xC15 count 1
[14:24:22][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:22][V][modbus:226]: Modbus write: 01.04.0C.15.00.01.23.5E (8)
[14:24:22][V][modbus_controller:570]: Command sent 4 0xC15 1 send_count: 5
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} DcPower'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'W'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'power'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} DcVoltage'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'V'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'voltage'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} DcInputCurrent'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'A'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'current'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcFrequency'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'Hz'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcVoltage'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'V'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'voltage'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcOutputCurrent'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'A'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'current'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} AcPower'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'W'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'power'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} EnergyToday'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'kWh'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'energy'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} EnergyTotal'
[14:24:22]modbus_controller.sensor  State Class: 'total_increasing'
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'kWh'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'energy'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:flash'
[14:24:22][D][uart_debug:114]: >>> 01:04:0C:15:00:01:23:5E
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensorModbus Controller Sensor '${devicename} Temperature'
[14:24:22]modbus_controller.sensor  State Class: ''
[14:24:22]modbus_controller.sensor  Unit of Measurement: 'C'
[14:24:22]modbus_controller.sensor  Accuracy Decimals: 1
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Device Class: 'temperature'
[14:24:22][C][modbus_controller.sensor:010]: modbus_controller.sensor  Icon: 'mdi:thermometer'
[14:24:22][C][modbus_controller.switch:079]: modbus_controller.switchModbus Controller Switch '${devicename} Enabled'
[14:24:22]modbus_controller.switch  Restore Mode: disabled 
[14:24:22][C][captive_portal:089]: Captive Portal:
[14:24:22][C][web_server:285]: Web Server:
[14:24:22][C][web_server:285]:   Address: test-logger.local:80
[14:24:22][C][esphome.ota:073]: Over-The-Air updates:
[14:24:22][C][esphome.ota:073]:   Address: test-logger.local:8266
[14:24:22][C][esphome.ota:073]:   Version: 2
[14:24:22][C][safe_mode:018]: Safe Mode:
[14:24:22][C][safe_mode:019]:   Boot considered successful after 60 seconds
[14:24:22][C][safe_mode:019]:   Invoke after 10 boot attempts
[14:24:22][C][safe_mode:019]:   Remain for 300 seconds
[14:24:22][C][api:182]: API Server:
[14:24:22][C][api:182]:   Address: test-logger.local:6053
[14:24:22][C][api:192]:   Using noise encryption: NO
[14:24:22][C][mdns:122]: mDNS:
[14:24:22][C][mdns:122]:   Hostname: test-logger
[14:24:22][V][mdns:126]:   Services:
[14:24:22][V][mdns:128]:   - _esphomelib, _tcp, 6053
[14:24:22][V][mdns:131]:     TXT: friendly_name = ESP Logging Test
[14:24:22][V][mdns:131]:     TXT: version = 2025.6.1
[14:24:22][V][mdns:131]:     TXT: mac = e8db84daba1b
[14:24:22][V][mdns:131]:     TXT: platform = ESP8266
[14:24:22][V][mdns:131]:     TXT: board = d1_mini
[14:24:22][V][mdns:131]:     TXT: network = wifi
[14:24:22][V][mdns:128]:   - _http, _tcp, 80
[14:24:22][C][modbus_controller:349]: ModbusController:
[14:24:22][C][modbus_controller:349]:   Address: 0x01
[14:24:22][C][modbus_controller:349]:   Max Command Retries: 4
[14:24:22][C][modbus_controller:349]:   Offline Skip Updates: 0
[14:24:22][C][modbus_controller:356]: sensormap
[14:24:22][C][modbus_controller:358]:  Sensor type=1 start=0x0 offset=0x0 count=1 size=1
[14:24:22][C][modbus_controller:358]:  Sensor type=3 start=0x3 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=3 start=0x3 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=3 start=0x5 offset=0x0 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x4 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x2 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x4 count=1 size=2
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x25 offset=0x6 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x35 offset=0x0 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0x35 offset=0x4 count=2 size=4
[14:24:22][C][modbus_controller:358]:  Sensor type=4 start=0xC15 offset=0x0 count=1 size=2
[14:24:22][C][modbus_controller:362]: ranges
[14:24:22][C][modbus_controller:364]:   Range type=1 start=0x0 count=1 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=3 start=0x3 count=1 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=3 start=0x5 count=2 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0x4 count=1 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0x25 count=5 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0x35 count=4 skip_updates=0
[14:24:22][C][modbus_controller:364]:   Range type=4 start=0xC15 count=1 skip_updates=0
[14:24:22][C][modbus_controller:367]: server registers
[14:24:22][V][modbus:043]: Stop waiting for response from 1
[14:24:22][D][modbus_controller:039]: Modbus command to device=1 register=0xC15 no response received - removed from send queue
[14:24:27][V][modbus_controller:232]: Updating modbus component
[14:24:27][VV][modbus_controller:236]: Updating range 0x0
[14:24:27][V][modbus_controller:198]: Range : 0 Size: 1 (1) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x3
[14:24:27][V][modbus_controller:198]: Range : 3 Size: 1 (3) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x5
[14:24:27][V][modbus_controller:198]: Range : 5 Size: 2 (3) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x4
[14:24:27][V][modbus_controller:198]: Range : 4 Size: 1 (4) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x25
[14:24:27][V][modbus_controller:198]: Range : 25 Size: 5 (4) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0x35
[14:24:27][V][modbus_controller:198]: Range : 35 Size: 4 (4) skip: 0
[14:24:27][VV][modbus_controller:236]: Updating range 0xC15
[14:24:27][V][modbus_controller:198]: Range : C15 Size: 1 (4) skip: 0
[14:24:27][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:27][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:27][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:27][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 1
[14:24:27][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 2
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 3
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 4
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][VV][modbus:054]: Modbus received Byte  255 (0Xff)
[14:24:28][V][modbus:036]: Clearing buffer of 1 bytes - timeout
[14:24:28][D][uart_debug:114]: <<< FF
[14:24:28][V][modbus:043]: Stop waiting for response from 1
[14:24:28][V][modbus_controller:043]: Sending next modbus command to device 1 register 0x00 count 1
[14:24:28][VV][uart.arduino_esp8266:198]:     Flushing
[14:24:28][V][modbus:226]: Modbus write: 01.01.00.00.00.01.FD.CA (8)
[14:24:28][V][modbus_controller:570]: Command sent 1 0x0 1 send_count: 5
[14:24:28][D][uart_debug:114]: >>> 01:01:00:00:00:01:FD:CA
[14:24:28][VV][modbus:054]: Modbus received Byte  255 (0Xff)
[14:24:28][V][modbus:036]: Clearing buffer of 1 bytes - timeout
[14:24:28][D][uart_debug:114]: <<< FF
Gebruik je ook een flow control pin? Bij mijn versie van het TTL bordje bleek dat nodig te zijn.

In de ESPHOME code heb ik het volgende staan:

modbus:
id: modbus1
uart_id: mod_bus
flow_control_pin: 5

Die pin 5 (witte kabel) is aangesloten op zowel DE en RE (blauw en zwart) van het TTL boardje aangesloten.

Voordat ik dit had gedaan kreeg ik ook geen contact met de omvormer er daarna wel

Zie de foto ter illustratie. Zit allemaal nog op een breadboard totdat ik eens een keer de moed krijg om het echt netjes te maken :)

Afbeeldingslocatie: https://tweakers.net/i/NboUv6iE8CdCjyHNtHjBF6AquKg=/x800/filters:strip_icc():strip_exif()/f/image/j7Uvu8Bt07MSsUgkiC1WGBCn.jpg?f=fotoalbum_large

[ Voor 100% gewijzigd door arro3038 op 27-06-2025 17:06 ]


Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
arro3038 schreef op vrijdag 27 juni 2025 @ 17:02:
[...]


Gebruik je ook een flow control pin? Bij mijn versie van het TTL bordje bleek dat nodig te zijn.

In de ESPHOME code heb ik het volgende staan:

modbus:
id: modbus1
uart_id: mod_bus
flow_control_pin: 5

Die pin 5 (witte kabel) is aangesloten op zowel DE en RE (blauw en zwart) van het TTL boardje aangesloten.

Voordat ik dit had gedaan kreeg ik ook geen contact met de omvormer er daarna wel

Zie de foto ter illustratie. Zit allemaal nog op een breadboard totdat ik eens een keer de moed krijg om het echt netjes te maken :)

[Afbeelding]
Dankjewel! Ik heb je boardje nagebouwd (ik had nog hetzelfde TLL bordje liggen). Helaas zelfde uitkomst :?

TLL => Wemos D1 mini
DI => Aangesloten op D6
DE/RE => aangesloten op D1 (dus DE en RE samengevoegd)
RO => aangesloten op D7

VCC => 5v
GND =.> GND

Aansluiting naar inverter (SYS COM)

B (groen) > Pin 4
A (wit groen > Pin 3

code:
1
2
3
4
5
6
7
8
9
10
uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: GPIO12
  rx_pin: GPIO13

modbus:
  id: modbus1
  uart_id: gw_uart
  flow_control_pin: 5



Afbeeldingslocatie: https://tweakers.net/i/gHXwxNZKDadOgorzLB7oz5tqeKI=/x800/filters:strip_exif()/f/image/5Lig1WpG9MYWv6sEqTI11Tbc.png?f=fotoalbum_large

Afbeeldingslocatie: https://tweakers.net/i/zqW-vQw-QlVUNH1oBwZXV5B5qAs=/x800/filters:strip_icc():strip_exif()/f/image/VhpTfIbUjsGzcNrd3NCB3MJK.jpg?f=fotoalbum_large

Afbeeldingslocatie: https://tweakers.net/i/uiougS2BLKPAIbYSf2uDxgtkJHQ=/x800/filters:strip_icc():strip_exif()/f/image/eAq51LfGg1GDhumiR9Rb7RRz.jpg?f=fotoalbum_large

Afbeeldingslocatie: https://tweakers.net/i/AtmYDp7tAx13a1J2RErScXGwjpg=/x800/filters:strip_icc():strip_exif()/f/image/K5QvSBcRHCuaGSvCiPjyI0si.jpg?f=fotoalbum_large

Acties:
  • 0 Henk 'm!

  • arro3038
  • Registratie: November 2023
  • Laatst online: 14:04
konehead schreef op vrijdag 27 juni 2025 @ 21:37:
[...]


Dankjewel! Ik heb je boardje nagebouwd (ik had nog hetzelfde TLL bordje liggen). Helaas zelfde uitkomst :?

TLL => Wemos D1 mini
DI => Aangesloten op D6
DE/RE => aangesloten op D1 (dus DE en RE samengevoegd)
RO => aangesloten op D7

VCC => 5v
GND =.> GND

Aansluiting naar inverter (SYS COM)

B (groen) > Pin 4
A (wit groen > Pin 3

code:
1
2
3
4
5
6
7
8
9
10
uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: GPIO12
  rx_pin: GPIO13

modbus:
  id: modbus1
  uart_id: gw_uart
  flow_control_pin: 5



[Afbeelding]

[Afbeelding]

[Afbeelding]

[Afbeelding]
Irritant zeg, ik heb helaas ook geen andere ideeën.

Acties:
  • 0 Henk 'm!

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 05-07 15:46
Tinusvolkel schreef op vrijdag 27 juni 2025 @ 14:00:

@Dutchess_Nicole wat is de beredenering geweest om een weerstand toe te voegen in het midden van de transmissielijn?

Modbus (rs485) zou een 1200meter moeten kunnen overbruggen, dus ik verwacht dat het dan met 30cm nog net wel werkt met niet juist geplaatste afsluitweerstanden en met 50cm niet meer.

Is die kabel zelf getwisted? verwacht dat een ethernetkabel prima gaat werken.
Experimenteren, min of meer. Met een kabel direct, 2 aderig en niet getwist werkte het signaaloverdracht niet. Ik stuurde wel signalen naar de omvormer maar kreeg geen reactie. Er zit al een weerstand op het TTL bordje, dus dat zou wat moeten doen maar was blijkbaar niet genoeg. Nog een weerstand aan de plug kant gaf ook geen soelaas, dus toen heb ik maar besloten om er in het midden nog 1tje te plaatsen.

Ineens begon dat te werken.

Ik heb geen idee waarom een weerstand daar verschil zou maken maar voor mij is dat blijkbaar de oplossing.

Kia E-Niro 2019 Executiveline. OTGW/HA Enthousiasteling.


Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
Dutchess_Nicole schreef op zaterdag 28 juni 2025 @ 08:33:
[...]


Experimenteren, min of meer. Met een kabel direct, 2 aderig en niet getwist werkte het signaaloverdracht niet. Ik stuurde wel signalen naar de omvormer maar kreeg geen reactie. Er zit al een weerstand op het TTL bordje, dus dat zou wat moeten doen maar was blijkbaar niet genoeg. Nog een weerstand aan de plug kant gaf ook geen soelaas, dus toen heb ik maar besloten om er in het midden nog 1tje te plaatsen.

Ineens begon dat te werken.

Ik heb geen idee waarom een weerstand daar verschil zou maken maar voor mij is dat blijkbaar de oplossing.
Ik probeer het ook te begrijpen: heb jij naast de ESP/TLL oplossing ook je ShineWifi stick in je inverter zitten?

Ik begin steeds meer te vermoeden dat hier iets niet lekker zit. Voor de fijnproevers; ik heb de oplossingen ook getest zonder shinestick

Acties:
  • 0 Henk 'm!

  • klump4u
  • Registratie: Februari 2008
  • Niet online

klump4u

Gasloos in Zuid-Limburg

Ik heb gewoon de wifi stick in de omvormer zitten en lees deze ook met Grott en HA uit.
De modbus wordt uitgelezen door een python script op een raspberry pi en een CH340 USB to RS485 converter en parallel daaraan heb ik een wemos d1 mini met onderstaande module en deze loopt op ESPHome in HA. De A+ gaat naar pin 3 van de Growatt en de B- naar pin 4

Afbeeldingslocatie: https://tweakers.net/i/Za-vpHDOknreb3LITEatkw6kMN0=/234x176/filters:strip_icc():strip_exif()/f/image/MwKb3Cz4HRRdkunUKKwW9uDp.jpg?f=fotoalbum_medium

18950Wp🌞, Atlantic 270V3💧, Pana 5J🔥. Zendure 7,6🔋


Acties:
  • 0 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
konehead schreef op vrijdag 27 juni 2025 @ 21:37:
[...]


Dankjewel! Ik heb je boardje nagebouwd (ik had nog hetzelfde TLL bordje liggen). Helaas zelfde uitkomst :?

TLL => Wemos D1 mini
DI => Aangesloten op D6
DE/RE => aangesloten op D1 (dus DE en RE samengevoegd)
RO => aangesloten op D7

VCC => 5v
GND =.> GND

Aansluiting naar inverter (SYS COM)

B (groen) > Pin 4
A (wit groen > Pin 3

code:
1
2
3
4
5
6
7
8
9
10
uart:
  id: gw_uart
  baud_rate: 9600
  tx_pin: GPIO12
  rx_pin: GPIO13

modbus:
  id: modbus1
  uart_id: gw_uart
  flow_control_pin: 5



[Afbeelding]

[Afbeelding]

[Afbeelding]

[Afbeelding]
Volgens mij hebt de RS485 module sowieso een slag verkeerd op breadboard zitten.
Alle communicatie pinnen van je module zijn nu met elkaar verbonden en hebben geen verbinding met je draden :X

Acties:
  • 0 Henk 'm!

  • Dutchess_Nicole
  • Registratie: Augustus 2001
  • Laatst online: 05-07 15:46
konehead schreef op zaterdag 28 juni 2025 @ 15:28:
[...]


Ik probeer het ook te begrijpen: heb jij naast de ESP/TLL oplossing ook je ShineWifi stick in je inverter zitten?

Ik begin steeds meer te vermoeden dat hier iets niet lekker zit. Voor de fijnproevers; ik heb de oplossingen ook getest zonder shinestick
Nee, die heb ik niet. Ik heb alleen de modbus connector die aangesloten zit.

Ter verduidelijking: Ik heb origineel in 2004 inderdaad zo'n Shinewatdanook stick gekregen. Die heeft net iets langer dan een jaar gewerkt and gaf daarna de geest.

Ik was in die tijd nog niet bezig met Home Automation dus ik had geen interresse in een nieuwe dus die heb ik nooit besteld.

9 jaar na installatie van de toenmalige inverter begon dat ding ook kuren te vertonen (niet opstarten, relais bleef maar in- en uitschakelen en wat andere maffe dingen) dus ik heb dat ding laten vervangen door een nieuwe, en daarbij dus ook geen Shinedinges bestelt want die dingen gaan in mijn ervaring direct stuk.

[ Voor 40% gewijzigd door Dutchess_Nicole op 29-06-2025 09:21 ]

Kia E-Niro 2019 Executiveline. OTGW/HA Enthousiasteling.


Acties:
  • 0 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
brambo123 schreef op zaterdag 28 juni 2025 @ 18:37:
[...]

Volgens mij hebt de RS485 module sowieso een slag verkeerd op breadboard zitten.
Alle communicatie pinnen van je module zijn nu met elkaar verbonden en hebben geen verbinding met je draden :X
Wat stom! En scherp van jou!! Gelijk even getest, maar helaas..

Afbeeldingslocatie: https://tweakers.net/i/Os8O7uIJBVRdrPPkmhY6SzOAgA0=/x800/filters:strip_icc():strip_exif()/f/image/7wwdM4mY5M37MeRyZ94nkqm6.jpg?f=fotoalbum_large

Acties:
  • 0 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
konehead schreef op zondag 29 juni 2025 @ 09:44:
[...]

Wat stom! En scherp van jou!! Gelijk even getest, maar helaas..

[Afbeelding]
Ik zou flow_control_pin ook even netjes GPIO5 van maken.
Weet niet of die nu die nu pin D5 of GPIO5 pakt.

Beste kun je overigens je gnd ergens aan aarde hangen.
Van stopcontact of koelblok van omvormer.

Acties:
  • 0 Henk 'm!

  • klump4u
  • Registratie: Februari 2008
  • Niet online

klump4u

Gasloos in Zuid-Limburg

Gnd doe je toch aan de gnd van de Wemos.

Mijn werkende code met een Wemos D1 mini.
YAML:
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
esphome:
  name: growatt8266

esp8266:
  board: d1_mini

# Enable logging
logger:
  baud_rate: 0
# Enable Home Assistant API
api:
  
ota:
  platform: esphome
  
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

captive_portal:
    
# Example configuration entry
uart:
  - id: uart_0
    baud_rate: 9600
    tx_pin: GPIO12
    rx_pin: GPIO14
    rx_buffer_size: 2048
    debug:
      direction: both

modbus:
  uart_id: uart_0
  flow_control_pin: GPIO4
  send_wait_time: 10ms
  disable_crc: true

modbus_controller:
  - id: epever
    ## the Modbus device addr
    address: 0x1
    setup_priority: -10
    command_throttle: 25ms


sensor:
  - platform: growatt_solar
    update_interval: 60s
    protocol_version: RTU2


    phase_a:
      voltage:
          name: "Growatt Voltage Phase A"
          filters:
            lambda:
              float MIN_VALUE = 210.0;
              float MAX_VALUE = 270.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      current:
          name: "Growatt Current Phase A"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 45.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      active_power:
          name: "Growatt Power Phase A"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 7000.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};

    phase_b:
      voltage:
          name: "Growatt Voltage Phase B"
          filters:
            lambda:
              float MIN_VALUE = 210.0;
              float MAX_VALUE = 270.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      current:
          name: "Growatt Current Phase B"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 45.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      active_power:
          name: "Growatt Power Phase B"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 7000.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};

    phase_c:
      voltage:
          name: "Growatt Voltage Phase C"
          filters:
            lambda:
              float MIN_VALUE = 210.0;
              float MAX_VALUE = 270.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      current:
          name: "Growatt Current Phase C"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 45.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      active_power:
          name: "Growatt Power Phase C"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 7000.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};                    

    pv1:
      voltage:
          name: "Growatt PV1 Voltage"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 400.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      current:
          name: "Growatt PV1 Current"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 20.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      active_power:
          name: "Growatt PV1 Active Power"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 3000.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};

    pv2:
      voltage:
          name: "Growatt PV2 Voltage"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 400.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      current:
          name: "Growatt PV2 Current"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 20.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};
      active_power:
          name: "Growatt PV2 Active Power"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 3000.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};

    active_power:
          name: "Growatt Grid Active Power"
          filters:
            lambda:
              float MIN_VALUE = 0.0;
              float MAX_VALUE = 12000.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};

    pv_active_power:
          name: "Growatt PV Active Power"
          filters:
          - lambda:
             float MIN_VALUE = 0.0;
             float MAX_VALUE = 6000.0;
             if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
             else return {};

    frequency:
          name: "Growatt Frequency"
          filters:
            lambda:
              float MIN_VALUE = 47.0;
              float MAX_VALUE = 53.0;
              if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
              else return {};

    energy_production_day:
      name: "Growatt Today's Generation"
      filters:
        lambda:
          float MIN_VALUE = 0.0;
          float MAX_VALUE = 100.0;
          if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
          else return {};
          

    total_energy_production:
      name: "Growatt Total Energy Production"

    inverter_module_temp:
      name: "Growatt Inverter Module Temp"
      filters:
        lambda:
          float MIN_VALUE = 0.0;
          float MAX_VALUE = 100.0;
          if (MIN_VALUE <= x && x <= MAX_VALUE) return x;
          else return {};

[ Voor 98% gewijzigd door klump4u op 29-06-2025 11:11 ]

18950Wp🌞, Atlantic 270V3💧, Pana 5J🔥. Zendure 7,6🔋


Acties:
  • 0 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
klump4u schreef op zondag 29 juni 2025 @ 11:05:
Gnd doe je toch aan de gnd van de Wemos.

[...]
Ja, gnd van Wemos en RS485 module moeten aan elkaar.
Maar gnd moet ook verbonden zijn met een aardpunt.
RS485 is een 3 draads verbinding, A B en GND.
GND wordt vaak weg gelaten omdat beide zijden meestel wel hun GND aan de aarde hebben hangen.
Zou je de Wemos voeden met een vaste desktop pc, dan is die via usb automatisch geaard.
Maar niet als je laptop of een telefoon lader pakt.

Acties:
  • 0 Henk 'm!

  • AUijtdehaag
  • Registratie: Oktober 2006
  • Niet online
Waarom nemen jullie geen m5stack ipv die losse printjes?
(ik heb in het verleden veel uitvallende RS485 bordjes gehad van ALI toen ik ze nog zelf samenstelde en sinds m5stack RS485 base is dat niet meer voorgekomen)

Ik heb hier code staan voor een MOD TL3-X

Eventueel nog HA yaml om naar pvoutput te gaan:
YAML:
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
## elke 5 minuten naar pvoutput
automation:
  - id: 4f863af550147e2b3170
    alias: update pvoutput
    trigger:
      platform: time_pattern
      minutes: /5
    condition:
      and:
        - condition: state
          entity_id: sensor.growatt_status
          state: Normal
        - condition: numeric_state
          entity_id: sensor.growatt_ac_power
          above: 16
    action:
      service: rest_command.update_pvoutput
      data: {}
    mode: single

## v1 = Energy Generation (Wh) / v2 = Power Generation  (W) / v3 = Energy Production (Wh) / v4 = Power Production  (W) / v5 = Temperature (degr. C)
rest_command:
  update_pvoutput:
    url: "https://pvoutput.org/service/r2/addstatus.jsp"
    method: post
    headers:
      X-Pvoutput-Apikey: !secret pvoutput_api_key
      X-Pvoutput-SystemId: !secret pvoutput_system_id_1
      Content-Type: 'application/x-www-form-urlencoded'
    payload: >-
      d={{now().strftime("%Y%m%d")}}                                          {#- date -#}
      &t={{now().strftime("%H:%M")}}                                          {#- time -#}
      &v1=
      &v2={{states('sensor.growatt_ac_power')|float(0) |round(0)}}            {#- Power generation (W) -#}
      &v5={{states('sensor.growatt_temperature')|float(0) |round(0)}}         {#- temperature (C) -#}
      &v7={{states('sensor.growatt_pv1_power')|float(0) |round(0)}}           {#- Power Pv1 (W) -#}
      &v8={{states('sensor.growatt_pv2_power')|float(0) |round(0)}}           {#- Power PV2 (W) -#}
      &v9={{states('sensor.growatt_pv1_voltage')|float(0) |round(0)}}         {#- Voltage PV1 (V) -#}
      &v10={{states('sensor.growatt_pv2_voltage')|float(0) |round(0)}}        {#- Voltage PV2 (V) -#}
      &c1=1 

[ Voor 77% gewijzigd door AUijtdehaag op 29-06-2025 17:36 ]

PVOutput Github - Div ESP TK: MHI - Clack - Marstek


Acties:
  • 0 Henk 'm!

  • jadjong
  • Registratie: Juli 2001
  • Laatst online: 13:36
AUijtdehaag schreef op zondag 29 juni 2025 @ 17:24:
Waarom nemen jullie geen m5stack ipv die losse printjes?
Tja, waarom niet een ethernet <> RS485/modbus converter? Twee stekkers aansluiten en je bent klaar. O-)

Acties:
  • +1 Henk 'm!

  • AUijtdehaag
  • Registratie: Oktober 2006
  • Niet online
@jadjong
Vind het wel fijn dat alle software in de esp draait ipv een extra stuk hardware naast de converter waar code op moet draaien.

Mijn marstek kan ik zo nog de backup wcd aanzetten bij komplete stroomuitval.

[ Voor 6% gewijzigd door AUijtdehaag op 29-06-2025 18:05 ]

PVOutput Github - Div ESP TK: MHI - Clack - Marstek


Acties:
  • +2 Henk 'm!

  • brambo123
  • Registratie: December 2006
  • Laatst online: 11:58
jadjong schreef op zondag 29 juni 2025 @ 17:59:
[...]

Tja, waarom niet een ethernet <> RS485/modbus converter? Twee stekkers aansluiten en je bent klaar. O-)
Of nog makkelijker, de nieuwe ShineWiLan-X2 er in stoppen.
Heeft modbus TCP, krijgt voeding direct van omvormer, en kan zowel wifi als bedraad netwerk.

Acties:
  • +1 Henk 'm!

  • konehead
  • Registratie: Januari 2005
  • Nu online
Zo, twee weken verder en behoorlijke stappen gemaakt. Dank voor alle reacties en input! Met hulp van een topper van hier: @sjorsjuhmaniac! Ik mocht zijn ESP kastje lenen welke op zijn inverter goed werkte. En via deze stap hebben we een nog al stomme fout gevonden: Ik had de modbus draadjes op de verkeerde SysCom poort aangesloten.. :) Er zijn dus twee SysCom poorten op mijn inverter. Conclusie: Was behoorlijk de tunnel ingelopen :)

Maar veel belangrijker: Data lezen gaat erg goed, schrijven nog niet. Is er iemand die hier succesvol waarde kan schrijven voor de batterij? Ik krijg foutmeldingen terwijl ik wel de Growatt Documentatie (met Hulp van Chat) gebruik... Maar helaas. Ik heb een MIN 4600 TL-XH met Growatt ARK XH Batterijset.

Lessons learnt:
1) Blijf volhouden, de aanhouder wint :)
2) het kastje van @AUijtdehaag lijkt idd de beste oplossing
3) Mijn wens is dat voor garantie e.d. de data naar Growatt geupload wordt. Ik wil dus de ShineStick én modbus kunnen gebruiken
4) De ModbusTCP oplossing (Via Wifi) lijkt mooi via Solax maar deze oplossing pushed de data naar HA, terwijl de ESPhome oplossing de data eruit trekt (via polling). Voor mijn usecase een substantieel verschil, de SOC van de batterij liep wel eens 8-10 min achter.
5) Als je via Modbus laadt en ontlaadt commando's geeft, dan is er geen limitatie. Ik heb gelezen dat het ESPRom dit niet aankan. Ik heb dit besproken met Growatt en op papier dat je dit onbeperkt kan gebruiken


Afbeeldingslocatie: https://tweakers.net/i/jObst5hV8EZk5nwBbqtDgFZzeCg=/800x/filters:strip_exif()/f/image/CS9Xs3j9jaMAUzkYnrsRl8OI.png?f=fotoalbum_large


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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
#
# SENSOR NAMING CONVENTION
#
# The data here is pushed to mqtt and from there picked up by telegraf.
# Current config has some logic built into it so that telegraf does not require
# to have all topics hardcoded. This logic uses the topic/endpoint name to determine
# the type of data (Temperature, Power, Voltage, Percent, etc).
# convention is:
#
# DEVICENAME_ANY_TEXT_NAME_YOU_WANT_DATATYPE
#     |                |               |
#     |                |               |
#     |                |               |_____ The type of data
#     |                |               |_____ EX: POWER, VOLTGE, PERCENT
#     |                |
#     |                |____Any user friend text descriptor
#     |
#     |____ The device name

substitutions:
  version: "1.1.10"
  project_name: "growatt"
  project_author: "me"

esphome:
  name: ${project_name}
  comment: "${project_name} inverter - v${version}"
  project:
    name: "${project_author}.${project_name}"
    version: "${version}"

esp32:
  board: mhetesp32minikit
  framework:
    type: arduino

logger:
  logs:
    modbus_controller.sensor: WARN
    modbus_controller.output: WARN
    modbus_controller: DEBUG
    modbus: DEBUG
    modbus.number: WARN
    esp32.preferences: WARN
    sensor: WARN
    text_sensor: WARN
    number: WARN
    log_topic: NONE

# Enable Home Assistant API
api:

ota:
  - platform: esphome
    #  password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Optional manual IP

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "${project_name} Fallback Hotspot"
    password: "iEA7MxzX4hb6"

captive_portal:

web_server:
  port: 80

# mqtt
#mqtt:
#  broker: 192.168.88.117
#  topic_prefix: "esphome/inverter2"
#  #discovery_prefix: "testinggggg"
#  discovery_unique_id_generator: mac

### Modbus Communicatie ###
uart:
  id: mod_bus
  tx_pin: 23
  rx_pin: 19
  baud_rate: 9600
  parity: none
  stop_bits: 1

modbus:
  - send_wait_time: 1000ms

modbus_controller:
  - id: ${project_name}
    address: 0x1
    update_interval: 10s
    command_throttle: 10ms


### Sensoren ###
sensor:
  # Inverter Status & Info
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: inverter_status_state
    name: Inverter Status State
    address: 0
    icon: mdi:flash
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 0

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Inverter Temperature
    id: inverter_temperature
    address: 93
    register_type: read
    unit_of_measurement: "°C"
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: IPM Temperature
    id: ipm_temperature
    address: 94
    register_type: read
    unit_of_measurement: "°C"
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Boost Temperature
    id: boost_temperature
    address: 95
    register_type: read
    unit_of_measurement: "°C"
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: OUT Temperature
    id: out_temperature
    address: 96
    register_type: read
    unit_of_measurement: "°C"
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: STM32 Temperature
    id: stm32_temperature
    address: 97
    register_type: read
    unit_of_measurement: "°C"
    device_class: temperature
    icon: mdi:thermometer
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: derating_mode_status_state
    name: Derating Mode Status State
    icon: mdi:home-heart
    address: 104
    register_type: read
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Inverter Fault State
    id: inverter_fault_state
    address: 105
    register_type: read
    icon: mdi:alert-circle
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Real Power Percent
    id: real_power_percent
    address: 113
    register_type: read
    device_class: power_factor
    icon: mdi:percent
    value_type: U_WORD
    unit_of_measurement: "%"

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: PV Insulation Resistance
    id: pv_insulation_resistance
    address: 3060 # Gecorrigeerd adres voor PV Isolation Resistance (voorheen 200)
    register_type: read
    unit_of_measurement: "KΩ"
    icon: mdi:resistor
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # PV Strings
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: total_pv_input_power
    name: Total PV Input Power
    address: 1
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    register_type: read
    value_type: U_DWORD
    accuracy_decimals: 0
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: PV2 Voltage
    id: pv2_voltage
    address: 52 # Correct: Dit is PV2 Voltage volgens protocol (voorheen AC TR Voltage)
    register_type: read
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:solar-panel
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: PV2 Current
    id: pv2_current
    address: 3008
    register_type: read
    value_type: U_WORD
    unit_of_measurement: A
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: PV2 Power
    id: pv2_power
    address: 3009
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: W
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # AC Net (Grid) & Belasting (Load)
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: AC Power
    id: ac_power
    address: 35
    register_type: read
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 0
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: ac_frequency
    name: AC Frequency
    address: 37
    register_type: read
    unit_of_measurement: Hz
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: AC L1 Voltage
    id: ac_l1_voltage
    address: 38
    register_type: read
    unit_of_measurement: V
    device_class: voltage
    icon: mdi:flash
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: ac_l1_current
    name: AC L1 Current
    address: 39
    unit_of_measurement: A
    device_class: current
    icon: mdi:flash
    register_type: read
    value_type: U_WORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: ac_l1_power
    name: AC L1 Power
    address: 40
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    register_type: read
    value_type: U_DWORD
    accuracy_decimals: 0
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Grid Current
    id: grid_current
    address: 3027
    register_type: read
    value_type: U_WORD
    unit_of_measurement: A
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Grid Frequency
    id: grid_frequency
    address: 3025
    register_type: read
    value_type: U_WORD
    unit_of_measurement: Hz
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Grid Voltage
    id: grid_voltage
    address: 3026
    register_type: read
    value_type: U_WORD
    unit_of_measurement: V
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Grid Power VA
    id: grid_power_va
    address: 3028
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: VA
    device_class: apparent_power
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Output Power
    id: output_power
    address: 3023
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: W
    device_class: power
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: output_maxpower_limited_power
    name: Output Maxpower Limited Power
    address: 102
    unit_of_measurement: W
    device_class: power
    icon: mdi:flash
    register_type: read
    value_type: U_DWORD
    accuracy_decimals: 0
    filters:
      - multiply: 0.1

  # Batterij
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Battery Voltage
    id: battery_voltage
    address: 3170
    register_type: read
    value_type: U_WORD
    unit_of_measurement: V
    accuracy_decimals: 2
    filters:
      - multiply: 0.01

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Battery Current
    id: battery_current
    address: 3171
    register_type: read
    value_type: U_WORD
    unit_of_measurement: A
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    name: "Battery SOC"
    address: 3171
    register_type: read
    value_type: U_WORD
    unit_of_measurement: "%"
    accuracy_decimals: 1


  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Battery Charge Power
    id: battery_charge_power
    address: 3180
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: W
    device_class: power
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Battery Discharge Power
    id: battery_discharge_power
    address: 3178
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: W
    device_class: power
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Energie Totalen
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Today Energy
    id: today_energy
    address: 53
    register_type: read
    unit_of_measurement: kWh
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Total Energy
    id: total_energy
    address: 55
    register_type: read
    unit_of_measurement: kWh
    state_class: total_increasing
    device_class: energy
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Total Working Time Sec
    id: total_working_time_sec
    address: 57
    register_type: read
    unit_of_measurement: s
    state_class: total_increasing
    device_class: duration
    icon: mdi:flash
    value_type: U_DWORD
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Today's Grid Export
    id: today_grid_export
    address: 3071
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: kWh
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Today's Grid Import
    id: today_grid_import
    address: 3075
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: kWh
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Total Reverse Energy (Output)
    id: total_reverse_energy_output
    address: 3043 # Gecorrigeerd: Dit is energie, geen vermogen
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: kWh # Gecorrigeerd
    device_class: energy # Gecorrigeerd
    accuracy_decimals: 1
    filters:
      - multiply: 0.1


  - platform: modbus_controller
    modbus_controller_id: growatt2
    name: "Today's Battery Output Energy"
    id: today_battery_output_energy
    address: 3126
    register_type: holding
    value_type: U_WORD
    register_count: 2
    unit_of_measurement: "kWh"
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 1
    lambda: |-
      uint32_t high = data[0];
      uint32_t low  = data[1];
      return (high << 16 | low) * 0.1;
    

  - platform: modbus_controller
    name: "Today's Battery Input Energy"
    address: 3130
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: kWh
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 1
    filters:
      - multiply: 0.1


  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Today's Power Generation
    id: today_power_generation
    address: 3049
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: kWh
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Total Yield
    id: total_yield
    address: 3051
    register_type: read
    value_type: U_DWORD
    unit_of_measurement: kWh
    device_class: energy
    state_class: total_increasing
    accuracy_decimals: 1
    filters:
      - multiply: 0.1

  # Overige Sensoren
  - platform: wifi_signal
    name: WiFi Signal
    update_interval: 60s

  - platform: uptime
    name: Sensor sec
    id: growatt_uptime_sensor
    update_interval: 60s
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: growatt_uptime_human
            state: !lambda |-
              int seconds = round(id(growatt_uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? to_string(days) + "d " : "") +
                (hours ? to_string(hours) + "h " : "") +
                (minutes ? to_string(minutes) + "m " : "")
              ).c_str();

### Configureerbare Waarden (Numbers) ###
number:
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Max Output Power Setting Percent
    id: max_output_power_setting_percent
    address: 3
    register_type: holding
    value_type: U_WORD
    min_value: 0 # Gecorrigeerd: 0-100% volgens protocol
    max_value: 100
    step: 1
    entity_category: config
    unit_of_measurement: "%"
    icon: mdi:percent

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Active Power Output Limit Rate
    id: active_power_output_limit_rate
    address: 3070 # Gecorrigeerd: Naam verduidelijkt, dubbeling opgelost
    register_type: holding
    value_type: U_WORD
    min_value: 0 # Gecorrigeerd: 0-100% volgens protocol
    max_value: 100
    step: 1
    unit_of_measurement: "%"
    mode: slider
    icon: mdi:battery-arrow-down

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Active Power Input Limit Rate
    id: active_power_input_limit_rate
    address: 3090 # Gecorrigeerd: Naam verduidelijkt, dubbeling opgelost
    register_type: holding
    value_type: U_WORD # Gecorrigeerd: U_WORD volgens protocol (was U_DWORD)
    min_value: 0 # Gecorrigeerd: 0-100% volgens protocol
    max_value: 100
    step: 1
    unit_of_measurement: "%"
    icon: mdi:battery-arrow-up
    mode: slider

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: Total Output Power Percent Setting
    id: total_output_power_percent_setting
    address: 3102
    value_type: U_WORD
    min_value: 0
    max_value: 100
    entity_category: config
    unit_of_measurement: "%"
    icon: mdi:percent

  # Tijdsegment Instellingen
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 1 Begin"
    id: time1_begin
    address: 3146
    register_type: holding
    value_type: U_WORD
    min_value: 0 # 00:00
    max_value: 2359 # 23:59
    step: 1
    entity_category: config
    icon: mdi:clock-start
    on_value:
      then:
        - lambda: |-
            int hours = int(x / 100);
            int minutes = static_cast<int>(x) % 100;
            id(time1_begin_text).publish_state(
                (hours < 10 ? "0" : "") + to_string(hours) + ":" +
                (minutes < 10 ? "0" : "") + to_string(minutes)
            );

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 1 End"
    id: time1_end
    address: 3147
    register_type: holding
    value_type: U_WORD
    min_value: 0 # 00:00
    max_value: 2359 # 23:59
    step: 1
    entity_category: config
    icon: mdi:clock-end
    on_value:
      then:
        - lambda: |-
            int hours = int(x / 100);
            int minutes = static_cast<int>(x) % 100;
            id(time1_end_text).publish_state(
                (hours < 10 ? "0" : "") + to_string(hours) + ":" +
                (minutes < 10 ? "0" : "") + to_string(minutes)
            );

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 2 Begin"
    id: time2_begin
    address: 3150
    register_type: holding
    value_type: U_WORD
    min_value: 0
    max_value: 2359
    step: 1
    entity_category: config
    icon: mdi:clock-start
    on_value:
      then:
        - lambda: |-
            int hours = int(x / 100);
            int minutes = static_cast<int>(x) % 100;
            id(time2_begin_text).publish_state(
                (hours < 10 ? "0" : "") + to_string(hours) + ":" +
                (minutes < 10 ? "0" : "") + to_string(minutes)
            );

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 2 End"
    id: time2_end
    address: 3151
    register_type: holding
    value_type: U_WORD
    min_value: 0
    max_value: 2359
    step: 1
    entity_category: config
    icon: mdi:clock-end
    on_value:
      then:
        - lambda: |-
            int hours = int(x / 100);
            int minutes = static_cast<int>(x) % 100;
            id(time2_end_text).publish_state(
                (hours < 10 ? "0" : "") + to_string(hours) + ":" +
                (minutes < 10 ? "0" : "") + to_string(minutes)
            );

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 3 Begin"
    id: time3_begin
    address: 3154
    register_type: holding
    value_type: U_WORD
    min_value: 0
    max_value: 2359
    step: 1
    entity_category: config
    icon: mdi:clock-start
    on_value:
      then:
        - lambda: |-
            int hours = int(x / 100);
            int minutes = static_cast<int>(x) % 100;
            id(time3_begin_text).publish_state(
                (hours < 10 ? "0" : "") + to_string(hours) + ":" +
                (minutes < 10 ? "0" : "") + to_string(minutes)
            );

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 3 End"
    id: time3_end
    address: 3155
    register_type: holding
    value_type: U_WORD
    min_value: 0
    max_value: 2359
    step: 1
    entity_category: config
    icon: mdi:clock-end
    on_value:
      then:
        - lambda: |-
            int hours = int(x / 100);
            int minutes = static_cast<int>(x) % 100;
            id(time3_end_text).publish_state(
                (hours < 10 ? "0" : "") + to_string(hours) + ":" +
                (minutes < 10 ? "0" : "") + to_string(minutes)
            );

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "EMS Control Enable Status"
    address: 3500
    register_type: holding
    value_type: U_WORD

### Operationele Modes (Selects) ###
select:
  # Opladen/Prioriteit
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "AC Charging"
    id: ac_charging
    icon: mdi:battery-charging-100
    address: 3134
    value_type: U_WORD
    optionsmap:
      "Disabled": 0
      "Enabled": 1
    entity_category: config # Toegevoegd voor consistentie
    skip_updates: 21


  # Tijdsegment Actief/Modus
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 1 Active"
    id: time1_active
    address: 3145
    value_type: U_WORD
    optionsmap:
      "Disabled": 0
      "Enabled": 1
    entity_category: config
    icon: mdi:timer-outline
    skip_updates: 21

  - platform: modbus_controller
    modbus_controller_id: growatt2
    name: "Time Slot 1 ActiveUBER "
    id: time_slot_1_active
    address: 3515
    value_type: U_WORD
    optionsmap:
      Disabled: 0
      Enabled: 1
    entity_category: config
    icon: mdi:timer-outline

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 1 Mode"
    id: time1_mode
    address: 3148
    value_type: U_WORD
    optionsmap:
      "Load First": 0
      "Battery First": 1
      "Grid First": 2
      # "ECO": 3 # Verwijderd, niet in protocol voor dit register
    entity_category: config
    icon: mdi:arrow-decision-outline
    skip_updates: 21

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 2 Active"
    id: time2_active
    address: 3149
    value_type: U_WORD
    optionsmap:
      "Disabled": 0
      "Enabled": 1
    entity_category: config
    icon: mdi:timer-outline
    skip_updates: 21

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 2 Mode"
    id: time2_mode
    address: 3152
    value_type: U_WORD
    optionsmap:
      "Load First": 0
      "Battery First": 1
      "Grid First": 2
      # "ECO": 3 # Verwijderd, niet in protocol voor dit register
    entity_category: config
    icon: mdi:arrow-decision-outline
    skip_updates: 21

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 3 Active"
    id: time3_active
    address: 3153
    value_type: U_WORD
    optionsmap:
      "Disabled": 0
      "Enabled": 1
    entity_category: config
    icon: mdi:timer-outline
    skip_updates: 21

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "Time 3 Mode"
    id: time3_mode
    address: 3156
    value_type: U_WORD
    optionsmap:
      "Load First": 0
      "Battery First": 1
      "Grid First": 2
      # "ECO": 3 # Verwijderd, niet in protocol voor dit register
    entity_category: config
    icon: mdi:arrow-decision-outline
    skip_updates: 21

  - platform: template
    name: "Inverter Priority SPECIAL"
    id: inverter_priority_select
    icon: mdi:arrow-decision-outline
    optimistic: true # Set to true as there's no direct readback for immediate verification
    restore_value: true # Restore the last set value on reboot
    
    # Define the options for the drop-down menu
    options:
      - "Load First"
      - "Battery First"
      - "Grid First"
      # If you need to map internal values to options, you can use:
      # options:
      #   - value: "Load First"
      #     key: 0 # Internal value for Load First
      #   - value: "Battery First"
      #     key: 1 # Internal value for Battery First
      #   - value: "Grid First"
      #     key: 2 # Internal value for Grid First

    # When a new option is selected, this lambda will execute the Modbus write
    on_value:
      lambda: |-
        std::vector<uint16_t> values_to_write;
        int start_address = 3038;
        
        // Determine which values to send based on the selected option (x is the selected string)
        if (x == "Load First") {
          values_to_write = {32768, 5947}; // Encoded values for Load First (0x8000, 0x173B)
          ESP_LOGD("inverter_priority", "Setting Inverter Priority to: Load First");
        } else if (x == "Battery First") {
          values_to_write = {40960, 5947}; // Encoded values for Battery First (0xA000, 0x173B)
          ESP_LOGD("inverter_priority", "Setting Inverter Priority to: Battery First");
        } else if (x == "Grid First") {
          values_to_write = {49152, 5947}; // Encoded values for Grid First (0xC000, 0x173B)
          ESP_LOGD("inverter_priority", "Setting Inverter Priority to: Grid First");
        } else {
          ESP_LOGW("inverter_priority", "Unknown option selected: %s", x.c_str());
          return; // Do nothing if an unknown option is somehow selected
        }

        // Queue the Modbus write multiple command
        id(growatt2)->queue_command(
            esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(
                id(growatt2), start_address, values_to_write.size(), values_to_write
            )
        );

    entity_category: config

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    name: "EMS Control Enable"
    address: 3500
    value_type: U_WORD
    optionsmap:
      "Disabled": 0
      "Enabled": 1
    entity_category: config
    icon: mdi:toggle-switch
 


### Schakelaars (Switches) ###
switch:
  # Veiligheidsfuncties (omgezet van sensor naar switch)
  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: safety_function_spi_enable
    name: Safety Function SPI Enable
    icon: mdi:home-heart
    address: 1
    register_type: holding
    bitmask: 0x0001

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: safety_function_auto_test_start
    name: Safety Function AutoTestStart
    icon: mdi:home-heart
    address: 1
    register_type: holding
    bitmask: 0x0002

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: safety_function_lvfrt_enable
    name: Safety Function LVFRT Enable
    icon: mdi:home-heart
    address: 1
    register_type: holding
    bitmask: 0x0004

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: safety_function_freq_derating_enable
    name: Safety Function FreqDerating Enable
    icon: mdi:home-heart
    address: 1
    register_type: holding
    bitmask: 0x0008

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: safety_function_soft_start_enable
    name: Safety Function SoftStart Enable
    icon: mdi:home-heart
    address: 1
    register_type: holding
    bitmask: 0x0010

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: safety_function_drms_enable
    name: Safety Function DRMS Enable
    icon: mdi:home-heart
    address: 1
    register_type: holding
    bitmask: 0x0020

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: safety_function_power_volt_func_enable
    name: Safety Function PowerVoltFunc Enable
    icon: mdi:home-heart
    address: 1
    register_type: holding
    bitmask: 0x0040

  # Apparaat Besturing
  - platform: restart
    id: "${project_name}_switch_restart"
    name: "Restart ESP"
    icon: "mdi:restart"

### Tekstuele Weergaven (Text Sensors) ###
text_sensor:
  # Geformatteerde Tijden
  - platform: template
    name: "Time 1 Begin Formatted"
    id: time1_begin_text
    icon: mdi:clock-start
  - platform: template
    name: "Time 1 End Formatted"
    id: time1_end_text
    icon: mdi:clock-end
  - platform: template
    name: "Time 2 Begin Formatted"
    id: time2_begin_text
    icon: mdi:clock-start
  - platform: template
    name: "Time 2 End Formatted"
    id: time2_end_text
    icon: mdi:clock-end
  - platform: template
    name: "Time 3 Begin Formatted"
    id: time3_begin_text
    icon: mdi:clock-start
  - platform: template
    name: "Time 3 End Formatted"
    id: time3_end_text
    icon: mdi:clock-end

  # Status Indicatoren

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: firmwareversion
    name: Firmware Version
    icon: mdi:home-heart
    address: 9
    register_count: 3
    register_type: holding


  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: status
    name: Status
    icon: mdi:home-heart
    address: 0x00
    register_type: read
    bitmask: 0
    # raw_encode: HEXBYTES # Niet nodig, lambda werkt direct met integer waarde
    lambda: |-
      uint16_t value = id(inverter_status_state).state; // Gebruik de state van de gekoppelde sensor
      switch (value) {
        case 0: return std::string("Waiting");
        case 1: return std::string("Normal");
        case 2: return std::string("Fault");
        default: return std::to_string(value);
      }
      return x; 

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: deratingmode
    name: Derating Mode Status
    icon: mdi:home-heart
    address: 104
    register_type: read
    bitmask: 0
    raw_encode: HEXBYTES
    lambda: |-
      uint16_t value = modbus_controller::word_from_hex_str(x, 0);
      switch (value) {
        case 0: return std::string("No Derating");
        case 1: return std::string("Voltage PV");
        case 2: return std::string("*Not Assigned*");
        case 3: return std::string("Voltage AC");
        case 4: return std::string("Frequency AC");
        case 5: return std::string("Temp Boost");
        case 6: return std::string("Temp Inverter");
        case 7: return std::string("Control - Max Output Power Manual Limit (addr 3)");
        case 8: return std::string("*Not Assigned*");
        case 9: return std::string("Overback by Time");
        default: return std::to_string(value);
      }
      return x;

  - platform: modbus_controller
    modbus_controller_id: ${project_name}
    id: inverter_fault_status
    name: Inverter Fault Status
    icon: mdi:alert-circle
    address: 105
    register_type: read
    bitmask: 0
    # raw_encode: HEXBYTES # Niet nodig
    lambda: |-
      uint16_t value = id(inverter_fault_state).state; // Gebruik de state van de gekoppelde sensor
      switch (value) {
        case 0: return std::string("ALL OK");
        case 1 ... 23: return std::string("Error " + std::to_string(99 + value));
        case 24: return std::string("Auto Test Failed");
        case 25: return std::string("No AC Connection");
        case 26: return std::string("PV Isolation Low");
        case 27: return std::string("Residual I High");
        case 28: return std::string("Ouput DCI High");
        case 29: return std::string("PV Voltage High");
        case 30: return std::string("AC Voltage Out of Range");
        case 31: return std::string("AC Frequency Out of Range");
        case 32: return std::string("Module Hot - Temperatur High");
        default: return std::to_string(value);
      }
      return x;

  # ESPHome & WiFi Info
  - platform: version
    name: ESPHome Version
    id: esphome_version
    hide_timestamp: true

  - platform: wifi_info
    ip_address:
      name: WiFi IP Address
      id: wifi_ip_address
    ssid:
      name: WiFi SSID
      id: wifi_ssid
    bssid:
      name: WiFi BSSID
      id: wifi_bssid

  - platform: template
    name: Uptime (Human Readable)
    id: growatt_uptime_human
    icon: mdi:clock-start
Pagina: 1 2 Laatste