Home Assistant Git Exporter
parent
b1ff0647a9
commit
6617df672a
|
@ -28,6 +28,13 @@
|
||||||
# hub: SungrowSHx
|
# hub: SungrowSHx
|
||||||
# mode: single
|
# mode: single
|
||||||
|
|
||||||
|
input_boolean:
|
||||||
|
inverter_charging_schedule_enabled:
|
||||||
|
initial: true
|
||||||
|
name: Inverter charging schedule enabled
|
||||||
|
inverter_charging_schedule_2_enabled:
|
||||||
|
initial: true
|
||||||
|
name: Inverter charging schedule 2 enabled
|
||||||
input_datetime:
|
input_datetime:
|
||||||
inverter_charging_schedule_start:
|
inverter_charging_schedule_start:
|
||||||
has_time: true
|
has_time: true
|
||||||
|
@ -36,13 +43,29 @@ input_datetime:
|
||||||
inverter_charging_schedule_end:
|
inverter_charging_schedule_end:
|
||||||
has_time: true
|
has_time: true
|
||||||
name: Inverter charging schedule end
|
name: Inverter charging schedule end
|
||||||
initial: "14:59:00"
|
initial: "15:00:00"
|
||||||
|
inverter_charging_schedule_2_start:
|
||||||
|
has_time: true
|
||||||
|
name: Inverter charging schedule 2 start
|
||||||
|
initial: "00:00:00"
|
||||||
|
inverter_charging_schedule_2_end:
|
||||||
|
has_time: true
|
||||||
|
name: Inverter charging schedule 2 end
|
||||||
|
initial: "00:00:00"
|
||||||
input_number:
|
input_number:
|
||||||
inverter_charging_schedule_target_soc:
|
inverter_charging_schedule_target_soc:
|
||||||
name: Inverter charging target state of charge
|
name: Inverter charging schedule target state of charge
|
||||||
min: 0
|
min: 0
|
||||||
max: 100
|
max: 100
|
||||||
unit_of_measurement: "%"
|
unit_of_measurement: "%"
|
||||||
|
initial: 85
|
||||||
|
mode: box
|
||||||
|
inverter_charging_schedule_2_target_soc:
|
||||||
|
name: Inverter charging schedule 2 target state of charge
|
||||||
|
min: 0
|
||||||
|
max: 100
|
||||||
|
unit_of_measurement: "%"
|
||||||
|
initial: 0
|
||||||
mode: box
|
mode: box
|
||||||
inverter_battery_reserve:
|
inverter_battery_reserve:
|
||||||
name: Inverter battery reserve
|
name: Inverter battery reserve
|
||||||
|
@ -59,21 +82,74 @@ automation:
|
||||||
trigger:
|
trigger:
|
||||||
- platform: state
|
- platform: state
|
||||||
entity_id:
|
entity_id:
|
||||||
|
# Explicit enables
|
||||||
|
- input_boolean.inverter_charging_schedule_enabled
|
||||||
|
- input_boolean.inverter_charging_schedule_2_enabled
|
||||||
|
|
||||||
|
# Schedule 1 details
|
||||||
- input_datetime.inverter_charging_schedule_start
|
- input_datetime.inverter_charging_schedule_start
|
||||||
- input_datetime.inverter_charging_schedule_end
|
- input_datetime.inverter_charging_schedule_end
|
||||||
- input_number.inverter_charging_schedule_target_soc
|
- input_number.inverter_charging_schedule_target_soc
|
||||||
|
|
||||||
|
# Schedule 2 details
|
||||||
|
- input_datetime.inverter_charging_schedule_2_start
|
||||||
|
- input_datetime.inverter_charging_schedule_2_end
|
||||||
|
- input_number.inverter_charging_schedule_2_target_soc
|
||||||
not_from:
|
not_from:
|
||||||
- unknown
|
- unknown
|
||||||
- unavailable
|
- unavailable
|
||||||
not_to:
|
not_to:
|
||||||
- unknown
|
- unknown
|
||||||
- unavailable
|
- unavailable
|
||||||
|
|
||||||
|
# I have a theory that being in a schedule window prevents the battery from discharging, EVEN IF the SoC is above
|
||||||
|
# the target. As such, this automation will also run when the battery level crosses any threshold here and the
|
||||||
|
# `enabled_1` and `enabled_2` variables below will take this into consideration. In other words, the schedules
|
||||||
|
# will be automatically turned off when the charge level reaches target, and switched back on if it falls below.
|
||||||
|
- platform: numeric_state
|
||||||
|
entity_id: sensor.inverter_battery_level
|
||||||
|
above: input_number.inverter_charging_schedule_target_soc
|
||||||
|
- platform: numeric_state
|
||||||
|
entity_id: sensor.inverter_battery_level
|
||||||
|
above: input_number.inverter_charging_schedule_2_target_soc
|
||||||
|
- platform: numeric_state
|
||||||
|
entity_id: sensor.inverter_battery_level
|
||||||
|
below: input_number.inverter_charging_schedule_target_soc
|
||||||
|
- platform: numeric_state
|
||||||
|
entity_id: sensor.inverter_battery_level
|
||||||
|
below: input_number.inverter_charging_schedule_2_target_soc
|
||||||
|
variables:
|
||||||
|
enabled_1: |
|
||||||
|
{{ is_state('input_boolean.inverter_charging_schedule_enabled', 'on') and
|
||||||
|
states('input_number.inverter_charging_schedule_target_soc') | float(default = 0) > states('sensor.inverter_battery_level') | float(default = 0) and
|
||||||
|
not is_state('input_datetime.inverter_charging_schedule_start', 'unknown') and
|
||||||
|
not is_state('input_datetime.inverter_charging_schedule_end', 'unknown')
|
||||||
|
}}
|
||||||
|
enabled_2: |
|
||||||
|
{{ is_state('input_boolean.inverter_charging_schedule_2_enabled', 'on') and
|
||||||
|
states('input_number.inverter_charging_schedule_2_target_soc') | float(default = 0) > states('sensor.inverter_battery_level') | float(default = 0) and
|
||||||
|
not is_state('input_datetime.inverter_charging_schedule_start', 'unknown') and
|
||||||
|
not is_state('input_datetime.inverter_charging_schedule_end', 'unknown')
|
||||||
|
}}
|
||||||
action:
|
action:
|
||||||
- service: script.apply_charging_schedule
|
- service: script.apply_charging_schedule
|
||||||
data_template:
|
data_template:
|
||||||
soc_1: "{{ states('input_number.inverter_charging_schedule_target_soc') | int }}"
|
soc_1: |
|
||||||
start_time_1: "{{ states('input_datetime.inverter_charging_schedule_start') }}"
|
{% if enabled_1 %}
|
||||||
end_time_1: "{{ states('input_datetime.inverter_charging_schedule_end') }}"
|
{{ states('input_number.inverter_charging_schedule_target_soc') | int }}
|
||||||
|
{% else %}
|
||||||
|
0
|
||||||
|
{% endif %}
|
||||||
|
start_time_1: "{{ states('input_datetime.inverter_charging_schedule_start') | replace('unknown','00:00') }}"
|
||||||
|
end_time_1: "{{ states('input_datetime.inverter_charging_schedule_end') | replace('unknown','00:00') }}"
|
||||||
|
soc_2: |
|
||||||
|
{% if enabled_2 %}
|
||||||
|
{{ states('input_number.inverter_charging_schedule_2_target_soc') | int }}
|
||||||
|
{% else %}
|
||||||
|
0
|
||||||
|
{% endif %}
|
||||||
|
start_time_2: "{{ states('input_datetime.inverter_charging_2_schedule_start') | replace('unknown','00:00') }}"
|
||||||
|
end_time_2: "{{ states('input_datetime.inverter_charging_2_schedule_end') | replace('unknown','00:00') }}"
|
||||||
|
|
||||||
- id: 7b93d325bfe632a4e890
|
- id: 7b93d325bfe632a4e890
|
||||||
alias: Inverter - update battery reserve
|
alias: Inverter - update battery reserve
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
"battery": 44,
|
"battery": 44,
|
||||||
"temperature": 17,
|
"temperature": 17,
|
||||||
"linkquality": 255,
|
"linkquality": 255,
|
||||||
"device_temperature": 16,
|
"device_temperature": 20,
|
||||||
"power_outage_count": 7
|
"power_outage_count": 7
|
||||||
},
|
},
|
||||||
"0x00158d0007e7725b": {
|
"0x00158d0007e7725b": {
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
"battery": 36,
|
"battery": 36,
|
||||||
"temperature": 18,
|
"temperature": 18,
|
||||||
"linkquality": 255,
|
"linkquality": 255,
|
||||||
"device_temperature": 20,
|
"device_temperature": 21,
|
||||||
"power_outage_count": 8
|
"power_outage_count": 8
|
||||||
},
|
},
|
||||||
"0x00158d0008091b58": {
|
"0x00158d0008091b58": {
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
"battery": 50,
|
"battery": 50,
|
||||||
"temperature": 12,
|
"temperature": 12,
|
||||||
"linkquality": 255,
|
"linkquality": 255,
|
||||||
"device_temperature": 15,
|
"device_temperature": 16,
|
||||||
"power_outage_count": 13
|
"power_outage_count": 13
|
||||||
},
|
},
|
||||||
"0x00158d0007e4c4f2": {
|
"0x00158d0007e4c4f2": {
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
"battery": 36,
|
"battery": 36,
|
||||||
"temperature": 21,
|
"temperature": 21,
|
||||||
"linkquality": 255,
|
"linkquality": 255,
|
||||||
"device_temperature": 21,
|
"device_temperature": 24,
|
||||||
"power_outage_count": 41
|
"power_outage_count": 41
|
||||||
},
|
},
|
||||||
"0x5c0272fffee93bae": {
|
"0x5c0272fffee93bae": {
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
"battery": 100,
|
"battery": 100,
|
||||||
"sensitivity": "high",
|
"sensitivity": "high",
|
||||||
"keep_time": "120",
|
"keep_time": "120",
|
||||||
"illuminance": 874,
|
"illuminance": 850,
|
||||||
"linkquality": 127
|
"linkquality": 127
|
||||||
},
|
},
|
||||||
"0x84b4dbfffe850fda": {
|
"0x84b4dbfffe850fda": {
|
||||||
|
|
|
@ -332,14 +332,62 @@ config:
|
||||||
- badges: []
|
- badges: []
|
||||||
cards:
|
cards:
|
||||||
- entities:
|
- entities:
|
||||||
- label: Charge schedule
|
- label: Charge schedule 1
|
||||||
type: section
|
type: section
|
||||||
- entity: input_datetime.inverter_charging_schedule_start
|
- entity: input_boolean.inverter_charging_schedule_enabled
|
||||||
name: Start charging at
|
name: Enable
|
||||||
- entity: input_datetime.inverter_charging_schedule_end
|
- conditions:
|
||||||
name: Finish charging at
|
- entity: input_boolean.inverter_charging_schedule_enabled
|
||||||
- entity: input_number.inverter_charging_schedule_target_soc
|
state: 'on'
|
||||||
name: Charge until
|
row:
|
||||||
|
entity: input_datetime.inverter_charging_schedule_start
|
||||||
|
icon: mdi:calendar-start
|
||||||
|
name: Start charging at
|
||||||
|
type: conditional
|
||||||
|
- conditions:
|
||||||
|
- entity: input_boolean.inverter_charging_schedule_enabled
|
||||||
|
state: 'on'
|
||||||
|
row:
|
||||||
|
entity: input_datetime.inverter_charging_schedule_end
|
||||||
|
icon: mdi:calendar-end
|
||||||
|
name: Finish charging at
|
||||||
|
type: conditional
|
||||||
|
- conditions:
|
||||||
|
- entity: input_boolean.inverter_charging_schedule_enabled
|
||||||
|
state: 'on'
|
||||||
|
row:
|
||||||
|
entity: input_number.inverter_charging_schedule_target_soc
|
||||||
|
icon: mdi:battery-arrow-up
|
||||||
|
name: Charge until
|
||||||
|
type: conditional
|
||||||
|
- label: Charge schedule 2
|
||||||
|
type: section
|
||||||
|
- entity: input_boolean.inverter_charging_schedule_2_enabled
|
||||||
|
name: Enable
|
||||||
|
- conditions:
|
||||||
|
- entity: input_boolean.inverter_charging_schedule_2_enabled
|
||||||
|
state: 'on'
|
||||||
|
row:
|
||||||
|
entity: input_datetime.inverter_charging_schedule_2_start
|
||||||
|
icon: mdi:calendar-start
|
||||||
|
name: Start charging at
|
||||||
|
type: conditional
|
||||||
|
- conditions:
|
||||||
|
- entity: input_boolean.inverter_charging_schedule_2_enabled
|
||||||
|
state: 'on'
|
||||||
|
row:
|
||||||
|
entity: input_datetime.inverter_charging_schedule_2_end
|
||||||
|
icon: mdi:calendar-end
|
||||||
|
name: Finish charging at
|
||||||
|
type: conditional
|
||||||
|
- conditions:
|
||||||
|
- entity: input_boolean.inverter_charging_schedule_2_enabled
|
||||||
|
state: 'on'
|
||||||
|
row:
|
||||||
|
entity: input_number.inverter_charging_schedule_2_target_soc
|
||||||
|
icon: mdi:battery-arrow-up
|
||||||
|
name: Charge until
|
||||||
|
type: conditional
|
||||||
- label: Misc
|
- label: Misc
|
||||||
type: section
|
type: section
|
||||||
- entity: input_number.inverter_battery_reserve
|
- entity: input_number.inverter_battery_reserve
|
||||||
|
|
Loading…
Reference in New Issue