Closed amgstone closed 1 month ago
Is the ESP board equipped with an USB-to-TTL converter? Are you able (temporary) to receive log messages of the ESP using an USB cable? I guess the ESP won't boot if the inverter is connected. As soon you disconnect the inverter the ESP is able to boot up because important GPIOs aren't pulled down/high anymore. Could you try to verify this idea?
I did not understand what I should do
As first step: Could you provide your YAML? I would like to check the used GPIOs.
A virus has been detected.
substitutions:
name: smg-smg-jk
device_description: "Monitor and control two SMG II inverters via RS232 and a JK-BMS via BLE"
smg0: "smg-ii-2"
smg1: "smg-ii"
tx_pin: GPIO16
rx_pin: GPIO17
tx_pin2: GPIO32
rx_pin2: GPIO33
esphome:
name: ${name}
comment: ${device_description}
project:
name: "syssi.esphome-smg-ii"
version: 1.2.0
# Enable logging
logger:
level: DEBUG
# Enable Home Assistant API
api:
encryption:
key: [...]
ota:
platform: esphome
#ota:
password: [...]
esp32:
board: wemos_d1_mini32
framework:
type: esp-idf
wifi:
ssid: [...]
password: [...]
manual_ip:
static_ip: 192.168.31.159
gateway: 192.168.31.1
subnet: 255.255.255.0
ap:
ssid: [...]
password: [...]
uart:
- id: uart_0
baud_rate: 9600
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
- id: uart_1
baud_rate: 9600
tx_pin: ${tx_pin2}
rx_pin: ${rx_pin2}
modbus:
- id: modbus0
uart_id: uart_0
send_wait_time: 200ms
- id: modbus1
uart_id: uart_1
send_wait_time: 200ms
modbus_controller:
- id: smg0
address: 0x01
modbus_id: modbus0
command_throttle: 200ms
update_interval: 10s
- id: smg1
address: 0x01
modbus_id: modbus1
command_throttle: 200ms
update_interval: 10s
time:
- platform: homeassistant
id: my_time
number:
### smg0
# Maximum charging current 0.1A Uint 332 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} maximum charging current"
use_write_multiple: true
address: 332
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 100.0
step: 0.1
unit_of_measurement: "A"
lambda: "return x * 0.1f;"
write_lambda: |-
return x * 10.0f;
# Maximum mains charging current 0.1A Uint 333 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} maximum mains charging current"
use_write_multiple: true
address: 333
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 100.0
step: 0.1
unit_of_measurement: "A"
lambda: "return x * 0.1f;"
write_lambda: |-
return x * 10.0f;
# Maximum charging current 0.1A Uint 332 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} maximum charging current"
use_write_multiple: true
address: 332
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 100.0
step: 0.1
unit_of_measurement: "A"
lambda: "return x * 0.1f;"
write_lambda: |-
return x * 10.0f;
# Maximum mains charging current 0.1A Uint 333 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} maximum mains charging current"
use_write_multiple: true
address: 333
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 100.0
step: 0.1
unit_of_measurement: "A"
lambda: "return x * 0.1f;"
write_lambda: |-
return x * 10.0f;
# Battery equalization time min Uint 335 1 R/W Range: 0~900
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery equalization time"
use_write_multiple: true
address: 335
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 900.0
step: 1
unit_of_measurement: "min"
# Equalization Timeout exit min Uint 336 1 R/W Range: 0~900
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} equalization Timeout exit"
use_write_multiple: true
address: 336
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 900.0
step: 1
unit_of_measurement: "min"
# Two equalization charging intervals day Uint 337 1 R/W Range: 1~90
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} two equalization charging intervals"
use_write_multiple: true
address: 337
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 90.0
step: 1
unit_of_measurement: "day"
### smg1
# Battery equalization time min Uint 335 1 R/W Range: 0~900
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery equalization time"
use_write_multiple: true
address: 335
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 900.0
step: 1
unit_of_measurement: "min"
# Equalization Timeout exit min Uint 336 1 R/W Range: 0~900
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} equalization Timeout exit"
use_write_multiple: true
address: 336
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 900.0
step: 1
unit_of_measurement: "min"
# Two equalization charging intervals day Uint 337 1 R/W Range: 1~90
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} two equalization charging intervals"
use_write_multiple: true
address: 337
register_type: holding
value_type: U_WORD
min_value: 0.0
max_value: 90.0
step: 1
unit_of_measurement: "day"
sensor:
### smg0
- platform: total_daily_energy
name: "${smg0} PV energy today"
restore: true
icon: mdi:counter
power_id: smg0_pv_average_power
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
unit_of_measurement: kWh
# Fault code ULong 100 2 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} fault code"
address: 100
register_type: holding
value_type: U_DWORD
accuracy_decimals: 0
# Warning code ULong 108 2 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} warning code"
address: 108
register_type: holding
value_type: U_DWORD
accuracy_decimals: 0
# Operation Mode UInt 201 1 R 0: Power On
# 1: Standby
# 2: Mains
# 3: Off-Grid
# 4: Bypass
# 5: Charging
# 6: Fault
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} operation mode id"
address: 201
register_type: holding
value_type: U_WORD
accuracy_decimals: 0
# Effective mains voltage 0.1V Int 202 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} ac voltage"
address: 202
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Mains Frequency 0.01Hz Int 203 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} ac frequency"
address: 203
register_type: holding
value_type: S_WORD
unit_of_measurement: "Hz"
device_class: frequency
state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Average mains power 1W Int 204 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} average mains power"
address: 204
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: 0
max_value: 10000
ignore_out_of_range: true
# Effective inverter voltage 0.1V Int 205 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} effective inverter voltage"
address: 205
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Effective inverter current 0.1A Int 206 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} effective inverter current"
address: 206
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Inverter frequency 0.01Hz Int 207 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} inverter frequency"
address: 207
register_type: holding
value_type: S_WORD
unit_of_measurement: "Hz"
device_class: frequency
state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Average inverter power 1W Int 208 1 R Positive numbers indicate inverter output, negative numbers indicate inverter input
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} average inverter power"
address: 208
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# Inverter charging power 1W Int 209 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} inverter charging power"
address: 209
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# Output effective voltage 0.1V Int 210 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output effective voltage"
address: 210
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Output effective Current 0.1A Int 211 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output effective Current"
address: 211
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 70
ignore_out_of_range: true
# Output frequency 0.01Hz Int 212 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output frequency"
address: 212
register_type: holding
value_type: S_WORD
unit_of_measurement: "Hz"
device_class: frequency
state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Output active power 1W Int 213 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output active power"
address: 213
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: 0
max_value: 14000
ignore_out_of_range: true
# Output apparent power 1VA Int 214 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output apparent power"
address: 214
register_type: holding
value_type: S_WORD
unit_of_measurement: "VA"
device_class: apparent_power
state_class: measurement
accuracy_decimals: 0
# Battery average voltage 0.1V Int 215 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery average voltage"
address: 215
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery average Current 0.1A Int 216 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery average Current"
address: 216
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery average power 1W Int 217 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery average power"
address: 217
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: -10000
max_value: 10000
ignore_out_of_range: true
# PV average voltage 0.1V Int 219 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} pv average voltage"
address: 219
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# PV average current 0.1A Int 220 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} pv average current"
address: 220
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 25
ignore_out_of_range: true
# PV average power 1W Int 223 1 R
- platform: modbus_controller
modbus_controller_id: smg0
id: smg0_pv_average_power
name: "${smg0} pv average power"
address: 223
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# PV charging average power 1W Int 224 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} pv charging average power"
address: 224
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# Load percentage 1% Int 225 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} load percentage"
address: 225
register_type: holding
value_type: S_WORD
unit_of_measurement: "%"
# device_class: battery
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# DCDC Temperature 1°C Int 226 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} dcdc temperature"
address: 226
register_type: holding
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
# Inverter Temperature 1°C Int 227 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} inverter temperature"
address: 227
register_type: holding
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
# Battery state of charge 1% UInt 229 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery state of charge"
address: 229
register_type: holding
value_type: U_WORD
unit_of_measurement: "%"
device_class: battery
state_class: measurement
accuracy_decimals: 0
# Battery average current 0.1A Int 232 1 R Positive number means charging, negative number means discharging
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery average current"
address: 232
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Inverter charging average current 0.1A Int 233 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} inverter charging average current"
address: 233
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# PV charging average current 0.1A Int 234 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} pv charging average current"
address: 234
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Output voltage 0.1V Uint 320 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output voltage"
address: 320
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Output frequency setting 0.01Hz Uint 321 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output frequency setting"
address: 321
register_type: holding
value_type: U_WORD
unit_of_measurement: "Hz"
device_class: frequency
# state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Battery overvoltage protection point 0.1V Uint 323 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery overvoltage protection point"
address: 323
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Max charging voltage 0.1V Uint 324 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} max charging voltage"
address: 324
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Floating charging voltage 0.1V Uint 325 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} floating charging voltage"
address: 325
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery discharge recovery point in mains mode 0.1V Uint 326 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery discharge recovery point in mains mode"
address: 326
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery low voltage protection point in mains mode 0.1V Uint 327 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery low voltage protection point in mains mode"
address: 327
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery low voltage protection point in off-grid mode 0.1V Uint 329 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery low voltage protection point in off-grid mode"
address: 329
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Maximum charging current 0.1A Uint 332 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} maximum charging current"
address: 332
register_type: holding
value_type: U_WORD
unit_of_measurement: "A"
device_class: current
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# Maximum mains charging current 0.1A Uint 333 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} maximum mains charging current"
address: 333
register_type: holding
value_type: U_WORD
unit_of_measurement: "A"
device_class: current
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# Eq Charging voltage 0.1V Uint 334 1 R/W
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} Eq Charging voltage"
address: 334
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# Rated power W Uint 643 1 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} rated power"
address: 643
register_type: holding
value_type: U_WORD
unit_of_measurement: "W"
device_class: power
# state_class: measurement
accuracy_decimals: 0
### smg1
- platform: total_daily_energy
name: "${smg1} PV energy today"
restore: true
icon: mdi:counter
power_id: smg1_pv_average_power
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
unit_of_measurement: kWh
# Fault code ULong 100 2 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} fault code"
address: 100
register_type: holding
value_type: U_DWORD
accuracy_decimals: 0
# Warning code ULong 108 2 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} warning code"
address: 108
register_type: holding
value_type: U_DWORD
accuracy_decimals: 0
# Operation Mode UInt 201 1 R 0: Power On
# 1: Standby
# 2: Mains
# 3: Off-Grid
# 4: Bypass
# 5: Charging
# 6: Fault
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} operation mode id"
address: 201
register_type: holding
value_type: U_WORD
accuracy_decimals: 0
# Effective mains voltage 0.1V Int 202 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} ac voltage"
address: 202
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Mains Frequency 0.01Hz Int 203 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} ac frequency"
address: 203
register_type: holding
value_type: S_WORD
unit_of_measurement: "Hz"
device_class: frequency
state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Average mains power 1W Int 204 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} average mains power"
address: 204
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: 0
max_value: 10000
ignore_out_of_range: true
# Effective inverter voltage 0.1V Int 205 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} effective inverter voltage"
address: 205
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Effective inverter current 0.1A Int 206 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} effective inverter current"
address: 206
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Inverter frequency 0.01Hz Int 207 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} inverter frequency"
address: 207
register_type: holding
value_type: S_WORD
unit_of_measurement: "Hz"
device_class: frequency
state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Average inverter power 1W Int 208 1 R Positive numbers indicate inverter output, negative numbers indicate inverter input
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} average inverter power"
address: 208
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# Inverter charging power 1W Int 209 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} inverter charging power"
address: 209
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# Output effective voltage 0.1V Int 210 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output effective voltage"
address: 210
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Output effective Current 0.1A Int 211 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output effective Current"
address: 211
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 70
ignore_out_of_range: true
# Output frequency 0.01Hz Int 212 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output frequency"
address: 212
register_type: holding
value_type: S_WORD
unit_of_measurement: "Hz"
device_class: frequency
state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Output active power 1W Int 213 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output active power"
address: 213
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: 0
max_value: 14000
ignore_out_of_range: true
# Output apparent power 1VA Int 214 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output apparent power"
address: 214
register_type: holding
value_type: S_WORD
unit_of_measurement: "VA"
device_class: apparent_power
state_class: measurement
accuracy_decimals: 0
# Battery average voltage 0.1V Int 215 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery average voltage"
address: 215
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery average Current 0.1A Int 216 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery average Current"
address: 216
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery average power 1W Int 217 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery average power"
address: 217
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: -10000
max_value: 10000
ignore_out_of_range: true
# PV average voltage 0.1V Int 219 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} pv average voltage"
address: 219
register_type: holding
value_type: S_WORD
unit_of_measurement: "V"
device_class: voltage
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# PV average current 0.1A Int 220 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} pv average current"
address: 220
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 25
ignore_out_of_range: true
# PV average power 1W Int 223 1 R
- platform: modbus_controller
modbus_controller_id: smg1
id: smg1_pv_average_power
name: "${smg1} pv average power"
address: 223
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# PV charging average power 1W Int 224 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} pv charging average power"
address: 224
register_type: holding
value_type: S_WORD
unit_of_measurement: "W"
device_class: power
state_class: measurement
accuracy_decimals: 0
# Load percentage 1% Int 225 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} load percentage"
address: 225
register_type: holding
value_type: S_WORD
unit_of_measurement: "%"
# device_class: battery
state_class: measurement
accuracy_decimals: 0
filters:
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# DCDC Temperature 1°C Int 226 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} dcdc temperature"
address: 226
register_type: holding
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
# Inverter Temperature 1°C Int 227 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} inverter temperature"
address: 227
register_type: holding
value_type: S_WORD
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
accuracy_decimals: 0
# Battery state of charge 1% UInt 229 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery state of charge"
address: 229
register_type: holding
value_type: U_WORD
unit_of_measurement: "%"
device_class: battery
state_class: measurement
accuracy_decimals: 0
# Battery average current 0.1A Int 232 1 R Positive number means charging, negative number means discharging
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery average current"
address: 232
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Inverter charging average current 0.1A Int 233 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} inverter charging average current"
address: 233
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# PV charging average current 0.1A Int 234 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} pv charging average current"
address: 234
register_type: holding
value_type: S_WORD
unit_of_measurement: "A"
device_class: current
state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Output voltage 0.1V Uint 320 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output voltage"
address: 320
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Output frequency setting 0.01Hz Uint 321 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output frequency setting"
address: 321
register_type: holding
value_type: U_WORD
unit_of_measurement: "Hz"
device_class: frequency
# state_class: measurement
accuracy_decimals: 2
filters:
- multiply: 0.01
# Battery overvoltage protection point 0.1V Uint 323 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery overvoltage protection point"
address: 323
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Max charging voltage 0.1V Uint 324 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} max charging voltage"
address: 324
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Floating charging voltage 0.1V Uint 325 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} floating charging voltage"
address: 325
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery discharge recovery point in mains mode 0.1V Uint 326 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery discharge recovery point in mains mode"
address: 326
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery low voltage protection point in mains mode 0.1V Uint 327 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery low voltage protection point in mains mode"
address: 327
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Battery low voltage protection point in off-grid mode 0.1V Uint 329 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery low voltage protection point in off-grid mode"
address: 329
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
# Maximum charging current 0.1A Uint 332 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} maximum charging current"
address: 332
register_type: holding
value_type: U_WORD
unit_of_measurement: "A"
device_class: current
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# Maximum mains charging current 0.1A Uint 333 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} maximum mains charging current"
address: 333
register_type: holding
value_type: U_WORD
unit_of_measurement: "A"
device_class: current
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# Eq Charging voltage 0.1V Uint 334 1 R/W
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} Eq Charging voltage"
address: 334
register_type: holding
value_type: U_WORD
unit_of_measurement: "V"
device_class: voltage
# state_class: measurement
accuracy_decimals: 1
filters:
- multiply: 0.1
- clamp:
min_value: 0
max_value: 100
ignore_out_of_range: true
# Rated power W Uint 643 1 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} rated power"
address: 643
register_type: holding
value_type: U_WORD
unit_of_measurement: "W"
device_class: power
# state_class: measurement
accuracy_decimals: 0
select:
### smg0
# Output Mode Uint 300 1 R/W 0: Single, 1: Parallel, 2: 3 Phase-P1, 3: 3 Phase-P2, 4: 3 Phase-P3
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output mode"
use_write_multiple: true
address: 300
value_type: U_WORD
optionsmap:
"Single": 0
"Parallel": 1
"Phase P1": 2
"Phase P2": 3
"Phase P3": 4
# Output priority Uint 301 1 R/W 0: Utility-PV-Battery, 1: PV-Utility-Battery, 2: PV-Battery-Utility
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} output priority"
use_write_multiple: true
address: 301
value_type: U_WORD
optionsmap:
"Utility-PV-Battery (UTI)": 0
"PV-Utility-Battery (SOL)": 1
"PV-Battery-Utility (SBU)": 2
"PV-Utility-Battery (SUB)": 3
# Input voltage range Uint 302 1 R/W 0: Wide range, 1: Narrow range
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} input voltage range"
use_write_multiple: true
address: 302
value_type: U_WORD
optionsmap:
"Wide range": 0
"Narrow range": 1
# Buzzer mode Uint 303 1 R/W 0: Mute in all situations, 1: Sound when the input source is changed or there is a specific warning or fault, 2: Sound when there is aspecific warning or fault, 3: Sound when fault occurs
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} buzzer mode"
use_write_multiple: true
address: 303
value_type: U_WORD
optionsmap:
"Silent": 0
"Beep on input source changes, warnings and faults": 1
"Beep on warnings and faults": 2
"Beep on faults": 3
# LCD backlight Uint 305 1 R/W 0: Timed off, 1: Always on
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} lcd backlight"
use_write_multiple: true
address: 305
value_type: U_WORD
optionsmap:
"Timed off": 0
"Always on": 1
# Battery charging priority Uint 331 1 R/W 0: Utility priority, 1: PV priority, 2: PV is at the same level as the Utility, 3: Only PV charging is allowed
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery charging priority"
use_write_multiple: true
address: 331
value_type: U_WORD
optionsmap:
"Utility priority": 0
"PV priority": 1
"PV is at the same level as the Utility": 2
"Only PV charging is allowed": 3
# Turn on mode Uint 406 1 R/W 0: Can be turn-on locally or remotely, 1: Only local turn-on, 2: Only remote turn-on
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} turn on mode"
use_write_multiple: true
address: 406
value_type: U_WORD
optionsmap:
"Local and remotely turn-on allowed": 0
"Local turn-on only": 1
"Remote turn-on only": 2
### smg1
# Output Mode Uint 300 1 R/W 0: Single, 1: Parallel, 2: 3 Phase-P1, 3: 3 Phase-P2, 4: 3 Phase-P3
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output mode"
use_write_multiple: true
address: 300
value_type: U_WORD
optionsmap:
"Single": 0
"Parallel": 1
"Phase P1": 2
"Phase P2": 3
"Phase P3": 4
# Output priority Uint 301 1 R/W 0: Utility-PV-Battery, 1: PV-Utility-Battery, 2: PV-Battery-Utility
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} output priority"
use_write_multiple: true
address: 301
value_type: U_WORD
optionsmap:
"Utility-PV-Battery (UTI)": 0
"PV-Utility-Battery (SOL)": 1
"PV-Battery-Utility (SBU)": 2
"PV-Utility-Battery (SUB)": 3
# Input voltage range Uint 302 1 R/W 0: Wide range, 1: Narrow range
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} input voltage range"
use_write_multiple: true
address: 302
value_type: U_WORD
optionsmap:
"Wide range": 0
"Narrow range": 1
# Buzzer mode Uint 303 1 R/W 0: Mute in all situations, 1: Sound when the input source is changed or there is a specific warning or fault, 2: Sound when there is aspecific warning or fault, 3: Sound when fault occurs
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} buzzer mode"
use_write_multiple: true
address: 303
value_type: U_WORD
optionsmap:
"Silent": 0
"Beep on input source changes, warnings and faults": 1
"Beep on warnings and faults": 2
"Beep on faults": 3
# LCD backlight Uint 305 1 R/W 0: Timed off, 1: Always on
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} lcd backlight"
use_write_multiple: true
address: 305
value_type: U_WORD
optionsmap:
"Timed off": 0
"Always on": 1
# Battery charging priority Uint 331 1 R/W 0: Utility priority, 1: PV priority, 2: PV is at the same level as the Utility, 3: Only PV charging is allowed
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery charging priority"
use_write_multiple: true
address: 331
value_type: U_WORD
optionsmap:
"Utility priority": 0
"PV priority": 1
"PV is at the same level as the Utility": 2
"Only PV charging is allowed": 3
# Turn on mode Uint 406 1 R/W 0: Can be turn-on locally or remotely, 1: Only local turn-on, 2: Only remote turn-on
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} turn on mode"
use_write_multiple: true
address: 406
value_type: U_WORD
optionsmap:
"Local and remotely turn-on allowed": 0
"Local turn-on only": 1
"Remote turn-on only": 2
switch:
### smg0
# LCD automatically returns to the homepage Uint 306 1 R/W 0: Do not return automatically, 1: Automatically return after 1 minute
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} lcd automatically returns to the homepage"
use_write_multiple: true
address: 306
register_type: holding
bitmask: 1
# Energy-saving mode Uint 307 1 R/W 0: Energy-saving mode is off, 1: Energy-saving mode is on
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} energy-saving mode"
use_write_multiple: true
address: 307
register_type: holding
bitmask: 1
# Overload automatic restart Uint 308 1 R/W 0: Overload failure will not restart, 1: Automatic restart after overload failure
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} overload automatic restart"
use_write_multiple: true
address: 308
register_type: holding
bitmask: 1
# Over temperature automatic restart Uint 309 1 R/W 0: Over temperature failure will not restart, 1: Automatic restart after over-temperature fault
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} over temperature automatic restart"
use_write_multiple: true
address: 309
register_type: holding
bitmask: 1
# Overload transfer to bypass enabled Uint 310 1 R/W 0: Disable, 1: Enable
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} overload transfer to bypass enabled"
use_write_multiple: true
address: 310
register_type: holding
bitmask: 1
# Battery Eq mode is enabled Uint 313 1 R/W 0: Disable, 1: Enable
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} battery Eq mode is enabled"
use_write_multiple: true
address: 313
register_type: holding
bitmask: 1
# Remote switch Uint 420 1 R/W 0: Remote shutdown, 1: Remote turn-on
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} remote switch"
use_write_multiple: true
address: 420
register_type: holding
bitmask: 1
### smg1
# LCD automatically returns to the homepage Uint 306 1 R/W 0: Do not return automatically, 1: Automatically return after 1 minute
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} lcd automatically returns to the homepage"
use_write_multiple: true
address: 306
register_type: holding
bitmask: 1
# Energy-saving mode Uint 307 1 R/W 0: Energy-saving mode is off, 1: Energy-saving mode is on
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} energy-saving mode"
use_write_multiple: true
address: 307
register_type: holding
bitmask: 1
# Overload automatic restart Uint 308 1 R/W 0: Overload failure will not restart, 1: Automatic restart after overload failure
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} overload automatic restart"
use_write_multiple: true
address: 308
register_type: holding
bitmask: 1
# Over temperature automatic restart Uint 309 1 R/W 0: Over temperature failure will not restart, 1: Automatic restart after over-temperature fault
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} over temperature automatic restart"
use_write_multiple: true
address: 309
register_type: holding
bitmask: 1
# Overload transfer to bypass enabled Uint 310 1 R/W 0: Disable, 1: Enable
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} overload transfer to bypass enabled"
use_write_multiple: true
address: 310
register_type: holding
bitmask: 1
# Battery Eq mode is enabled Uint 313 1 R/W 0: Disable, 1: Enable
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} battery Eq mode is enabled"
use_write_multiple: true
address: 313
register_type: holding
bitmask: 1
# Remote switch Uint 420 1 R/W 0: Remote shutdown, 1: Remote turn-on
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} remote switch"
use_write_multiple: true
address: 420
register_type: holding
bitmask: 1
text_sensor:
### smg0
# Fault code ULong 100 2 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} fault"
address: 100
register_type: holding
register_count: 2
response_size: 4
raw_encode: HEXBYTES
lambda: |-
static const uint8_t FAULTS_SIZE = 27;
static const char *const FAULTS[FAULTS_SIZE] = {
"Over temperature of inverter module", // 0000 0000 0000 0000 0000 0000 0000 0001 (1)
"Over temperature of DCDC module", // 0000 0000 0000 0000 0000 0000 0000 0010 (2)
"Battery over voltage", // 0000 0000 0000 0000 0000 0000 0000 0100 (3)
"PV module over temperature", // 0000 0000 0000 0000 0000 0000 0000 1000 (4)
"Output short circuit", // 0000 0000 0000 0000 0000 0000 0001 0000 (5)
"Inverter over voltage", // 0000 0000 0000 0000 0000 0000 0010 0000 (6)
"Output over load", // 0000 0000 0000 0000 0000 0000 0100 0000 (7)
"Bus over voltage", // 0000 0000 0000 0000 0000 0000 1000 0000 (8)
"Bus soft start timed out", // 0000 0000 0000 0000 0000 0001 0000 0000 (9)
"PV over current", // 0000 0000 0000 0000 0000 0010 0000 0000 (10)
"PV over voltage", // 0000 0000 0000 0000 0000 0100 0000 0000 (11)
"Battery over current", // 0000 0000 0000 0000 0000 1000 0000 0000 (12)
"Inverter over current", // 0000 0000 0000 0000 0001 0000 0000 0000 (13)
"Bus low voltage", // 0000 0000 0000 0000 0010 0000 0000 0000 (14)
"Reserve (Bit 15)", // 0000 0000 0000 0000 0100 0000 0000 0000 (15)
"Inverter DC component is too high", // 0000 0000 0000 0000 1000 0000 0000 0000 (16)
"Reserve (Bit 17)", // 0000 0000 0000 0001 0000 0000 0000 0000 (17)
"The zero bias of output current is too large", // 0000 0000 0000 0010 0000 0000 0000 0000 (18)
"The zero bias of inverter current is too large", // 0000 0000 0000 0100 0000 0000 0000 0000 (19)
"The zero bias of battery current is too large", // 0000 0000 0000 1000 0000 0000 0000 0000 (20)
"The zero bias of PV current is too large", // 0000 0000 0001 0000 0000 0000 0000 0000 (21)
"Inverter low voltage", // 0000 0000 0010 0000 0000 0000 0000 0000 (22)
"Inverter negative power protection", // 0000 0000 0100 0000 0000 0000 0000 0000 (23)
"The host in the parallel system is lost", // 0000 0000 1000 0000 0000 0000 0000 0000 (24)
"Synchronization signal abnormal in the parallel system", // 0000 0001 0000 0000 0000 0000 0000 0000 (25)
"The battery type is incompatible", // 0000 0010 0000 0000 0000 0000 0000 0000 (26)
"Parallel versions are incompatible", // 0000 0100 0000 0000 0000 0000 0000 0000 (27)
};
std::string values = "";
uint32_t mask = modbus_controller::dword_from_hex_str(x, 0);
if (mask) {
for (int i = 0; i < FAULTS_SIZE; i++) {
if (mask & (1 << i)) {
values.append(FAULTS[i]);
values.append(";");
}
}
if (!values.empty()) {
values.pop_back();
}
}
return values;
# Warning code ULong 108 2 R
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} fault"
address: 100
register_type: holding
register_count: 2
response_size: 4
raw_encode: HEXBYTES
lambda: |-
static const uint8_t WARNINGS_SIZE = 19;
static const char *const WARNINGS[WARNINGS_SIZE] = {
"Reserve (Bit 0)", // 0000 0000 0000 0000 0000 0000 0000 0001 (1)
"Mains waveform abnormal", // 0000 0000 0000 0000 0000 0000 0000 0010 (2)
"Reserve (Bit 2)", // 0000 0000 0000 0000 0000 0000 0000 0100 (3)
"Mains low voltage", // 0000 0000 0000 0000 0000 0000 0000 1000 (4)
"Mains over frequency", // 0000 0000 0000 0000 0000 0000 0001 0000 (5)
"Mains low frequency", // 0000 0000 0000 0000 0000 0000 0010 0000 (6)
"PV low voltage", // 0000 0000 0000 0000 0000 0000 0100 0000 (7)
"Over temperature", // 0000 0000 0000 0000 0000 0000 1000 0000 (8)
"Battery low voltage", // 0000 0000 0000 0000 0000 0001 0000 0000 (9)
"Battery is not connected", // 0000 0000 0000 0000 0000 0010 0000 0000 (10)
"Overload", // 0000 0000 0000 0000 0000 0100 0000 0000 (11)
"Battery Eq charging", // 0000 0000 0000 0000 0000 1000 0000 0000 (12)
"Battery undervoltage", // 0000 0000 0000 0000 0001 0000 0000 0000 (13)
"Output power derating", // 0000 0000 0000 0000 0010 0000 0000 0000 (14)
"Fan blocked", // 0000 0000 0000 0000 0100 0000 0000 0000 (15)
"PV energy is too low to be use", // 0000 0000 0000 0000 1000 0000 0000 0000 (16)
"Parallel communication interrupted", // 0000 0000 0000 0001 0000 0000 0000 0000 (17)
"Output mode of Single and Parallel systems inconsistent", // 0000 0000 0000 0010 0000 0000 0000 0000 (18)
"Battery voltage difference of parallel system is too large", // 0000 0000 0000 0100 0000 0000 0000 0000 (19)
};
std::string values = "";
uint32_t mask = modbus_controller::dword_from_hex_str(x, 0);
if (mask) {
for (int i = 0; i < WARNINGS_SIZE; i++) {
if (mask & (1 << i)) {
values.append(WARNINGS[i]);
values.append(";");
}
}
if (!values.empty()) {
values.pop_back();
}
}
return values;
# Operation Mode UInt 201 1 R 0: Power On, 1: Standby, 2: Mains, 3: Off-Grid, 4: Bypass, 5: Charging, 6: Fault
- platform: modbus_controller
modbus_controller_id: smg0
name: "${smg0} operation mode"
address: 201
register_type: holding
raw_encode: HEXBYTES
lambda: |-
uint16_t value = modbus_controller::word_from_hex_str(x, 0);
switch (value) {
case 0: return std::string("Power On");
case 1: return std::string("Standby");
case 2: return std::string("Mains");
case 3: return std::string("Off-Grid");
case 4: return std::string("Bypass");
case 5: return std::string("Charging");
case 6: return std::string("Fault");
}
return std::string("Unknown");
### smg1
# Fault code ULong 100 2 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} fault"
address: 100
register_type: holding
register_count: 2
response_size: 4
raw_encode: HEXBYTES
lambda: |-
static const uint8_t FAULTS_SIZE = 27;
static const char *const FAULTS[FAULTS_SIZE] = {
"Over temperature of inverter module", // 0000 0000 0000 0000 0000 0000 0000 0001 (1)
"Over temperature of DCDC module", // 0000 0000 0000 0000 0000 0000 0000 0010 (2)
"Battery over voltage", // 0000 0000 0000 0000 0000 0000 0000 0100 (3)
"PV module over temperature", // 0000 0000 0000 0000 0000 0000 0000 1000 (4)
"Output short circuit", // 0000 0000 0000 0000 0000 0000 0001 0000 (5)
"Inverter over voltage", // 0000 0000 0000 0000 0000 0000 0010 0000 (6)
"Output over load", // 0000 0000 0000 0000 0000 0000 0100 0000 (7)
"Bus over voltage", // 0000 0000 0000 0000 0000 0000 1000 0000 (8)
"Bus soft start timed out", // 0000 0000 0000 0000 0000 0001 0000 0000 (9)
"PV over current", // 0000 0000 0000 0000 0000 0010 0000 0000 (10)
"PV over voltage", // 0000 0000 0000 0000 0000 0100 0000 0000 (11)
"Battery over current", // 0000 0000 0000 0000 0000 1000 0000 0000 (12)
"Inverter over current", // 0000 0000 0000 0000 0001 0000 0000 0000 (13)
"Bus low voltage", // 0000 0000 0000 0000 0010 0000 0000 0000 (14)
"Reserve (Bit 15)", // 0000 0000 0000 0000 0100 0000 0000 0000 (15)
"Inverter DC component is too high", // 0000 0000 0000 0000 1000 0000 0000 0000 (16)
"Reserve (Bit 17)", // 0000 0000 0000 0001 0000 0000 0000 0000 (17)
"The zero bias of output current is too large", // 0000 0000 0000 0010 0000 0000 0000 0000 (18)
"The zero bias of inverter current is too large", // 0000 0000 0000 0100 0000 0000 0000 0000 (19)
"The zero bias of battery current is too large", // 0000 0000 0000 1000 0000 0000 0000 0000 (20)
"The zero bias of PV current is too large", // 0000 0000 0001 0000 0000 0000 0000 0000 (21)
"Inverter low voltage", // 0000 0000 0010 0000 0000 0000 0000 0000 (22)
"Inverter negative power protection", // 0000 0000 0100 0000 0000 0000 0000 0000 (23)
"The host in the parallel system is lost", // 0000 0000 1000 0000 0000 0000 0000 0000 (24)
"Synchronization signal abnormal in the parallel system", // 0000 0001 0000 0000 0000 0000 0000 0000 (25)
"The battery type is incompatible", // 0000 0010 0000 0000 0000 0000 0000 0000 (26)
"Parallel versions are incompatible", // 0000 0100 0000 0000 0000 0000 0000 0000 (27)
};
std::string values = "";
uint32_t mask = modbus_controller::dword_from_hex_str(x, 0);
if (mask) {
for (int i = 0; i < FAULTS_SIZE; i++) {
if (mask & (1 << i)) {
values.append(FAULTS[i]);
values.append(";");
}
}
if (!values.empty()) {
values.pop_back();
}
}
return values;
# Warning code ULong 108 2 R
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} fault"
address: 100
register_type: holding
register_count: 2
response_size: 4
raw_encode: HEXBYTES
lambda: |-
static const uint8_t WARNINGS_SIZE = 19;
static const char *const WARNINGS[WARNINGS_SIZE] = {
"Reserve (Bit 0)", // 0000 0000 0000 0000 0000 0000 0000 0001 (1)
"Mains waveform abnormal", // 0000 0000 0000 0000 0000 0000 0000 0010 (2)
"Reserve (Bit 2)", // 0000 0000 0000 0000 0000 0000 0000 0100 (3)
"Mains low voltage", // 0000 0000 0000 0000 0000 0000 0000 1000 (4)
"Mains over frequency", // 0000 0000 0000 0000 0000 0000 0001 0000 (5)
"Mains low frequency", // 0000 0000 0000 0000 0000 0000 0010 0000 (6)
"PV low voltage", // 0000 0000 0000 0000 0000 0000 0100 0000 (7)
"Over temperature", // 0000 0000 0000 0000 0000 0000 1000 0000 (8)
"Battery low voltage", // 0000 0000 0000 0000 0000 0001 0000 0000 (9)
"Battery is not connected", // 0000 0000 0000 0000 0000 0010 0000 0000 (10)
"Overload", // 0000 0000 0000 0000 0000 0100 0000 0000 (11)
"Battery Eq charging", // 0000 0000 0000 0000 0000 1000 0000 0000 (12)
"Battery undervoltage", // 0000 0000 0000 0000 0001 0000 0000 0000 (13)
"Output power derating", // 0000 0000 0000 0000 0010 0000 0000 0000 (14)
"Fan blocked", // 0000 0000 0000 0000 0100 0000 0000 0000 (15)
"PV energy is too low to be use", // 0000 0000 0000 0000 1000 0000 0000 0000 (16)
"Parallel communication interrupted", // 0000 0000 0000 0001 0000 0000 0000 0000 (17)
"Output mode of Single and Parallel systems inconsistent", // 0000 0000 0000 0010 0000 0000 0000 0000 (18)
"Battery voltage difference of parallel system is too large", // 0000 0000 0000 0100 0000 0000 0000 0000 (19)
};
std::string values = "";
uint32_t mask = modbus_controller::dword_from_hex_str(x, 0);
if (mask) {
for (int i = 0; i < WARNINGS_SIZE; i++) {
if (mask & (1 << i)) {
values.append(WARNINGS[i]);
values.append(";");
}
}
if (!values.empty()) {
values.pop_back();
}
}
return values;
# Operation Mode UInt 201 1 R 0: Power On, 1: Standby, 2: Mains, 3: Off-Grid, 4: Bypass, 5: Charging, 6: Fault
- platform: modbus_controller
modbus_controller_id: smg1
name: "${smg1} operation mode"
address: 201
register_type: holding
raw_encode: HEXBYTES
lambda: |-
uint16_t value = modbus_controller::word_from_hex_str(x, 0);
switch (value) {
case 0: return std::string("Power On");
case 1: return std::string("Standby");
case 2: return std::string("Mains");
case 3: return std::string("Off-Grid");
case 4: return std::string("Bypass");
case 5: return std::string("Charging");
case 6: return std::string("Fault");
}
return std::string("Unknown");
Hmm.. I use this webseite to verify which GPIOs are safe to use: https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
Your GPIOs aren't in use for ESP boot configurations etc.
tx_pin: GPIO16
rx_pin: GPIO17
tx_pin2: GPIO32
rx_pin2: GPIO33
The root cause of the issue must be something else. Does your ESP32 board have an USB connector?
Just found this amazing item on AliExpress. Check it out! грн.89.01 | ESP32 Development Board WiFi+Bluetooth Ultra-Low Power Consumption Dual Core CPU ESP-32S ESP32-CAM ESP-WROOM-32D/U CH9102X https://a.aliexpress.com/_Ez1nvBr
Which board do you use exactly?
esp32 38p
Could you attach a laptop to the ESP and try to retrieve the log using the USB cable? You can use this page: https://web.esphome.io
I would be happy about a log which contains both states (working communication vs. no communication possible).
Good day, I have two inverters connected to one esp32. I want to split esp32 into two. Please provide a sample code for this operation. Because I understand that if I fill in two identical codes, it will not work like that.
Maybe this way the work will become more stable.
Can you help me with the written code?
Please use this example on both ESPs: https://github.com/syssi/esphome-smg-ii/blob/main/esp32-example.yaml
Just change the second line:
substitutions:
name: smg-ii-first
substitutions:
name: smg-ii-second
That's all!
uart:
modbus:
modbus_controller:
then leave it unchanged?
Yes. The RS232 converter must be attached to
tx_pin: GPIO16
rx_pin: GPIO17
in both cases.
installed esp32 cream for each inverter and everything works stably. so there is some problem in the firmware for the two inverters.
Let's close this issue.
I have this version installed esp32-example-advanced-multiple-uarts.yaml. when I disconnect and then connect the power from esp, then the data exchange is lost. The only option to start data exchange is to remove the plug from the inverter and then insert it again.