I have three inverters and the code works fine up to summing all three values. However, the last energy distribution code is not working. My whole code is in sensors.yaml file.
## X1a ##
- platform: rest
resource: https://www.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId=4444444yyyyyyyyyyyy&sn=SWXXXXXXXX
name: "Solax X1a"
json_attributes_path: "$.result"
json_attributes:
- yieldtoday
- yieldtotal
- acpower
- uploadTime
- inverterStatus
value_template: '1' # dummy value, not used; avoids the "State max length is 255 characters" error
- platform: template
sensors:
solax_x1a_today:
friendly_name: "Solax X1a today"
value_template: "{{ state_attr('sensor.solax_x1a', 'yieldtoday') }}"
unit_of_measurement: "KWh"
solax_x1a_total:
friendly_name: "Solax X1a total"
value_template: "{{ state_attr('sensor.solax_x1a', 'yieldtotal') }}"
unit_of_measurement: "KWh"
solax_x1a_now:
friendly_name: "Solax X1a now"
value_template: "{{ state_attr('sensor.solax_x1a', 'acpower') }}"
unit_of_measurement: "W"
solax_x1a_upload_time:
friendly_name: "Solax X1a upload time"
value_template: "{{ state_attr('sensor.solax_x1a', 'uploadTime') }}"
solax_x1a_status:
friendly_name: "Solax X1 status"
value_template: >
{% if state_attr('sensor.solax_x1a', 'inverterStatus') == '100' %}Wait
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '101' %}Check
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '102' %}Normal
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '103' %}Fault
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '104' %}Permanent Fault
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '105' %}Update
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '106' %}EPS Check
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '107' %}EPS
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '108' %}Self-test
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '109' %}Idle
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '110' %}Standby
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '111' %}Pv Wake Up Bat
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '112' %}Gen Check
{% elif state_attr('sensor.solax_x1a', 'inverterStatus') == '113' %}Gen Run
{% else %}I dont know{% endif %}
## X1b ##
- platform: rest
resource: https://www.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId=4444444yyyyyyyyyyyy&sn=SWXXXXXXXX
name: "Solax X1b"
json_attributes_path: "$.result"
json_attributes:
- yieldtoday
- yieldtotal
- acpower
- uploadTime
- inverterStatus
value_template: '1' # dummy value, not used; avoids the "State max length is 255 characters" error
- platform: template
sensors:
solax_x1b_today:
friendly_name: "Solax X1b today"
value_template: "{{ state_attr('sensor.solax_x1b', 'yieldtoday') }}"
unit_of_measurement: "KWh"
solax_x1b_total:
friendly_name: "Solax X1b total"
value_template: "{{ state_attr('sensor.solax_x1b', 'yieldtotal') }}"
unit_of_measurement: "KWh"
solax_x1b_now:
friendly_name: "Solax X1b now"
value_template: "{{ state_attr('sensor.solax_x1b', 'acpower') }}"
unit_of_measurement: "W"
solax_x1b_upload_time:
friendly_name: "Solax X1b upload time"
value_template: "{{ state_attr('sensor.solax_x1b', 'uploadTime') }}"
solax_x1b_status:
friendly_name: "Solax X1b status"
value_template: >
{% if state_attr('sensor.solax_x1b', 'inverterStatus') == '100' %}Wait
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '101' %}Check
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '102' %}Normal
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '103' %}Fault
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '104' %}Permanent Fault
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '105' %}Update
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '106' %}EPS Check
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '107' %}EPS
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '108' %}Self-test
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '109' %}Idle
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '110' %}Standby
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '111' %}Pv Wake Up Bat
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '112' %}Gen Check
{% elif state_attr('sensor.solax_x1b', 'inverterStatus') == '113' %}Gen Run
{% else %}I dont know{% endif %}
## X1h ##
- platform: rest
resource: https://www.solaxcloud.com:9443/proxy/api/getRealtimeInfo.do?tokenId=4444444yyyyyyyyyyyy&sn=SWXXXXXXXX
name: "Solax X1h"
json_attributes_path: "$.result"
json_attributes:
- yieldtoday
- yieldtotal
- acpower
- uploadTime
- inverterStatus
value_template: '1' # dummy value, not used; avoids the "State max length is 255 characters" error
- platform: template
sensors:
solax_x1h_today:
friendly_name: "Solax X1h today"
value_template: "{{ state_attr('sensor.solax_x1h', 'yieldtoday') }}"
unit_of_measurement: "KWh"
solax_x1h_total:
friendly_name: "Solax X1h total"
value_template: "{{ state_attr('sensor.solax_x1h', 'yieldtotal') }}"
unit_of_measurement: "KWh"
solax_x1h_now:
friendly_name: "Solax X1h now"
value_template: "{{ state_attr('sensor.solax_x1h', 'acpower') }}"
unit_of_measurement: "W"
solax_x1h_upload_time:
friendly_name: "Solax X1h upload time"
value_template: "{{ state_attr('sensor.solax_x1h', 'uploadTime') }}"
solax_x1h_status:
friendly_name: "Solax X1h status"
value_template: >
{% if state_attr('sensor.solax_x1h', 'inverterStatus') == '100' %}Wait
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '101' %}Check
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '102' %}Normal
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '103' %}Fault
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '104' %}Permanent Fault
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '105' %}Update
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '106' %}EPS Check
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '107' %}EPS
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '108' %}Self-test
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '109' %}Idle
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '110' %}Standby
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '111' %}Pv Wake Up Bat
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '112' %}Gen Check
{% elif state_attr('sensor.solax_x1h', 'inverterStatus') == '113' %}Gen Run
{% else %}I dont know{% endif %}
- platform: template
sensors:
solax_today:
friendly_name: Solax today
unit_of_measurement: kWh
value_template: "{{ (states('sensor.solax_x1a_today') | float) + (states('sensor.solax_x1b_today') | float) + (states('sensor.solax_x1h_today') | float)}}"
solax_now:
friendly_name: Solax now
unit_of_measurement: W
value_template: "{{ (states('sensor.solax_x1a_now') | float) + (states('sensor.solax_x1b_now') | float) + (states('sensor.solax_x1h_now') | float) }}"
solax_total:
friendly_name: Solax total
unit_of_measurement: KWh
value_template: "{{ (states('sensor.solax_x1a_total') | float) + (states('sensor.solax_x1b_total') | float) + (states('sensor.solax_x1h_total') | float) }}"
- platform: template
sensors:
name: test_energy
state: "{{ states('sensor.solax_total') }}"
unit_of_measurement: 'kWh'
state_class: measurement
device_class: energy
attributes:
last_reset: '1970-01-01T00:00:00+00:0'
I get the following error:
Invalid config for [sensor.template]: expected dictionary for dictionary value @ data['sensors']['device_class']. Got 'energy'
expected dictionary for dictionary value @ data['sensors']['name']. Got 'test_energy'
expected dictionary for dictionary value @ data['sensors']['state']. Got "{{ states('sensor.solax_total') }}"
expected dictionary for dictionary value @ data['sensors']['state_class']. Got 'measurement'
expected dictionary for dictionary value @ data['sensors']['unit_of_measurement']. Got 'kWh'
extra keys not allowed @ data['sensors']['attributes']['last_reset']. Got '1970-01-01T00:00:00+00:0'
required key not provided @ data['sensors']['attributes']['value_template']. Got None. (See ?, line ?).