From 6617df672a337dc90b82832b26423faf9b427793 Mon Sep 17 00:00:00 2001 From: 31c0fe9c6dbd74bcdde92e1d2aaa03e1d272f75f Date: Wed, 24 Aug 2022 16:25:05 +1000 Subject: [PATCH] Home Assistant Git Exporter --- config/packages/sungrow.yaml | 86 +++++++++++++++++++++++++-- config/zigbee2mqtt/state.json | 10 ++-- lovelace/lovelace.lovelace_solar.yaml | 62 ++++++++++++++++--- 3 files changed, 141 insertions(+), 17 deletions(-) diff --git a/config/packages/sungrow.yaml b/config/packages/sungrow.yaml index 593e420..27b7905 100644 --- a/config/packages/sungrow.yaml +++ b/config/packages/sungrow.yaml @@ -28,6 +28,13 @@ # hub: SungrowSHx # 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: inverter_charging_schedule_start: has_time: true @@ -36,13 +43,29 @@ input_datetime: inverter_charging_schedule_end: has_time: true 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: inverter_charging_schedule_target_soc: - name: Inverter charging target state of charge + name: Inverter charging schedule target state of charge min: 0 max: 100 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 inverter_battery_reserve: name: Inverter battery reserve @@ -59,21 +82,74 @@ automation: trigger: - platform: state 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_end - 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: - unknown - unavailable not_to: - unknown - 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: - service: script.apply_charging_schedule data_template: - soc_1: "{{ states('input_number.inverter_charging_schedule_target_soc') | int }}" - start_time_1: "{{ states('input_datetime.inverter_charging_schedule_start') }}" - end_time_1: "{{ states('input_datetime.inverter_charging_schedule_end') }}" + soc_1: | + {% if enabled_1 %} + {{ 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 alias: Inverter - update battery reserve diff --git a/config/zigbee2mqtt/state.json b/config/zigbee2mqtt/state.json index b4ac0b2..8979010 100644 --- a/config/zigbee2mqtt/state.json +++ b/config/zigbee2mqtt/state.json @@ -22,7 +22,7 @@ "battery": 44, "temperature": 17, "linkquality": 255, - "device_temperature": 16, + "device_temperature": 20, "power_outage_count": 7 }, "0x00158d0007e7725b": { @@ -31,7 +31,7 @@ "battery": 36, "temperature": 18, "linkquality": 255, - "device_temperature": 20, + "device_temperature": 21, "power_outage_count": 8 }, "0x00158d0008091b58": { @@ -40,7 +40,7 @@ "battery": 50, "temperature": 12, "linkquality": 255, - "device_temperature": 15, + "device_temperature": 16, "power_outage_count": 13 }, "0x00158d0007e4c4f2": { @@ -49,7 +49,7 @@ "battery": 36, "temperature": 21, "linkquality": 255, - "device_temperature": 21, + "device_temperature": 24, "power_outage_count": 41 }, "0x5c0272fffee93bae": { @@ -71,7 +71,7 @@ "battery": 100, "sensitivity": "high", "keep_time": "120", - "illuminance": 874, + "illuminance": 850, "linkquality": 127 }, "0x84b4dbfffe850fda": { diff --git a/lovelace/lovelace.lovelace_solar.yaml b/lovelace/lovelace.lovelace_solar.yaml index ade63dd..65a9012 100644 --- a/lovelace/lovelace.lovelace_solar.yaml +++ b/lovelace/lovelace.lovelace_solar.yaml @@ -332,14 +332,62 @@ config: - badges: [] cards: - entities: - - label: Charge schedule + - label: Charge schedule 1 type: section - - entity: input_datetime.inverter_charging_schedule_start - name: Start charging at - - entity: input_datetime.inverter_charging_schedule_end - name: Finish charging at - - entity: input_number.inverter_charging_schedule_target_soc - name: Charge until + - entity: input_boolean.inverter_charging_schedule_enabled + name: Enable + - conditions: + - entity: input_boolean.inverter_charging_schedule_enabled + state: 'on' + 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 type: section - entity: input_number.inverter_battery_reserve