Growatt Inverter On/Off/Pause

Hi,

I have a dynamic energy contract. Last weekend the prices were -60 euro cent per KWh. This means that every solar KWh I return to the grid costs me 60 euro cent.

Is it possible to switch the inverter off or pause during the time this situation is happening?
I have a MOD9000TL3-X

Thanks,
Rien

Hi,

how and with what did you integrate the inverter into Home Assistant? If you have/use a Growatt Shine Stick you can flash ESPHome on it and then integrate the inverter with Home Assistant via ESPHome. See:

FYI: GPIO0 and Ground must be connected by a bridge so that the stick goes into flash mode.
ShineStick_Bruecke

With ESPHome you can set the Max Output Power for the inverter
Growatt_Output_Power


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

and use it for/on automation. If … then set Max Output Power to 50, 25, 10 or whatever.

Hi @jim_os,

This is even a better idea.

I had a spare ShineWiFi-X so I tried to flash it, but I can’t get it flashed.

That’s bad, of course, but unfortunately I can’t help you remotely. Unfortunately, all short instructions that I have posted in forums are completely in German. :slightly_smiling_face:
Example: Growatt MIC MQTT - Wechselrichter - Photovoltaikforum


Hi, tech question, the solar panels will produce electricity so where does the power go when you say ‘reduce’ ?

To the inverter. :slightly_smiling_face:

Example: Growatt Inverter

Only the values for the possible input data (DC) from the sum of all connected PV modules must be observed. The AC output power of an inverter can be regulated and thus reduced.

Hi,
Do you know whether sending the “max output power” to register 3 will be saved on the EEPROM of the inverter?

I would like to regulate the output power based on feed in power prices and household demand but I am concerned to change the value frequently and potentially “wear out” or damage the EEPROM.

Yes. The inverter switches off overnight and the setting is still there the next morning. Unfortunately, I can’t tell you what effect a dynamic adjustment of the value (several times a day) will have.

Hello, i have a working cofiguration for my MOD 4000 TL3 -X

This is my yaml

esphome:
name: grod1n
on_boot:
priority: 600
then:
- lambda: |-
delay(60000);
project:
name: PVPro.ShineWifi-X
version: “1.0”

esp8266:
board: d1_mini

Enable logging

logger:
baud_rate: 0

Enable Home Assistant API

api:
encryption:
key: “w4I+/GJsYOT8eAyIyetz3KjzJN+H9StwT2x1JTnkOl0=”

ota:

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

Enable fallback hotspot (captive portal) in case wifi connection fails

ap:
ssid: “Grod1n Fallback Hotspot”
password: “12345678”

Enable Web server

web_server:
port: 80

captive_portal:

time:

  • platform: homeassistant
    id: homeassistant_time

output:

Blue Led

  • id: light_bl
    platform: gpio
    pin: 16

Green Led

  • id: light_gr
    platform: gpio
    pin: 0

Red Led

  • id: light_rd
    platform: gpio
    pin: 2

uart:

  • id: uart_modbus
    baud_rate: 9600
    tx_pin: GPIO1
    rx_pin: GPIO3

modbus:
uart_id: uart_modbus
flow_control_pin: GPIO4

For newer inverters use protocol_version “RTU2” like below. Certain older models require “RTU”.

sensor:

  • platform: growatt_solar
    update_interval: 5s
    protocol_version: RTU2

    inverter_status:
    name: “Growatt Status Code”
    phase_a:
    voltage:
    name: “Growatt Voltage Phase A”
    current:
    name: “Growatt Current Phase A”
    active_power:
    name: “Growatt Power Phase A”
    phase_b:
    voltage:
    name: “Growatt Voltage Phase B”
    current:
    name: “Growatt Current Phase B”
    active_power:
    name: “Growatt Power Phase B”
    phase_c:
    voltage:
    name: “Growatt Voltage Phase C”
    current:
    name: “Growatt Current Phase C”
    active_power:
    name: “Growatt Power Phase C”
    pv1:
    voltage:
    name: “Growatt PV1 Voltage”
    current:
    name: “Growatt PV1 Current”
    active_power:
    name: “Growatt PV1 Active Power”
    pv2:
    voltage:
    name: “Growatt PV2 Voltage”
    current:
    name: “Growatt PV2 Current”
    active_power:
    name: “Growatt PV2 Active Power”
    active_power:
    name: “Growatt Grid Active Power”
    pv_active_power:
    name: “Growatt PV Active Power”
    frequency:
    name: “Growatt Frequency”
    energy_production_day:
    name: “Growatt Today’s Generation”
    accuracy_decimals: 1
    total_energy_production:
    name: “Growatt Total Energy Production”
    accuracy_decimals: 1
    inverter_module_temp:
    name: “Growatt Inverter Module Temp”

  • platform: uptime
    name: “Growatt Uptime”
    update_interval: 60s

  • platform: wifi_signal
    name: “Growatt Wi-Fi Signal”
    update_interval: 60s

