Hi all,
Following on from a breaking change to the Solis Cloud Platform (and integration) I took the jump to go with MODBUS for my Solis 5G Inverter.
Here’s my code which includes querying a batch of registers then applying to a template - it’s quicker this way and gives me 2 second updates (though you might not need it this high).
First, the MODBUS registers for my specific device:
Solis Energy Storage 6kW Hybrid 5G Inverter with DC switch for On Grid Hybrid for 48V batteries SOL-6K-RHI-48ES-5G-DC
The MODBUS code in my configuration.yam:
modbus:
- name: "solis"
type: tcp
host: 172.22.32.102
port: 8899
sensors:
# - name: solismodbus_33073_33084
# slave: 1
# address: 33073
# count: 12
# input_type: input
# data_type: custom
# lazy_error_count: 5
# scan_interval: 2
# structure: ">HHHHHHlll"
- name: solismodbus_33126_33150
slave: 1
address: 33126
count: 25
input_type: input
data_type: custom
lazy_error_count: 5
scan_interval: 2
structure: ">LHHlHHhHHHHHHHhHHHHHHl"
- name: solismodbus_33161_33180
slave: 1
address: 33161
count: 20
input_type: input
data_type: custom
lazy_error_count: 5
scan_interval: 60
structure: ">LHHLHHLHHLHHLHH"
- name: solismodbus_33251_33286
slave: 1
address: 33251
count: 36
input_type: input
data_type: custom
lazy_error_count: 5
scan_interval: 2
structure: ">HHHHHHllllllllllllhHLL"
- name: solismodbus_33029_33058
slave: 1
address: 33029
count: 30
input_type: input
data_type: custom
lazy_error_count: 5
scan_interval: 2
structure: ">LLLHHLLHHHHHHHHHHHHHHHHL"
- name: solismodbus_33093_temperature
slave: 1
address: 33093
count: 1
input_type: input
data_type: uint16
lazy_error_count: 5
scan_interval: 60
template: !include solis.yaml
And a seperate file with all my sensors that I currently use:
unique_id: solismodbussensors
sensor:
# - name: solismodbus.inverter_line_voltage # 33073
# unique_id: solismodbus.inverter_line_voltage
# state_class: measurement
# device_class: voltage
# unit_of_measurement: V
# state: "{{ (states('sensor.solismodbus_33073_33084').split(',')[0]|float * 0.1) }}"
# - name: solismodbus.inverter_line_current # 33076
# unique_id: solismodbus.inverter_line_current
# state_class: measurement
# device_class: current
# unit_of_measurement: A
# state: "{{ (states('sensor.solismodbus_33073_33084').split(',')[3]|float * 0.1) }}"
# - name: solismodbus.inverter_power # 33079-33080
# unique_id: solismodbus.inverter_power
# state_class: measurement
# device_class: power
# unit_of_measurement: W
# state: "{{ (states('sensor.solismodbus_33073_33084').split(',')[6]) }}"
- name: solismodbus.meter_total_active_power # 33126-33127
unique_id: solismodbus.meter_total_active_power
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[0]|float * 0.001) }}"
- name: solismodbus.meter_voltage # 33128
unique_id: solismodbus.meter_voltage
state_class: measurement
device_class: voltage
unit_of_measurement: V
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[1]|float * 0.1) }}"
- name: solismodbus.meter_current # 33129
unique_id: solismodbus.meter_current
state_class: measurement
device_class: current
unit_of_measurement: A
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[2]|float * 0.01) }}"
- name: solismodbus.meter_power # 33130-33131
unique_id: solismodbus.meter_power
state_class: measurement
device_class: power
unit_of_measurement: W
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[3]| int *-1) }}"
- name: solismodbus.battery_voltage # 33133
unique_id: solismodbus.battery_voltage
state_class: measurement
device_class: voltage
unit_of_measurement: V
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[5]|float * 0.1) }}"
- name: solismodbus.battery_current # 33134
unique_id: solismodbus.battery_current
state_class: measurement
device_class: current
unit_of_measurement: A
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[6]|float * 0.1) }}"
- name: solismodbus.bypass_ac_voltage # 33137
unique_id: solismodbus.bypass_ac_voltage
state_class: measurement
device_class: voltage
unit_of_measurement: V
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[9]|float * 0.1) }}"
- name: solismodbus.bypass_ac_current # 33138
unique_id: solismodbus.bypass_ac_current
state_class: measurement
device_class: current
unit_of_measurement: A
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[10]|float * 0.1) }}"
- name: solismodbus.battery_soc # 33139
unique_id: solismodbus.battery_soc
state_class: measurement
device_class: battery
unit_of_measurement: "%"
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[11]) }}"
- name: solismodbus.battery_soh # 33140
unique_id: solismodbus.battery_soh
state_class: measurement
device_class: battery
unit_of_measurement: "%"
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[12]) }}"
- name: solismodbus.house_load_power # 33147
unique_id: solismodbus.house_load_power
state_class: measurement
device_class: power
unit_of_measurement: W
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[19]) }}"
- name: solismodbus.bypass_load_power # 33148
unique_id: solismodbus.bypass_load_power
state_class: measurement
device_class: power
unit_of_measurement: W
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[20]) }}"
- name: solismodbus.battery_power # 33149-33150
unique_id: solismodbus.battery_power
state_class: measurement
device_class: power
unit_of_measurement: W
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[21]) }}"
- name: solismodbus.battery_total_charge # 33161-33162
unique_id: solismodbus.battery_total_charge
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[0]) }}"
- name: solismodbus.battery_today_charge # 33163
unique_id: solismodbus.battery_today_charge
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[1]|float * 0.1) }}"
- name: solismodbus.battery_total_discharge # 33165-33166
unique_id: solismodbus.battery_total_discharge
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[3]) }}"
- name: solismodbus.battery_today_discharge # 33167
unique_id: solismodbus.battery_today_discharge
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[4]|float * 0.1) }}"
- name: solismodbus.grid_total_imported # 33169-33170
unique_id: solismodbus.grid_total_imported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[6]) }}"
- name: solismodbus.grid_today_imported # 33171
unique_id: solismodbus.grid_today_imported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[7]|float * 0.1) }}"
- name: solismodbus.grid_yesterdayday_imported # 33172
unique_id: solismodbus.grid_yesterdayday_imported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[8]|float * 0.1) }}"
- name: solismodbus.grid_total_exported # 33169-33170
unique_id: solismodbus.grid_total_exported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[9]) }}"
- name: solismodbus.grid_today_exported # 33171
unique_id: solismodbus.grid_today_exported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[10]|float * 0.1) }}"
- name: solismodbus.grid_yesterdayday_exported # 33172
unique_id: solismodbus.grid_yesterdayday_exported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[11]|float * 0.1) }}"
- name: solismodbus.house_load_total # 33169-33170
unique_id: solismodbus.house_load_total
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[12]) }}"
- name: solismodbus.house_load_today # 33171
unique_id: solismodbus.house_load_today
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[13]|float * 0.1) }}"
- name: solismodbus.house_load_yesterday # 33172
unique_id: solismodbus.house_load_yesterday
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33161_33180').split(',')[14]|float * 0.1) }}"
- name: solismodbus.meter_ac_voltage # 33251
unique_id: solismodbus.meter_ac_voltage
state_class: measurement
device_class: voltage
unit_of_measurement: V
state: "{{ (states('sensor.solismodbus_33251_33286').split(',')[0]|float * 0.1) }}"
- name: solismodbus.meter_ac_current # 33252
unique_id: solismodbus.meter_ac_current
state_class: measurement
device_class: current
unit_of_measurement: A
state: "{{ (states('sensor.solismodbus_33251_33286').split(',')[1]|float * 0.01) }}"
- name: solismodbus.meter_active_power # 33257-33258
unique_id: solismodbus.meter_active_power
state_class: measurement
device_class: power
unit_of_measurement: kW
state: "{{ (states('sensor.solismodbus_33251_33286').split(',')[6]) }}"
- name: solismodbus.meter_power_factor # 33281
unique_id: solismodbus.meter_power_factor
state_class: measurement
device_class: power_factor
unit_of_measurement: "%"
state: "{{ (states('sensor.solismodbus_33251_33286').split(',')[18]|float * 0.01) }}"
- name: solismodbus.meter_frequency # 33282
unique_id: solismodbus.meter_frequency
state_class: measurement
device_class: frequency
unit_of_measurement: "Hz"
state: "{{ (states('sensor.solismodbus_33251_33286').split(',')[19]|float * 0.01) }}"
- name: solismodbus.meter_total_imported # 33283-33284
unique_id: solismodbus.meter_total_imported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33251_33286').split(',')[20]|float * 0.01) }}"
- name: solismodbus.meter_total_exported # 33285-33286
unique_id: solismodbus.meter_total_exported
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33251_33286').split(',')[21]|float * 0.01) }}"
- name: solismodbus.inverter_total_generated # 33029-33030
unique_id: solismodbus.inverter_total_generated
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[0]) }}"
- name: solismodbus.inverter_month_generated # 33031-33032
unique_id: solismodbus.inverter_month_generated
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[1]) }}"
- name: solismodbus.inverter_today_generated # 33035
unique_id: solismodbus.inverter_today_generated
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[3]|float * 0.1) }}"
- name: solismodbus.inverter_today_generated # 33036
unique_id: solismodbus.inverter_today_generated
state_class: total_increasing
device_class: energy
unit_of_measurement: kWh
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[4]|float * 0.1) }}"
- name: solismodbus.dc1_voltage # 33049
unique_id: solismodbus.dc1_voltage
state_class: measurement
device_class: voltage
unit_of_measurement: V
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[15]|float * 0.1) }}"
- name: solismodbus.dc1_current # 33050
unique_id: solismodbus.dc1_current
state_class: measurement
device_class: current
unit_of_measurement: A
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[16]|float * 0.1) }}"
- name: solismodbus.dc2_voltage # 33051
unique_id: solismodbus.dc2_voltage
state_class: measurement
device_class: voltage
unit_of_measurement: V
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[17]|float * 0.1) }}"
- name: solismodbus.dc2_current # 33052
unique_id: solismodbus.dc2_current
state_class: measurement
device_class: current
unit_of_measurement: A
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[18]|float * 0.1) }}"
- name: solismodbus.dc_total_power # 33057-33058
unique_id: solismodbus.dc_total_power
state_class: measurement
device_class: power
unit_of_measurement: W
state: "{{ (states('sensor.solismodbus_33029_33058').split(',')[23]|int ) }}"
- name: solismodbus.inverter_temperature # 33093
unique_id: solismodbus.inverter_temperature
state_class: measurement
device_class: temperature
unit_of_measurement: "°C"
state: "{{ (states('sensor.solismodbus_33093_temperature').split(',')[0]|float * 0.1) }}"
- name: solismodbus.battery_direction # 33135
unique_id: solismodbus.battery_direction
state: "{{ (states('sensor.solismodbus_33126_33150').split(',')[7]|int) }}"
- name: solismodbus.battery_charging # 33135
unique_id: solismodbus.battery_charging
state: >
{% if states('sensor.solismodbus_battery_direction') == '1' %}
discharging
{% else %}
charging
{% endif %}
This is a work in progress and I thank everyone else with their contributions as you have masivly helped me to get to this stage.