Refactor notification actions in automation files to use notify.notify_events instead of mobile app notifications. This change applies to alerts for washing machine leaks, cat medication tracking, and litter box monitoring, streamlining the notification process.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## What this repo is
|
||||
|
||||
The Home Assistant configuration directory (`/config` on the live HAOS host, mirrored to this git repo). It is **configuration, not application code** — there is no build or test suite. "Running" a change means HA loads it; validation is by config-check and reload, not unit tests. The repo is also mirrored to a self-hosted Gitea at `code.cubecraftcreations.com`.
|
||||
|
||||
Edits here only take effect after they reach the live host and HA reloads the affected domain. There is no compile step; a malformed YAML file breaks the domain it belongs to (or all of HA if it's `configuration.yaml`).
|
||||
|
||||
## Layout & how config is assembled
|
||||
|
||||
`configuration.yaml` is the root that wires everything together via `!include` directives. Understand these to know where a given entity lives:
|
||||
|
||||
- `packages/` → `!include_dir_named` — each file is a **self-contained feature** that can declare automations, sensors, MQTT entities, helpers, etc. all at once. This is where the major subsystems live (cat medication, chore tracker, litter box monitor, voice satellite alarms, integration health).
|
||||
- `automations/` → `!include_dir_merge_list` — numbered files (`01_`–`07_`) group automations by theme (home/lighting, alerts, presence/security, kids, printers, dashboards, climate). `print_log_automations/` is a subfolder for the 3D-printer→Notion logging automations. All are merged into one flat list, so **`id:` and `alias:` must be globally unique** across every file.
|
||||
- `helpers/` → one file per helper domain (`input_boolean`, `input_number`, `input_select`, `input_datetime`, `counter`, `timer`, `input_text`, `rest_command`, `shell_command`). Add a new helper to the matching domain file.
|
||||
- `dashboards/` → `dashboards.yaml` registers each Lovelace dashboard; view definitions live in `dashboards/views/`.
|
||||
- `themes/`, `blueprints/`, `scenes.yaml`, `scripts.yaml` — standard HA locations.
|
||||
- `esphome/` → firmware for ~150 ESP devices (see below).
|
||||
- `scripts/` → host-side shell/Python services that run alongside HA (not HA `script:` entities).
|
||||
|
||||
Secrets are referenced as `!secret <key>`; `secrets.yaml`, `known_devices.yaml`, `ip_bans.yaml` and the HA runtime DB/storage are gitignored. The `.gitignore` uses an ignore-all-then-whitelist pattern — **new file types or folders won't be tracked unless explicitly whitelisted there.**
|
||||
|
||||
## ESPHome devices (`esphome/`)
|
||||
|
||||
Two structural patterns coexist:
|
||||
|
||||
1. **Single-file devices** — e.g. `cat-medication-tracker.yaml`, `airqualitysensor-*.yaml`.
|
||||
2. **Package-based devices** — a thin top-level entry file sets `substitutions:` (per-board pins) and pulls in shared logic via `packages: !include <dir>/<base>.yaml`. See `jarvis-satellite/`, `respeaker-satellite/`, `ha-remote/`, `family-room-remote/`. To change shared behavior edit the package dir; to change one physical device edit its top-level substitutions.
|
||||
|
||||
Custom C++ components/headers live alongside the YAML (`esphome/components/`, `MAX17048_component.h`, `spi_helper.h`) and are referenced via `esphome: includes:`. This framework is **arduino-type but ESP-IDF-hybrid** — use ESP-IDF headers (`driver/spi_master.h`, `driver/gpio.h`), not Arduino `SPI.h`, which is not on the include path. Display MADCTL/orientation fixes that must run after ESPHome's model init are done in an `on_boot` lambda at priority `-100` (not `init_sequence:`, which gets overwritten). The cat-medication-tracker is the worked reference for this.
|
||||
|
||||
### Generated ESPHome configs — DO NOT hand-edit
|
||||
|
||||
`esphome/chore-tracker/generate.py` is the **source of truth** for the chore tracker. It reads `chore-tracker/chores_config.yaml` and emits three files marked `AUTO-GENERATED`:
|
||||
- `esphome/chore-tracker-esphome.yaml` (firmware)
|
||||
- `packages/chore_tracker_ha.yaml` (HA entities/automations)
|
||||
- `esphome/chore-tracker/chore-tracker-dashboard.yaml` (Lovelace)
|
||||
|
||||
To change chores or kids, edit `chores_config.yaml` then regenerate:
|
||||
```bash
|
||||
cd esphome/chore-tracker && python3 generate.py
|
||||
```
|
||||
Any file whose header says `AUTO-GENERATED — edit chores_config.yaml` must not be edited directly; changes will be overwritten.
|
||||
|
||||
## Host-side services (`scripts/`)
|
||||
|
||||
These run on the HA host as background processes, independent of HA itself:
|
||||
|
||||
- **`litter_box_analyzer.py`** — OpenCV/MQTT computer-vision service. Subscribes to base64 JPEG frames an ESP32-S3 camera publishes over MQTT, detects cat presence / box-stuck / needs-scooping, and publishes results back to `litter_box/status/*` topics. `packages/litter_box_monitor.yaml` consumes those topics as HA MQTT sensors. Requires `opencv-python numpy paho-mqtt`. Manage it with `scripts/litter_box_analyzer.sh {start|stop|restart|status}` (configurable via `MQTT_BROKER`, `MOTION_THRESHOLD`, etc. env vars).
|
||||
- **`git_autocommit.sh`** — invoked by the `git_autocommit` shell_command helper; stages `/config`, commits with a timestamp, and pushes `main`. This is how HA-side edits get committed back to git.
|
||||
|
||||
## Print Log → Notion integration
|
||||
|
||||
3D-printer activity is logged to a Notion database in real time. `helpers/rest_command.yaml` defines `notion_create_print` (POST, returns page id) and `notion_update_print` (PATCH by page id); automations in `automations/print_log_automations/` (one start+finish pair per printer) call them. Key gotchas captured in `print_log_context.md`:
|
||||
- `rest_command` responses are **already parsed dicts** — use `{{ notion_response.content.id }}`, never `| from_json`.
|
||||
- The Notion bearer token is the full `"Bearer ntn_..."` string stored as `!secret notion_token_bearer`.
|
||||
- Bambu vs. Elegoo printers expose different sensor sets (Elegoo only has `file_name` + `print_status`).
|
||||
|
||||
## Conventions
|
||||
|
||||
- **Unique ids:** automations are merged into one list — never reuse an `id:` or `alias:`.
|
||||
- **Network:** IoT VLAN is `192.168.69.x` / `10.60.1.x`, main LAN `192.168.1.x`; ESP devices use `wifi_iot_ssid`. The `http:` block trusts proxy `10.60.1.1`.
|
||||
- **Don't commit secrets or runtime state** — rely on the existing `.gitignore` whitelist; if you add a new tracked file type, whitelist it explicitly.
|
||||
@@ -1,197 +1,4 @@
|
||||
# Safety, device, and household alert automations.
|
||||
|
||||
- id: '1739061820991'
|
||||
alias: Turn off washing machine when leak sensed
|
||||
description: ''
|
||||
triggers:
|
||||
- type: moist
|
||||
device_id: 84e0d8044eb13e64c899357f840dcacb
|
||||
entity_id: 2f41825acbe754ebfa788a77c197138c
|
||||
domain: binary_sensor
|
||||
trigger: device
|
||||
conditions: []
|
||||
actions:
|
||||
- type: turn_off
|
||||
device_id: 613a1b8ef47539c9d0ebe6a87b13ca26
|
||||
entity_id: 721e7dd29be7dbcb6e634ec5d505c5f4
|
||||
domain: switch
|
||||
- action: notify.notify
|
||||
metadata: {}
|
||||
data:
|
||||
message: Washing Machine Leak Sensor has been triggered - please check!
|
||||
mode: single
|
||||
|
||||
- id: '1739841729184'
|
||||
alias: Declan’s Closet Open Notification
|
||||
description: ''
|
||||
initial_state: false
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id:
|
||||
- input_boolean.hermes_disabled_automation_placeholder
|
||||
to: 'on'
|
||||
conditions:
|
||||
- condition: time
|
||||
after: '21:00:00'
|
||||
before: 07:30:00
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Declan’s Closet is Open
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Declan’s Closet is Open
|
||||
mode: single
|
||||
|
||||
- id: '1739841929885'
|
||||
alias: Jordyn’s Door Open Notification
|
||||
description: ''
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id:
|
||||
- binary_sensor.jordyns_door_door
|
||||
to: 'on'
|
||||
conditions:
|
||||
- condition: time
|
||||
after: '19:45:00'
|
||||
before: 07:45:00
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Jordyn’s door is open
|
||||
mode: single
|
||||
|
||||
- id: '1739842035606'
|
||||
alias: Declan’s Door Closed Notification
|
||||
description: ''
|
||||
initial_state: false
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id:
|
||||
- input_boolean.hermes_disabled_automation_placeholder
|
||||
to: 'off'
|
||||
conditions:
|
||||
- condition: time
|
||||
after: '21:00:00'
|
||||
before: 07:00:00
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Declan’s Closet is Closed
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Declan’s Closet is Closed
|
||||
mode: single
|
||||
|
||||
- id: '1739932866970'
|
||||
alias: Washing Machine Leak Sensor Battery Low Notification
|
||||
description: ''
|
||||
triggers:
|
||||
- trigger: numeric_state
|
||||
entity_id:
|
||||
- sensor.washing_machine_water_sensor_battery
|
||||
below: 25
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.persistent_notification
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
mode: single
|
||||
|
||||
- id: '1739932945304'
|
||||
alias: Jordyn's Door Sensor Low Battery Notification
|
||||
description: ''
|
||||
triggers:
|
||||
- trigger: numeric_state
|
||||
entity_id:
|
||||
- sensor.jordyns_door_battery
|
||||
below: 25
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.persistent_notification
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
mode: single
|
||||
|
||||
- id: '1739933032829'
|
||||
alias: Deep Freezer Low Battery Notification
|
||||
description: ''
|
||||
triggers:
|
||||
- trigger: numeric_state
|
||||
entity_id:
|
||||
- sensor.deep_freezer_battery
|
||||
below: 25
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.persistent_notification
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Please change washing machine leak sensor battery soon!
|
||||
mode: single
|
||||
|
||||
- id: '1739933290261'
|
||||
alias: Deep Freezer Left Open Notification
|
||||
description: ''
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id:
|
||||
- binary_sensor.deep_freezer_door
|
||||
to: 'on'
|
||||
for:
|
||||
hours: 0
|
||||
minutes: 2
|
||||
seconds: 0
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.html5
|
||||
metadata: {}
|
||||
data:
|
||||
message: Deep freezer has been left open - please check.
|
||||
- action: notify.persistent_notification
|
||||
metadata: {}
|
||||
data:
|
||||
message: Deep freezer has been left open - please check.
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Deep freezer has been left open - please check.
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Deep freezer has been left open - please check.
|
||||
mode: single
|
||||
|
||||
- id: '1742155540986'
|
||||
alias: 'Garage Floodlight Low Battery Notification '
|
||||
description: ''
|
||||
@@ -219,20 +26,11 @@
|
||||
to: '0'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat's Anti-Stinky Juice is Empty
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat's Anti-Stinky Juice is Empty
|
||||
- action: notify.mailgun_smtp
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat's Anti-Stinky Juice is Empty
|
||||
title: Triple Threat's Anti-Stinky Juice is Empty
|
||||
target: joshua@cnjmail.com polly@cnjmail.com
|
||||
mode: single
|
||||
|
||||
- id: '1742841650033'
|
||||
@@ -246,21 +44,6 @@
|
||||
to: '65'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Deuce's Litter is Low
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Deuce's Litter is Low
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Deuce's Litter is Low
|
||||
title: The Deuce's Litter is Low
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -278,21 +61,6 @@
|
||||
enabled: true
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat's Litter is Low
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat's Litter is Low
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat's Litter is Low
|
||||
title: Triple Threat's Litter is Low
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -311,14 +79,6 @@
|
||||
to: '65'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Cat Crapper 3000's Litter is Low
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Cat Crapper 3000's Litter is Low
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -337,21 +97,6 @@
|
||||
to: '65'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Poop Box's Litter is Low
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Poop Box's Litter is Low
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: Poop Box's Litter is Low
|
||||
title: Poop Box's Litter is Low
|
||||
target: joshua@cnjmail.com
|
||||
enabled: falsef
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -370,21 +115,6 @@
|
||||
to: 'on'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Cat Crapper 3000 is full of crap
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Cat Crapper 3000 is full of crap
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: Cat Crapper 3000 is full of crap
|
||||
title: CLEAN Cat Crapper 3000 - it's full of crap
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -403,25 +133,6 @@
|
||||
to: 'on'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Deuce is full of deuces (laundry room)
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Deuce is full of deuces (laundry room)
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Deuce is full of deuces
|
||||
title: Too many dueces have been dropped!
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.mobile_app_chloes_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Deuce is full of deuces (laundry room)
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -440,25 +151,6 @@
|
||||
to: 'on'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Poop Box has runneth over (basement, left side)
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Poop Box has runneth over (basement, left side)
|
||||
- action: notify.mobile_app_chloes_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Poop Box has runneth over (basement, left side)
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: The poop box has too many presents!
|
||||
title: The poop box is bursting!!
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -477,25 +169,6 @@
|
||||
to: 'on'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat can't take no more! (Basement, right side)
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat can't take no more! (Basement, right side)
|
||||
- action: notify.mobile_app_chloes_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Triple Threat can't take no more! (Basement, right side)
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: The Triple Threat is down for the count!
|
||||
title: Triple Threat can't take no more!
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -535,21 +208,6 @@
|
||||
to: 'on'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box is full of crap
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box is full of crap
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box is full of crap
|
||||
title: CLEAN Luma Smart Litter Box - it's full of crap
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
@@ -557,72 +215,6 @@
|
||||
title: CLEAN Luma Smart Litter Box - it's full of crap
|
||||
mode: single
|
||||
|
||||
- id: '1782932601002'
|
||||
alias: Luma Smart Litter Box Water Empty Notification
|
||||
description: Notify when the Petlibro Luma Smart Litter Box water is empty.
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id:
|
||||
- sensor.luma_smart_litter_box_remaining_water
|
||||
enabled: true
|
||||
to: '0'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box water is empty
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box water is empty
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box water is empty
|
||||
title: Luma Smart Litter Box water is empty
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box water is empty
|
||||
title: Luma Smart Litter Box water is empty
|
||||
mode: single
|
||||
|
||||
- id: '1782932601003'
|
||||
alias: Luma Smart Litter Box Device Error Notification
|
||||
description: Notify when the Petlibro Luma Smart Litter Box reports a device error.
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id:
|
||||
- binary_sensor.luma_smart_litter_box_device_error
|
||||
enabled: true
|
||||
to: 'on'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: "Luma Smart Litter Box has a device error: {{ states('sensor.luma_smart_litter_box_exception_message') }}"
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: "Luma Smart Litter Box has a device error: {{ states('sensor.luma_smart_litter_box_exception_message') }}"
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: "Luma Smart Litter Box has a device error: {{ states('sensor.luma_smart_litter_box_exception_message') }}"
|
||||
title: Luma Smart Litter Box device error
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
message: "Luma Smart Litter Box has a device error: {{ states('sensor.luma_smart_litter_box_exception_message') }}"
|
||||
title: Luma Smart Litter Box device error
|
||||
mode: single
|
||||
|
||||
- id: '1782932601004'
|
||||
alias: Luma Smart Litter Box Door Error Notification
|
||||
description: Notify when the Petlibro Luma Smart Litter Box reports a door error.
|
||||
@@ -634,21 +226,6 @@
|
||||
to: 'on'
|
||||
conditions: []
|
||||
actions:
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box has a door error
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box has a door error
|
||||
- action: notify.mailgun_smtp
|
||||
metadata: {}
|
||||
data:
|
||||
message: Luma Smart Litter Box has a door error
|
||||
title: Luma Smart Litter Box door error
|
||||
target: joshua@cnjmail.com
|
||||
enabled: false
|
||||
- action: notify.notify_events
|
||||
metadata: {}
|
||||
data:
|
||||
|
||||
@@ -50,10 +50,6 @@ automation:
|
||||
entity_id: binary_sensor.cat_medication_tracker_all_cats_medicated
|
||||
to: "on"
|
||||
action:
|
||||
- service: notify.notify
|
||||
data:
|
||||
title: "Cat meds done"
|
||||
message: "Penelope and Tess have both been marked medicated today."
|
||||
- service: notify.notify_events
|
||||
data:
|
||||
title: "Cat meds done"
|
||||
@@ -77,14 +73,6 @@ automation:
|
||||
cat_name: >
|
||||
{% if trigger.id == 'penelope' %}Penelope
|
||||
{% else %}Tess{% endif %}
|
||||
- service: notify.mobile_app_joshuas_iphone_of_pain
|
||||
data:
|
||||
title: "Cat medication given"
|
||||
message: "{{ cat_name }} has been marked medicated."
|
||||
- service: notify.mobile_app_pollys_iphone
|
||||
data:
|
||||
title: "Cat medication given"
|
||||
message: "{{ cat_name }} has been marked medicated."
|
||||
- service: notify.notify_events
|
||||
data:
|
||||
title: "Cat medication given"
|
||||
@@ -100,30 +88,6 @@ automation:
|
||||
entity_id: binary_sensor.cat_medication_tracker_all_cats_medicated
|
||||
state: "off"
|
||||
action:
|
||||
- service: notify.mobile_app_joshuas_iphone_of_pain
|
||||
data:
|
||||
title: "Cat meds still needed"
|
||||
message: >
|
||||
{% set ns = namespace(cats=[]) %}
|
||||
{% if is_state('switch.cat_medication_tracker_penelope_medicated', 'off') %}
|
||||
{% set ns.cats = ns.cats + ['Penelope'] %}
|
||||
{% endif %}
|
||||
{% if is_state('switch.cat_medication_tracker_tess_medicated', 'off') %}
|
||||
{% set ns.cats = ns.cats + ['Tess'] %}
|
||||
{% endif %}
|
||||
{{ ns.cats | join(' and ') }} still need medication.
|
||||
- service: notify.mobile_app_pollys_iphone
|
||||
data:
|
||||
title: "Cat meds still needed"
|
||||
message: >
|
||||
{% set ns = namespace(cats=[]) %}
|
||||
{% if is_state('switch.cat_medication_tracker_penelope_medicated', 'off') %}
|
||||
{% set ns.cats = ns.cats + ['Penelope'] %}
|
||||
{% endif %}
|
||||
{% if is_state('switch.cat_medication_tracker_tess_medicated', 'off') %}
|
||||
{% set ns.cats = ns.cats + ['Tess'] %}
|
||||
{% endif %}
|
||||
{{ ns.cats | join(' and ') }} still need medication.
|
||||
- service: notify.notify_events
|
||||
data:
|
||||
title: "Cat meds still needed"
|
||||
|
||||
@@ -200,10 +200,6 @@ automation:
|
||||
- action: timer.start
|
||||
target:
|
||||
entity_id: timer.litter_box_cat_cooldown
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
data:
|
||||
message: "🐱 A cat is using the litter box right now!"
|
||||
title: "Litter Box Activity"
|
||||
- action: notify.notify_events
|
||||
data:
|
||||
message: "🐱 A cat is using the litter box right now!"
|
||||
@@ -243,19 +239,6 @@ automation:
|
||||
- action: input_boolean.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.litter_box_stuck_notified
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
data:
|
||||
message: "⚠️ The litter box is STUCK ROTATED CLOSED! Visual state is 'closed' — check the mechanism."
|
||||
title: "Litter Box STUCK CLOSED!"
|
||||
- action: notify.mobile_app_pollys_iphone
|
||||
data:
|
||||
message: "⚠️ The litter box is STUCK ROTATED CLOSED! Visual state is 'closed' — check the mechanism."
|
||||
title: "Litter Box STUCK CLOSED!"
|
||||
- action: notify.mailgun_smtp
|
||||
data:
|
||||
message: "The litter box camera detects the box in a rotated/closed position. The mechanism may be stuck mid-cycle."
|
||||
title: "Litter Box Stuck Closed!"
|
||||
target: "joshua@cnjmail.com"
|
||||
- action: notify.notify_events
|
||||
data:
|
||||
message: "⚠️ The litter box is STUCK ROTATED CLOSED! Visual state is 'closed' — check the mechanism."
|
||||
@@ -302,10 +285,6 @@ automation:
|
||||
- action: timer.start
|
||||
target:
|
||||
entity_id: timer.litter_box_scoop_cooldown
|
||||
- action: notify.mobile_app_joshuas_iphone_of_pain
|
||||
data:
|
||||
message: "🧹 The litter box could use a scoop! Cleanliness: {{ states('sensor.litter_box_camera_cleanliness_score') }}%"
|
||||
title: "Litter Box Needs Scooping"
|
||||
- action: notify.notify_events
|
||||
data:
|
||||
message: "🧹 The litter box could use a scoop! Cleanliness: {{ states('sensor.litter_box_camera_cleanliness_score') }}%"
|
||||
|
||||
Reference in New Issue
Block a user