text_sensor:

  • platform: wifi_info
    ip_address:
    name: “Growatt IP Address”
    ssid:
    name: “Growatt Wi-Fi SSID”
    bssid:
    name: “Growatt Wi-Fi BSSID”
  • platform: version
    name: “ESPHome Version”
    hide_timestamp: true

If i put this on de yaml.

number:

  • platform: modbus_controller
    name: “${devicename} MaxOutputPct”
    address: 3
    value_type: U_WORD
    min_value: 0
    max_value: 100
    entity_category: config

i get error’s

Can you please tel me the right way?

Best Regard, Patrick

Sorry, I can’t say anything about that. According to the last Growatt Modbus documentation version 1.24 (from 2020) I have, the Modbus address 3 should be correct.


But I also use a MIC 600TL-X and therefore a different ESPHome syntax.

Maybe Growatt also changed something in the Modbus commands through a firmware update on your MOD 4000 TL3-X.

Hi, I implemented this code to change the power output percentage, but it doesn’t work on a Growatt 3000MTL inverter. The log shows the right codes, however it’s not processed and the percentage remains at 100%. Anybody a clue ?

the logs shows setting it to 45(%), then reading it back at 100 (%).
Reading register 0 , resulting in 257 is on purpose:-)

[18:31:59][VV][api.service:829]: on_number_command_request: NumberCommandRequest {
  key: 121298958
  state: 45
}
[18:31:59][D][number:054]: 'Growatt MaxOutputPct' - Setting number value
[18:31:59][D][number:113]:   New number value: 45.000000
[18:31:59][D][modbus.number:059]: Updating register: connected Sensor=Growatt MaxOutputPct start address=0x3 register count=1 new value=45.00 (val=45.00)
[18:31:59][D][number:012]: 'Growatt MaxOutputPct': Sending state 45.000000
[18:31:59][VV][api.service:260]: send_number_state_response: NumberStateResponse {
  key: 121298958
  state: 45
  missing_state: NO
}
[18:31:59][V][modbus_controller:046]: Sending next modbus command to device 1 register 0x03 count 1
[18:31:59][VV][uart.arduino_esp8266:196]:     Flushing...
[18:31:59][V][modbus:199]: Modbus write: 01.06.00.03.00.2D.B9.D7 (8)
[18:31:59][V][modbus_controller:509]: Command sent 6 0x3 1
[18:31:59][V][modbus:042]: Modbus received Byte  1 (0X1)
[18:31:59][V][modbus:042]: Modbus received Byte  6 (0X6)
[18:31:59][V][modbus:042]: Modbus received Byte  0 (0X0)
[18:31:59][V][modbus:042]: Modbus received Byte  3 (0X3)
[18:31:59][V][modbus:042]: Modbus received Byte  0 (0X0)
[18:31:59][V][modbus:042]: Modbus received Byte  45 (0X2d)
[18:31:59][V][modbus:042]: Modbus received Byte  185 (0Xb9)
[18:31:59][V][modbus:042]: Modbus received Byte  215 (0Xd7)
[18:31:59][V][modbus_controller:078]: Modbus response queued
[18:31:59][V][modbus_controller:085]: Process modbus response for address 0x3 size: 4
[18:31:59][V][modbus_controller:331]: Command ACK 0x3 768 
[18:31:59][D][number:012]: 'Growatt MaxOutputPct': Sending state 45.000000
[18:31:59][VV][api.service:260]: send_number_state_response: NumberStateResponse {
  key: 121298958
  state: 45
  missing_state: NO
}
[18:32:05][VV][scheduler:225]: Running interval '' with interval=10000 last_execution=7648432 (now=7658432)
[18:32:13][VV][scheduler:225]: Running interval 'update' with interval=30000 last_execution=7636225 (now=7666225)
[18:32:13][V][modbus_controller:181]: Updating modbus component
[18:32:13][VV][modbus_controller:185]: Updating range 0x0
[18:32:13][V][modbus_controller:147]: Range : 0 Size: 1 (3) skip: 0
[18:32:13][VV][modbus_controller:185]: Updating range 0x3
[18:32:13][V][modbus_controller:147]: Range : 3 Size: 1 (3) skip: 0
[18:32:13][V][modbus_controller:046]: Sending next modbus command to device 1 register 0x00 count 1
[18:32:13][VV][uart.arduino_esp8266:196]:     Flushing...
[18:32:13][V][modbus:199]: Modbus write: 01.03.00.00.00.01.84.0A (8)
[18:32:13][V][modbus_controller:509]: Command sent 3 0x0 1
[18:32:13][V][modbus:042]: Modbus received Byte  1 (0X1)
[18:32:13][V][modbus:042]: Modbus received Byte  3 (0X3)
[18:32:13][V][modbus:042]: Modbus received Byte  2 (0X2)
[18:32:13][V][modbus:042]: Modbus received Byte  1 (0X1)
[18:32:13][V][modbus:042]: Modbus received Byte  1 (0X1)
[18:32:13][V][modbus:042]: Modbus received Byte  120 (0X78)
[18:32:13][V][modbus:042]: Modbus received Byte  20 (0X14)
[18:32:13][V][modbus_controller:078]: Modbus response queued
[18:32:13][V][modbus_controller:085]: Process modbus response for address 0x0 size: 2
[18:32:13][V][modbus_controller:121]: data for register address : 0x0 : 
[18:32:13][D][modbus_controller.sensor:025]: Sensor new state: 257.00
[18:32:13][V][sensor:043]: 'Growatt Startup settings': Received new state 257.000000
[18:32:13][D][sensor:093]: 'Growatt Startup settings': Sending state 257.00000  with 0 decimals of accuracy
[18:32:13][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
  key: 3962664989
  state: 257
  missing_state: NO
}
[18:32:13][V][modbus_controller:046]: Sending next modbus command to device 1 register 0x03 count 1
[18:32:13][VV][uart.arduino_esp8266:196]:     Flushing...
[18:32:13][V][modbus:199]: Modbus write: 01.03.00.03.00.01.74.0A (8)
[18:32:13][V][modbus_controller:509]: Command sent 3 0x3 1
[18:32:13][V][modbus:042]: Modbus received Byte  1 (0X1)
[18:32:13][V][modbus:042]: Modbus received Byte  3 (0X3)
[18:32:13][V][modbus:042]: Modbus received Byte  2 (0X2)
[18:32:13][V][modbus:042]: Modbus received Byte  0 (0X0)
[18:32:13][V][modbus:042]: Modbus received Byte  100 (0X64)
[18:32:13][V][modbus:042]: Modbus received Byte  185 (0Xb9)
[18:32:13][V][modbus:042]: Modbus received Byte  175 (0Xaf)
[18:32:13][V][modbus_controller:078]: Modbus response queued
[18:32:13][V][modbus_controller:085]: Process modbus response for address 0x3 size: 2
[18:32:13][V][modbus_controller:121]: data for register address : 0x3 : 
[18:32:13][D][modbus.number:023]: Number new state : 100.00
[18:32:13][D][number:012]: 'Growatt MaxOutputPct': Sending state 100.000000
[18:32:13][VV][api.service:260]: send_number_state_response: NumberStateResponse {
  key: 121298958
  state: 100
  missing_state: NO
}

Hi @JeeBee did you manage to figure this out eventually? Before I’m putting effort in to reach the same goal I’d like to know if it is possible to adjust the output power this way (read: switch off the PV system) when the price becomes negative.

So far, it seems to turn completely off when i send 0% and back on again with 100%, but nothing in between. So for now, it’s all or nothing

That’s exactly my experience too