esphome / feature-requests

ESPHome Feature Request Tracker
https://esphome.io/
406 stars 26 forks source link

Growatt sensor - export limit add on. #2159

Open StarChildDK opened 1 year ago

StarChildDK commented 1 year ago

Describe the problem you have/What new integration you would like The growatt sensor integration - On some of the growatt inverters it is possible to set Export limitations via RS485, it would be great if esphome could control this.

Please describe your use case for this integration and alternatives you've tried: Home assistant could be used to control the export limit, it would be very convenient if the home assistant already has a smart meter.

Additional context

kiss81 commented 1 year ago

This Would be a really nice way to be able to turn off the output when prices are negative.

Saentist commented 1 year ago

In Growatt Inverter Modbus RTU Protocol V1.24 there is a option to do this: image image

kiss81 commented 1 year ago

In Growatt Inverter Modbus RTU Protocol V1.24 there is a option to do this: image image

Good find! I have no clue yet how to implement this :) Is there another project using this so I can have a look how it's implemented?

wauswaus commented 7 months ago

We see more and more negative Kwh pricing so it would be great to automate the invertor to stop produce power. Another option for this I came across is:

afbeelding Could this be exposes to HA as a switch or so? Maybe more easier to implement?

Saentist commented 6 months ago

@kiss81

In Growatt Inverter Modbus RTU Protocol V1.24 there is a option to do this: image image

Good find! I have no clue yet how to implement this :) Is there another project using this so I can have a look how it's implemented?

Just use WRITE register

@wauswaus

We see more and more negative Kwh pricing so it would be great to automate the invertor to stop produce power. Another option for this I came across is:

afbeelding Could this be exposes to HA as a switch or so? Maybe more easier to implement?

Why to stop produce power? Idea is to be independent from electric company as much is possible, witch mean ZERO import and ZERO export.

apromix commented 4 months ago

Hi.

it is possible to use another register to control Export limit, namely Holding Register 3:

image

I thing, to use the registers 122 and then 123 will work only via separately RS485 or RS232 port, not via USB port, so the ESPHOME must be connected two times (USB + RSxxx) and emulates the power meter (but not sure, maybe not?).

Already exists a PR in another project.

I already tested it and seems to be work:

Example (OpenInverterGateway project) with very small PV with 100Wp and Growatt 600tl-x:

$ curl -X POST http://growatt/postCommunicationModbus_p -d "type=16b&operation=W&registerType=H&reg=3&val=10"; echo
Wrote Holding Register 3 to a value of 10!

$ curl -X POST http://growatt/postCommunicationModbus_p -d "val=&type=16b&operation=R&registerType=H&reg=3"; echo
Read 16b Holding register 3 with value 10

$ curl -X POST http://growatt/postCommunicationModbus_p -d "type=16b&operation=W&registerType=H&reg=3&val=5"; echo
Wrote Holding Register 3 to a value of 5!

$ curl -X POST http://growatt/postCommunicationModbus_p -d "val=&type=16b&operation=R&registerType=H&reg=3"; echo
Read 16b Holding register 3 with value 5

$ curl -X POST http://growatt/postCommunicationModbus_p -d "type=16b&operation=W&registerType=H&reg=3&val=100"; echo
Wrote Holding Register 3 to a value of 100!

image

Legend:

Maybe this should be the correct way ..

Saentist commented 4 months ago

Hi.

it is possible to use another register to control Export limit, namely Holding Register 3:

I thing, to use the registers 122 and then 123 will work only via separately RS485 or RS232 port, not via USB port, so the ESPHOME must be connected two times (USB + RSxxx) and emulates the power meter (but not sure, maybe not?).

Already exists a PR in another project.

I already tested it and seems to be work:

Example (OpenInverterGateway project) with very small PV with 100Wp and Growatt 600tl-x:

$ curl -X POST http://growatt/postCommunicationModbus_p -d "type=16b&operation=W&registerType=H&reg=3&val=10"; echo
Wrote Holding Register 3 to a value of 10!

$ curl -X POST http://growatt/postCommunicationModbus_p -d "val=&type=16b&operation=R&registerType=H&reg=3"; echo
Read 16b Holding register 3 with value 10

$ curl -X POST http://growatt/postCommunicationModbus_p -d "type=16b&operation=W&registerType=H&reg=3&val=5"; echo
Wrote Holding Register 3 to a value of 5!

$ curl -X POST http://growatt/postCommunicationModbus_p -d "val=&type=16b&operation=R&registerType=H&reg=3"; echo
Read 16b Holding register 3 with value 5

$ curl -X POST http://growatt/postCommunicationModbus_p -d "type=16b&operation=W&registerType=H&reg=3&val=100"; echo
Wrote Holding Register 3 to a value of 100!

Legend:

  • [9:48:35] 10% => ca. 60W
  • [9:49:00] 5% => ca. 30W
  • [9:49:40] 100% => back to max

Maybe this should be the correct way ..

This function is more interesting in case if there is no power limiter installed at all image

Negative Red leaf on inverter but works

drahdiwaberl commented 3 weeks ago

for anyone looking for a solution to this - i got it working with a MIC 750 TL-X (which happens to generate a bit more 8)) with the below config. and yes, this works fine along with the sensors of the platform growatt_solar.

uart:
  tx_pin: GPIO4
  rx_pin: GPIO5
  baud_rate: 9600

modbus:

modbus_controller:
  - id: modbus_gw750

sensor:
  - platform: modbus_controller
    modbus_controller_id: modbus_gw750
#    
#  sensor returning the currently set limit read from the register for showing it in HA
#
    name: "Limit %" 
    id: gw750_limit_set
    register_type: holding
    address: 3
    unit_of_measurement: "%"
    value_type: U_WORD

number:
  - platform: modbus_controller
    modbus_controller_id: modbus_gw750
#
#  creating a number entity and it's corresponding slider in HA
#  and writes it to the register on change
#
    name: GW750 Limit
    id: gw750_limit
    address: 3
    register_type: holding
    value_type: U_WORD
    min_value: 10
    max_value: 100
    step: 1