mirror of
https://github.com/CCOSTAN/Home-AssistantConfig.git
synced 2026-07-23 15:56:09 -07:00
Add water maintenance and sprinkler dashboard updates
This commit is contained in:
@@ -18,10 +18,10 @@
|
||||
|
||||
Live, personal Home Assistant configuration shared for **browsing and inspiration**. This is not a turnkey clone-and-run setup; borrow ideas, adapt entity IDs/secrets, and test in your own environment.
|
||||
|
||||
### Latest video: Home Assistant Caught My HVAC Failure
|
||||
[](https://youtu.be/nScl2JxYSB8)
|
||||
### Latest video: Water Softener Salt, Tracked By Home Assistant
|
||||
[](https://youtu.be/_OqTv9i-jAs)
|
||||
|
||||
This walkthrough shows the Home Assistant evidence trail from a failed HVAC blower: cooling was active while the downstairs temperature kept climbing, then the maintenance dashboard turned the repair into runtime-based filter reminders, reset actions, and a 360-day condenser-line cleanout reminder. [](https://youtu.be/nScl2JxYSB8). Browse the YAML in [](config/packages/climate.yaml) and [](config/dashboards/overview/partials/water_sections.yaml), and follow the background in [issue #273](https://github.com/CCOSTAN/Home-AssistantConfig/issues/273).
|
||||
Start with the automation: one Home Assistant webhook records each water softener salt refill, ignores duplicate event IDs, updates helper state, writes Activity Feed history, and exposes template sensors for refill cadence, totals, and days since last add. The webhook can be fired by an agent, NFC tag, QR code, dashboard button, or any other trusted trigger. [](https://youtu.be/_OqTv9i-jAs) [](https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html). Browse the YAML in [](config/packages/maintenance_log.yaml), [](config/dashboards/overview/views/09_salt_trends.yaml), and [](config/dashboards/overview/partials/water_sections.yaml); the NFC/tag follow-up is tracked in [issue #1816](https://github.com/CCOSTAN/Home-AssistantConfig/issues/1816).
|
||||
|
||||
### Quick navigation
|
||||
- You are here: `/` (root repo guide)
|
||||
@@ -50,6 +50,8 @@ This walkthrough shows the Home Assistant evidence trail from a failed HVAC blow
|
||||
- LLM Vision package reminders: [](config/packages/llmvision.yaml), [](https://youtu.be/nAhCezFetvI)
|
||||
- Codex reset-credit tracking: [](config/packages/bearclaw.yaml), [config/dashboards/infrastructure](config/dashboards/infrastructure), [](https://youtu.be/7wKhtrvtyiI)
|
||||
- Water leak response loop: [](config/packages/phynplus.yaml), [](https://youtu.be/xbhgWnomFYI)
|
||||
- Water softener salt maintenance: [](config/packages/maintenance_log.yaml), [](config/dashboards/overview/views/09_salt_trends.yaml), [](config/dashboards/overview/partials/water_sections.yaml), [](https://youtu.be/_OqTv9i-jAs), [](https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html), [issue #1816](https://github.com/CCOSTAN/Home-AssistantConfig/issues/1816)
|
||||
- Sprinkler status and last-run dashboard: [](config/packages/rachio.yaml), [](config/dashboards/overview/views/10_sprinklers.yaml), [](config/dashboards/overview/partials/water_sections.yaml)
|
||||
- Bedroom camera kiosk tablet: [](config/packages/kiosk_tablet.yaml), [config/dashboards/kiosk](config/dashboards/kiosk), [](https://youtu.be/ChgEu0IDWzc)
|
||||
- Holiday/front-of-house color scenes: [](config/scene/monthly_colors.yaml), [](config/script/monthly_color_scene.yaml)
|
||||
- Dash-button triggers for quick actions: [](config/automation/dash_buttons.yaml)
|
||||
@@ -87,7 +89,7 @@ https://amzn.to/48jVzZ3
|
||||
| Garadget garage door controller | Garage doors: open/close, arrival helpers, wind alerts, and nighttime reminders - [](config/packages/garadget.yaml), [](https://youtu.be/wFO0H5zgnzk), [](https://www.vcloudinfo.com/2026/05/home-assistant-garage-automations-arrival-alerts-tesla.html) | [](https://amzn.to/2jQLpVQ) |
|
||||
| August smart lock | Front-door lock control + status - [](config/packages/august.yaml) | [](https://amzn.to/48jVzZ3) |
|
||||
| Phyn Plus water shutoff | Leak detection + auto shutoff - [](config/packages/phynplus.yaml), [](https://youtu.be/xbhgWnomFYI), [](https://www.vcloudinfo.com/2026/06/home-assistant-leak-detection-automations.html), [](https://www.vcloudinfo.com/2020/05/phyn-plus-smart-water-shutoff-device.html) | [](https://amzn.to/2Zy3sbJ) |
|
||||
| Rachio sprinkler controller | Rain-skips and seasonal watering - [](config/packages/rachio.yaml) | [](https://amzn.to/2eoPKBW) |
|
||||
| Rachio sprinkler controller | Rain-skips, active-zone status, trigger-derived last-run history, and dashboard controls - [](config/packages/rachio.yaml), [](config/dashboards/overview/views/10_sprinklers.yaml), [](config/dashboards/overview/partials/water_sections.yaml) | [](https://amzn.to/2eoPKBW) |
|
||||
| Tesla Powerwall 2 | Grid-outage alerts, charging watchdog, and load-shed automations - [](config/packages/powerwall.yaml), [](https://youtu.be/hR_0lFEE2bA), [](https://www.vcloudinfo.com/2026/06/tesla-powerwall-home-assistant-watchdog.html) | [](https://amzn.to/3UM4BZ5) |
|
||||
| Google Nest thermostat | HVAC schedules plus runtime-based filter reminders and condenser-line cleanout tracking - [](config/packages/climate.yaml), [](config/dashboards/overview/partials/water_sections.yaml), [](https://youtu.be/nScl2JxYSB8) | [](https://amzn.to/4olpINw) |
|
||||
| NodeMCU motion sensor | Office motion lighting - [](config/packages/office_motion.yaml) | [](https://amzn.to/2oUgj5i) |
|
||||
|
||||
+3
-3
@@ -43,7 +43,7 @@ Live view of the `config/` directory my production Home Assistant instance loads
|
||||
### Featured automations by section
|
||||
| Section | Why start here | Featured automation(s) |
|
||||
| --- | --- | --- |
|
||||
| Packages | Self-contained subsystems that highlight patterns like combined alerts + actions. | [](packages/alarm.yaml), [](packages/garadget.yaml), [](packages/llmvision.yaml), [](packages/phynplus.yaml), [](packages/kiosk_tablet.yaml), [](packages/vacation_mode.yaml), [](packages/vacuum.yaml), [](packages/powerwall.yaml) |
|
||||
| Packages | Self-contained subsystems that highlight patterns like combined alerts + actions. | [](packages/alarm.yaml), [](packages/garadget.yaml), [](packages/llmvision.yaml), [](packages/phynplus.yaml), [](packages/maintenance_log.yaml), [](packages/rachio.yaml), [](packages/kiosk_tablet.yaml), [](packages/vacation_mode.yaml), [](packages/vacuum.yaml), [](packages/powerwall.yaml) |
|
||||
| Automations | Real-world triggers that tie Zwave, MQTT, and REST sensors into the rest of the house. | [](automation/garage_entry_light.yaml), [](automation/dark_rainy_day.yaml), [](automation/dash_buttons.yaml) |
|
||||
| Scripts | Reusable building blocks for lighting, notifications, safety responses, and Joanna/BearClaw remediation dispatch. | [](script/joanna_dispatch.yaml), [](script/notify_engine.yaml), [](script/speech_engine.yaml) |
|
||||
| Scenes | Seasonal and ambiance presets that the scripts and automations call into. | [](scene/monthly_colors.yaml), [](scene/living_room.yaml) |
|
||||
@@ -51,7 +51,7 @@ Live view of the `config/` directory my production Home Assistant instance loads
|
||||
| Dashboards & Media | UI chrome, floorplans, sound bites, and automation assets. | [dashboards/kiosk](dashboards/kiosk), [topology diagram](../README.md#network-diagram), [media/](media) |
|
||||
| Seasonal Audio | Cuckoo clock with Halloween and Christmas sound packs. | [](automation/System/CucKoo_Clock.yaml) |
|
||||
|
||||
The latest walkthrough shows the HVAC maintenance loop in Home Assistant. [](https://youtu.be/nScl2JxYSB8). YAML lives in [](packages/climate.yaml) and [](dashboards/overview/partials/water_sections.yaml), with background in [issue #273](https://github.com/CCOSTAN/Home-AssistantConfig/issues/273). The earlier Powerwall, Codex reset-credit, leak-detection, kiosk, and LLM Vision walkthroughs are still available with examples in [](packages/powerwall.yaml), [](packages/bearclaw.yaml), [](packages/phynplus.yaml), [](packages/kiosk_tablet.yaml), and [](packages/llmvision.yaml).
|
||||
The latest walkthrough shows a water softener salt maintenance automation built around a reusable Home Assistant webhook, duplicate-safe helper updates, Activity Feed logging, and dashboard-ready template sensors. [](https://youtu.be/_OqTv9i-jAs) [](https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html). YAML lives in [](packages/maintenance_log.yaml), [](dashboards/overview/views/09_salt_trends.yaml), and [](dashboards/overview/partials/water_sections.yaml). The earlier HVAC, Powerwall, Codex reset-credit, leak-detection, kiosk, and LLM Vision walkthroughs are still available with examples in [](packages/climate.yaml), [](packages/powerwall.yaml), [](packages/bearclaw.yaml), [](packages/phynplus.yaml), [](packages/kiosk_tablet.yaml), and [](packages/llmvision.yaml).
|
||||
|
||||
### Gear tied to these automations (affiliate links)
|
||||
Only including devices that have active references in the files above or an open implementation issue.
|
||||
@@ -63,7 +63,7 @@ Only including devices that have active references in the files above or an open
|
||||
| August smart lock | Front-door lock status + remote control – [](packages/august.yaml) | [](https://amzn.to/48jVzZ3) |
|
||||
| Amazon Echo Show | Pops up the front doorbell camera when the August lock unlocks – [](packages/august.yaml) | [](https://amzn.to/4ptA3YO) |
|
||||
| Phyn Plus water shutoff | Leak detection + auto shutoff - [](packages/phynplus.yaml), [](https://youtu.be/xbhgWnomFYI), [](https://www.vcloudinfo.com/2026/06/home-assistant-leak-detection-automations.html), [](https://www.vcloudinfo.com/2020/05/phyn-plus-smart-water-shutoff-device.html) | [](https://amzn.to/2Zy3sbJ) |
|
||||
| Rachio sprinkler controller | Rain-skips and seasonal watering – [](packages/rachio.yaml) | [](https://amzn.to/2eoPKBW) |
|
||||
| Rachio sprinkler controller | Rain-skips, active-zone status, trigger-derived last-run history, and dashboard controls – [](packages/rachio.yaml), [](dashboards/overview/views/10_sprinklers.yaml), [](dashboards/overview/partials/water_sections.yaml) | [](https://amzn.to/2eoPKBW) |
|
||||
| Tesla Powerwall 2 | Grid-outage alerts, charging watchdog, and load-shed automations - [](packages/powerwall.yaml), [](https://youtu.be/hR_0lFEE2bA), [](https://www.vcloudinfo.com/2026/06/tesla-powerwall-home-assistant-watchdog.html) | [](https://amzn.to/3UM4BZ5) |
|
||||
| Google Nest thermostat | HVAC schedules plus runtime-based filter reminders and condenser-line cleanout tracking - [](packages/climate.yaml), [](dashboards/overview/partials/water_sections.yaml), [](https://youtu.be/nScl2JxYSB8) | [](https://amzn.to/4olpINw) |
|
||||
| NodeMCU motion sensor | Office motion lighting + comfort scenes – [](packages/office_motion.yaml) | [](https://amzn.to/2oUgj5i) |
|
||||
|
||||
@@ -8,7 +8,10 @@
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Extracted from config/dashboards/overview/views/07_water.yaml key `sections`.
|
||||
# Notes: Includes water and home utility telemetry (filters, power, hot water).
|
||||
# Video: https://youtu.be/nScl2JxYSB8
|
||||
# Video: HVAC maintenance dashboard - https://youtu.be/nScl2JxYSB8
|
||||
# Video: Water softener salt tracking - https://youtu.be/_OqTv9i-jAs
|
||||
# Blog: https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html
|
||||
# Notes: Sprinkler overview links to config/dashboards/overview/views/10_sprinklers.yaml.
|
||||
######################################################################
|
||||
|
||||
- cards:
|
||||
@@ -141,6 +144,62 @@
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
# Fallback card: Mushroom matches the existing Home Maintenance overview tile style.
|
||||
- type: custom:mushroom-template-card
|
||||
primary: >-
|
||||
{% set status = states('sensor.rachio_controller_status') %}
|
||||
{% set active = states('sensor.rachio_active_zone') %}
|
||||
{% if status == 'watering' %}
|
||||
Sprinklers: {{ active }}
|
||||
{% elif status == 'rain_delay' %}
|
||||
Sprinklers: rain delay
|
||||
{% elif status == 'standby' %}
|
||||
Sprinklers: standby
|
||||
{% elif status == 'unavailable' %}
|
||||
Sprinklers: unavailable
|
||||
{% else %}
|
||||
Sprinklers: ready
|
||||
{% endif %}
|
||||
secondary: >-
|
||||
{% set zone = states('sensor.rachio_last_run_summary') %}
|
||||
{% set completed = state_attr('sensor.rachio_last_run_summary', 'completed_at') %}
|
||||
{% set duration = state_attr('sensor.rachio_last_run_summary', 'duration_min') %}
|
||||
{% if zone not in ['unknown', 'unavailable', 'none', ''] and completed not in ['unknown', 'unavailable', 'none', '', none] %}
|
||||
{% set when = as_datetime(completed).strftime('%b %d, %I:%M %p') | replace(' 0', ' ') %}
|
||||
Last run: {{ zone }}{% if duration not in ['unknown', 'unavailable', 'none', '', none] %}, {{ duration }} min{% endif %} at {{ when }}
|
||||
{% else %}
|
||||
{{ state_attr('sensor.rachio_controller_status', 'schedule_summary') | default('No completed run captured yet.', true) }}
|
||||
{% endif %}
|
||||
icon: mdi:sprinkler-variant
|
||||
entity: sensor.rachio_controller_status
|
||||
icon_color: >-
|
||||
{% set status = states('sensor.rachio_controller_status') %}
|
||||
{% if status == 'watering' %}
|
||||
green
|
||||
{% elif status in ['rain_delay', 'standby'] %}
|
||||
blue
|
||||
{% elif status == 'unavailable' %}
|
||||
red
|
||||
{% else %}
|
||||
teal
|
||||
{% endif %}
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/sprinklers
|
||||
hold_action:
|
||||
action: more-info
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
- type: tile
|
||||
entity: switch.carlo_rachio_rain_delay
|
||||
name: Sprinkler rain delay
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/sprinklers
|
||||
hold_action:
|
||||
action: more-info
|
||||
- type: custom:mushroom-template-card
|
||||
primary: >-
|
||||
{% set days = states('sensor.water_softener_salt_days_since_last_add') | float(0) -%}
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
# Overview Subview - Salt Trends
|
||||
# Year-scale water softener salt maintenance history.
|
||||
# -------------------------------------------------------------------
|
||||
# Video: https://youtu.be/_OqTv9i-jAs
|
||||
# Blog: https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html
|
||||
# Notes: Linked from the Home Maintenance water view salt tiles.
|
||||
# Notes: Uses native history graph cards because more-info dialogs do not expose a configurable default time window.
|
||||
######################################################################
|
||||
|
||||
@@ -0,0 +1,255 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview Subview - Sprinklers
|
||||
# Rachio-backed sprinkler status, zone history, and watering controls.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Linked from the Home Maintenance water view sprinkler tiles.
|
||||
# Notes: Zone last-run values come from trigger-based template sensors in config/packages/rachio.yaml.
|
||||
######################################################################
|
||||
|
||||
title: Sprinklers
|
||||
path: sprinklers
|
||||
subview: true
|
||||
back_path: /lovelace/water
|
||||
type: sections
|
||||
max_columns: 3
|
||||
sections:
|
||||
- type: grid
|
||||
column_span: 3
|
||||
cards:
|
||||
- type: heading
|
||||
heading: Sprinklers
|
||||
heading_style: title
|
||||
# Fallback card: Mushroom is already the established Home Maintenance summary style.
|
||||
- type: custom:mushroom-template-card
|
||||
primary: >-
|
||||
{% set status = states('sensor.rachio_controller_status') %}
|
||||
{% set active = states('sensor.rachio_active_zone') %}
|
||||
{% if status == 'watering' %}
|
||||
Watering {{ active }}
|
||||
{% elif status == 'rain_delay' %}
|
||||
Rain delay is active
|
||||
{% elif status == 'standby' %}
|
||||
Controller is in standby
|
||||
{% elif status == 'unavailable' %}
|
||||
Sprinklers are unavailable
|
||||
{% else %}
|
||||
Sprinklers are ready
|
||||
{% endif %}
|
||||
secondary: >-
|
||||
{% set last = states('sensor.rachio_last_run_summary') %}
|
||||
{% set completed = state_attr('sensor.rachio_last_run_summary', 'completed_at') %}
|
||||
{% set duration = state_attr('sensor.rachio_last_run_summary', 'duration_min') %}
|
||||
{% if last not in ['unknown', 'unavailable', 'none', ''] and completed not in ['unknown', 'unavailable', 'none', '', none] %}
|
||||
{% set when = as_datetime(completed).strftime('%b %d, %I:%M %p') | replace(' 0', ' ') %}
|
||||
Last run: {{ last }} for {{ duration }} min at {{ when }}
|
||||
{% else %}
|
||||
{{ state_attr('sensor.rachio_controller_status', 'schedule_summary') | default('No completed run captured yet.', true) }}
|
||||
{% endif %}
|
||||
icon: mdi:sprinkler-variant
|
||||
entity: sensor.rachio_controller_status
|
||||
icon_color: >-
|
||||
{% set status = states('sensor.rachio_controller_status') %}
|
||||
{% if status == 'watering' %}
|
||||
green
|
||||
{% elif status in ['rain_delay', 'standby'] %}
|
||||
blue
|
||||
{% elif status == 'unavailable' %}
|
||||
red
|
||||
{% else %}
|
||||
teal
|
||||
{% endif %}
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: none
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
- type: tile
|
||||
entity: switch.daily_flex_watering_schedule
|
||||
name: Flex watering schedule
|
||||
hold_action:
|
||||
action: more-info
|
||||
- type: tile
|
||||
entity: switch.carlo_rachio_rain_delay
|
||||
name: Rain delay
|
||||
hold_action:
|
||||
action: more-info
|
||||
- type: tile
|
||||
entity: switch.carlo_rachio_in_standby_mode
|
||||
name: Standby mode
|
||||
hold_action:
|
||||
action: more-info
|
||||
- type: tile
|
||||
entity: script.rachio_pause_watering_30
|
||||
name: Pause 30 minutes
|
||||
icon: mdi:pause-circle
|
||||
tap_action:
|
||||
action: call-service
|
||||
service: script.rachio_pause_watering_30
|
||||
- type: tile
|
||||
entity: script.rachio_resume_watering
|
||||
name: Resume watering
|
||||
icon: mdi:play-circle
|
||||
tap_action:
|
||||
action: call-service
|
||||
service: script.rachio_resume_watering
|
||||
- type: tile
|
||||
entity: script.rachio_stop_watering
|
||||
name: Stop watering
|
||||
icon: mdi:stop-circle
|
||||
tap_action:
|
||||
action: call-service
|
||||
service: script.rachio_stop_watering
|
||||
- type: grid
|
||||
column_span: 3
|
||||
cards:
|
||||
- type: heading
|
||||
heading: Zones
|
||||
heading_style: subtitle
|
||||
# Fallback card: Mushroom template card combines live zone state and the paired last-run sensor in one compact tile.
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Front Lawn
|
||||
secondary: >-
|
||||
{% set completed = state_attr('sensor.rachio_front_lawn_last_run', 'completed_at') %}
|
||||
{% set minutes = states('sensor.rachio_front_lawn_last_run') %}
|
||||
{% if is_state('switch.front_lawn', 'on') %}
|
||||
{{ state_attr('switch.front_lawn', 'Summary') | default('Watering now', true) }}
|
||||
{% elif completed not in ['unknown', 'unavailable', 'none', '', none] %}
|
||||
{% set when = as_datetime(completed).strftime('%b %d, %I:%M %p') | replace(' 0', ' ') %}
|
||||
Last run: {{ when }} for {{ minutes }} min
|
||||
{% else %}
|
||||
{{ state_attr('switch.front_lawn', 'Summary') | default('No completed run captured yet.', true) }}
|
||||
{% endif %}
|
||||
icon: mdi:sprinkler-variant
|
||||
entity: switch.front_lawn
|
||||
icon_color: "{% if is_state('switch.front_lawn', 'on') %}green{% elif is_state('switch.front_lawn', 'unavailable') %}red{% else %}blue{% endif %}"
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: more-info
|
||||
entity: sensor.rachio_front_lawn_last_run
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
# Fallback card: same compact zone-state and last-run pairing for this zone.
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Front Hedges
|
||||
secondary: >-
|
||||
{% set completed = state_attr('sensor.rachio_front_hedges_last_run', 'completed_at') %}
|
||||
{% set minutes = states('sensor.rachio_front_hedges_last_run') %}
|
||||
{% if is_state('switch.front_hedges_right_side_house', 'on') %}
|
||||
{{ state_attr('switch.front_hedges_right_side_house', 'Summary') | default('Watering now', true) }}
|
||||
{% elif completed not in ['unknown', 'unavailable', 'none', '', none] %}
|
||||
{% set when = as_datetime(completed).strftime('%b %d, %I:%M %p') | replace(' 0', ' ') %}
|
||||
Last run: {{ when }} for {{ minutes }} min
|
||||
{% else %}
|
||||
{{ state_attr('switch.front_hedges_right_side_house', 'Summary') | default('No completed run captured yet.', true) }}
|
||||
{% endif %}
|
||||
icon: mdi:sprinkler-variant
|
||||
entity: switch.front_hedges_right_side_house
|
||||
icon_color: "{% if is_state('switch.front_hedges_right_side_house', 'on') %}green{% elif is_state('switch.front_hedges_right_side_house', 'unavailable') %}red{% else %}blue{% endif %}"
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: more-info
|
||||
entity: sensor.rachio_front_hedges_last_run
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
# Fallback card: same compact zone-state and last-run pairing for this zone.
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Left Side House
|
||||
secondary: >-
|
||||
{% set completed = state_attr('sensor.rachio_left_side_house_last_run', 'completed_at') %}
|
||||
{% set minutes = states('sensor.rachio_left_side_house_last_run') %}
|
||||
{% if is_state('switch.left_side_house', 'on') %}
|
||||
{{ state_attr('switch.left_side_house', 'Summary') | default('Watering now', true) }}
|
||||
{% elif completed not in ['unknown', 'unavailable', 'none', '', none] %}
|
||||
{% set when = as_datetime(completed).strftime('%b %d, %I:%M %p') | replace(' 0', ' ') %}
|
||||
Last run: {{ when }} for {{ minutes }} min
|
||||
{% else %}
|
||||
{{ state_attr('switch.left_side_house', 'Summary') | default('No completed run captured yet.', true) }}
|
||||
{% endif %}
|
||||
icon: mdi:sprinkler-variant
|
||||
entity: switch.left_side_house
|
||||
icon_color: "{% if is_state('switch.left_side_house', 'on') %}green{% elif is_state('switch.left_side_house', 'unavailable') %}red{% else %}blue{% endif %}"
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: more-info
|
||||
entity: sensor.rachio_left_side_house_last_run
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
# Fallback card: same compact zone-state and last-run pairing for this zone.
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Backyard Shrubs
|
||||
secondary: >-
|
||||
{% set completed = state_attr('sensor.rachio_backyard_shrubs_last_run', 'completed_at') %}
|
||||
{% set minutes = states('sensor.rachio_backyard_shrubs_last_run') %}
|
||||
{% if is_state('switch.backyard_shrubs', 'on') %}
|
||||
{{ state_attr('switch.backyard_shrubs', 'Summary') | default('Watering now', true) }}
|
||||
{% elif completed not in ['unknown', 'unavailable', 'none', '', none] %}
|
||||
{% set when = as_datetime(completed).strftime('%b %d, %I:%M %p') | replace(' 0', ' ') %}
|
||||
Last run: {{ when }} for {{ minutes }} min
|
||||
{% else %}
|
||||
{{ state_attr('switch.backyard_shrubs', 'Summary') | default('No completed run captured yet.', true) }}
|
||||
{% endif %}
|
||||
icon: mdi:sprinkler-variant
|
||||
entity: switch.backyard_shrubs
|
||||
icon_color: "{% if is_state('switch.backyard_shrubs', 'on') %}green{% elif is_state('switch.backyard_shrubs', 'unavailable') %}red{% else %}blue{% endif %}"
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: more-info
|
||||
entity: sensor.rachio_backyard_shrubs_last_run
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
- type: grid
|
||||
column_span: 3
|
||||
cards:
|
||||
- type: heading
|
||||
heading: Last Run History
|
||||
heading_style: subtitle
|
||||
# Fallback card: native entities card exposes attributes without adding more template helpers.
|
||||
- type: entities
|
||||
title: Last Completed Run
|
||||
entities:
|
||||
- entity: sensor.rachio_last_run_summary
|
||||
name: Zone
|
||||
- type: attribute
|
||||
entity: sensor.rachio_last_run_summary
|
||||
attribute: duration_min
|
||||
name: Duration
|
||||
suffix: min
|
||||
- type: attribute
|
||||
entity: sensor.rachio_last_run_summary
|
||||
attribute: completed_at
|
||||
name: Completed
|
||||
- entity: sensor.rachio_active_zone
|
||||
name: Active zone
|
||||
# Fallback card: native history graph gives sparse duration history without another custom graph template.
|
||||
- type: history-graph
|
||||
title: Zone Run Durations - Last 90 Days
|
||||
hours_to_show: 2160
|
||||
entities:
|
||||
- entity: sensor.rachio_front_lawn_last_run
|
||||
name: Front Lawn
|
||||
- entity: sensor.rachio_front_hedges_last_run
|
||||
name: Front Hedges
|
||||
- entity: sensor.rachio_left_side_house_last_run
|
||||
name: Left Side House
|
||||
- entity: sensor.rachio_backyard_shrubs_last_run
|
||||
name: Backyard Shrubs
|
||||
cards: []
|
||||
@@ -63,8 +63,9 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
|
||||
| [](telegram_bot.yaml) | Legacy Telegram transport marker for BearClaw; the shared `joanna_send_telegram` helper now forwards through the codex_appliance direct Telegram API. | `rest_command.bearclaw_telegram_send`, `script.joanna_send_telegram` |
|
||||
| [](phynplus.yaml) | Phyn shutoff automations with leak-test guard, Activity Feed context, Repairs tracking, and critical push recovery when the valve closes. [](https://youtu.be/xbhgWnomFYI) | `valve.phyn_shutoff_valve`, `binary_sensor.phyn_leak_test_running`, `script.phyn_send_actionable_leak_notification`, `repairs.create` |
|
||||
| [](water_delivery.yaml) | ReadyRefresh delivery date helper with night-before plus day-before garage door Alexa reminders, helper-change audit logging, and Telegram confirmations. | `input_datetime.water_delivery_date`, `script.send_to_logbook`, `script.joanna_send_telegram`, `notify.alexa_media_garage` |
|
||||
| [](rachio.yaml) + [](../dashboards/overview/views/10_sprinklers.yaml) | Rachio sprinkler status with active-zone summaries, trigger-derived last-run duration sensors, dashboard controls, and Activity Feed audit logging without input_* helpers. | `sensor.rachio_controller_status`, `sensor.rachio_last_run_summary`, `sensor.rachio_*_last_run`, `script.rachio_*`, `automation.rachio_activity_feed` |
|
||||
| [](vacation_mode.yaml) | Auto-enable vacation mode after 24 hours away or no bed use, track sitter analytics/secure-house checks, stale-visit timeout protection, deliver sitter-facing briefings, and send 10 AM/10 PM house digests with Powerwall/security/backup status plus Joanna review. | `input_boolean.vacation_mode`, `input_boolean.house_sitter_present`, `input_datetime.vacation_house_sitter_*`, `input_datetime.vacation_house_status_digest_last_sent`, `sensor.vacation_house_sitter_*`, `binary_sensor.powerwall_grid_status`, `sensor.powerwall_charge`, `group.garage_doors`, `lock.front_door`, `script.vacation_house_sitter_clear_presence`, `script.vacation_house_status_digest`, `script.notify_engine`, `rest_command.bearclaw_command`, `script.joanna_send_telegram` |
|
||||
| [](maintenance_log.yaml) | Joanna maintenance webhook ingest for water softener salt with idempotent event handling, Activity feed logging, and parser-safe refill cadence history. | `automation.maintenance_log_joanna_webhook_ingest`, `sensor.water_softener_salt_average_days_between_refills`, `sensor.water_softener_salt_refill_count`, `sensor.water_softener_salt_total_added` |
|
||||
| [](maintenance_log.yaml) | Webhook-based water softener salt maintenance logging with idempotent event handling, Activity Feed logging, parser-safe refill cadence history, and dashboard-ready template sensors. [](https://youtu.be/_OqTv9i-jAs) [](https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html) | `automation.maintenance_log_joanna_webhook_ingest`, `sensor.water_softener_salt_average_days_between_refills`, `sensor.water_softener_salt_refill_count`, `sensor.water_softener_salt_total_added` |
|
||||
| [](kiosk_tablet.yaml) | Keeps the bedroom Fully Kiosk Fire tablet pinned to the dedicated camera kiosk dashboard when the page or foreground app drifts; normal wake events only restore brightness/focus. [](https://youtu.be/ChgEu0IDWzc) | `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) | Track Tesla Powerwall grid status, push live outage tracking to mobile targets, shed loads automatically when off-grid, and alert if the Powerwall stays low after grid power returns. [](https://youtu.be/hR_0lFEE2bA) [](https://www.vcloudinfo.com/2026/06/tesla-powerwall-home-assistant-watchdog.html) | `binary_sensor.powerwall_grid_status`, `sensor.powerwall_*`, `script.notify_live_activity`, `repairs.create` |
|
||||
| [](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` |
|
||||
@@ -107,6 +108,7 @@ When a package has a dedicated blog post or video, I link it right inside the YA
|
||||
| [](kiosk_tablet.yaml) + [dashboards/kiosk](../dashboards/kiosk) | Fire tablet camera kiosk with a purpose-built dashboard, Fully Kiosk recovery, bedtime dimming, and screensaver watchdog behavior. | [](https://youtu.be/ChgEu0IDWzc) · [](https://www.vcloudinfo.com/2017/08/project-update-visualization-of-home.html) |
|
||||
| [](tesla_model_y.yaml) | Garage-close timestamp used as a physical arrival signal for low-battery plug-in reminders. | [](https://youtu.be/wFO0H5zgnzk) · [](https://www.vcloudinfo.com/2026/05/home-assistant-garage-automations-arrival-alerts-tesla.html) |
|
||||
| [](llmvision.yaml) | LLM Vision package reminder flow that turns a front-door camera event into a stored package-present state and phone alert. | [](https://youtu.be/nAhCezFetvI) |
|
||||
| [](maintenance_log.yaml) + [](../dashboards/overview/views/09_salt_trends.yaml) + [](../dashboards/overview/partials/water_sections.yaml) | Water softener salt maintenance flow with a reusable webhook, duplicate protection, helper-backed history, template sensors, and Salt Trends dashboard views. | [](https://youtu.be/_OqTv9i-jAs) · [](https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html) · [Issue #1816](https://github.com/CCOSTAN/Home-AssistantConfig/issues/1816) |
|
||||
| [](climate.yaml) + [](../dashboards/overview/partials/water_sections.yaml) | HVAC blower-failure evidence, runtime-based AC filter reminders, reset actions, and 360-day condenser-line cleanout reminders. | [](https://youtu.be/nScl2JxYSB8) · [Issue #273](https://github.com/CCOSTAN/Home-AssistantConfig/issues/273) |
|
||||
| [](climate.yaml) + [](printer.yaml) + [](vacation_mode.yaml) | Snoozeable Home Assistant mobile notifications for AC filters, printer ink, and Vacation Mode missed-visit reminders. | [](https://youtu.be/y47KSflS1aw) · [](https://www.vcloudinfo.com/2026/06/home-assistant-notification-snooze-buttons.html) · [](https://www.vcloudinfo.com/2020/11/home-assistant-ios-actionable-notifications-example.html) |
|
||||
| [](holiday.yaml) | How the holiday/flag sensor works and drives lighting playlists. | [](https://www.vcloudinfo.com/2019/02/breaking-down-the-flag-sensor-in-home-assistant.html) |
|
||||
@@ -130,7 +132,7 @@ These are the devices that power the packages above, plus tracked hardware imple
|
||||
| Amazon Echo Show | Pops up the front doorbell camera when the August lock unlocks. | [](august.yaml) | [](https://amzn.to/4ptA3YO) |
|
||||
| Amazon Echo Glow | [](https://github.com/CCOSTAN/Home-AssistantConfig/issues/1827) | Visual notification light candidate for Home Assistant status cues. | [](https://amzn.to/4wsGUoU) |
|
||||
| Phyn Plus water shutoff | [](phynplus.yaml) | Leak events trigger valve closes + critical push notifications. [](https://youtu.be/xbhgWnomFYI) and [](https://www.vcloudinfo.com/2026/06/home-assistant-leak-detection-automations.html). | [](https://amzn.to/2Zy3sbJ) |
|
||||
| Rachio sprinkler controller | [](rachio.yaml) | Rain skips and seasonal watering adjustments happen automatically. | [](https://amzn.to/2eoPKBW) |
|
||||
| Rachio sprinkler controller | [](rachio.yaml) + [](../dashboards/overview/views/10_sprinklers.yaml) + [](../dashboards/overview/partials/water_sections.yaml) | Rain skips, active-zone status, trigger-derived last-run history, and dashboard controls. | [](https://amzn.to/2eoPKBW) |
|
||||
| Tesla Powerwall 2 | [](powerwall.yaml) | Grid outages kick off status pings, load-shed scripts, and low-charge charging watchdog alerts. [](https://youtu.be/hR_0lFEE2bA) | [](https://amzn.to/3UM4BZ5) |
|
||||
| Google Nest thermostat | [](climate.yaml) | Presence/weather/grid-aware cooling targets, humidity pulses, runtime filter reminders, and condenser-line cleanout tracking. [](https://youtu.be/nScl2JxYSB8) | [](https://amzn.to/4olpINw) |
|
||||
| Dreame/Neato vacuum | [](vacuum.yaml) | Away-only room queues, sweep/mop phases, Alexa room cleans, rescue notifications, and voice callouts. [](https://youtu.be/KKOWSKuF5jA) and [](https://www.vcloudinfo.com/2026/05/home-assistant-vacuum-automations-dreame-2026.html). | [](https://amzn.to/4f7NpFP) |
|
||||
|
||||
@@ -3,10 +3,12 @@
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Maintenance Logging - Joanna webhook ingest + graphable HA history
|
||||
# Maintenance Logging - webhook ingest + graphable HA history
|
||||
# Stores water softener salt maintenance events in recorder-backed helpers.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Webhook id is bearclaw_maintenance_log_v1 (Joanna -> HA contract).
|
||||
# Video: https://youtu.be/_OqTv9i-jAs
|
||||
# Blog: https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html
|
||||
# Notes: Webhook id is bearclaw_maintenance_log_v1; payloads can come from agents, NFC tags, QR codes, or dashboard buttons.
|
||||
# Notes: Duplicate event_id values are ignored to prevent double-count totals.
|
||||
# Notes: Recent event history string format is "YYYY-MM-DD HH:MM:SS|amount|note||...".
|
||||
# Notes: Long-term stats live on template sensors; helpers are internal state for restore/calculation.
|
||||
|
||||
+352
-7
@@ -3,13 +3,358 @@
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Rachio Sprinkler - Rain skips and seasonal scheduling - Smart sprinkler controller via Rachio. https://amzn.to/2eoPKBW.
|
||||
# Centralizes the Rachio Sprinkler - Rain skips and seasonal scheduling package configuration and helpers.
|
||||
# Rachio Sprinkler - dashboard state, run history, and watering controls - Smart sprinkler controller via Rachio. https://amzn.to/2eoPKBW.
|
||||
# Builds a reusable sprinkler dashboard pattern around native Rachio zone switches and controller actions.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Attribute audit found native zone metadata and active-run summaries, but no durable off-state last-run/duration attributes.
|
||||
# Notes: Last-run sensors are trigger-based template sensors derived from zone on->off transitions; no input_* helpers are used.
|
||||
######################################################################
|
||||
#
|
||||
# sensor:
|
||||
# - platform: mqtt
|
||||
# state_topic: "ifttt/rachio/watering_time"
|
||||
# name: "Rachio_watering_time"
|
||||
|
||||
template:
|
||||
- binary_sensor:
|
||||
- name: Rachio Watering Now
|
||||
unique_id: rachio_watering_now
|
||||
icon: mdi:sprinkler-variant
|
||||
state: >-
|
||||
{% set zones = [
|
||||
'switch.front_lawn',
|
||||
'switch.front_hedges_right_side_house',
|
||||
'switch.left_side_house',
|
||||
'switch.backyard_shrubs'
|
||||
] %}
|
||||
{{ expand(zones) | selectattr('state', 'eq', 'on') | list | count > 0 }}
|
||||
attributes:
|
||||
active_zones: >-
|
||||
{% set zones = [
|
||||
'switch.front_lawn',
|
||||
'switch.front_hedges_right_side_house',
|
||||
'switch.left_side_house',
|
||||
'switch.backyard_shrubs'
|
||||
] %}
|
||||
{% set active = expand(zones) | selectattr('state', 'eq', 'on') | list %}
|
||||
{{ active | map(attribute='name') | map('replace', 'Carlo-Rachio ', '') | list | join(', ') }}
|
||||
active_zone_entities: >-
|
||||
{% set zones = [
|
||||
'switch.front_lawn',
|
||||
'switch.front_hedges_right_side_house',
|
||||
'switch.left_side_house',
|
||||
'switch.backyard_shrubs'
|
||||
] %}
|
||||
{% set active = expand(zones) | selectattr('state', 'eq', 'on') | list %}
|
||||
{{ active | map(attribute='entity_id') | list | join(', ') }}
|
||||
sensor:
|
||||
- name: Rachio Active Zone
|
||||
unique_id: rachio_active_zone
|
||||
icon: mdi:sprinkler-variant
|
||||
state: >-
|
||||
{% set zones = [
|
||||
'switch.front_lawn',
|
||||
'switch.front_hedges_right_side_house',
|
||||
'switch.left_side_house',
|
||||
'switch.backyard_shrubs'
|
||||
] %}
|
||||
{% set active = expand(zones) | selectattr('state', 'eq', 'on') | list %}
|
||||
{% if not is_state('binary_sensor.carlo_rachio', 'on') %}
|
||||
Unavailable
|
||||
{% elif active | count > 0 %}
|
||||
{{ active | map(attribute='name') | map('replace', 'Carlo-Rachio ', '') | list | join(', ') }}
|
||||
{% else %}
|
||||
Idle
|
||||
{% endif %}
|
||||
attributes:
|
||||
active_zone_entities: >-
|
||||
{% set zones = [
|
||||
'switch.front_lawn',
|
||||
'switch.front_hedges_right_side_house',
|
||||
'switch.left_side_house',
|
||||
'switch.backyard_shrubs'
|
||||
] %}
|
||||
{% set active = expand(zones) | selectattr('state', 'eq', 'on') | list %}
|
||||
{{ active | map(attribute='entity_id') | list | join(', ') }}
|
||||
schedule_state: "{{ states('switch.daily_flex_watering_schedule') }}"
|
||||
- name: Rachio Controller Status
|
||||
unique_id: rachio_controller_status
|
||||
icon: mdi:sprinkler-variant
|
||||
state: >-
|
||||
{% set zones = [
|
||||
'switch.front_lawn',
|
||||
'switch.front_hedges_right_side_house',
|
||||
'switch.left_side_house',
|
||||
'switch.backyard_shrubs'
|
||||
] %}
|
||||
{% set active = expand(zones) | selectattr('state', 'eq', 'on') | list %}
|
||||
{% if not is_state('binary_sensor.carlo_rachio', 'on') %}
|
||||
unavailable
|
||||
{% elif active | count > 0 %}
|
||||
watering
|
||||
{% elif is_state('switch.carlo_rachio_rain_delay', 'on') %}
|
||||
rain_delay
|
||||
{% elif is_state('switch.carlo_rachio_in_standby_mode', 'on') %}
|
||||
standby
|
||||
{% else %}
|
||||
ready
|
||||
{% endif %}
|
||||
attributes:
|
||||
controller_online: "{{ states('binary_sensor.carlo_rachio') }}"
|
||||
rain_sensor: "{{ states('binary_sensor.carlo_rachio_rain_sensor') }}"
|
||||
rain_delay: "{{ states('switch.carlo_rachio_rain_delay') }}"
|
||||
standby: "{{ states('switch.carlo_rachio_in_standby_mode') }}"
|
||||
active_zones: >-
|
||||
{% set zones = [
|
||||
'switch.front_lawn',
|
||||
'switch.front_hedges_right_side_house',
|
||||
'switch.left_side_house',
|
||||
'switch.backyard_shrubs'
|
||||
] %}
|
||||
{% set active = expand(zones) | selectattr('state', 'eq', 'on') | list %}
|
||||
{{ active | map(attribute='name') | map('replace', 'Carlo-Rachio ', '') | list | join(', ') }}
|
||||
schedule_summary: "{{ state_attr('switch.daily_flex_watering_schedule', 'Summary') }}"
|
||||
schedule_duration: "{{ state_attr('switch.daily_flex_watering_schedule', 'Duration') }}"
|
||||
schedule_type: "{{ state_attr('switch.daily_flex_watering_schedule', 'Type') }}"
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id:
|
||||
- switch.front_lawn
|
||||
- switch.front_hedges_right_side_house
|
||||
- switch.left_side_house
|
||||
- switch.backyard_shrubs
|
||||
from: "on"
|
||||
to: "off"
|
||||
sensor:
|
||||
- name: Rachio Last Run Summary
|
||||
unique_id: rachio_last_run_summary
|
||||
icon: mdi:sprinkler-variant
|
||||
state: "{{ trigger.from_state.name | replace('Carlo-Rachio ', '') }}"
|
||||
attributes:
|
||||
zone_entity: "{{ trigger.entity_id }}"
|
||||
started_at: "{{ trigger.from_state.last_changed.isoformat() }}"
|
||||
completed_at: "{{ trigger.to_state.last_changed.isoformat() }}"
|
||||
duration_min: >-
|
||||
{% set start = as_timestamp(trigger.from_state.last_changed, default=none) %}
|
||||
{% set stop = as_timestamp(trigger.to_state.last_changed, default=none) %}
|
||||
{% if start is not none and stop is not none and stop >= start %}
|
||||
{{ ((stop - start) / 60) | round(1) }}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
source_summary: "{{ trigger.to_state.attributes.get('Summary', '') }}"
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id: switch.front_lawn
|
||||
from: "on"
|
||||
to: "off"
|
||||
sensor:
|
||||
- name: Rachio Front Lawn Last Run
|
||||
unique_id: rachio_front_lawn_last_run
|
||||
icon: mdi:sprinkler-variant
|
||||
unit_of_measurement: min
|
||||
state_class: measurement
|
||||
state: >-
|
||||
{% set start = as_timestamp(trigger.from_state.last_changed, default=none) %}
|
||||
{% set stop = as_timestamp(trigger.to_state.last_changed, default=none) %}
|
||||
{% if start is not none and stop is not none and stop >= start %}
|
||||
{{ ((stop - start) / 60) | round(1) }}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
attributes:
|
||||
zone_entity: switch.front_lawn
|
||||
zone_name: "{{ trigger.from_state.name | replace('Carlo-Rachio ', '') }}"
|
||||
started_at: "{{ trigger.from_state.last_changed.isoformat() }}"
|
||||
completed_at: "{{ trigger.to_state.last_changed.isoformat() }}"
|
||||
source_summary: "{{ trigger.to_state.attributes.get('Summary', '') }}"
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id: switch.front_hedges_right_side_house
|
||||
from: "on"
|
||||
to: "off"
|
||||
sensor:
|
||||
- name: Rachio Front Hedges Last Run
|
||||
unique_id: rachio_front_hedges_last_run
|
||||
icon: mdi:sprinkler-variant
|
||||
unit_of_measurement: min
|
||||
state_class: measurement
|
||||
state: >-
|
||||
{% set start = as_timestamp(trigger.from_state.last_changed, default=none) %}
|
||||
{% set stop = as_timestamp(trigger.to_state.last_changed, default=none) %}
|
||||
{% if start is not none and stop is not none and stop >= start %}
|
||||
{{ ((stop - start) / 60) | round(1) }}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
attributes:
|
||||
zone_entity: switch.front_hedges_right_side_house
|
||||
zone_name: "{{ trigger.from_state.name | replace('Carlo-Rachio ', '') }}"
|
||||
started_at: "{{ trigger.from_state.last_changed.isoformat() }}"
|
||||
completed_at: "{{ trigger.to_state.last_changed.isoformat() }}"
|
||||
source_summary: "{{ trigger.to_state.attributes.get('Summary', '') }}"
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id: switch.left_side_house
|
||||
from: "on"
|
||||
to: "off"
|
||||
sensor:
|
||||
- name: Rachio Left Side House Last Run
|
||||
unique_id: rachio_left_side_house_last_run
|
||||
icon: mdi:sprinkler-variant
|
||||
unit_of_measurement: min
|
||||
state_class: measurement
|
||||
state: >-
|
||||
{% set start = as_timestamp(trigger.from_state.last_changed, default=none) %}
|
||||
{% set stop = as_timestamp(trigger.to_state.last_changed, default=none) %}
|
||||
{% if start is not none and stop is not none and stop >= start %}
|
||||
{{ ((stop - start) / 60) | round(1) }}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
attributes:
|
||||
zone_entity: switch.left_side_house
|
||||
zone_name: "{{ trigger.from_state.name | replace('Carlo-Rachio ', '') }}"
|
||||
started_at: "{{ trigger.from_state.last_changed.isoformat() }}"
|
||||
completed_at: "{{ trigger.to_state.last_changed.isoformat() }}"
|
||||
source_summary: "{{ trigger.to_state.attributes.get('Summary', '') }}"
|
||||
- trigger:
|
||||
- platform: state
|
||||
entity_id: switch.backyard_shrubs
|
||||
from: "on"
|
||||
to: "off"
|
||||
sensor:
|
||||
- name: Rachio Backyard Shrubs Last Run
|
||||
unique_id: rachio_backyard_shrubs_last_run
|
||||
icon: mdi:sprinkler-variant
|
||||
unit_of_measurement: min
|
||||
state_class: measurement
|
||||
state: >-
|
||||
{% set start = as_timestamp(trigger.from_state.last_changed, default=none) %}
|
||||
{% set stop = as_timestamp(trigger.to_state.last_changed, default=none) %}
|
||||
{% if start is not none and stop is not none and stop >= start %}
|
||||
{{ ((stop - start) / 60) | round(1) }}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
attributes:
|
||||
zone_entity: switch.backyard_shrubs
|
||||
zone_name: "{{ trigger.from_state.name | replace('Carlo-Rachio ', '') }}"
|
||||
started_at: "{{ trigger.from_state.last_changed.isoformat() }}"
|
||||
completed_at: "{{ trigger.to_state.last_changed.isoformat() }}"
|
||||
source_summary: "{{ trigger.to_state.attributes.get('Summary', '') }}"
|
||||
|
||||
script:
|
||||
rachio_stop_watering:
|
||||
alias: Rachio Stop Watering
|
||||
icon: mdi:stop-circle
|
||||
mode: single
|
||||
sequence:
|
||||
- service: rachio.stop_watering
|
||||
data:
|
||||
devices: Carlo-Rachio
|
||||
- service: script.send_to_logbook
|
||||
data:
|
||||
topic: SPRINKLERS
|
||||
message: Stop watering requested from Home Assistant.
|
||||
rachio_pause_watering_30:
|
||||
alias: Rachio Pause Watering 30 Minutes
|
||||
icon: mdi:pause-circle
|
||||
mode: single
|
||||
sequence:
|
||||
- service: rachio.pause_watering
|
||||
data:
|
||||
devices: Carlo-Rachio
|
||||
duration: 30
|
||||
- service: script.send_to_logbook
|
||||
data:
|
||||
topic: SPRINKLERS
|
||||
message: Watering pause requested from Home Assistant for 30 minutes.
|
||||
rachio_resume_watering:
|
||||
alias: Rachio Resume Watering
|
||||
icon: mdi:play-circle
|
||||
mode: single
|
||||
sequence:
|
||||
- service: rachio.resume_watering
|
||||
data:
|
||||
devices: Carlo-Rachio
|
||||
- service: script.send_to_logbook
|
||||
data:
|
||||
topic: SPRINKLERS
|
||||
message: Resume watering requested from Home Assistant.
|
||||
|
||||
automation:
|
||||
- id: 4df26960-17cd-4a3b-9f29-9189d6ad1d73
|
||||
alias: Rachio - Activity Feed
|
||||
mode: queued
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id:
|
||||
- switch.front_lawn
|
||||
- switch.front_hedges_right_side_house
|
||||
- switch.left_side_house
|
||||
- switch.backyard_shrubs
|
||||
from: "off"
|
||||
to: "on"
|
||||
id: zone_started
|
||||
- platform: state
|
||||
entity_id:
|
||||
- switch.front_lawn
|
||||
- switch.front_hedges_right_side_house
|
||||
- switch.left_side_house
|
||||
- switch.backyard_shrubs
|
||||
from: "on"
|
||||
to: "off"
|
||||
id: zone_finished
|
||||
- platform: state
|
||||
entity_id: switch.carlo_rachio_rain_delay
|
||||
id: rain_delay_changed
|
||||
- platform: state
|
||||
entity_id: switch.carlo_rachio_in_standby_mode
|
||||
id: standby_changed
|
||||
action:
|
||||
- variables:
|
||||
zone_name: "{{ trigger.to_state.name | replace('Carlo-Rachio ', '') if trigger.to_state is defined else '' }}"
|
||||
summary: "{{ trigger.to_state.attributes.get('Summary', '') if trigger.to_state is defined else '' }}"
|
||||
duration_min: >-
|
||||
{% if trigger.from_state is defined and trigger.to_state is defined %}
|
||||
{% set start = as_timestamp(trigger.from_state.last_changed, default=none) %}
|
||||
{% set stop = as_timestamp(trigger.to_state.last_changed, default=none) %}
|
||||
{% if start is not none and stop is not none and stop >= start %}
|
||||
{{ ((stop - start) / 60) | round(1) }}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
{% else %}
|
||||
unknown
|
||||
{% endif %}
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: zone_started
|
||||
sequence:
|
||||
- service: script.send_to_logbook
|
||||
data:
|
||||
topic: SPRINKLERS
|
||||
message: >-
|
||||
{{ zone_name }} started watering{% if summary %}: {{ summary }}{% else %}.{% endif %}
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: zone_finished
|
||||
sequence:
|
||||
- service: script.send_to_logbook
|
||||
data:
|
||||
topic: SPRINKLERS
|
||||
message: >-
|
||||
{{ zone_name }} finished watering{% if duration_min not in ['unknown', 'unavailable', 'none', ''] %} after {{ duration_min }} minutes{% endif %}{% if summary %}: {{ summary }}{% else %}.{% endif %}
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: rain_delay_changed
|
||||
sequence:
|
||||
- service: script.send_to_logbook
|
||||
data:
|
||||
topic: SPRINKLERS
|
||||
message: "Rain delay turned {{ trigger.to_state.state }}."
|
||||
- conditions:
|
||||
- condition: trigger
|
||||
id: standby_changed
|
||||
sequence:
|
||||
- service: script.send_to_logbook
|
||||
data:
|
||||
topic: SPRINKLERS
|
||||
message: "Standby mode turned {{ trigger.to_state.state }}."
|
||||
|
||||
Reference in New Issue
Block a user