various tidyups
This commit is contained in:
@@ -1,7 +1,13 @@
|
||||
#:########################################################################################:#
|
||||
# PACKAGE: Fridge and Freezer Monitoring
|
||||
# FILE: packages/fridge_freezer_monitoring.yaml
|
||||
# VERSION: v1.11.0 2026-08-30
|
||||
# VERSION: v1.13.0 2026-09-03
|
||||
# - Moves Downstairs Freezer temperature, humidity, and battery monitoring
|
||||
# from X62TS to X70TS.
|
||||
# - Moves shared Downstairs Fridge and Freezer power monitoring from X41PP to
|
||||
# the metering-only X68PM GPO.
|
||||
# - Reports an unavailable Main Kitchen Fridge battery monitor explicitly,
|
||||
# rather than showing an unqualified issue.
|
||||
# - Moves Main Kitchen Fridge temperature, humidity, and battery monitoring to
|
||||
# X65TS and adds X64LS illuminance-based door monitoring.
|
||||
# - v1.10.0 2026-08-29: Adds Downstairs Freezer temperature, battery, door, humidity, and shared
|
||||
@@ -61,8 +67,7 @@
|
||||
# - Seven configured fridge/freezer temperature and battery monitor pairs.
|
||||
# - switch.upstairs_fridge_power_x31pp
|
||||
# - sensor.upstairs_fridge_power_x31pp_power
|
||||
# - switch.downstairs_fridge_power_x41pp
|
||||
# - sensor.downstairs_fridge_power_x41pp_power
|
||||
# - sensor.downstairs_fridge_gpo_power_x68pm_power
|
||||
# - switch.drinks_fridge_power_x59pm
|
||||
# - sensor.drinks_fridge_power_x59pm_power
|
||||
# - switch.vertical_freezer_power_x60pm
|
||||
@@ -173,7 +178,7 @@ sensor:
|
||||
- platform: statistics
|
||||
name: "Downstairs Freezer Temperature Average 7 Days"
|
||||
unique_id: downstairs_freezer_temperature_average_7_days
|
||||
entity_id: sensor.downstairs_freezer_temperature_x62ts_temperature
|
||||
entity_id: sensor.downstairs_freezer_temperature_x70ts_temperature
|
||||
state_characteristic: average_step
|
||||
max_age:
|
||||
days: 7
|
||||
@@ -182,7 +187,7 @@ sensor:
|
||||
- platform: statistics
|
||||
name: "Downstairs Freezer Temperature 95th Percentile 7 Days"
|
||||
unique_id: downstairs_freezer_temperature_95th_percentile_7_days
|
||||
entity_id: sensor.downstairs_freezer_temperature_x62ts_temperature
|
||||
entity_id: sensor.downstairs_freezer_temperature_x70ts_temperature
|
||||
state_characteristic: percentile
|
||||
percentile: 95
|
||||
max_age:
|
||||
@@ -192,7 +197,7 @@ sensor:
|
||||
- platform: derivative
|
||||
name: "Downstairs Freezer Temperature Change Rate"
|
||||
unique_id: downstairs_freezer_temperature_change_rate
|
||||
source: sensor.downstairs_freezer_temperature_x62ts_temperature
|
||||
source: sensor.downstairs_freezer_temperature_x70ts_temperature
|
||||
unit_time: h
|
||||
time_window: "00:30:00"
|
||||
max_sub_interval: "00:05:00"
|
||||
@@ -414,11 +419,10 @@ template:
|
||||
unique_id: downstairs_fridge_power_draw_lost
|
||||
device_class: problem
|
||||
state: >-
|
||||
{% set power = states('sensor.downstairs_fridge_power_x41pp_power') | float(none) %}
|
||||
{% set changed = states.sensor.downstairs_fridge_power_x41pp_power.last_changed %}
|
||||
{% set power = states('sensor.downstairs_fridge_gpo_power_x68pm_power') | float(none) %}
|
||||
{% set changed = states.sensor.downstairs_fridge_gpo_power_x68pm_power.last_changed %}
|
||||
{{
|
||||
is_state('switch.downstairs_fridge_power_x41pp', 'on')
|
||||
and power is not none
|
||||
power is not none
|
||||
and power < 1
|
||||
and (now() - changed).total_seconds() >= 4 * 60 * 60
|
||||
}}
|
||||
@@ -450,7 +454,11 @@ template:
|
||||
{{
|
||||
temperature_missing
|
||||
or illuminance_missing
|
||||
or (states('sensor.main_kitchen_fridge_temperature_x65ts_battery') | float(-1)) <= 20
|
||||
or battery_missing
|
||||
or (
|
||||
not battery_missing
|
||||
and (states('sensor.main_kitchen_fridge_temperature_x65ts_battery') | float(0)) <= 20
|
||||
)
|
||||
or is_state('binary_sensor.main_kitchen_fridge_door_open_too_long', 'on')
|
||||
or (
|
||||
not temperature_missing
|
||||
@@ -477,7 +485,9 @@ template:
|
||||
{% if illuminance_missing %}
|
||||
{% set ns.items = ns.items + ['Door monitor unavailable'] %}
|
||||
{% endif %}
|
||||
{% if not battery_missing and (states('sensor.main_kitchen_fridge_temperature_x65ts_battery') | float(-1)) <= 20 %}
|
||||
{% if battery_missing %}
|
||||
{% set ns.items = ns.items + ['Battery monitor unavailable'] %}
|
||||
{% elif (states('sensor.main_kitchen_fridge_temperature_x65ts_battery') | float(0)) <= 20 %}
|
||||
{% set ns.items = ns.items + ['Low monitor battery'] %}
|
||||
{% endif %}
|
||||
{% if states('switch.upstairs_fridge_power_x31pp') in ['unknown', 'unavailable'] or power_missing %}
|
||||
@@ -596,7 +606,6 @@ template:
|
||||
{% set threshold = [9, percentile + 0.5] | min if percentile is not none else 9 %}
|
||||
{{
|
||||
temperature_missing
|
||||
or battery_missing
|
||||
or (states('sensor.lcd_temp_humidity_btt04_battery') | float(-1)) <= 20
|
||||
or (not temperature_missing and (states('sensor.lcd_temp_humidity_btt04_temperature') | float(0)) > threshold)
|
||||
}}
|
||||
@@ -608,8 +617,8 @@ template:
|
||||
{% set battery_missing = not has_value('sensor.lcd_temp_humidity_btt04_battery') %}
|
||||
{% set percentile = states('sensor.wine_fridge_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{% set threshold = [9, percentile + 0.5] | min if percentile is not none else 9 %}
|
||||
{% if temperature_missing or battery_missing %}
|
||||
{% set ns.items = ns.items + ['Monitor offline'] %}
|
||||
{% if temperature_missing %}
|
||||
{% set ns.items = ns.items + ['Temperature monitor unavailable'] %}
|
||||
{% endif %}
|
||||
{% if not battery_missing and (states('sensor.lcd_temp_humidity_btt04_battery') | float(-1)) <= 20 %}
|
||||
{% set ns.items = ns.items + ['Low monitor battery'] %}
|
||||
@@ -638,7 +647,7 @@ template:
|
||||
{% set temperature_missing = not has_value('sensor.downstairs_fridge_temperature_x43ts_temperature') %}
|
||||
{% set battery_missing = not has_value('sensor.downstairs_fridge_temperature_x43ts_battery') %}
|
||||
{% set illuminance_missing = not has_value('sensor.downstairs_fridge_light_sensor_x58ls_illuminance') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_power_x41pp_power') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_gpo_power_x68pm_power') %}
|
||||
{% set percentile = states('sensor.downstairs_fridge_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{% set threshold = [10, percentile + 0.5] | min if percentile is not none else 10 %}
|
||||
{{
|
||||
@@ -651,7 +660,6 @@ template:
|
||||
and not is_state('binary_sensor.downstairs_fridge_temperature_recovery_grace', 'on')
|
||||
and (states('sensor.downstairs_fridge_temperature_x43ts_temperature') | float(0)) > threshold
|
||||
)
|
||||
or states('switch.downstairs_fridge_power_x41pp') != 'on'
|
||||
or power_missing
|
||||
or is_state('binary_sensor.downstairs_fridge_power_draw_lost', 'on')
|
||||
}}
|
||||
@@ -662,7 +670,7 @@ template:
|
||||
{% set temperature_missing = not has_value('sensor.downstairs_fridge_temperature_x43ts_temperature') %}
|
||||
{% set battery_missing = not has_value('sensor.downstairs_fridge_temperature_x43ts_battery') %}
|
||||
{% set illuminance_missing = not has_value('sensor.downstairs_fridge_light_sensor_x58ls_illuminance') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_power_x41pp_power') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_gpo_power_x68pm_power') %}
|
||||
{% set percentile = states('sensor.downstairs_fridge_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{% set threshold = [10, percentile + 0.5] | min if percentile is not none else 10 %}
|
||||
{% if temperature_missing %}
|
||||
@@ -674,10 +682,8 @@ template:
|
||||
{% if not battery_missing and (states('sensor.downstairs_fridge_temperature_x43ts_battery') | float(-1)) <= 20 %}
|
||||
{% set ns.items = ns.items + ['Low monitor battery'] %}
|
||||
{% endif %}
|
||||
{% if states('switch.downstairs_fridge_power_x41pp') in ['unknown', 'unavailable'] or power_missing %}
|
||||
{% if power_missing %}
|
||||
{% set ns.items = ns.items + ['Power monitoring unavailable'] %}
|
||||
{% elif not is_state('switch.downstairs_fridge_power_x41pp', 'on') %}
|
||||
{% set ns.items = ns.items + ['Power switched off'] %}
|
||||
{% elif is_state('binary_sensor.downstairs_fridge_power_draw_lost', 'on') %}
|
||||
{% set ns.items = ns.items + ['Power lost - no power draw for 4 hours'] %}
|
||||
{% endif %}
|
||||
@@ -701,7 +707,7 @@ template:
|
||||
{{ [10, percentile + 0.5] | min if percentile is not none else 10 }}
|
||||
change_rate: "{{ states('sensor.downstairs_fridge_temperature_change_rate') }}"
|
||||
battery: "{{ states('sensor.downstairs_fridge_temperature_x43ts_battery') }}"
|
||||
power: "{{ states('sensor.downstairs_fridge_power_x41pp_power') }}"
|
||||
power: "{{ states('sensor.downstairs_fridge_gpo_power_x68pm_power') }}"
|
||||
door_open: "{{ is_state('binary_sensor.downstairs_fridge_door_open', 'on') }}"
|
||||
illuminance: "{{ states('sensor.downstairs_fridge_light_sensor_x58ls_illuminance') }}"
|
||||
|
||||
@@ -710,22 +716,22 @@ template:
|
||||
device_class: problem
|
||||
delay_on: "00:01:00"
|
||||
state: >-
|
||||
{% set temperature_missing = not has_value('sensor.downstairs_freezer_temperature_x62ts_temperature') %}
|
||||
{% set battery_missing = not has_value('sensor.downstairs_freezer_temperature_x62ts_battery') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_power_x41pp_power') %}
|
||||
{% set temperature_missing = not has_value('sensor.downstairs_freezer_temperature_x70ts_temperature') %}
|
||||
{% set battery_missing = not has_value('sensor.downstairs_freezer_temperature_x70ts_battery') %}
|
||||
{% set illuminance_missing = not has_value('sensor.downstairs_freezer_light_sensor_x61ls_illuminance') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_gpo_power_x68pm_power') %}
|
||||
{% set percentile = states('sensor.downstairs_freezer_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{% set threshold = [-5, percentile + 0.5] | min if percentile is not none else -5 %}
|
||||
{{
|
||||
temperature_missing
|
||||
or battery_missing
|
||||
or (states('sensor.downstairs_freezer_temperature_x62ts_battery') | float(-1)) <= 20
|
||||
or illuminance_missing
|
||||
or (states('sensor.downstairs_freezer_temperature_x70ts_battery') | float(-1)) <= 20
|
||||
or is_state('binary_sensor.downstairs_freezer_door_open_too_long', 'on')
|
||||
or (
|
||||
not temperature_missing
|
||||
and not is_state('binary_sensor.downstairs_freezer_temperature_recovery_grace', 'on')
|
||||
and (states('sensor.downstairs_freezer_temperature_x62ts_temperature') | float(0)) > threshold
|
||||
and (states('sensor.downstairs_freezer_temperature_x70ts_temperature') | float(0)) > threshold
|
||||
)
|
||||
or states('switch.downstairs_fridge_power_x41pp') != 'on'
|
||||
or power_missing
|
||||
or is_state('binary_sensor.downstairs_fridge_power_draw_lost', 'on')
|
||||
}}
|
||||
@@ -733,21 +739,23 @@ template:
|
||||
appliance: "Downstairs Freezer"
|
||||
issues: >-
|
||||
{% set ns = namespace(items=[]) %}
|
||||
{% set temperature_missing = not has_value('sensor.downstairs_freezer_temperature_x62ts_temperature') %}
|
||||
{% set battery_missing = not has_value('sensor.downstairs_freezer_temperature_x62ts_battery') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_power_x41pp_power') %}
|
||||
{% set temperature_missing = not has_value('sensor.downstairs_freezer_temperature_x70ts_temperature') %}
|
||||
{% set battery_missing = not has_value('sensor.downstairs_freezer_temperature_x70ts_battery') %}
|
||||
{% set illuminance_missing = not has_value('sensor.downstairs_freezer_light_sensor_x61ls_illuminance') %}
|
||||
{% set power_missing = not has_value('sensor.downstairs_fridge_gpo_power_x68pm_power') %}
|
||||
{% set percentile = states('sensor.downstairs_freezer_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{% set threshold = [-5, percentile + 0.5] | min if percentile is not none else -5 %}
|
||||
{% if temperature_missing or battery_missing %}
|
||||
{% set ns.items = ns.items + ['Monitor offline'] %}
|
||||
{% if temperature_missing %}
|
||||
{% set ns.items = ns.items + ['Temperature monitor unavailable'] %}
|
||||
{% endif %}
|
||||
{% if not battery_missing and (states('sensor.downstairs_freezer_temperature_x62ts_battery') | float(-1)) <= 20 %}
|
||||
{% if illuminance_missing %}
|
||||
{% set ns.items = ns.items + ['Door monitor unavailable'] %}
|
||||
{% endif %}
|
||||
{% if not battery_missing and (states('sensor.downstairs_freezer_temperature_x70ts_battery') | float(-1)) <= 20 %}
|
||||
{% set ns.items = ns.items + ['Low monitor battery'] %}
|
||||
{% endif %}
|
||||
{% if states('switch.downstairs_fridge_power_x41pp') in ['unknown', 'unavailable'] or power_missing %}
|
||||
{% if power_missing %}
|
||||
{% set ns.items = ns.items + ['Shared power monitoring unavailable'] %}
|
||||
{% elif not is_state('switch.downstairs_fridge_power_x41pp', 'on') %}
|
||||
{% set ns.items = ns.items + ['Shared power switched off'] %}
|
||||
{% elif is_state('binary_sensor.downstairs_fridge_power_draw_lost', 'on') %}
|
||||
{% set ns.items = ns.items + ['Shared power lost - no power draw for 4 hours'] %}
|
||||
{% endif %}
|
||||
@@ -755,7 +763,7 @@ template:
|
||||
{% set ns.items = ns.items + ['Door open too long'] %}
|
||||
{% elif not temperature_missing and is_state('binary_sensor.downstairs_freezer_temperature_recovery_grace', 'on') %}
|
||||
{% set ns.items = ns.items + ['Temperature alert delayed - door recently open'] %}
|
||||
{% elif not temperature_missing and (states('sensor.downstairs_freezer_temperature_x62ts_temperature') | float(0)) > threshold %}
|
||||
{% elif not temperature_missing and (states('sensor.downstairs_freezer_temperature_x70ts_temperature') | float(0)) > threshold %}
|
||||
{% if (states('sensor.downstairs_freezer_temperature_change_rate') | float(0)) >= 2 %}
|
||||
{% set ns.items = ns.items + ['Warming rapidly - possible open door'] %}
|
||||
{% else %}
|
||||
@@ -763,15 +771,15 @@ template:
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{{ ns.items }}
|
||||
temperature: "{{ states('sensor.downstairs_freezer_temperature_x62ts_temperature') }}"
|
||||
humidity: "{{ states('sensor.downstairs_freezer_temperature_x62ts_humidity') }}"
|
||||
temperature: "{{ states('sensor.downstairs_freezer_temperature_x70ts_temperature') }}"
|
||||
humidity: "{{ states('sensor.downstairs_freezer_temperature_x70ts_humidity') }}"
|
||||
average_7_days: "{{ states('sensor.downstairs_freezer_temperature_average_7_days') }}"
|
||||
alert_threshold: >-
|
||||
{% set percentile = states('sensor.downstairs_freezer_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{{ [-5, percentile + 0.5] | min if percentile is not none else -5 }}
|
||||
change_rate: "{{ states('sensor.downstairs_freezer_temperature_change_rate') }}"
|
||||
battery: "{{ states('sensor.downstairs_freezer_temperature_x62ts_battery') }}"
|
||||
power: "{{ states('sensor.downstairs_fridge_power_x41pp_power') }}"
|
||||
battery: "{{ states('sensor.downstairs_freezer_temperature_x70ts_battery') }}"
|
||||
power: "{{ states('sensor.downstairs_fridge_gpo_power_x68pm_power') }}"
|
||||
door_open: "{{ is_state('binary_sensor.downstairs_freezer_door_open', 'on') }}"
|
||||
illuminance: "{{ states('sensor.downstairs_freezer_light_sensor_x61ls_illuminance') }}"
|
||||
|
||||
@@ -787,7 +795,6 @@ template:
|
||||
{% set threshold = [-5, percentile + 0.5] | min if percentile is not none else -5 %}
|
||||
{{
|
||||
temperature_missing
|
||||
or battery_missing
|
||||
or (states('sensor.drinks_freezer_environment_lcd_btt02_battery') | float(-1)) <= 20
|
||||
or states('switch.drinks_fridge_power_x59pm') != 'on'
|
||||
or power_missing
|
||||
@@ -803,8 +810,8 @@ template:
|
||||
{% set power_missing = not has_value('sensor.drinks_fridge_power_x59pm_power') %}
|
||||
{% set percentile = states('sensor.drinks_freezer_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{% set threshold = [-5, percentile + 0.5] | min if percentile is not none else -5 %}
|
||||
{% if temperature_missing or battery_missing %}
|
||||
{% set ns.items = ns.items + ['Monitor offline'] %}
|
||||
{% if temperature_missing %}
|
||||
{% set ns.items = ns.items + ['Temperature monitor unavailable'] %}
|
||||
{% endif %}
|
||||
{% if not battery_missing and (states('sensor.drinks_freezer_environment_lcd_btt02_battery') | float(-1)) <= 20 %}
|
||||
{% set ns.items = ns.items + ['Low monitor battery'] %}
|
||||
@@ -845,7 +852,6 @@ template:
|
||||
{% set threshold = [-10, percentile + 6] | min if percentile is not none else -10 %}
|
||||
{{
|
||||
temperature_missing
|
||||
or battery_missing
|
||||
or (states('sensor.lcd_temp_humidity_btt03_battery') | float(-1)) <= 20
|
||||
or states('switch.vertical_freezer_power_x60pm') != 'on'
|
||||
or power_missing
|
||||
@@ -861,8 +867,8 @@ template:
|
||||
{% set power_missing = not has_value('sensor.vertical_freezer_power_x60pm_power') %}
|
||||
{% set percentile = states('sensor.vertical_freezer_temperature_95th_percentile_7_days') | float(none) %}
|
||||
{% set threshold = [-10, percentile + 6] | min if percentile is not none else -10 %}
|
||||
{% if temperature_missing or battery_missing %}
|
||||
{% set ns.items = ns.items + ['Monitor offline'] %}
|
||||
{% if temperature_missing %}
|
||||
{% set ns.items = ns.items + ['Temperature monitor unavailable'] %}
|
||||
{% endif %}
|
||||
{% if not battery_missing and (states('sensor.lcd_temp_humidity_btt03_battery') | float(-1)) <= 20 %}
|
||||
{% set ns.items = ns.items + ['Low monitor battery'] %}
|
||||
|
||||
Reference in New Issue
Block a user