From 7a7875caa2ff35df39b99bde56bf00621360c55b Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Mon, 1 Jun 2026 10:39:50 -0400 Subject: [PATCH] Refine fridge and Tesla reminder packages --- config/packages/README.md | 4 +-- config/packages/blink.yaml | 8 +++--- config/packages/fridge.yaml | 29 ++++++-------------- config/packages/tesla_model_y.yaml | 38 ++++++++++++++++++++++++++- config/templates/speech/briefing.yaml | 4 +-- 5 files changed, 53 insertions(+), 30 deletions(-) diff --git a/config/packages/README.md b/config/packages/README.md index 818c3188..1ff95013 100755 --- a/config/packages/README.md +++ b/config/packages/README.md @@ -40,7 +40,7 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this | --- | --- | --- | | [alarm.yaml](alarm.yaml) | NodeMCU-powered perimeter monitoring with arm/disarm helpers and rich notifications. | `binary_sensor.mcu*_gpio*`, `group.family`, notify + siren scripts | | [alexa_media_player.yaml](alexa_media_player.yaml) | Alexa Media helper sensors including stable bedroom wake-alarm wrappers for Carlo and Stacey plus a combined next-wake view. | `sensor.last_alexa`, `sensor.bedroom_next_wake_alarm`, `sensor.bedroom_next_wake_alarm_source`, `binary_sensor.bedroom_next_wake_alarm_active` | -| [fridge.yaml](fridge.yaml) | SmartThinQ fridge monitoring with a confirmed-open door helper so short status-refresh pulses do not trigger alerts or speech. | `binary_sensor.refrigerator_door_open`, `binary_sensor.refrigerator_door_confirmed_open`, `script.notify_engine`, `script.speech_engine` | +| [fridge.yaml](fridge.yaml) | SmartThinQ fridge monitoring with 5-minute door-open alerts plus fridge/freezer status announcements. | `binary_sensor.refrigerator_door_open`, `script.notify_engine`, `script.speech_engine` | | [garadget.yaml](garadget.yaml) | MQTT-based garage door control plus arrival helpers, entry prompts, wind checks, nighttime reminders, and camera context. | `cover.large_garage_door`, `cover.small_garage_door`, `group.garage_doors`, `sensor.garadget_reflection` | | [august.yaml](august.yaml) | Front-door August smart lock with Alexa Show camera pop-up when unlocked. | `lock.front_door`, media_player actions for front doorbell camera | | [holiday.yaml](holiday.yaml) | REST-driven US holiday + flag sensors that color scenes and exterior lighting. | `sensor.holiday`, `sensor.flag`, JSON feed at `config/json_data/holidays.json` | @@ -65,7 +65,7 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this | [maintenance_log.yaml](maintenance_log.yaml) | Joanna maintenance webhook ingest for water softener salt with idempotent event handling, Activity feed logging, and recorder-backed helper history for long-term graphing. | `automation.maintenance_log_joanna_webhook_ingest`, `input_number.water_softener_salt_total_added_lb`, `counter.water_softener_salt_event_count`, `sensor.water_softener_salt_days_since_last_add` | | [kiosk_tablet.yaml](kiosk_tablet.yaml) | Keeps the bedroom Fully Kiosk Fire tablet pinned to the dedicated kiosk dashboard when the page or foreground app drifts. | `sensor.alarm_panel_1_current_page`, `sensor.alarm_panel_1_foreground_app`, `button.alarm_panel_1_bring_to_foreground`, `button.alarm_panel_1_load_start_url` | | [powerwall.yaml](powerwall.yaml) | Track Tesla Powerwall grid status, push live outage tracking to mobile targets, and shed loads automatically when off-grid (alerts include Activity feed + Repairs). | `binary_sensor.powerwall_grid_status`, `sensor.powerwall_*`, `script.notify_live_activity`, `repairs.create` | -| [tesla_model_y.yaml](tesla_model_y.yaml) | Remind the garage and parents to plug in the Model Y after the large garage door closes with a low battery, charging still off, and both parents home, with an 8 PM repeat loop for recent garage arrivals. | `sensor.spaceship_battery_level`, `switch.spaceship_charge`, `person.carlo`, `person.stacey`, `cover.large_garage_door`, `input_datetime.tesla_model_y_last_garage_close`, `notify.alexa_media_garage`, `script.notify_engine` | +| [tesla_model_y.yaml](tesla_model_y.yaml) | Remind the garage and parents to plug in the Model Y after the large garage door closes with a low battery, charging still off, both parents home, and a 24-hour mobile snooze available from the push reminder. | `sensor.spaceship_battery_level`, `switch.spaceship_charge`, `person.carlo`, `person.stacey`, `cover.large_garage_door`, `input_datetime.tesla_model_y_last_garage_close`, `input_datetime.tesla_model_y_plug_in_snooze_until`, `notify.alexa_media_garage`, `script.notify_engine_two_button` | | [vacuum.yaml](vacuum.yaml) | Dreame vacuum orchestration with room tracking, push alerts, Activity feed, Repairs issues on errors, and Alexa one-off room-clean switches. | `input_select.l10s_vacuum_phase`, `sensor.l10s_vacuum_error`, `repairs.create` | | [hass_agent_homepc.yaml](hass_agent_homepc.yaml) | Mirrors PC lock/unlock state to the office lamp and wakes `CARLO-HOMEPC` on workday morning bed exits. | `sensor.carlo_homepc_carlo_homepc_sessionstate`, `button.carlo_home`, `switch.office_lamp_switch` | | [sleepiq.yaml](sleepiq.yaml) | Sleep Number presence/snore automations; Overview Health consumes direct SleepIQ integration entities for scores, vitals, pressure, and bed controls. | `group.bed`, `binary_sensor.sleepnumber_carlo_carlo_is_in_bed`, `binary_sensor.sleepnumber_carlo_stacey_is_in_bed`, `sensor.sleepnumber_carlo_carlo_sleep_score`, `sensor.sleepnumber_carlo_stacey_sleep_score`, `number.sleepnumber_carlo_carlo_firmness`, `select.sleepnumber_carlo_foundation_preset_right` | diff --git a/config/packages/blink.yaml b/config/packages/blink.yaml index 18f5d214..d2ee949c 100755 --- a/config/packages/blink.yaml +++ b/config/packages/blink.yaml @@ -29,7 +29,7 @@ automation: above: 60 - condition: state - entity_id: binary_sensor.refrigerator_door_confirmed_open + entity_id: binary_sensor.refrigerator_door_open state: 'on' action: @@ -39,8 +39,8 @@ automation: value1: > {% if trigger.platform == 'numeric_state' %} The Blink camera temperature sensor has detected {{ states('sensor.blink_blink1_temperature') }} degrees for over 20 minutes. - {% elif is_state('binary_sensor.refrigerator_door_confirmed_open', 'on') %} - The SmartThinQ fridge door sensor is still confirmed open, and the Blink camera temperature is {{ states('sensor.blink_blink1_temperature') }} degrees. + {% elif is_state('binary_sensor.refrigerator_door_open', 'on') %} + The SmartThinQ fridge door sensor is still open, and the Blink camera temperature is {{ states('sensor.blink_blink1_temperature') }} degrees. {% else %} The fridge is still hot after the previous alert. The fridge temperature is {{ states('sensor.blink_blink1_temperature') }} degrees. {% endif %} @@ -49,7 +49,7 @@ automation: - service: script.speech_engine data: - value1: "Please check the fridge. The Blink camera temperature is {{ states('sensor.blink_blink1_temperature') }} degrees. {% if is_state('binary_sensor.refrigerator_door_confirmed_open', 'on') %}The SmartThinQ fridge door sensor is confirmed open.{% endif %}" + value1: "Please check the fridge. The Blink camera temperature is {{ states('sensor.blink_blink1_temperature') }} degrees. {% if is_state('binary_sensor.refrigerator_door_open', 'on') %}The SmartThinQ fridge door sensor is open.{% endif %}" no_fridge: 1 - delay: 00:30:00 diff --git a/config/packages/fridge.yaml b/config/packages/fridge.yaml index a014d7e0..0cbf460d 100644 --- a/config/packages/fridge.yaml +++ b/config/packages/fridge.yaml @@ -4,46 +4,33 @@ # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # ------------------------------------------------------------------- # LG Fridge - SmartThinQ appliance monitoring - Fridge/freezer sensors via ThinQ integration. https://amzn.to/3lOYTCv. -# Debounces SmartThinQ door-open telemetry before fridge alerts and speech use it. +# Centralizes the LG Fridge - SmartThinQ appliance monitoring package configuration and helpers. # ------------------------------------------------------------------- -# Notes: SmartThinQ can briefly report the door open during appliance status refreshes; alerts use the confirmed helper below. +# Notes: Door-open alerts now trigger directly from the SmartThinQ door sensor after 5 minutes instead of using a debounced helper entity. ###################################################################### -template: - - binary_sensor: - - name: "Refrigerator door confirmed open" - unique_id: refrigerator_door_confirmed_open - device_class: door - availability: "{{ states('binary_sensor.refrigerator_door_open') not in ['unknown', 'unavailable', 'none', ''] }}" - state: "{{ is_state('binary_sensor.refrigerator_door_open', 'on') }}" - delay_on: - minutes: 10 - delay_off: - seconds: 30 - attributes: - raw_sensor: binary_sensor.refrigerator_door_open - raw_state: "{{ states('binary_sensor.refrigerator_door_open') }}" - automation: - alias: 'Fridge Door Open' id: 2346efcd-e8a8-4e86-b5b6-43eBl1nkFr1dge95D00r0pen mode: single trigger: - platform: state - entity_id: binary_sensor.refrigerator_door_confirmed_open + entity_id: binary_sensor.refrigerator_door_open to: 'on' + for: + minutes: 5 condition: - condition: state - entity_id: binary_sensor.refrigerator_door_confirmed_open + entity_id: binary_sensor.refrigerator_door_open state: 'on' action: - service: script.notify_engine data: title: 'Fridge Door Open' value1: > - The SmartThinQ fridge door sensor has been confirmed open for more than 10 minutes. Please check and close the fridge door to avoid temperature issues. + The fridge door has been open for more than 5 minutes. Please check and close the fridge door to avoid temperature issues. who: 'family' group: 'information' - service: script.speech_engine data: - value1: "[Tell Household the Fridge Door is Open for more than 10 minutes]" + value1: "[Tell Household the Fridge Door is Open for more than 5 minutes]" diff --git a/config/packages/tesla_model_y.yaml b/config/packages/tesla_model_y.yaml index aea54f7b..7c863e97 100644 --- a/config/packages/tesla_model_y.yaml +++ b/config/packages/tesla_model_y.yaml @@ -14,6 +14,7 @@ # Notes: The nightly parents reminder starts at 8 PM or after a post-8 PM # garage close, then loops every 30 minutes via a custom event while the # latest garage-arrival signal is recent and the car still is not charging. +# Notes: Parents push reminders include a 24-hour snooze action. # Notes: Plug-in reminders only fire when both `person.carlo` and # `person.stacey` are home. # Video: https://youtu.be/wFO0H5zgnzk @@ -25,6 +26,10 @@ input_datetime: name: Tesla Model Y Last Garage Close has_date: true has_time: true + tesla_model_y_plug_in_snooze_until: + name: Tesla Model Y Plug In Snooze Until + has_date: true + has_time: true automation: - alias: "Tesla Model Y - Plug In Reminder" @@ -37,6 +42,9 @@ automation: - platform: event event_type: event_tesla_model_y_nightly_loop id: loop + - platform: time + at: input_datetime.tesla_model_y_plug_in_snooze_until + id: snooze_expired - platform: state entity_id: cover.large_garage_door from: 'open' @@ -74,6 +82,10 @@ automation: - condition: state entity_id: switch.spaceship_charge state: 'off' + - condition: template + value_template: >- + {% set snooze_until = as_timestamp(states('input_datetime.tesla_model_y_plug_in_snooze_until'), 0) %} + {{ snooze_until <= as_timestamp(now()) }} - choose: - conditions: - condition: trigger @@ -102,7 +114,7 @@ automation: - condition: time after: '20:00:00' before: '05:00:00' - - service: script.notify_engine + - service: script.notify_engine_two_button data: title: "Tesla Plug In Reminder" value1: >- @@ -112,6 +124,9 @@ automation: {{ states('sensor.spaceship_battery_level') | float(0) | round(0) }} percent. who: 'parents' group: 'Tesla_Model_Y' + title1: "Snooze 24h" + action1: "SNOOZE_TESLA_PLUG_IN_24H" + icon1: "sfsymbols:clock" - service: script.send_to_logbook data: topic: "TESLA" @@ -119,3 +134,24 @@ automation: Nightly plug-in reminder sent because the Model Y recently came in through the garage below 50 percent and is not charging. - delay: '00:30:00' - event: event_tesla_model_y_nightly_loop + + - alias: "Tesla Model Y - Plug In Reminder Snooze" + id: 5b7b9b93-1f12-4c5e-9bc4-95c8cb1a104f + mode: queued + trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + action: SNOOZE_TESLA_PLUG_IN_24H + variables: + snooze_until: "{{ (now() + timedelta(hours=24)).strftime('%Y-%m-%d %H:%M:%S') }}" + action: + - service: input_datetime.set_datetime + target: + entity_id: input_datetime.tesla_model_y_plug_in_snooze_until + data: + datetime: "{{ snooze_until }}" + - service: script.send_to_logbook + data: + topic: "TESLA" + message: "Tesla plug-in reminders snoozed for 24 hours (until {{ snooze_until }})." diff --git a/config/templates/speech/briefing.yaml b/config/templates/speech/briefing.yaml index 022a3afd..ae690f82 100755 --- a/config/templates/speech/briefing.yaml +++ b/config/templates/speech/briefing.yaml @@ -95,7 +95,7 @@ {% if freezer not in ['unknown', 'unavailable', 'none', ''] and fridge not in ['unknown', 'unavailable', 'none', ''] %} The freezer temperature is {{ freezer }} degrees and the fridge temperature is {{ fridge }} degrees. {% endif %} - {% if is_state('binary_sensor.refrigerator_door_confirmed_open', 'on') %}The fridge door is confirmed open.{% endif %} + {% if is_state('binary_sensor.refrigerator_door_open', 'on') %}The fridge door is currently open.{% endif %} {%- endmacro -%} {%- macro window_check() -%} @@ -297,7 +297,7 @@ {% set blink_temp = states('sensor.blink_blink1_temperature') | float(none) %} {% set freezer_temp = states('sensor.refrigerator_freezer_temp') | float(none) %} {% set fridge_temp = states('sensor.refrigerator_fridge_temp') | float(none) %} - {% if ((blink_temp is not none and blink_temp > 55) or (freezer_temp is not none and freezer_temp > 5) or (fridge_temp is not none and fridge_temp > 50) or is_state('binary_sensor.refrigerator_door_confirmed_open', 'on')) and no_fridge != 1 %} + {% if ((blink_temp is not none and blink_temp > 55) or (freezer_temp is not none and freezer_temp > 5) or (fridge_temp is not none and fridge_temp > 50) or is_state('binary_sensor.refrigerator_door_open', 'on')) and no_fridge != 1 %} {{ fridge() }} {% endif %}