various tidyups

This commit is contained in:
zorruno
2026-07-24 18:55:12 +12:00
parent fce8c7b0bc
commit fe6feee250
58 changed files with 749 additions and 5339 deletions
@@ -1,3 +1,27 @@
#:########################################################################################:#
# Package: Central Stairway Two-Way Synchronization
# File: Lighting_2Way_Sync/central_stairway_2way_sync.yaml
# Version: v1.1.0
# Date: 2026-07-22
#
# Purpose:
# Keeps the upper and lower controls for the main stair lights and stair footer
# lights synchronized through Home Assistant.
#
# Behaviour:
# - Synchronizes each two-member relay pair in both directions.
# - Synchronizes state after Home Assistant starts, following a five-second delay.
# - Leaves direct device-level MQTT synchronization to the ESPHome devices.
#
# Dependency:
# - Blueprint: zorruno/two_three_way_sync.yaml
#
# Version History:
# - v1.1.0 (2026-07-22): Removed the superseded lounge-middle relay and retained
# two active relays in each synchronization pair.
# - v1.0.0 (2026-06-22): Initial central stairway synchronization package.
#:########################################################################################:#
automation:
# Stair Lights Top
- id: stair_lights_top_2way_sync
@@ -1,3 +1,24 @@
#:########################################################################################:#
# Package: Garage Lighting Two-Way Synchronization
# File: Lighting_2Way_Sync/garage_lights_2way_sync.yaml
# Version: v1.0.0
# Date: 2026-06-22
#
# Purpose:
# Keeps the paired controls for the garage-entry corridor/outside lighting and
# the internal garage lighting synchronized through Home Assistant.
#
# Behaviour:
# - Synchronizes each two-member relay pair in both directions.
# - Synchronizes state after Home Assistant starts, following a five-second delay.
#
# Dependency:
# - Blueprint: zorruno/two_three_way_sync.yaml
#
# Version History:
# - v1.0.0 (2026-06-22): Initial garage lighting synchronization package.
#:########################################################################################:#
automation:
# Two lights and two switches for these corridor lights
- id: garage_entry_outside_2way_sync
@@ -183,7 +183,3 @@ automation:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.poollights_mode_switch
- service: input_boolean.turn_on
target:
entity_id: input_boolean.timer_light_midnight_pending
@@ -152,6 +152,3 @@ automation:
- service: input_boolean.turn_off
data:
entity_id: input_boolean.poolpump_mode_switch
- service: input_boolean.turn_on
data:
entity_id: input_boolean.timer_midnight_pending
+20
View File
@@ -1,3 +1,23 @@
#:########################################################################################:#
# Package: Anniversary Events
# File: anniversaries.yaml
# Version: v1.0.0
# Date: 2024-09-04
#
# Purpose:
# Provides an anniversary sensor that reports the number of days until the
# next configured event and exposes event details as attributes.
#
# Dependency:
# - Anniversary custom integration (platform: anniversary).
#
# Output:
# - sensor.events: Days until the configured holiday event.
#
# Version History:
# - v1.0.0 (2024-09-04): Initial anniversary event sensor package.
#:########################################################################################:#
sensor:
- platform: anniversary
name: events
+26
View File
@@ -1,3 +1,29 @@
#:########################################################################################:#
# Package: Appliance Activity Feed Sensors
# File: appliance_status_mqttfeed.yaml
# Version: v1.2.0
# Date: 2026-07-20
#
# Purpose:
# Provides MQTT sensors for appliance, vehicle-charger, and tool-charger
# completion messages published to the household activity feed.
#
# Dependencies:
# - Home Assistant MQTT integration and broker connectivity.
# - External publishers or the announcement router must publish completion
# payloads to the configured activity-feed topics.
#
# Known Limitation:
# - sensor.washer_finished has device_class timestamp and therefore requires
# an ISO 8601 timestamp. P013-F018 records that the current router may publish
# a time-only payload, which is not valid for this device class.
#
# Version History:
# - v1.2.0 (2026-07-20): Added the downstairs dishwasher completion sensor.
# - v1.1.0 (2025-05-18): Set the washer completion sensor as a timestamp.
# - v1.0.0 (2023-10-20): Added the initial MQTT activity-feed sensors.
#:########################################################################################:#
mqtt:
sensor:
- unique_id: washing_machine_finished
+18 -17
View File
@@ -1,23 +1,24 @@
################################################################################
# PACKAGE: Underhouse Entrance Auto Lights
################################################################################
#:########################################################################################:#
# Package: Underhouse Entrance Auto Lights
# File: auto_lights_underhouse_entrance.yaml
# Version: v1.2.0
# Date: 2026-05-12
#
# Version:
# 1.2 - 2026-05-12
# - Added fast Zigbee2MQTT FP1-style event triggers:
# sensor.underhouse_mmwave_sensor_x23ms_presence_event = enter
# sensor.underhouse_mmwave_sensor_x23ms_presence_event = approach
# - Keeps binary presence as a backup trigger and as the clear/off condition.
# - This should behave closer to the previous Node-RED automation.
# Purpose:
# Replaces the Node-RED automation for the underhouse entrance lights. Uses
# Zigbee2MQTT mmWave event triggers (enter/approach/presence) to turn lights
# on instantly, then off after 400 seconds of sustained clear presence.
#
# Notes:
# - The UI may show the binary sensor as "Detected", but the YAML state is
# normally "on".
# - The presence_event sensor can react earlier than the binary presence sensor.
# - The event sensor is used to turn lights on quickly, but not to decide when
# the area is clear, because it may remain on its last event value.
# Behaviour:
# - Fast Zigbee2MQTT FP1-style event triggers (enter, approach) turn lights on.
# - Binary presence sensor serves as a backup trigger and clearance condition.
# - Lights turn off 400 seconds after presence clears.
#
################################################################################
# Version History:
# - v1.2.0 (2026-05-12): Added fast Zigbee2MQTT FP1-style event triggers and
# converted header to standard package format.
#
#:########################################################################################:#
automation:
- id: underhouse_entrance_auto_lights
+17 -23
View File
@@ -1,28 +1,24 @@
#:########################################################################################:#
# TITLE: UNDERHOUSE STORAGE LIGHTS AUTO LIGHTS PACKAGE
#:########################################################################################:#
# DESCRIPTION:
# Package: Underhouse Storage Lights
# File: auto_lights_underhouse_storage.yaml
# Version: v1.1.0
# Date: 2026-06-14
#
# Purpose:
# Replaces the Node-RED automation for the underhouse storage lights.
# Doors, PIR sensors, a remote switch, and local relay changes can start or
# extend the storage lighting timer.
#
# VERSION:
# V1.1 2026-06-14
# - Door-open trigger now watches each real door contact individually.
# - This means any door changing from closed to open turns the lights on
# immediately, even if another door is already open.
# - All doors closed now turns the lights off immediately.
# - PIR occupancy can still start/restart the motion timer after that.
# Behaviour:
# - Individual door-open triggers turn lights on immediately.
# - All doors closed turns lights off immediately.
# - PIR occupancy can start/restart the motion timer.
# - Remote switch press starts or extends the light timer.
#
# V1.0 2026-05-12
# - Initial Home Assistant package version.
#
# EDIT NOTES:
# - Add future door contacts in all places marked FUTURE DOOR.
# - Add future PIR sensors in the PIR group marked FUTURE PIR.
# - The generated group entities used below should be:
# binary_sensor.underhouse_storage_door_contacts
# binary_sensor.underhouse_storage_pir_presence
# Version History:
# - v1.1.0 (2026-06-14): Door-open trigger now watches each real door contact
# individually; all doors closed turns lights off immediately.
# - v1.0.0 (2026-05-12): Initial Home Assistant package version.
#:########################################################################################:#
binary_sensor:
@@ -112,8 +108,7 @@ automation:
entity_id:
- binary_sensor.underhouse_stealth_door_x07rs_contact
- binary_sensor.underhouse_north_door_door
# FUTURE DOOR: replace this with the actual third underhouse storage door contact.
#- binary_sensor.underhouse_future_door_contact
- binary_sensor.under_house_underhouse_east_stealth_door_door
from: "off"
to: "on"
@@ -213,8 +208,7 @@ automation:
entity_id:
- binary_sensor.underhouse_stealth_door_x07rs_contact
- binary_sensor.underhouse_north_door_door
# FUTURE DOOR: replace this with the actual third underhouse storage door contact.
#- binary_sensor.underhouse_future_door_contact
- binary_sensor.under_house_underhouse_east_stealth_door_door
from: "on"
to: "off"
action:
+24
View File
@@ -0,0 +1,24 @@
#:########################################################################################:#
# Package: Basement Lights
# File: basement_lights.yaml
# Version: v1.0.1
# Date: 2026-07-24
#
# Purpose:
# Consolidated basement lighting configuration for two-way switching synchronization
# between the basement hallway and front door area lights.
#
# Version History:
# - v1.0.0 (2024-12-20): Created basement lighting package with two-way sync.
# - v1.0.1 (2026-07-24): Standardized header format with additional metadata.
#:########################################################################################:#
group:
basement_lights:
name: "Basement Lights"
entities:
- switch.esp_officelights_relay_1_nighttime_lights
- switch.esp_officelights_relay_2_daytime_lights
- switch.esp_underhouselights_underhouse_entrance_lights
- switch.esp_underhouselights_underhouse_storage_lights
- switch.esp_laundrylights_relay_1_laundry_lights
+23
View File
@@ -1,3 +1,26 @@
#:########################################################################################:#
# Package: Bedroom 3 Window LED Actions
# File: bedroom_3_led_actions.yaml
# Version: v1.0.0
# Date: 2023-10-20
#
# Purpose:
# Provides a selectable control for publishing Bedroom 3 window LED commands
# to the household MQTT command topic.
#
# Behaviour:
# - The Off option publishes the off command.
# - The 1 Hour Fade option publishes the fade_1 command.
# - The placeholder option preserves the neutral selector state.
#
# Dependencies:
# - Home Assistant MQTT integration and broker connectivity.
# - An external MQTT consumer for the Bedroom 3 window LED action topic.
#
# Version History:
# - v1.0.0 (2023-10-20): Initial Bedroom 3 window LED action package.
#:########################################################################################:#
input_select:
bedroom_3_led_actions:
icon: mdi:led-strip
+120 -31
View File
@@ -1,8 +1,8 @@
#:########################################################################################:#
# Package: BYD Charging Schedule At Home
# File: byd_charging_schedule_athome.yaml
# Version: v1.0.1
# Date: 2026-06-19
# Version: v1.1.0
# Date: 2026-07-23
#
# Purpose:
# Enables the BYD Atto 3 charging schedule when the car arrives home.
@@ -11,11 +11,12 @@
#
# Behaviour:
# - Confirmed arrival home:
# Turns ON switch.atto_3_schedule_enabled,
# but only if the car had previously been confirmed away.
# Sets the schedule to 9:00 PM through midnight with charge-to-full disabled,
# enables it, and retries cloud reconciliation once per minute.
#
# - Confirmed away:
# After away_confirm_minutes, turns OFF switch.atto_3_schedule_enabled.
# After away_confirm_minutes, disables the schedule and retries cloud
# reconciliation once per minute.
#
# - Manual control:
# If the car is already home and the user or another HA automation turns
@@ -35,24 +36,35 @@ input_boolean:
automation:
#:######################################################################################:#
# ARRIVAL - Turn schedule ON only after a confirmed away period
# ARRIVAL - Reconcile and enable schedule after a confirmed away period
#:######################################################################################:#
- id: byd_atto3_charging_schedule_arrival_enable
alias: "BYD Atto 3 Charging Schedule - Arrival Enable"
description: >
Turns the BYD charging schedule ON when the car arrives home, but only if
it was previously confirmed away. This prevents brief away/home glitches
from undoing a manual OFF while the car is actually still at home.
Reconciles the BYD charging schedule to 9:00 PM through midnight and turns
it ON when the car arrives home after a confirmed away period. Rechecks the
cloud-confirmed state once per minute and retries failed updates.
mode: single
variables: &byd_charging_schedule_vars
tracker_entity: device_tracker.byd_atto3_ibeacon_bur4c2a_bermuda_tracker
schedule_switch_entity: switch.atto_3_schedule_enabled
schedule_start_time_entity: time.atto_3_start_time
schedule_end_time_entity: time.atto_3_end_time
schedule_charge_to_full_entity: switch.atto_3_charge_to_full
# HA normally stores "At Home" as "home".
home_state: "home"
# Required charging schedule settings.
expected_start_time: "21:00:00"
expected_end_time: "00:00:00"
# Adjustable YAML-only delay before the car is treated as truly away.
away_confirm_minutes: 15
away_confirm_minutes: 10
# Verify cloud-confirmed schedule state at one-minute intervals.
schedule_verify_attempts: 6
schedule_verify_interval: "00:01:00"
# These states will not be treated as confirmed away.
ignored_tracker_states:
@@ -69,7 +81,7 @@ automation:
{{ trigger.to_state is not none
and trigger.from_state is not none
and trigger.to_state.state == home_state
and trigger.from_state.state != home_state }}
and trigger.from_state.state == 'not_home' }}
actions:
- choose:
@@ -78,23 +90,72 @@ automation:
entity_id: input_boolean.byd_atto3_charging_schedule_confirmed_away
state: "on"
sequence:
- action: switch.turn_on
- action: input_boolean.turn_off
target:
entity_id: "{{ schedule_switch_entity }}"
entity_id: input_boolean.byd_atto3_charging_schedule_confirmed_away
- action: input_boolean.turn_off
target:
entity_id: input_boolean.byd_atto3_charging_schedule_confirmed_away
- repeat:
count: "{{ schedule_verify_attempts | int(6) }}"
sequence:
- if:
- condition: template
value_template: "{{ is_state(tracker_entity, home_state) }}"
then:
- if:
- condition: template
value_template: >-
{{ states(schedule_start_time_entity) != expected_start_time }}
then:
- action: time.set_value
continue_on_error: true
target:
entity_id: "{{ schedule_start_time_entity }}"
data:
time: "{{ expected_start_time }}"
- if:
- condition: template
value_template: >-
{{ states(schedule_end_time_entity) != expected_end_time }}
then:
- action: time.set_value
continue_on_error: true
target:
entity_id: "{{ schedule_end_time_entity }}"
data:
time: "{{ expected_end_time }}"
- if:
- condition: template
value_template: >-
{{ not is_state(schedule_charge_to_full_entity, 'off') }}
then:
- action: switch.turn_off
continue_on_error: true
target:
entity_id: "{{ schedule_charge_to_full_entity }}"
- if:
- condition: template
value_template: >-
{{ not is_state(schedule_switch_entity, 'on') }}
then:
- action: switch.turn_on
continue_on_error: true
target:
entity_id: "{{ schedule_switch_entity }}"
- delay: "{{ schedule_verify_interval }}"
#:######################################################################################:#
# DEPARTURE - Turn schedule OFF only after confirmed away timeout
# DEPARTURE - Disable schedule after confirmed away timeout
#:######################################################################################:#
- id: byd_atto3_charging_schedule_departure_disable_after_timeout
alias: "BYD Atto 3 Charging Schedule - Departure Disable After Timeout"
description: >
When the car leaves home, waits for the configured away timeout. If the car
is still away after that delay, turns the BYD charging schedule OFF and
marks the car as confirmed away.
is still away, marks it confirmed away, turns the BYD charging schedule OFF,
and retries failed cloud updates once per minute.
mode: restart
variables: *byd_charging_schedule_vars
@@ -111,7 +172,7 @@ automation:
actions:
- delay:
minutes: "{{ away_confirm_minutes | int(15) }}"
minutes: "{{ away_confirm_minutes | int(10) }}"
- condition: template
value_template: >-
@@ -119,14 +180,28 @@ automation:
{{ current_state != home_state
and current_state not in ignored_tracker_states }}
- action: switch.turn_off
target:
entity_id: "{{ schedule_switch_entity }}"
- action: input_boolean.turn_on
target:
entity_id: input_boolean.byd_atto3_charging_schedule_confirmed_away
- repeat:
count: "{{ schedule_verify_attempts | int(6) }}"
sequence:
- if:
- condition: template
value_template: >-
{% set current_state = states(tracker_entity) %}
{{ current_state != home_state
and current_state not in ignored_tracker_states
and not is_state(schedule_switch_entity, 'off') }}
then:
- action: switch.turn_off
continue_on_error: true
target:
entity_id: "{{ schedule_switch_entity }}"
- delay: "{{ schedule_verify_interval }}"
#:######################################################################################:#
# STARTUP SAFETY - If HA restarts while the car is away, re-arm arrival logic
#:######################################################################################:#
@@ -134,8 +209,8 @@ automation:
alias: "BYD Atto 3 Charging Schedule - Startup Away Check"
description: >
On Home Assistant startup, if the car is already away and remains away
beyond the configured timeout, turn the schedule OFF and mark the car as
confirmed away so that the next confirmed arrival can enable the schedule.
beyond the configured timeout, mark it confirmed away and reconcile the
charging schedule OFF so the next confirmed arrival can enable it.
mode: single
variables: *byd_charging_schedule_vars
@@ -153,7 +228,7 @@ automation:
and current_state not in ignored_tracker_states }}
- delay:
minutes: "{{ away_confirm_minutes | int(15) }}"
minutes: "{{ away_confirm_minutes | int(10) }}"
- condition: template
value_template: >-
@@ -161,10 +236,24 @@ automation:
{{ current_state != home_state
and current_state not in ignored_tracker_states }}
- action: switch.turn_off
target:
entity_id: "{{ schedule_switch_entity }}"
- action: input_boolean.turn_on
target:
entity_id: input_boolean.byd_atto3_charging_schedule_confirmed_away
- repeat:
count: "{{ schedule_verify_attempts | int(6) }}"
sequence:
- if:
- condition: template
value_template: >-
{% set current_state = states(tracker_entity) %}
{{ current_state != home_state
and current_state not in ignored_tracker_states
and not is_state(schedule_switch_entity, 'off') }}
then:
- action: switch.turn_off
continue_on_error: true
target:
entity_id: "{{ schedule_switch_entity }}"
- delay: "{{ schedule_verify_interval }}"
+22
View File
@@ -1,6 +1,28 @@
#:########################################################################################:#
# Package: CCTV Motion Feed
# File: cctv_controls.yaml
# Version: v1.1.0
# Date: 2026-07-24
#
# Purpose:
# Provides a Home Assistant binary sensor for front-door motion messages
# published by the external CCTV system over MQTT.
#
# Dependencies:
# - Home Assistant MQTT integration and broker connectivity.
# - An external CCTV publisher for the configured motion topic.
#
#
# Version History:
# - v1.1.0 (2026-07-24): Added explicit numeric ON/OFF payloads (P013-F039).
# - v1.0.0 (2022-10-11): Initial CCTV front-door motion sensor package.
#:########################################################################################:#
mqtt:
binary_sensor:
- unique_id: front_door_movement_camera_corner
name: "Front Door Movement"
state_topic: "viewroad-status/cctv/front_door_motion"
payload_on: "1"
payload_off: "0"
icon: mdi:exit-run
+20
View File
@@ -1,3 +1,23 @@
#:########################################################################################:#
# Package: Dashboard Helpers
# File: dashboard_helpers.yaml
# Version: v1.0.1
# Date: 2026-07-24
#
# Purpose:
# Provides helper entities used by stored Home Assistant dashboards for
# temporary display behavior that does not belong to a device integration.
#
# Behaviour:
# - The moon-phase overlay helper controls whether the percentage is displayed.
# - The companion script enables the overlay for ten seconds and then disables it.
# - Restart mode restarts the ten-second display period when called repeatedly.
#
# Version History:
# - v1.0.0 (2026-02-16): Added the temporary moon-phase percentage overlay helper.
# - v1.0.1 (2026-07-24): Standardized header format with additional metadata.
#:########################################################################################:#
input_boolean:
moon_phase_percent_overlay:
name: Moon phase percent overlay
+11 -11
View File
@@ -23,7 +23,7 @@
# - Calculates memory usage from total, free, buffer, and cache values.
#
# Polling:
# - Traffic counters: Every 10 seconds.
# - Traffic counters: Every 60 seconds.
# - Uptime, CPU, load, and memory: Every 60 seconds.
# - Firmware description: Every 300 seconds.
#
@@ -58,7 +58,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# ifHCOutOctets counts bytes transmitted from the router to the Internet.
- platform: snmp
@@ -72,7 +72,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Convert the cumulative received-byte counter into the WAN download rate.
- platform: derivative
@@ -109,7 +109,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Bytes transmitted by the router to Home LAN clients become the LAN download rate.
- platform: snmp
@@ -123,7 +123,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Derive the client-to-router upload rate from the received-byte counter.
- platform: derivative
@@ -160,7 +160,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Bytes transmitted by the router to the wireless network become its download rate.
- platform: snmp
@@ -174,7 +174,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Derive the wireless-to-router upload rate from the received-byte counter.
- platform: derivative
@@ -211,7 +211,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Bytes transmitted by the router to Home Automation become its download rate.
- platform: snmp
@@ -225,7 +225,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Derive the Home Automation upload rate from the received-byte counter.
- platform: derivative
@@ -262,7 +262,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Bytes transmitted by the router to this network become its download rate.
- platform: snmp
@@ -276,7 +276,7 @@ sensor:
device_class: data_size
state_class: total_increasing
unit_of_measurement: "B"
scan_interval: 10
scan_interval: 60
# Derive the secondary Home Automation upload rate from received bytes.
- platform: derivative
+23
View File
@@ -1,3 +1,26 @@
#:########################################################################################:#
# Package: Refrigerator Temperature MQTT Publishing
# File: fridge_temperatures.yaml
# Version: v1.0.0
# Date: 2024-09-04
#
# Purpose:
# Publishes refrigerator and freezer temperature changes to household MQTT
# status topics for use by external displays and consumers.
#
# Behaviour:
# - Publishes the source sensor state whenever a valid temperature changes.
# - Suppresses unknown and unavailable source states.
# - Covers the drinks fridge, drinks freezer, and main kitchen fridge.
#
# Dependencies:
# - The three configured Home Assistant temperature sensors.
# - Home Assistant MQTT integration and broker connectivity.
#
# Version History:
# - v1.0.0 (2024-09-04): Initial refrigerator temperature publishing package.
#:########################################################################################:#
automation:
- id: publish_fridge_temps_drinks_fridge
alias: publish_fridge_temps_drinks_fridge
-42
View File
@@ -1,42 +0,0 @@
rest_command:
chores1_request:
url: !secret grocy_api_uri_chore6
method: PUT
headers:
accept: "*/*"
GROCY-API-KEY: !secret grocy_api_key
content_type: "application/json"
payload: '{
"name" : "{{ name }}" ,
"next_execution_assigned_to_user_id" : "{{ assigned_to }}"
}'
# payload: '{"name" : "{{ name }}" , "next_estimated_execution_time" : "{{ next_time }}", "next_execution_assigned_to_user_id" : "{{ assigned_to }}" }'
verify_ssl: false
sensor:
- platform: rest
name: Dog Motel Cleaning
resource: !secret grocy_api_uri_chore3
method: GET
value_template: "{{ (((as_timestamp(value_json.next_estimated_execution_time))-as_timestamp(now())) | int /60/1440) | round(0) }}"
json_attributes:
- last_tracked
- estimated_execution_time
headers:
Accept: application/json
Content-Type: application/json
GROCY-API-KEY: !secret grocy_api_key
unit_of_measurement: "Days"
- platform: rest
name: Red Bin Out
resource: !secret grocy_api_uri_chore2
method: GET
value_template: "{{ (((as_timestamp(value_json.next_estimated_execution_time))-as_timestamp(now())) | int /60/1440) | round(0) }}"
json_attributes:
- last_tracked
- estimated_execution_time
headers:
Accept: application/json
Content-Type: application/json
GROCY-API-KEY: !secret grocy_api_key
unit_of_measurement: "Days"
+27
View File
@@ -1,3 +1,30 @@
#:########################################################################################:#
# Package: Node-RED Health Checks
# File: health_checks.yaml
# Version: v1.2.0
# Date: 2025-08-25
#
# Purpose:
# Monitors the Node-RED Panda instance through independent HTTP and MQTT health
# signals and combines them into one connectivity status.
#
# Behaviour:
# - Polls the HTTP health endpoint every 30 seconds with a three-second timeout.
# - Tracks the MQTT birth/will topic with QoS 1 and a 180-second expiry.
# - Reports the combined check as available when either source is available.
# - Reports the combined check as connected when either source is connected.
#
# Dependencies:
# - Reachability of the configured Node-RED HTTP health endpoint.
# - Home Assistant MQTT integration and the Node-RED birth/will publisher.
#
# Version History:
# - v1.2.0 (2025-08-25): Reduced MQTT expiry to 180 seconds and clarified the
# combined HTTP/MQTT sensor name.
# - v1.1.0 (2025-08-22): Split HTTP and MQTT probes and added a combined sensor.
# - v1.0.0 (2025-08-21): Initial Node-RED health-check package.
#:########################################################################################:#
# ---- HTTP health probe ----
binary_sensor:
- platform: rest
+25
View File
@@ -1,3 +1,28 @@
#:########################################################################################:#
# Package: Internet Traffic Summary
# File: internet_traffic.yaml
# Version: v1.2.0
# Date: 2026-07-22
#
# Purpose:
# Preserves the household Internet download, upload, and total traffic sensors
# while sourcing current WAN rates from the EdgeRouter SNMP package.
#
# Behaviour:
# - Mirrors the EdgeRouter WAN download and upload rates in kB/s.
# - Calculates total traffic as the sum of download and upload rates.
# - Marks each sensor unavailable when its required source is unavailable.
#
# Dependency:
# - packages/edgerouter_snmp.yaml
#
# Version History:
# - v1.2.0 (2026-07-22): Migrated source data from EdgeOS attributes to the
# EdgeRouter SNMP WAN rate sensors and added availability handling.
# - v1.1.0 (2025-12-21): Migrated the three sensors to modern template syntax.
# - v1.0.0 (2022-10-12): Added the initial EdgeOS-based traffic sensors.
#:########################################################################################:#
template:
- sensor:
- name: "Internet Download Traffic"
-25
View File
@@ -1,25 +0,0 @@
template:
- sensor:
- name: "Internet Download Traffic"
unique_id: internet_downtraffic
unit_of_measurement: "kB/s"
state_class: measurement
state: >
{{ state_attr('binary_sensor.edgeos_interface_pppoe0', 'KBytes/ps (Received)') | float(0) }}
- name: "Internet Upload Traffic"
unique_id: internet_uptraffic
unit_of_measurement: "kB/s"
state_class: measurement
state: >
{{ state_attr('binary_sensor.edgeos_interface_pppoe0', 'KBytes/ps (Sent)') | float(0) }}
- name: "Internet Total Traffic"
unique_id: internet_totaltraffic
unit_of_measurement: "kB/s"
state_class: measurement
state: >
{{
(state_attr('binary_sensor.edgeos_interface_pppoe0', 'KBytes/ps (Received)') | float(0))
+ (state_attr('binary_sensor.edgeos_interface_pppoe0', 'KBytes/ps (Sent)') | float(0))
}}
+27
View File
@@ -1,3 +1,30 @@
#:########################################################################################:#
# Package: Kogan Kettle MQTT Control
# File: kogan_kettle.yaml
# Version: v1.0.0
# Date: 2022-10-11
#
# Purpose:
# Provides kettle temperature monitoring, power control, and selectable
# keep-warm temperatures through a Tasmota/TuyaMCU MQTT interface.
#
# Behaviour:
# - Reads temperature data from the kettle's TuyaReceived MQTT payload.
# - Controls kettle power through its MQTT power command topic.
# - Maps the keep-warm selector to the kettle's TuyaSend4 commands.
#
# Dependencies:
# - Home Assistant MQTT integration and broker connectivity.
# - The configured Tasmota/TuyaMCU kettle MQTT topics and payload structure.
#
# Known Limitation:
# - P013-F026 records that temperature parsing assumes a fixed nested JSON
# payload. Malformed or unrelated messages may cause template errors.
#
# Version History:
# - v1.0.0 (2022-10-11): Initial kettle monitoring and control package.
#:########################################################################################:#
mqtt:
sensor:
- unique_id: kettle.temp
+36 -18
View File
@@ -1,17 +1,24 @@
#:########################################################################################:#
# Low Battery Device Summary Package #
# Low Battery Monitoring Package #
#:########################################################################################:#
#
# TITLE:
# Low Battery Device Summary
# Low Battery Monitoring
#
# FILE:
# packages/low_battery_device_quantity.yaml
#
# VERSION:
# V1.1 2026-07-20
# V1.2 2026-07-23
#
# VERSION HISTORY:
# V1.3 2026-07-24
# - Truncated list sensor state to count-only summary; full list stays in attributes.
#
# V1.2 2026-07-23
# - Moved the weekly low-battery blueprint automation into this package.
# - Preserved the Monday 21:00 schedule and Zorruno Pushover notification.
#
# V1.1 2026-07-20
# - Changed the low-battery threshold from 97% to 20%.
# - Added structured documentation for scope, exclusions, and outputs.
@@ -21,17 +28,19 @@
#
# PURPOSE:
# Finds numeric sensor entities with device_class battery whose value is 20%
# or lower, then exposes a count and a human-readable device list.
# or lower, exposes count and list sensors, and runs a weekly notification.
#
# SCOPE AND EXCLUSIONS:
# - Only entities in the sensor domain with device_class battery are checked.
# - Unknown, unavailable, non-numeric, and "Ok" states are excluded.
# - Battery entities in other domains are not included.
# - Battery entities in other domains are not included in the summaries.
# - The notification blueprint also checks battery binary sensors.
#
# OUTPUTS:
# - sensor.devices_with_low_battery reports the number of matching sensors.
# - sensor.devices_with_low_battery_list reports names and percentages.
# - The list sensor also exposes count, entities, and names attributes.
# - A Pushover notification runs each Monday at 21:00 when batteries are low.
#
#:########################################################################################:#
@@ -69,21 +78,11 @@ template:
mdi:battery-alert
{% endif %}
state: >
{% set ns = namespace(names=[]) %}
{% for s in states.sensor %}
{% if s.attributes.device_class == 'battery' %}
{% set st = s.state %}
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
{% if st | int(-1) != -1 and (st | int(0)) <= 20 %}
{% set ns.names = ns.names + [s.name ~ ' (' ~ (st | int(0)) ~ '%)'] %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% if ns.names | length == 0 %}
{% set count = states('sensor.devices_with_low_battery') | int(0) %}
{% if count == 0 %}
None
{% else %}
{{ ns.names | join(', ') }}
{{ count }} devices
{% endif %}
attributes:
count: "{{ states('sensor.devices_with_low_battery') | int(0) }}"
@@ -113,3 +112,22 @@ template:
{% endif %}
{% endfor %}
{{ ns.n }}
automation:
- id: "1635929281159"
alias: "Weekly Low battery level detection"
description: >
Checks battery-class entities each Monday and notifies Zorruno when any
are below the blueprint threshold.
use_blueprint:
path: sbyx/low-battery-level-detection-notification-for-all-battery-sensors.yaml
input:
day: 1
time: "21:00:00"
actions:
- action: notify.pushover_zorruno
data:
title: "View Road Sensors"
message: >
Weekly Battery Check. Low Devices:
{{ sensors }}
@@ -1,78 +0,0 @@
template:
- sensor:
- name: "Devices with low battery"
unique_id: devices_with_low_battery_count
unit_of_measurement: "devices"
state: >
{% set ns = namespace(c=0) %}
{% for s in states.sensor %}
{% if s.attributes.device_class == 'battery' %}
{% set st = s.state %}
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
{% if st | int(-1) != -1 and (st | int(0)) <= 97 %}
{% set ns.c = ns.c + 1 %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{{ ns.c }}
icon: >
{% if this.state | int(0) == 0 %}
mdi:check-circle
{% else %}
mdi:battery-alert
{% endif %}
- name: "Devices with low battery list"
unique_id: devices_with_low_battery_list
icon: >
{% if states('sensor.devices_with_low_battery') | int(0) == 0 %}
mdi:check-circle
{% else %}
mdi:battery-alert
{% endif %}
state: >
{% set ns = namespace(names=[]) %}
{% for s in states.sensor %}
{% if s.attributes.device_class == 'battery' %}
{% set st = s.state %}
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
{% if st | int(-1) != -1 and (st | int(0)) <= 97 %}
{% set ns.names = ns.names + [s.name ~ ' (' ~ (st | int(0)) ~ '%)'] %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{% if ns.names | length == 0 %}
None
{% else %}
{{ ns.names | join(', ') }}
{% endif %}
attributes:
count: "{{ states('sensor.devices_with_low_battery') | int(0) }}"
entities: >
{% set ns = namespace(e=[]) %}
{% for s in states.sensor %}
{% if s.attributes.device_class == 'battery' %}
{% set st = s.state %}
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
{% if st | int(-1) != -1 and (st | int(0)) <= 97 %}
{% set ns.e = ns.e + [s.entity_id] %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{{ ns.e }}
names: >
{% set ns = namespace(n=[]) %}
{% for s in states.sensor %}
{% if s.attributes.device_class == 'battery' %}
{% set st = s.state %}
{% if st not in ['unknown', 'unavailable', 'Ok'] %}
{% if st | int(-1) != -1 and (st | int(0)) <= 97 %}
{% set ns.n = ns.n + [s.name] %}
{% endif %}
{% endif %}
{% endif %}
{% endfor %}
{{ ns.n }}
-5
View File
@@ -1,5 +0,0 @@
#media_player:
# MPD Media Player on Lounge Touchscreen
# - platform: mpd
# host: !secret lounge_mpd_player
# scan_interval: 1
-265
View File
@@ -1,265 +0,0 @@
#:########################################################################################:#
# Moonraker 3D Printer Package #
#:########################################################################################:#
#
# TITLE:
# Moonraker 3D Printer
#
# FILE:
# packages/moonraker_3dprinter.yaml
#
# VERSION:
# V1.1 2026-07-20
#
# VERSION HISTORY:
# V1.1 2026-07-20
# - Added structured documentation for setup, polling, outputs, and safety.
# - Recorded that the Creality printer is not currently connected.
#
# V1.0
# - Initial Moonraker REST sensors, commands, and customizations.
#
# PURPOSE:
# Reads Klipper and Moonraker printer data and provides Home Assistant REST
# commands for controlling a Creality K1C 3D printer.
#
# CURRENT STATUS:
# - As of 2026-07-20, this configuration no longer connects to the printer.
# - It is retained as a reference for future reconnection work.
# - Before reconnecting, verify the printer address, Moonraker availability,
# queried Klipper object names, and companion template entities.
#
# DEPENDENCIES:
# - A reachable Moonraker server for the Klipper printer.
# - Current configured endpoint: http://192.168.2.31:7125
# - Companion templates: templates/moonraker_3dprinter.yaml
# - The queried sensors and object names must match the Klipper configuration.
#
# POLLING:
# - Full printer status, printer info, and server data poll every second.
# - Current print file metadata polls every five seconds.
#
# RAW REST OUTPUTS:
# - sensor.printer_3d_sensor provides printer object status attributes.
# - sensor.printer_3d_info provides printer state and state message.
# - sensor.printer_3d_server provides Mainsail server configuration data.
# - sensor.printer_3d_file_metadata provides current-file metadata.
# - Companion templates derive user-facing sensors from these raw entities.
#
# CONTROLS:
# - Emergency stop immediately halts the printer.
# - Firmware restart restarts the Klipper firmware process.
# - Cancel stops the current print; pause and resume control print progress.
#
# SAFETY AND NETWORK:
# - Emergency stop, firmware restart, and cancel are disruptive actions and
# should only be exposed through dashboard controls with confirmation.
# - The configured endpoint uses unencrypted HTTP without authentication and
# assumes Moonraker is available only on a trusted local network.
#
# USER CONFIGURATION:
# - If the printer address changes, update every Moonraker URL in this file.
# - Confirm the filament and chamber sensor object names before reconnecting.
#
#:########################################################################################:#
#:########################################################################################:#
# Home Assistant Customizations #
#:########################################################################################:#
homeassistant:
customize:
rest_command.3d_printer_emergency_stop:
friendly_name: "Emergency Stop (K1C)"
area_id: Laundry
icon: mdi:alert-octagon
rest_command.3d_printer_firmware_restart:
friendly_name: "Firmware Restart (K1C)"
area_id: Laundry
icon: mdi:restart
rest_command.3d_printer_cancel:
friendly_name: "Cancel Print (K1C)"
area_id: Laundry
icon: mdi:cancel
rest_command.3d_printer_pause:
friendly_name: "Pause Print (K1C)"
area_id: Laundry
icon: mdi:pause-circle
rest_command.3d_printer_resume:
friendly_name: "Resume Print (K1C)"
area_id: Laundry
icon: mdi:play-circle
sensor.printer_3d_file_metadata:
area_id: Laundry
friendly_name: "3D Printer (K1C) Print file data"
sensor.printer_3d_sensor:
area_id: Laundry
friendly_name: "3D Printer (K1C) Sensors"
sensor.printer_3d_info:
area_id: Laundry
friendly_name: "3D Printer (K1C) State"
sensor.printer_3d_server:
area_id: Laundry
friendly_name: "3D Printer (K1C) Print Server"
sensor.3d_printer_chamber_temp:
area_id: Laundry
sensor.3d_printer_hotend_target:
area_id: Laundry
sensor.3d_printer_hotend_actual:
area_id: Laundry
sensor.3d_printer_hotend_power:
area_id: Laundry
sensor.3d_printer_bed_target:
area_id: Laundry
sensor.3d_printer_bed_actual:
area_id: Laundry
sensor.3d_printer_bed_power:
area_id: Laundry
sensor.3d_printer_state:
area_id: Laundry
sensor.3d_printer_current_print:
area_id: Laundry
sensor.3d_printer_current_progress:
area_id: Laundry
sensor.3d_printer_print_time:
area_id: Laundry
sensor.3d_printer_time_remaining:
area_id: Laundry
sensor.3d_printer_eta:
area_id: Laundry
sensor.3d_printer_message:
area_id: Laundry
sensor.3d_printer_layer_height:
area_id: Laundry
sensor.3d_printer_object_height:
area_id: Laundry
sensor.3d_printer_current_height:
area_id: Laundry
sensor.3d_printer_current_layer:
area_id: Laundry
sensor.3d_printer_total_layers:
area_id: Laundry
sensor.3d_printer_actual_layer:
area_id: Laundry
sensor.3d_printer_object_thumbnails:
area_id: Laundry
sensor.3d_printer_state_message:
area_id: Laundry
sensor.3d_printer_heaters_power:
area_id: Laundry
sensor.3d_printer_printername:
area_id: Laundry
binary_sensor.3d_printer_filament:
area_id: Laundry
# === REST sensor: File metadata for current 3D print ===
rest:
scan_interval: 5
resource_template: "http://192.168.2.31:7125/server/files/metadata?filename={{ states('sensor.3d_printer_current_print') | urlencode }}"
sensor:
- name: printer_3d_file_metadata
unique_id: "192.168.2.315ec44d90-419c-419c-802d-d34071639c08"
icon: mdi:file-document-outline
json_attributes_path: "$.result"
json_attributes:
- layer_height
- object_height
- thumbnails
value_template: "OK"
rest_command:
3d_printer_emergency_stop:
url: "http://192.168.2.31:7125/printer/emergency_stop"
method: post
3d_printer_firmware_restart:
url: "http://192.168.2.31:7125/printer/firmware_restart"
method: post
3d_printer_cancel:
url: "http://192.168.2.31:7125/printer/print/cancel"
method: post
3d_printer_pause:
url: "http://192.168.2.31:7125/printer/print/pause"
method: post
3d_printer_resume:
url: "http://192.168.2.31:7125/printer/print/resume"
method: post
sensor:
# === REST sensor: Full 3D printer status (Klipper printer/objects/query) ===
- platform: rest
name: printer_3d_sensor
unique_id: "192.168.2.313a0c25fa-297d-4c19-b03c-ddf04840682b"
icon: mdi:printer-3d-nozzle
resource: "http://192.168.2.31:7125/printer/objects/query?heater_bed&extruder&print_stats&toolhead&display_status&virtual_sdcard&gcode_move&filament_motion_sensor%20btt_smart_filament&temperature_sensor%20Chamber_Temp"
json_attributes_path: "$.result.status"
json_attributes:
- heater_bed
- extruder
- print_stats
- toolhead
- display_status
- virtual_sdcard
- gcode_move
- "filament_motion_sensor btt_smart_filament_sensor"
- "temperature_sensor Chamber_Temp"
value_template: "OK"
force_update: true
scan_interval: 1
# === REST sensor: Basic printer state and message ===
- platform: rest
name: printer_3d_info
unique_id: "192.168.2.311cba6677-02bd-4273-9083-b8301bf6943b"
icon: mdi:information-outline
scan_interval: 1
resource_template: "http://192.168.2.31:7125/printer/info"
json_attributes_path: "$.result"
json_attributes:
- state_message
- state
value_template: "OK"
# === REST sensor: Server configuration details (e.g., printer name) ===
- platform: rest
name: printer_3d_server
unique_id: "192.168.2.311cba6677-02bd-4273-9083-b8301bf6949"
icon: mdi:server
scan_interval: 1
resource_template: "http://192.168.2.31:7125/server/database/item?namespace=mainsail&key=general"
json_attributes_path: "$.result.value"
json_attributes:
- printername
value_template: "OK"
+22
View File
@@ -1,3 +1,25 @@
#:########################################################################################:#
# Package: NIWA Local Tides
# File: niwa_tides.yaml
# Version: v1.0.0
# Date: 2022-10-12
#
# Purpose:
# Provides local tide level and forecast information from NIWA for use in Home
# Assistant dashboards, automations, and templates.
#
# Output:
# - sensor.local_tides reports the current tide level and exposes upcoming high
# and low tide times, levels, phase, and percentage as attributes.
#
# Dependencies:
# - NIWA Tides custom integration (platform: niwa_tides).
# - NIWA API key and location coordinates stored in secrets.yaml.
#
# Version History:
# - v1.0.0 (2022-10-12): Initial local NIWA tide sensor package.
#:########################################################################################:#
sensor:
- platform: niwa_tides
api_key: !secret niwa_tides_api_key
@@ -1,52 +0,0 @@
automation:
- id: nspanel_lounge_controller
alias: "NSPanel Master Bedroom Controller"
description: ""
use_blueprint:
path: edwardtfn/nspanel_easy_blueprint.yaml
input:
nspanel_name: 084fb5b4a94e636d01244b1838156446
button_page01_label: Lounge Lighting Scenes
button_pages_icon_size: "10"
entity01: script.nspanel_lounge_scene_bright
entity01_name: "Bright"
entity01_icon: mdi:brightness-7
entity01_confirm: false
entity02: script.nspanel_lounge_scene_tv_general
entity02_name: "TV General"
entity02_icon: mdi:television
entity02_confirm: false
entity03: script.nspanel_lounge_scene_movie
entity03_name: "Movie"
entity03_icon: mdi:movie-open
entity03_confirm: false
entity04: script.nspanel_lounge_scene_balanced
entity04_name: "Balance"
entity04_icon: mdi:scale-balance
entity04_confirm: false
entity05: script.nspanel_lounge_scene_warm_cozy
entity05_name: "Warm Cozy"
entity05_icon: mdi:fireplace
entity05_confirm: false
entity06: script.nspanel_lounge_scene_reading
entity06_name: "Reading On/Off"
entity06_icon: mdi:book-open-page-variant
entity06_confirm: false
entity07: script.nspanel_lounge_scene_dining
entity07_name: "Dining On/Off"
entity07_icon: mdi:silverware-fork-knife
entity07_confirm: false
entity08: script.nspanel_lounge_scene_all_off
entity08_name: "All Off"
entity08_icon: mdi:power
entity08_confirm: false
mode: single
-26
View File
@@ -1,26 +0,0 @@
mqtt:
sensor:
- unique_id: dog_fed_activity
name: "Dog Fed"
state_topic: "viewroad-status/activityfeed/dogfed"
icon: mdi:dog
- unique_id: depooped_activity
name: "DePooped"
state_topic: "viewroad-status/activityfeed/depooped"
icon: mdi:emoticon-poop
- unique_id: jobs_done_activity
name: "Jobs Done"
state_topic: "viewroad-status/activityfeed/jobsdone"
icon: mdi:notebook
- unique_id: hours_since_jobs_done
name: "Hours Since Jobs Done"
state_topic: "viewroad-tele/petfeeding/hoursSinceJobsDone"
unit_of_measurement: "Hours"
- unique_id: hours_since_zorro_fed
name: "Hours Since Zorro Fed"
state_topic: "viewroad-tele/petfeeding/hoursSinceDogFed"
unit_of_measurement: "Hours"
- unique_id: hours_since_depooped
name: "Hours Since DePooped"
state_topic: "viewroad-tele/petfeeding/hoursSinceDePooped"
unit_of_measurement: "Hours"
-45
View File
@@ -1,45 +0,0 @@
mqtt:
sensor:
- unique_id: piano.lastfinish
name: "Last Piano Practice Complete"
state_topic: "viewroad-status/activityfeed/pianopractice"
- unique_id: piano.lastpracticeduration
state_topic: "viewroad-status/piano/lastPracticeDuration"
name: "Last Piano Practice Time"
unit_of_measurement: "mins"
- unique_id: piano.todayspracticeduration
state_topic: "viewroad-status/piano/todayPracticeDuration"
name: "Today's Piano Practice Time"
unit_of_measurement: "mins"
- unique_id: piano.thisweekspracticeduration
state_topic: "viewroad-status/piano/thisWeekPracticeDuration"
name: "This Week's Piano Practice Time"
unit_of_measurement: "mins"
automation:
- id: "1648705777863"
alias: Tag Started Piano Practice is Scanned
description: ""
trigger:
- platform: tag
tag_id: af3f595c-5d41-4bb6-8985-27c70b0e6217
condition: []
action:
- service: mqtt.publish
data:
topic: viewroad-commands/chores/piano_practice
payload: start
mode: single
- id: "Tag Finished Piano Practice is Scanned"
alias: Tag Finished Piano Practice is Scanned
description: ""
trigger:
- platform: tag
tag_id: 6e7a6ab5-c7e4-47f3-be8f-830241175d69
condition: []
action:
- service: mqtt.publish
data:
topic: viewroad-commands/chores/piano_practice
payload: end
mode: single
+31 -1
View File
@@ -1,2 +1,32 @@
# enable the recorder integration (optional)
#:########################################################################################:#
# Package: Recorder Configuration
# File: recorder.yaml
# Version: v1.1.0
# Date: 2026-07-23
#
# Purpose:
# Enables Home Assistant Recorder with targeted exclusions for high-frequency
# diagnostic and summary entities that do not require historical storage.
#
# Exclusions:
# - ESPHome uptime sensors.
# - Home Assistant summary v2 sensors.
# - Jobs Tracker summary sensor.
#
# Notes:
# - Excluded entities remain available for current-state use.
# - Recorder retention and database settings continue to use Home Assistant
# defaults unless configured elsewhere.
#
# Version History:
# - v1.1.0 (2026-07-23): Added targeted exclusions during P013-F010 cleanup.
# - v1.0.0 (2022-10-11): Initial Recorder package.
#:########################################################################################:#
recorder:
exclude:
entity_globs:
- sensor.esp_*_uptime*
- sensor.ha_summary_v2_*
entities:
- sensor.jobs_tracker_summary
+30
View File
@@ -1,3 +1,33 @@
#:########################################################################################:#
# Package: RobotDyn MQTT Dimmer
# File: robotdyn_dimmers.yaml
# Version: v1.1.0
# Date: 2026-02-05
#
# Purpose:
# Provides a brightness-only Home Assistant light entity for the lounge
# RobotDyn dimmer through its JSON MQTT interface.
#
# Behaviour:
# - Reads JSON state updates from the dimmer state topic.
# - Publishes power and brightness commands to the dimmer command topic.
# - Uses a separate MQTT availability topic for online/offline status.
#
# Dependency:
# - Home Assistant MQTT integration and the external RobotDyn MQTT publisher.
#
# Known Limitations:
# - P013-F027 records that command messages are retained and may replay after
# reconnecting.
# - The configured availability topic contains "availablity"; confirm whether
# that spelling matches the publisher before correcting it.
#
# Version History:
# - v1.1.0 (2026-02-05): Added the current name, default entity ID, explicit
# availability payloads, and block-style color modes.
# - v1.0.0 (2025-09-10): Initial lounge MQTT dimmer package.
#:########################################################################################:#
mqtt:
- light:
schema: json
+24
View File
@@ -1,3 +1,27 @@
#:########################################################################################:#
# Package: Security and Notification Helpers
# File: security_and_notifications.yaml
# Version: v1.1.0
# Date: 2026-07-21
#
# Purpose:
# Provides the user-controlled helper that enables away-occupancy security
# behavior such as the household lighting simulation.
#
# Behaviour:
# - input_boolean.away_occupied_routine enables eligible away-mode automations.
# - The current consumer is the away-light simulation package.
#
# Dependencies:
# - packages/simulation_lights.yaml
# - packages/quiet_time.yaml owns the canonical quiet-time helper.
#
# Version History:
# - v1.1.0 (2026-07-21): Disabled the duplicate quiet-time helper after moving
# canonical ownership to the dedicated quiet-time package.
# - v1.0.0 (2024-05-27): Added quiet-time and away-security helpers.
#:########################################################################################:#
input_boolean:
# Legacy duplicate retained temporarily for verification.
# quiet_time:
+93 -3
View File
@@ -1,8 +1,39 @@
#:########################################################################################:#
# Package: Away-Light Security Simulation
# File: simulation_lights.yaml
# Version: v1.0.0
# Date: 2026-07-24
#
# Purpose:
# Simulates household activity while the away routine is active and all
# configured family members are away. Every five minutes after sunset, the
# automation selects a configured entity and operates it for a random period.
#
# Version History:
# - v1.0.0 (2026-07-24): Consolidated the simulation groups, away automation, and timed helper
# script into one feature package.
# - Preserved the existing automation ID, group keys, and script key.
# - Aligned the automation with the existing simulation_lights_all group.
#:########################################################################################:#
group:
simulation_lights_all:
name: Simulation Lights (All)
#:######################################################################################:#
# FAMILY PRESENCE
#:######################################################################################:#
family_away:
name: "All Family Members Away"
entities:
- group.downstairs_flat_lights # ← now valid here
- !secret person_1
- !secret person_2
- !secret person_3
#:######################################################################################:#
# SIMULATION ENTITIES
#:######################################################################################:#
simulation_lights_all:
name: "Simulation Lights (All)"
entities:
- group.downstairs_flat_lights
- switch.esp_centralstairs_top_relay_2_stair_footer_lights
- switch.esp_centralstairs_bottom_relay_1_main_stair_lights_lower
- switch.esp_entrancebathrmlights_relay_1_main_lights
@@ -16,3 +47,62 @@ group:
- light.esp_loungepelmetleds2_lounge_pelmet_leds_a
- light.esp_lounge6chdimmer_couch_spots_left
- light.esp_lounge6chdimmer_couch_spots_right
script:
#:######################################################################################:#
# RANDOM-DURATION ENTITY CONTROL
#:######################################################################################:#
light_duration:
description: "Turns an entity on for a supplied duration and then turns it off."
mode: parallel
fields:
light:
description: "Entity to operate."
example: light.bedroom
duration:
description: "How long the entity should remain on."
example: "00:25:00"
sequence:
- action: logbook.log
data:
name: "Script Notice"
message: "Light {{ light }} will be turned on for {{ duration }}"
- action: homeassistant.turn_on
target:
entity_id: "{{ light }}"
- delay: "{{ duration }}"
- action: homeassistant.turn_off
target:
entity_id: "{{ light }}"
automation:
#:######################################################################################:#
# AWAY-LIGHT SIMULATION
#:######################################################################################:#
- id: do_random_actions_when_away
alias: "Activate Random Actions for Security"
description: >
Periodically runs the timed simulation script after sunset when the away
routine is active and all configured family members are away.
mode: parallel
triggers:
- trigger: time_pattern
minutes: "/5"
conditions:
- condition: sun
after: sunset
after_offset: "-00:30:00"
- condition: state
entity_id: input_boolean.away_occupied_routine
state: "on"
- condition: state
entity_id: group.family_away
state: "not_home"
actions:
- action: script.light_duration
data:
light: "{{ state_attr('group.simulation_lights_all', 'entity_id') | random }}"
duration: "00:{{ '{:02}'.format(range(5, 29) | random | int) }}:00"
+28
View File
@@ -0,0 +1,28 @@
#:########################################################################################:#
# Package: Vehicle Announcements
# File: vehicle_announcements.yaml
# Version: v1.0.0
# Date: 2026-07-23
#
# Purpose:
# Sends vehicle arrival announcements through the View Road announcement router.
#:########################################################################################:#
automation:
- id: byd_atto3_arrival_announcement
alias: "BYD Atto 3 - Arrival Announcement"
description: >
Sends a Pushover notification to the Zorruno phone when the BYD Atto 3
Bermuda tracker arrives home.
mode: single
triggers:
- trigger: state
entity_id: device_tracker.byd_atto3_ibeacon_bur4c2a_bermuda_tracker
from: "not_home"
to: "home"
actions:
- action: script.view_road_announcement
data:
channels: "pushover_zorruno"
title: "Vehicle Notification"
long_announcement: "The BYD Atto 3 has arrived home."
+36 -23
View File
@@ -1,40 +1,52 @@
#:########################################################################################:#
# Auckland Council Waste Collection Package #
# Council Waste Collection Package #
#:########################################################################################:#
#
# TITLE:
# Auckland Council Waste Collection
# Council Waste Collection
#
# FILE:
# packages/waste_collection.yaml
#
# VERSION:
# V1.1 2026-07-20
# V1.4 2026-07-22
#
# VERSION HISTORY:
# V1.4 2026-07-22
# - Fixed waste type names to match Auckland Council source output (recycling, food scraps)
# - Resolved P013-F019: Recycling and food-waste sensors were unknown due to type mismatch
#
# V1.3 2026-07-22
# - Moved the source identifier to !secret council_name.
# - Changed source documentation and MQTT unique IDs to generic wording.
#
# V1.2 2026-07-22
# - Moved the source area number to !secret council_area.
# - Changed package and schedule display names to generic council wording.
#
# V1.1 2026-07-20
# - Added source setup, schedule, MQTT, and maintenance documentation.
#
# V1.0
# - Initial Auckland Council schedules and MQTT bin-status sensors.
# - Initial council schedules and MQTT bin-status sensors.
#
# PURPOSE:
# Provides Auckland Council rubbish, recycling, and food-waste collection
# schedules, plus independent MQTT sensors indicating whether bins are out.
# Provides council rubbish, recycling, and food-waste collection schedules,
# plus independent MQTT sensors indicating whether bins are out.
#
# DEPENDENCY:
# Requires the Waste Collection Schedule custom integration and its
# aucklandcouncil_govt_nz source.
# Requires the Waste Collection Schedule custom integration and its configured
# council source.
#
# AREA NUMBER SETUP:
# - Open the Auckland Council rubbish and recycling collection-day finder.
# - Open the council rubbish and recycling collection-day finder.
# - Select the property address.
# - Use the displayed assessment number as area_number below.
# - Store the displayed assessment number as council_area in secrets.yaml.
# - Source documentation:
# https://github.com/mampfes/hacs_waste_collection_schedule/blob/master/doc/source/aucklandcouncil_govt_nz.md
# https://github.com/mampfes/hacs_waste_collection_schedule
#
# SCHEDULE SENSORS:
# - Types are rubbish, recycle, and food-waste.
# - Types are rubbish, recycling, and food scraps (matching Auckland source output).
# - Each sensor returns one upcoming collection with a one-day lead time.
# - details_format is upcoming and add_days_to adds relative-day text.
#
@@ -48,19 +60,20 @@
# - As of 2026-07-20, the rubbish schedule resolves correctly.
# - Recycling and food-waste report unknown; review the source type names when
# investigating those schedules.
# - As of 2026-07-22, fixed type names to match Auckland Council source output.
#
#:########################################################################################:#
waste_collection_schedule:
sources:
- name: aucklandcouncil_govt_nz
- name: !secret council_name
args:
area_number: 12344403722 # Auckland Council assessment number.
area_number: !secret council_area
sensor:
- platform: waste_collection_schedule
#source_index: 0
name: Auckland Council Waste
name: "Council Waste"
details_format: upcoming
count: 1
leadtime: 1
@@ -72,7 +85,7 @@ sensor:
- rubbish
- platform: waste_collection_schedule
#source_index: 0
name: Auckland Council Recycling
name: "Council Recycling"
details_format: upcoming
count: 1
leadtime: 1
@@ -81,10 +94,10 @@ sensor:
add_days_to: true
#event_index: EVENT_INDEX
types:
- recycle
- recycling
- platform: waste_collection_schedule
#source_index: 0
name: Auckland Council Food-Waste
name: "Council Food-Waste"
details_format: upcoming
count: 1
leadtime: 1
@@ -93,16 +106,16 @@ sensor:
add_days_to: true
#event_index: EVENT_INDEX
types:
- food-waste
- food scraps
mqtt:
sensor:
- unique_id: auckland_council_red_waste_bin_out
- unique_id: council_red_waste_bin_out
name: "Red Waste Bin Out"
state_topic: "viewroad-status/rubbishbinstatus/redbin-out"
- unique_id: auckland_council_green_recycling_bin_out
- unique_id: council_green_recycling_bin_out
name: "Green Recycling Bin Out"
state_topic: "viewroad-status/rubbishbinstatus/greenbin-out"
- unique_id: auckland_council_food_waste_bin_out
- unique_id: council_food_waste_bin_out
name: "Food Waste Bin Out"
state_topic: "viewroad-status/rubbishbinstatus/foodbin-out"
state_topic: "viewroad-status/rubbishbinstatus/foodbin-out"