Compare commits

..

34 Commits

Author SHA1 Message Date
github-actions[bot]
a7b0f58632 Update HA version badge to 2025.12.2 2025-12-12 22:15:45 +00:00
Carlo Costanzo
dbd5f43b19 Closes out Dozzle
Fixes #1433
Add Dozzle to the list of useful tools in README.md
2025-12-12 17:15:17 -05:00
github-actions[bot]
d8d7c553eb Update HA version badge to 2025.12.2 2025-12-12 21:40:52 +00:00
Carlo Costanzo
f977809de7 Merge pull request #1551 from CCOSTAN:Create-activity-logbook-engine
Whole new way to view Infrastructure events
2025-12-12 16:40:33 -05:00
Carlo Costanzo
c365a1c233 Refactor automation scripts to log significant events to the Activity feed using script.send_to_logbook. This includes updates to high wind speed notifications, bad login attempts, trigger dumps, startup notifications, and various other automations across multiple packages, enhancing visibility and tracking of system activities. 2025-12-12 16:38:24 -05:00
github-actions[bot]
9d6c73fb05 Update HA version badge to 2025.12.2 2025-12-12 17:38:58 +00:00
Carlo Costanzo
8ec5173f4d Update HA version to 2025.12.2 - N8N Testing. 2025-12-12 12:38:35 -05:00
github-actions[bot]
c245c1ca78 Update HA version badge to 2025.12.1 2025-12-11 21:08:38 +00:00
Carlo Costanzo
96e86d6587 Refactor automation in garadget.yaml to simplify media player actions for showing and hiding the garage camera. Update vacuum.yaml to enhance on-demand vacuum control with input_boolean integration, ensuring proper state management during cleaning cycles. 2025-12-11 16:08:20 -05:00
Carlo Costanzo
3345bf3b95 Merge pull request #1549 from CCOSTAN/llm-vision 2025-12-11 16:07:28 -05:00
Carlo Costanzo
a8eca6f4bb Remove backups.yaml configuration file and update llmvision.yaml for garbage can detection, including renaming entities and adjusting automation logic. Modify air quality condition in briefing.yaml to display only when the index exceeds 50. 2025-12-11 09:23:36 -05:00
github-actions[bot]
d900c642dd Update HA version badge to 2025.12.1 2025-12-10 15:54:12 +00:00
Carlo Costanzo
1e490e53f6 Update holiday.yaml to change resource URLs to local paths and refactor flag days logic for improved readability and efficiency. 2025-12-10 10:53:50 -05:00
github-actions[bot]
5892711916 Update HA version badge to 2025.12.1 2025-12-10 15:26:29 +00:00
Carlo Costanzo
1ff1d9d81c Remove deprecated configuration files for various integrations including Arris Router, Battery Levels, Grafana, SkyBell HD, USPS, and YouTube Picker to streamline the setup and improve maintainability. 2025-12-10 10:25:58 -05:00
Carlo Costanzo
02a554a793 Refactor air quality display in briefing.yaml to improve clarity. Adjusted conditions for displaying air quality information, ensuring it only shows when the index is above 15. 2025-12-09 18:49:29 -05:00
github-actions[bot]
2265f2b282 Update HA version badge to 2025.12.1 2025-12-09 18:14:27 +00:00
Carlo Costanzo
ea8d57393a More changes to #1470 -
Refactor Dreame vacuum orchestration to implement continuous phased cleaning cycles. Update logic for room queue management and notifications, enhancing automation for idle periods and phase transitions.
2025-12-09 13:14:07 -05:00
github-actions[bot]
ddda9e6573 Update HA version badge to 2025.12.1 2025-12-09 14:18:26 +00:00
Carlo Costanzo
aec426e602 Enhance HomeKit configuration by refining entity management and improving compatibility with Alexa. Update comments for clarity on multi-bridge setup. 2025-12-09 09:17:58 -05:00
github-actions[bot]
1835b1203f Update HA version badge to 2025.12.1 2025-12-08 02:24:04 +00:00
Carlo Costanzo
75a250ebd3 Remove unused lock and climate entities from HomeKit configuration for cleaner setup. 2025-12-07 21:23:39 -05:00
github-actions[bot]
8e743fe26d Update HA version badge to 2025.12.1 2025-12-07 23:04:17 +00:00
Carlo Costanzo
9fab3f0d90 Update .gitignore to include new entries for panel-notes, docker_14, and docker_69. 2025-12-07 18:03:54 -05:00
github-actions[bot]
41e56f9bb7 Update HA version badge to 2025.12.1 2025-12-07 23:03:44 +00:00
Carlo Costanzo
d609ca851c Merge pull request #1546 from CCOSTAN:HomeKit-Bridges
Fixing Homekit issues with more bridges. closes #785 ; closes #1076
2025-12-07 18:03:24 -05:00
Carlo Costanzo
2c25c2b2d8 Update Home Assistant version to 2025.12.1 and remove inverted binary sensor blueprint file. 2025-12-07 18:01:24 -05:00
Carlo Costanzo
d6c32c9e16 Update .gitignore to include 'panel-notes/' directory for better file management. 2025-12-07 16:53:54 -05:00
Carlo Costanzo
eeb988d100 Enhance HomeKit configuration for improved stability and Alexa compatibility. Update camera stream sources to use substreams for faster playback on Echo Show devices. Refine comments for clarity on multi-bridge setup. 2025-12-07 16:53:44 -05:00
github-actions[bot]
124a7bcfd3 Update HA version badge to 2025.12.0 2025-12-05 17:28:12 +00:00
Carlo Costanzo
6f9679cff1 Add Docker add-ons and utilities section to README.md for enhanced documentation on available tools and their purposes. 2025-12-05 12:27:48 -05:00
github-actions[bot]
44ff4528f1 Update HA version badge to 2025.12.0 2025-12-05 05:11:10 +00:00
Carlo Costanzo
8ee2aff40c Switching all configurations to happen via Codex Agents and n8n.
Refactor HAUpdate.sh to use 'docker compose' syntax for improved compatibility and readability. Added error handling with 'set -euo pipefail' and removed unused resource cleanup commands.
2025-12-05 00:10:41 -05:00
Carlo Costanzo
bea84af5cd Refactor HomeKit configuration to support a multi-bridge setup, enhancing stability and performance. Separate camera and front door lock entities into dedicated accessory mode bridges for improved reliability. Update entity filters and configurations accordingly. 2025-12-04 17:14:07 -05:00
52 changed files with 935 additions and 953 deletions

4
.gitignore vendored
View File

@@ -62,6 +62,7 @@ llmvision
backups backups
deps deps
config/backups config/backups
panel-notes/
icloud icloud
__pycache__ __pycache__
hacs hacs
@@ -74,3 +75,6 @@ tts
.ssh .ssh
.auth .auth
.nest .nest
panel-notes
docker_14
docker_69

View File

@@ -52,6 +52,15 @@ Live, personal Home Assistant configuration shared for **browsing and inspiratio
### Network diagram ### Network diagram
![Smart Home Diagram](config/www/custom_ui/floorplan/images/branding/Bear-Stone-Docker-Diagram.jpg) ![Smart Home Diagram](config/www/custom_ui/floorplan/images/branding/Bear-Stone-Docker-Diagram.jpg)
**Docker add-ons & utilities**
| Container | Repo/Docs | Purpose |
| --- | --- | --- |
| Home Assistant Time Machine | [saihgupr/HomeAssistantTimeMachine](https://github.com/saihgupr/HomeAssistantTimeMachine) | Browse/diff/restore HA YAML (Lovelace, automations, scripts, ESPHome, packages) against existing backups. Blog walkthrough: [Time Machine for dashboards](https://www.vcloudinfo.com/2025/12/home-assistant-time-machine-dashboards.html). |
| Duplicati | [duplicati/duplicati](https://github.com/duplicati/duplicati) | Off-box, versioned backups for HA config and media. |
| Dozzle | [amir20/dozzle](https://github.com/amir20/dozzle) | Lightweight Docker log viewer (useful for quick tailing across the homelab stacks). |
| Cloudflared | [cloudflare/cloudflared](https://hub.docker.com/r/cloudflare/cloudflared) | Secure tunnel/edge access to Home Assistant without opening inbound ports. |
| WordPress | [wordpress](https://hub.docker.com/_/wordpress) | Hosts [vCloudInfo.com](https://www.vcloudinfo.com) for docs, how-tos, videos, and long-form writeups that accompany this config. |
### Gear tied to real automations (affiliate links) ### Gear tied to real automations (affiliate links)
Only listing hardware that appears in active packages/automations here. Only listing hardware that appears in active packages/automations here.
https://amzn.to/48jVzZ3 https://amzn.to/48jVzZ3
@@ -88,4 +97,3 @@ https://amzn.to/48jVzZ3
<a href="https://www.vCloudInfo.com/p/affiliate-disclosure.html"> <a href="https://www.vCloudInfo.com/p/affiliate-disclosure.html">
Affiliate Disclosure Affiliate Disclosure
</a></p> </a></p>

View File

@@ -1 +1 @@
2025.12.0 2025.12.2

View File

@@ -1,6 +1,13 @@
################################### ######################################################################
## Tornados are no Joke. # @CCOSTAN - Follow Me on X
################################### # For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# High Wind Alerts - Severe wind warnings (push + Activity feed)
# Related Issue: 1550
# Logs to Activity feed while keeping existing notifications and actions.
# -------------------------------------------------------------------
######################################################################
- alias: 'High Wind Speed Notification' - alias: 'High Wind Speed Notification'
id: 5cc158a5-038a-4078-a9fb-c9f9cf9ecd49 id: 5cc158a5-038a-4078-a9fb-c9f9cf9ecd49
@@ -17,6 +24,11 @@
above: 60 above: 60
action: action:
- service: script.send_to_logbook
data:
topic: "WEATHER"
message: >-
Wind speed is {{ states('sensor.pirateweather_wind_speed') | round }} mph (thresholds: 30/40/60).
- service: script.notify_engine - service: script.notify_engine
data: data:
title: 'VERY HIGH WINDS:' title: 'VERY HIGH WINDS:'

View File

@@ -1,6 +1,13 @@
################################### ######################################################################
## Uses IFTTT to notify me of bad logins. # @CCOSTAN - Follow Me on X
################################### # For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Bad Login Attempts - Log security events to Activity feed
# Related Issue: 1550
# Replaces phone push with `script.send_to_logbook` using `sensor.activity_feed`.
# -------------------------------------------------------------------
######################################################################
- alias: Login Failure - alias: Login Failure
id: 814c48ea-e2e1-4b75-92b0-581081af5ce5 id: 814c48ea-e2e1-4b75-92b0-581081af5ce5
@@ -9,11 +16,7 @@
value_template: "{{ states('persistent_notification.httplogin') != 'unknown' }}" value_template: "{{ states('persistent_notification.httplogin') != 'unknown' }}"
action: action:
- service: script.notify_engine - service: script.send_to_logbook
data: data:
value1: 'Bad Login: ' topic: "SYSTEM"
value2: 'There was a Hack attempt!' message: "Bad Login: There was a hack attempt. Check the HA UI for details."
value3: 'Go Check the GUI for details.'
who: 'carlo'
group: 'information'

View File

@@ -1,6 +1,13 @@
################################### ######################################################################
## Trigger Dump # @CCOSTAN - Follow Me on X
################################### # For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Trigger Dump - Log feedreader events to Activity feed
# Related Issue: 1550
# Writes a Logbook entry and publishes payload to MQTT for debugging.
# -------------------------------------------------------------------
######################################################################
- alias: Trigger dump - MQTT - alias: Trigger dump - MQTT
id: 74edd73d-f0a5-45cf-9561-c6a1777236e5 id: 74edd73d-f0a5-45cf-9561-c6a1777236e5
@@ -8,12 +15,10 @@
- platform: event - platform: event
event_type: feedreader event_type: feedreader
action: action:
- service: script.notify_engine - service: script.send_to_logbook
data: data:
value1: 'Check the MQTT Dump' topic: "SYSTEM"
value2: '/dump/{{ trigger.platform }}' message: "Check the MQTT dump: /dump/{{ trigger.platform }}"
who: 'carlo'
group: 'information'
- service: mqtt.publish - service: mqtt.publish
data: data:
topic: '/dump/{{ trigger.platform }}' topic: '/dump/{{ trigger.platform }}'

View File

@@ -1,6 +1,14 @@
################################### ######################################################################
## Start Up Section # @CCOSTAN - Follow Me on X
################################### # For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Startup Logbook Entry - Log HA restarts to Activity feed
# Related Issue: 1550
# Uses `script.send_to_logbook` + `sensor.activity_feed` (no phone push).
# Keeps an Alexa announce when daytime.
# -------------------------------------------------------------------
######################################################################
- alias: Startup Notification and Shut startup lights - alias: Startup Notification and Shut startup lights
id: f3f0a8d1-6c40-43e0-91e4-827194f78506 id: f3f0a8d1-6c40-43e0-91e4-827194f78506
@@ -9,12 +17,10 @@
- platform: homeassistant - platform: homeassistant
event: start event: start
action: action:
- service: script.notify_engine - service: script.send_to_logbook
data: data:
title: 'Home Assistant StartUp' topic: "SYSTEM"
value1: 'Home Assistant is Up and Running!' message: "Home Assistant is Up and Running!"
who: 'carlo'
group: 'information'
- service: homeassistant.turn_off - service: homeassistant.turn_off
entity_id: entity_id:
@@ -35,4 +41,3 @@
message: "Home Assistant has been restarted." message: "Home Assistant has been restarted."
data: data:
type: announce type: announce

View File

@@ -90,4 +90,4 @@ scene: !include_dir_merge_list scene
# switch: !include_dir_merge_list switch # switch: !include_dir_merge_list switch
script: !include_dir_merge_named script script: !include_dir_merge_named script
input_boolean: !include_dir_merge_named input_boolean input_boolean: !include_dir_merge_named input_boolean
shell_command: !include_dir_merge_named shell_command

View File

@@ -1,14 +1,19 @@
#------------------------------------------- ######################################################################
# HomeKit Configuration for Home Assistant # @CCOSTAN - Follow Me on X
# # For more info visit https://www.vcloudinfo.com/click-here
# Description: This file controls the HomeKit integration settings, # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# defining which entities are exposed to Apple HomeKit. # -------------------------------------------------------------------
# # HomeKit Configuration - Multi-bridge for stability + Alexa-friendly streams
# Follow me on https://www.vcloudinfo.com/click-here # Main bridge for lights/locks/climate; cameras/lock split to accessory bridges.
# Original Repository: https://github.com/CCOSTAN/Home-AssistantConfig # Camera streams use go2rtc substreams/restreams for faster Echo Show playback.
##------------------------------------------- # -------------------------------------------------------------------
######################################################################
filter: # Main bridge (everything except cameras + front door lock)
- name: Home Assistant Bridge
mode: bridge
port: 21063
filter:
include_domains: include_domains:
- climate - climate
- cover - cover
@@ -18,18 +23,10 @@ filter:
- media_player - media_player
- sensor - sensor
- script - script
- sensor
- switch - switch
- scene - scene
- light - light
include_entities: include_entities:
- camera.bedroomgate
- camera.driveway
- camera.filtergate
- camera.frontdoorbell
- camera.poolcam
- camera.frontlawn
- camera.garagecam
- light.bedroom - light.bedroom
- light.bedroom_lights - light.bedroom_lights
- light.den_lights - light.den_lights
@@ -48,28 +45,36 @@ filter:
- light.sink - light.sink
- switch.lr_amp - switch.lr_amp
exclude_entities: exclude_entities:
- lock.spaceship_door_lock - lock.front_door
- lock.spaceship_charger_door_lock # Cameras in accessory mode (better performance/reliability)
- lock.spaceship_trunk_lock - name: HomeKit Cameras
- lock.spaceship_frunk_lock mode: accessory
- climate.spaceship_hvac_climate_system port: 21064
filter:
entity_config: include_entities:
- camera.bedroomgate
- camera.driveway
- camera.filtergate
- camera.frontdoorbell
- camera.poolcam
- camera.frontlawn
- camera.garagecam
entity_config:
camera.frontdoorbell: camera.frontdoorbell:
video_codec: copy video_codec: copy
stream_source: rtsp://192.168.10.14:8554/frontdoorbell?mp4 stream_source: rtsp://192.168.10.14:8554/frontdoorbell_alexa
camera.poolcam: camera.poolcam:
linked_motion_sensor: binary_sensor.poolcam_motion_sensor linked_motion_sensor: binary_sensor.poolcam_motion_sensor
video_codec: copy video_codec: copy
stream_source: rtsp://192.168.10.14:8554/poolcam?mp4 stream_source: rtsp://192.168.10.14:8554/poolcam_sub
camera.frontlawn: camera.frontlawn:
linked_motion_sensor: binary_sensor.frontlawn_motion_sensor linked_motion_sensor: binary_sensor.frontlawn_motion_sensor
video_codec: copy video_codec: copy
stream_source: rtsp://192.168.10.14:8554/frontlawn?mp4 stream_source: rtsp://192.168.10.14:8554/frontlawn_sub
camera.garagecam: camera.garagecam:
linked_motion_sensor: binary_sensor.garagecam_motion_sensor linked_motion_sensor: binary_sensor.garagecam_motion_sensor
video_codec: copy video_codec: copy
stream_source: rtsp://192.168.10.14:8554/garagecam?mp4 stream_source: rtsp://192.168.10.14:8554/garagecam_sub
camera.bedroomgate: camera.bedroomgate:
linked_motion_sensor: binary_sensor.bedroomgate_motion_sensor linked_motion_sensor: binary_sensor.bedroomgate_motion_sensor
video_codec: copy video_codec: copy
@@ -77,8 +82,16 @@ entity_config:
camera.driveway: camera.driveway:
linked_motion_sensor: binary_sensor.driveway_motion_sensor linked_motion_sensor: binary_sensor.driveway_motion_sensor
video_codec: copy video_codec: copy
stream_source: rtsp://192.168.10.14:8554/driveway?mp4 stream_source: rtsp://192.168.10.14:8554/driveway_sub
camera.filtergate: camera.filtergate:
linked_motion_sensor: binary_sensor.filtergate_motion_sensor linked_motion_sensor: binary_sensor.filtergate_motion_sensor
video_codec: copy video_codec: copy
stream_source: rtsp://192.168.10.14:8554/filtergate?mp4 stream_source: rtsp://192.168.10.14:8554/filtergate?mp4
# Front door lock in accessory mode (keeps lock responsive/available)
- name: HomeKit Front Door Lock
mode: accessory
port: 21065
filter:
include_entities:
- lock.front_door

View File

@@ -43,9 +43,10 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
| [august.yaml](august.yaml) | Front-door August smart lock with Alexa Show camera pop-up when unlocked. | `lock.front_door`, media_player actions for front doorbell camera | | [august.yaml](august.yaml) | Front-door August smart lock with Alexa Show camera pop-up when unlocked. | `lock.front_door`, media_player actions for front doorbell camera |
| [holiday.yaml](holiday.yaml) | REST-driven US holiday + flag sensors that color scenes and exterior lighting. | `sensor.holiday`, `sensor.flag`, JSON feed at `config/json_data/holidays.json` | | [holiday.yaml](holiday.yaml) | REST-driven US holiday + flag sensors that color scenes and exterior lighting. | `sensor.holiday`, `sensor.flag`, JSON feed at `config/json_data/holidays.json` |
| [lightning.yaml](lightning.yaml) | Blitzortung lightning counter monitoring with snoozeable push actions. | `sensor.blitzortung_lightning_counter`, `input_boolean.snooze_lightning`, notify engine actions | | [lightning.yaml](lightning.yaml) | Blitzortung lightning counter monitoring with snoozeable push actions. | `sensor.blitzortung_lightning_counter`, `input_boolean.snooze_lightning`, notify engine actions |
| [phynplus.yaml](phynplus.yaml) | Tie the Phyn Plus smart shutoff into HA notifications, automations, and valve overrides. | `valve.phyn_shutoff_valve`, `binary_sensor.phyn_leak_test_running`, `script.notify_engine_two_button` | | [logbook_activity_feed.yaml](logbook_activity_feed.yaml) | Dummy `sensor.activity_feed` + helper to write clean Activity entries (Issue #1550). | `sensor.activity_feed`, `script.send_to_logbook` |
| [powerwall.yaml](powerwall.yaml) | Track Tesla Powerwall grid status and shed loads automatically when off-grid. | `binary_sensor.powerwall_grid_status`, `sensor.powerwall_*`, `script.notify_engine` | | [phynplus.yaml](phynplus.yaml) | Phyn shutoff automations with push + Activity feed + Repairs issues for leak events. | `valve.phyn_shutoff_valve`, `binary_sensor.phyn_leak_test_running`, `repairs.create` |
| [vacuum.yaml](vacuum.yaml) | Dreame (ex-Neato) vacuum orchestration with maintenance reminders and reset helpers. | `sensor.l10s_vacuum_task_status`, `sensor.l10s_vacuum_sensor_dirty_left`, `button.l10s_vacuum_reset_sensor` | | [powerwall.yaml](powerwall.yaml) | Track Tesla Powerwall grid status and shed loads automatically when off-grid (alerts include Activity feed + Repairs). | `binary_sensor.powerwall_grid_status`, `sensor.powerwall_*`, `repairs.create` |
| [vacuum.yaml](vacuum.yaml) | Dreame vacuum orchestration with room tracking, push alerts, Activity feed, and Repairs issues on errors. | `input_select.l10s_vacuum_phase`, `sensor.l10s_vacuum_error`, `repairs.create` |
| [hass_agent_homepc.yaml](hass_agent_homepc.yaml) | Mirrors PC lock/unlock state from HASS.Agent to the office lamp for instant desk presence cues. | `sensor.carlo_homepc_carlo_homepc_sessionstate`, `switch.office_lamp_switch` | | [hass_agent_homepc.yaml](hass_agent_homepc.yaml) | Mirrors PC lock/unlock state from HASS.Agent to the office lamp for instant desk presence cues. | `sensor.carlo_homepc_carlo_homepc_sessionstate`, `switch.office_lamp_switch` |
| [finance.yaml](finance.yaml) | Yahoo Finance sensor bundle for portfolio glances and Lovelace cards. | `sensor.tsla`, `sensor.aapl`, `sensor.amzn`, `sensor.msft` | | [finance.yaml](finance.yaml) | Yahoo Finance sensor bundle for portfolio glances and Lovelace cards. | `sensor.tsla`, `sensor.aapl`, `sensor.amzn`, `sensor.msft` |
@@ -60,8 +61,8 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
![Nest Climate Control](../www/custom_ui/floorplan/images/branding/Nest_Climate_Control.png) ![Nest Climate Control](../www/custom_ui/floorplan/images/branding/Nest_Climate_Control.png)
### Dreame vacuum automations ### Dreame vacuum automations
- Logic lives in [vacuum.yaml](vacuum.yaml): weekday sweeping/weekend mopping, room-queue segment cleaning that pauses/docks on arrival, resumes after charging, and per-room notifications/briefing summaries. - Logic lives in [vacuum.yaml](vacuum.yaml): continuous four-phase loop (sweep main, sweep baths, mop main, mop baths) driven by `input_select.l10s_vacuum_phase` and `input_text.l10s_vacuum_room_queue`, with per-room notifications and automatic reseeding between phases.
- Uses the Dreame HACS integration with map-based segments and daily resets to cover the whole house without repeating rooms. - Uses the Dreame HACS integration with segment IDs to enforce bathrooms last in each sweep/mop pass, dock on arrival, and auto-run if idle for 3+ days.
![Dreame Automations](../www/custom_ui/floorplan/images/branding/Dreame%20Automations.png) ![Dreame Automations](../www/custom_ui/floorplan/images/branding/Dreame%20Automations.png)
### Blog & video deep dives ### Blog & video deep dives

View File

@@ -4,6 +4,7 @@
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# Alarm Package - Arming helpers, sensors, and alerting. # Alarm Package - Arming helpers, sensors, and alerting.
# Related Issue: 1550
# Alarm sensors, customization, and automations for home security. # Alarm sensors, customization, and automations for home security.
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# Notes: Turns HVAC off when doors/windows are open and restores cool mode after closure. # Notes: Turns HVAC off when doors/windows are open and restores cool mode after closure.
@@ -340,6 +341,10 @@ automation:
from: 'on' from: 'on'
action: action:
- service: script.send_to_logbook
data:
topic: "SECURITY"
message: "Alarm panel door opened."
- service: script.notify_engine - service: script.notify_engine
data: data:
value1: 'Someone has opened up the Alarm Panel Door!' value1: 'Someone has opened up the Alarm Panel Door!'

View File

@@ -1,25 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Neato Support for D7 Connected Botvac - control my [Neato Vacuum](http://amzn.to/2kqnnqu) with Home Assistant.
#-------------------------------------------
homeassistant:
customize_glob:
"*.arris_tg1682g_router*":
#-------------------------------------------
group:
router:
name: Router Stats
entities:
- sensor.arris_tg1682g_router_bytes_received
- sensor.arris_tg1682g_router_bytes_sent
- sensor.arris_tg1682g_router_kbytesec_received
- sensor.arris_tg1682g_router_kbytesec_sent
- sensor.arris_tg1682g_router_packets_received
- sensor.arris_tg1682g_router_packets_sent
- sensor.arris_tg1682g_router_packetssec_received
- sensor.arris_tg1682g_router_packetssec_sent

View File

@@ -46,6 +46,10 @@ automation:
title: 'Low Battery' title: 'Low Battery'
value1: 'The August Door lock is at {{ states("sensor.front_door_battery") }}% ' value1: 'The August Door lock is at {{ states("sensor.front_door_battery") }}% '
group: 'Battery_Alert' group: 'Battery_Alert'
- service: script.send_to_logbook
data:
topic: "BATTERY"
message: "August Door lock battery low: {{ states('sensor.front_door_battery') }}%"
- alias: 'FrontDoor Bell Camera on Front Door Lock' - alias: 'FrontDoor Bell Camera on Front Door Lock'
id: Doorbell_camera_front_door id: Doorbell_camera_front_door

View File

@@ -1,37 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Backups - Monitor backup jobs and alert on failures.
#-------------------------------------------
######################################################################
## Duplicati/backup status sensors and notifications.
######################################################################
# Added Duplicati to HA - https://github.com/CCOSTAN/Home-AssistantConfig/issues/1498
automation:
- alias: 'Backup Job Failed Notification'
id: 5b3a4c89-1234-4567-8901-23456789abcf
trigger:
- platform: state
entity_id: sensor.dockerconfigs_backup_error_message
from: '-'
action:
- service: script.notify_engine
data:
who: 'carlo'
value1: 'Backup Job Error!'
value2: "Error: {{ states('sensor.dockerconfigs_backup_error_message') }}"
- alias: 'Backup Size Change Alert'
id: 5b3a4c89-1234-4567-8901-23456789abd0
trigger:
- platform: numeric_state
entity_id: sensor.dockerconfigs_backup_target_size
above: 10000000000 # Alert if backup size is over 10GB
action:
- service: script.notify_engine
data:
who: 'carlo'
value1: 'Backup Size Warning'
value2: >
Backup target size has grown to {{ states('sensor.dockerconfigs_backup_target_size') | float / 1000000000 }} GB.
Please verify backup contents and available storage.

View File

@@ -1,54 +0,0 @@
#-------------------------------------------
# Fire Tablet Alarm Panel -
# https://www.vcloudinfo.com/2017/07/visualizing-smart-home-using-home.html
#-------------------------------------------
#
# homeassistant:
# customize_glob:
# "sensor.*_alarm_panel*":
#
#
# "binary_sensor.*_alarm_panel*":
#
#
sensor:
- platform: template
sensors:
low_battery:
friendly_name: 'Low Battery'
value_template: >
{%- set threshold = 15 -%}
{%- set domains = ['light', 'switch', 'sensor', 'zwave', 'lock', 'binary_sensor'] -%}
{%- for domain in domains -%}
{%- for item in states[domain] if ((item.attributes.battery_level is defined and item.attributes['battery_level'] | int < threshold) or ("battery" in item.name | lower and ((item.state | int < threshold and item.state|int != 0) or item.state | lower == "low" or item.state | lower == "unknown"))) -%}
{{ item.attributes.friendly_name }} (
{%- if item.attributes.battery_level is defined -%}
{{ item.attributes.battery_level}}
{%- else -%}
{{item.state}}
{%- endif -%}%)
{%- if not loop.last -%}
{{', '}}
{%- endif -%}
{%- endfor -%}
{%- endfor -%}
automation:
- alias: 'Battery Alert'
id: 1a4f06f0-8763-4801-ba6c-55b87d1b0286
initial_state: 'on'
trigger:
- platform: time
at: '10:00:00'
- platform: time
at: '18:00:00'
condition:
condition: template
value_template: "{% if states('sensor.low_battery') %}true{% endif %}"
action:
- service: script.notify_engine
data:
value1: "Low battery levels: {{ states('sensor.low_battery') }}"
who: 'carlo'
apns_id: 'information'

View File

@@ -134,6 +134,10 @@ script:
entity_id: group.family entity_id: group.family
state: 'not_home' state: 'not_home'
sequence: sequence:
- service: script.send_to_logbook
data:
topic: "CLIMATE"
message: "Downstairs HVAC set to ECO (family not_home)."
- service: climate.set_preset_mode - service: climate.set_preset_mode
data: data:
entity_id: climate.downstairs entity_id: climate.downstairs
@@ -148,6 +152,10 @@ script:
entity_id: sensor.pirateweather_temperature entity_id: sensor.pirateweather_temperature
above: 92 above: 92
sequence: sequence:
- service: script.send_to_logbook
data:
topic: "CLIMATE"
message: "Downstairs target set to 78F (family home, temp >92F)."
- service: climate.set_hvac_mode - service: climate.set_hvac_mode
data: data:
entity_id: climate.downstairs entity_id: climate.downstairs
@@ -161,6 +169,10 @@ script:
entity_id: group.family entity_id: group.family
state: 'home' state: 'home'
sequence: sequence:
- service: script.send_to_logbook
data:
topic: "CLIMATE"
message: "Downstairs target set to 80F (family home)."
- service: climate.set_hvac_mode - service: climate.set_hvac_mode
data: data:
entity_id: climate.downstairs entity_id: climate.downstairs
@@ -183,6 +195,11 @@ automation:
entity_id: sensor.downstairs_ac_runtime_since_last_filter_change entity_id: sensor.downstairs_ac_runtime_since_last_filter_change
above: 800 # hours above: 800 # hours
action: action:
- service: script.send_to_logbook
data:
topic: "MAINTENANCE"
message: >-
Downstairs AC filter due (runtime >800h). Last changed {{ ((now() - states.input_datetime.downstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago.
- service: script.notify_engine # <-- keep your existing notify helper - service: script.notify_engine # <-- keep your existing notify helper
data: data:
title: "Home Maintenance Reminder" title: "Home Maintenance Reminder"
@@ -200,6 +217,11 @@ automation:
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
above: 450 # hours above: 450 # hours
action: action:
- service: script.send_to_logbook
data:
topic: "MAINTENANCE"
message: >-
Upstairs AC filter due (runtime >450h). Last changed {{ ((now() - states.input_datetime.upstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago.
- service: script.notify_engine - service: script.notify_engine
data: data:
title: "Home Maintenance Reminder" title: "Home Maintenance Reminder"
@@ -245,6 +267,10 @@ automation:
data: data:
entity_id: climate.upstairs entity_id: climate.upstairs
temperature: 78 temperature: 78
- service: script.send_to_logbook
data:
topic: "CLIMATE"
message: "Upstairs target temp corrected to 78F (guardrail)."
- alias: Set Downstairs to 77 When Both in Bed - alias: Set Downstairs to 77 When Both in Bed
id: set_downstairs_nest_77_both_in_bed id: set_downstairs_nest_77_both_in_bed
@@ -432,4 +458,3 @@ automation:
- delay: "00:20:00" - delay: "00:20:00"
- service: script.set_downstairs_target_temp_based_on_conditions - service: script.set_downstairs_target_temp_based_on_conditions
- delay: "02:00:00" # stops it from being triggered again too soon. - delay: "02:00:00" # stops it from being triggered again too soon.

View File

@@ -105,13 +105,10 @@ automation:
entity_id: input_text.last_person_home entity_id: input_text.last_person_home
data: data:
value: "{{ trigger.to_state.entity_id.split('.')[1] }}" value: "{{ trigger.to_state.entity_id.split('.')[1] }}"
- service: script.notify_engine - service: script.send_to_logbook
data: data:
who: 'parents' topic: "GARAGE"
value1: "Large Garage has been auto-opened for {{ states('input_text.last_person_home') }}." message: "Large Garage was auto-opened for {{ states('input_text.last_person_home') }}."
title: 'Garage Auto-Opened'
group: 'Welcome_Home'
camera_entity: camera.garagecam
###################################################################### ######################################################################
## Entry helper prompt after arrival if auto-open didnt fire. ## Entry helper prompt after arrival if auto-open didnt fire.
@@ -215,6 +212,10 @@ automation:
value1: "Unlocking for {{ trigger.to_state.name }} arriving from driving." value1: "Unlocking for {{ trigger.to_state.name }} arriving from driving."
who: "family" who: "family"
group: "Welcome_Home" group: "Welcome_Home"
- service: script.send_to_logbook
data:
topic: "DOORS"
message: "Front door auto-unlocked for {{ trigger.to_state.name }} arriving from driving."
###################################################################### ######################################################################
@@ -413,22 +414,6 @@ automation:
from: 'home' from: 'home'
action: action:
- choose:
- conditions: "{{ is_state('binary_sensor.sleepnumber_carlo_stacey_is_in_bed','on') }}"
sequence:
- service: media_player.play_media
data:
entity_id: media_player.stacey_bedroom
media_content_id: 'show garage camera from home assistant'
media_content_type: custom
- delay: '00:10:00'
- service: media_player.play_media
data:
entity_id: media_player.stacey_bedroom
media_content_id: 'hide garage camera'
media_content_type: custom
default:
- service: media_player.play_media - service: media_player.play_media
target: target:
entity_id: media_player.kitchen entity_id: media_player.kitchen

View File

@@ -1,53 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# More Info : https://www.vcloudinfo.com/
#-------------------------------------------
sensor:
- platform: command_line
name: "Download Grafana Solar"
command: 'curl -s -H "Authorization: Bearer eyJrIjoiZ0UwS1hpRVdCbFVVSTNSdER0Z29maHc4QmVuSXhxalYiLCJuIjoiSEFDYW1lcmEiLCJpZCI6MX0=" "http://192.168.10.10:3000/render/d/h_wosLIik/solar?orgId=1&from=now-1d%2Fd&to=now-1d%2Fd&height=750&width=1920" > /config/www/custom_ui/floorplan/images/branding/solar_readings.png'
scan_interval: 3000
- platform: command_line
name: "Download Grafana ATT SpeedTest"
command: 'curl -s -H "Authorization: Bearer eyJrIjoiZ0UwS1hpRVdCbFVVSTNSdER0Z29maHc4QmVuSXhxalYiLCJuIjoiSEFDYW1lcmEiLCJpZCI6MX0=" "http://192.168.10.10:3000/render/d/bdR1ZnFZk/att-speedtest?viewPanel=2&orgId=1" > /config/www/custom_ui/floorplan/images/branding/att_speedtest.png'
scan_interval: 3000
camera:
- platform: generic
name: "Grafana Solar Graph"
still_image_url: 'http://192.168.10.10:3000/render/d/h_wosLIik/solar?orgId=1&from=now-1d%2Fd&to=now-1d%2Fd&height=750&width=1920'
username: HA
password: HA
##############################################################################
### Automations - Detect when things are not right. Like any Good Watchdog.
##############################################################################
automation:
- alias: 'Tweet Solar Production'
id: bd698bd9-780b-4268-bf90-2c7ff6daae99
trigger:
- platform: sun
event: sunset
offset: '+02:30:00'
action:
- service: script.tweet_engine_image
data:
tweet: >-
{{ [
"I have just finished crunching the numbers and here is the latest #Solar Production graph. "
] | random + " #Charts #Tesla "
+ [
"(https://youtu.be/BartadUzGOA)",
"(https://www.vcloudinfo.com/2018/01/going-green-to-save-some-green-in-2018.html)",
"(https://www.vcloudinfo.com/2018/09/re-installing-tesla-solar-panels-again.html)"
]| random
}}
image: >-
{% set pictures = [
"/config/www/custom_ui/floorplan/images/branding/solar_readings.png"
] %}
{{ pictures|random }}

View File

@@ -29,7 +29,7 @@ homeassistant:
############################################################################### ###############################################################################
sensor: sensor:
- platform: rest - platform: rest
resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/json_data/holidays.json resource: http://localhost:8123/local/json_data/holidays.json
name: Holiday name: Holiday
scan_interval: 14400 scan_interval: 14400
value_template: > value_template: >
@@ -45,29 +45,22 @@ sensor:
# Sensor Uses Flag data generated by AI # Sensor Uses Flag data generated by AI
################################################################################ ################################################################################
- platform: rest - platform: rest
resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/json_data/flag_days.json resource: http://localhost:8123/local/json_data/flag_days.json
name: Flag name: Flag
scan_interval: 14400 scan_interval: 14400
value_template: >- value_template: >-
{% set now_string = now().strftime('%m/%d') %} {% set now_string = now().month ~ '/' ~ now().day %}
{% set now_full_string = now().strftime('%m/%d/%Y') %} {% set now_full_string = now().strftime('%m/%d/%Y') %}
{% if value_json is defined and value_json.Flag_Days_US is defined %} {% set flag_data = value_json.Flag_Days_US if value_json is defined and value_json.Flag_Days_US is defined else {} %}
{% set static_days = value_json.Flag_Days_US.static %} {% set static_days = flag_data.static if flag_data.static is defined else {} %}
{% set dynamic_days = value_json.Flag_Days_US.dynamic %} {% set dynamic_days = flag_data.dynamic if flag_data.dynamic is defined else {} %}
{% if static_days is defined and now_string in static_days %} {% if now_string in static_days %}
True True
{% elif dynamic_days is defined %} {% elif now_full_string in dynamic_days %}
{% for day_val in dynamic_days %}
{% if day_val.date == now_full_string %}
True True
{% endif %}
{% endfor %}
{% else %} {% else %}
False False
{% endif %} {% endif %}
{% else %}
{% endif %}
################################################################################ ################################################################################
# Countdown Sensor using WolfRam Alpha Natural language queries # Countdown Sensor using WolfRam Alpha Natural language queries

View File

@@ -1,12 +1,14 @@
#------------------------------------------- ######################################################################
# @CCOSTAN # @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Lightning Alerts - Monitor nearby strikes and notify. # -------------------------------------------------------------------
#------------------------------------------- # Lightning Alerts - Nearby strike warnings and snooze workflow
# Related Issue: 1550
# Keeps push alerts but also logs to Activity feed.
# -------------------------------------------------------------------
# Guide: https://www.vcloudinfo.com/2020/08/adding-a-lightning-sensor-to-home-assistant.html | Existing Issue #392
###################################################################### ######################################################################
## Lightning sensor integration and alerting.
######################################################################
# Guide: https://www.vcloudinfo.com/2020/08/adding-a-lightning-sensor-to-home-assistant.html | Issue #392
input_boolean: input_boolean:
snooze_lightning: snooze_lightning:
name: Snooze Lightning name: Snooze Lightning
@@ -45,6 +47,11 @@ automation:
state: 'off' state: 'off'
action: action:
- service: script.send_to_logbook
data:
topic: "WEATHER"
message: >-
Lightning detected within {{ (states('sensor.blitzortung_lightning_distance') | int / 1.609) | round(1, 'floor') }} miles.
- service: script.notify_engine_two_button - service: script.notify_engine_two_button
data: data:
title: 'Lightning Warning!' title: 'Lightning Warning!'

View File

@@ -0,0 +1,96 @@
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# LLM Vision - Garage Cans X Check - detects reflective X on right wall
# Trigger with input_button.llmvision_garbage_check to update garbage_cans_out.
# -------------------------------------------------------------------
# Notes: LLMVision analyzes camera.garagecam; expects strict "on"/"off" output.
# Docs: https://llmvision.gitbook.io/getting-started/usage/image-analyzer
######################################################################
input_button:
llmvision_garbage_check:
name: "LLM Vision: Garage cans check"
icon: mdi:delete-variant
input_boolean:
garbage_cans_out:
name: "Garbage Cans Out"
icon: mdi:trash-can
input_text:
llmvision_garbage_last_response:
name: "LLM Vision garage response"
max: 255
llmvision_garbage_last_keyframe:
name: "LLM Vision garage key frame"
max: 255
input_datetime:
llmvision_garbage_last_run:
name: "LLM Vision garage last run"
has_date: true
has_time: true
template:
- binary_sensor:
- name: "Garbage Cans Out"
unique_id: llmvision_garbage_cans_out
device_class: presence
state: "{{ is_state('input_boolean.garbage_cans_out', 'on') }}"
attributes:
last_run: "{{ states('input_datetime.llmvision_garbage_last_run') }}"
last_response: "{{ states('input_text.llmvision_garbage_last_response') }}"
last_key_frame: "{{ states('input_text.llmvision_garbage_last_keyframe') }}"
source_camera: camera.garagecam
automation:
- alias: LLM Vision - Garbage cans out
id: d88a2e6d-78f3-4bb7-9d9f-c4d06e6eb5a9
mode: restart
trigger:
- platform: state
entity_id: input_button.llmvision_garbage_check
variables:
prompt_text: >
Examine the image. I have taped a reflective X on the right wall. Look for the reflective X on the right wall. If you clearly see the X, respond exactly: on. If you cannot see the X, respond exactly: off. No other words.
action:
- service: llmvision.data_analyzer
response_variable: llmvision_result
data:
provider: !secret llmvision_provider_entry
model: gpt-4.1-nano
message: "{{ prompt_text }}"
sensor_entity: input_boolean.garbage_cans_out
image_entity:
- camera.garagecam
include_filename: false
target_width: 1280
max_tokens: 16
expose_images: true
- service: input_text.set_value
target:
entity_id: input_text.llmvision_garbage_last_response
data:
value: "{{ (llmvision_result.response_text | default('unknown'))[:250] }}"
- choose:
- conditions: "{{ llmvision_result is defined and llmvision_result.key_frame is defined }}"
sequence:
- service: input_text.set_value
target:
entity_id: input_text.llmvision_garbage_last_keyframe
data:
value: "{{ llmvision_result.key_frame }}"
default:
- service: input_text.set_value
target:
entity_id: input_text.llmvision_garbage_last_keyframe
data:
value: ""
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.llmvision_garbage_last_run
data:
datetime: "{{ now() }}"

View File

@@ -0,0 +1,18 @@
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Logbook Activity Feed - Dummy entity for Activity pseudo-filtering
# Related Issue: 1550
# Provides `sensor.activity_feed` as a stable entity_id for `logbook.log`.
# -------------------------------------------------------------------
######################################################################
template:
- sensor:
- name: Activity Feed
unique_id: activity_feed
icon: mdi:clipboard-text
state: "ready"

23
config/packages/n8n.yaml Normal file
View File

@@ -0,0 +1,23 @@
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# n8n Discord Router - Route HA events to Discord via JoAnnaBot
# Central REST command into n8n's Discord routing webhook
# -------------------------------------------------------------------
# <No related GitHub issue>
# REST endpoint: n8n webhook /discord-router
######################################################################
rest_command:
send_to_discord:
url: "http://192.168.10.69:5678/webhook/discord-router"
method: POST
content_type: "application/json"
payload: >
{
"topic": "{{ topic }}",
"message": "{{ message }}"
}

View File

@@ -1,14 +1,15 @@
#------------------------------------------- ######################################################################
# @CCOSTAN # @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Phyn Plus Water Shutoff - Leak detection and auto shutoff. # -------------------------------------------------------------------
#------------------------------------------- # Phyn Plus Water Shutoff - Leak detection and auto shutoff
###################################################################### # Related Issue: 1550
## Phyn Plus monitoring via custom integration. # Push + Activity feed + Repairs issue while valve is closed.
###################################################################### # -------------------------------------------------------------------
# Info: https://www.vcloudinfo.com/2020/05/phyn-plus-smart-water-shutoff-device.html # Info: https://www.vcloudinfo.com/2020/05/phyn-plus-smart-water-shutoff-device.html
# HACS: https://github.com/MizterB/homeassistant-phyn # HACS: https://github.com/MizterB/homeassistant-phyn
## Phyn Plus Water ShutOff - https://amzn.to/2Zy3sbJ # Product: https://amzn.to/2Zy3sbJ
###################################################################### ######################################################################
automation: automation:
@@ -27,6 +28,22 @@ automation:
state: 'off' state: 'off'
action: action:
- service: script.send_to_logbook
data:
topic: "WATER"
message: "Phyn detected a leak and shut off the water. Please verify."
- service: repairs.create
data:
issue_id: "phyn_leak_shutoff"
title: "Phyn leak shutoff"
severity: "critical"
persistent: true
description: >-
Phyn detected a potential leak and automatically closed the main water valve.
Verify there are no active leaks before restoring water service.
- service: script.notify_engine_two_button - service: script.notify_engine_two_button
data: data:
title: 'Phyn Leak Detection' title: 'Phyn Leak Detection'
@@ -107,8 +124,11 @@ automation:
entity_id: valve.phyn_shutoff_valve entity_id: valve.phyn_shutoff_valve
to: 'open' to: 'open'
action: action:
- service: repairs.remove
continue_on_error: true
data:
issue_id: "phyn_leak_shutoff"
- service: persistent_notification.dismiss - service: persistent_notification.dismiss
data: data:
notification_id: 'phyn_leak_detection' notification_id: 'phyn_leak_detection'

View File

@@ -1,14 +1,15 @@
#------------------------------------------- ######################################################################
# @CCOSTAN # @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Tesla Powerwall - Monitoring and outage automations. # -------------------------------------------------------------------
#------------------------------------------- # Tesla Powerwall - Monitoring and outage automations
###################################################################### # Related Issue: 1550
## Powerwall status sensors and load-shedding helpers. # Powerwall status sensors, outage alerting, and load-shedding helpers.
###################################################################### # -------------------------------------------------------------------
# Read more: https://www.vcloudinfo.com/2018/01/going-green-to-save-some-green-in-2018.html | Issue #272 # Notes: Read more https://www.vcloudinfo.com/2018/01/going-green-to-save-some-green-in-2018.html | Existing Issue #272
# Tesla Powerwall added via UI Integration # Tesla Powerwall added via UI Integration
# -------------------------------------------------------------- ######################################################################
# Binary Sensors: # Binary Sensors:
# - binary_sensor.powerwall_charging ............. battery_charging (on=charging) # - binary_sensor.powerwall_charging ............. battery_charging (on=charging)
# - binary_sensor.powerwall_connected_to_tesla ... connectivity (on=connected) # - binary_sensor.powerwall_connected_to_tesla ... connectivity (on=connected)
@@ -54,6 +55,11 @@ automation:
trigger.from_state.state not in ['unavailable', 'unknown', 'null'] }} trigger.from_state.state not in ['unavailable', 'unknown', 'null'] }}
action: action:
- service: script.send_to_logbook
data:
topic: "POWER"
message: >-
Grid status is {{ (trigger.to_state.state)|replace('on', 'up')|replace('off', 'down') }}.
- service: script.notify_engine - service: script.notify_engine
data: data:
title: "Electrical Grid Status {{ (trigger.to_state.state)|replace('on', 'up')|replace('off', 'down') }}." title: "Electrical Grid Status {{ (trigger.to_state.state)|replace('on', 'up')|replace('off', 'down') }}."
@@ -124,6 +130,22 @@ automation:
entity_id: binary_sensor.powerwall_grid_status entity_id: binary_sensor.powerwall_grid_status
state: 'on' state: 'on'
action: action:
- service: script.send_to_logbook
data:
topic: "POWER"
message: "Powerwall charge below 60% for 24h (current: {{ states('sensor.powerwall_charge') }}%)."
- service: repairs.create
data:
issue_id: "powerwall_low_charge_60_24h"
title: "Powerwall charge low for 24h"
severity: "warning"
persistent: true
description: >-
Powerwall has been below 60% for 24 hours while the grid is online.
Current charge: {{ states('sensor.powerwall_charge') }}%.
- service: script.notify_engine - service: script.notify_engine
data: data:
title: "Powerwall Low Charge Alert - Current Charge: {{ states('sensor.powerwall_charge') }}" title: "Powerwall Low Charge Alert - Current Charge: {{ states('sensor.powerwall_charge') }}"
@@ -131,6 +153,29 @@ automation:
who: 'parents' who: 'parents'
group: 'information' group: 'information'
- alias: "Powerwall Low Charge Resolved - Clear Repair Issue"
id: 5fd1f0b3-0e64-4a4b-bd7a-9f5d5e6b8f90
mode: single
trigger:
- platform: numeric_state
entity_id: sensor.powerwall_charge
above: 60
for:
minutes: 10
condition:
- condition: state
entity_id: binary_sensor.powerwall_grid_status
state: 'on'
action:
- service: repairs.remove
continue_on_error: true
data:
issue_id: "powerwall_low_charge_60_24h"
- service: script.send_to_logbook
data:
topic: "POWER"
message: "Powerwall charge recovered above 60%. Cleared repair issue."
- alias: "Shut down Docker hosts and camera PoE at 75% Powerwall" - alias: "Shut down Docker hosts and camera PoE at 75% Powerwall"
id: 25b3d3d8-92fa-454a-9f1c-6d3fd0f3af58 id: 25b3d3d8-92fa-454a-9f1c-6d3fd0f3af58
description: "Protect battery by shutting down non-essentials when Powerwall drops below 75%" description: "Protect battery by shutting down non-essentials when Powerwall drops below 75%"

View File

@@ -54,5 +54,15 @@ automation:
data: data:
type: announce type: announce
- service: script.send_to_logbook
data:
topic: "PRINTER"
message: >
{% if trigger.to_state.state == 'idle' %}
Printer has powered on and is ready
{% else %}
Printer is now printing
{% endif %}
#------------------------------------------- #-------------------------------------------

View File

@@ -35,6 +35,10 @@ automation:
value2: "Your harddrive is running out of Space! /dev/root:{{ states.sensor.disk_use_percent.state }}%!" value2: "Your harddrive is running out of Space! /dev/root:{{ states.sensor.disk_use_percent.state }}%!"
value3: 'Attempting to clean' value3: 'Attempting to clean'
who: 'carlo' who: 'carlo'
- service: script.send_to_logbook
data:
topic: "SYSTEM"
message: "Disk usage exceeded 80% (/dev/root: {{ states.sensor.disk_use_percent.state }}%). Attempting to clean."
- service: tts.clear_cache - service: tts.clear_cache
- alias: "Disk Use Alarm" - alias: "Disk Use Alarm"
@@ -49,3 +53,7 @@ automation:
value1: 'Hard Drive Monitor:' value1: 'Hard Drive Monitor:'
value2: "Your harddrive is running out of Space! /dev/root:{{ states.sensor.disk_use_percent.state }}%!" value2: "Your harddrive is running out of Space! /dev/root:{{ states.sensor.disk_use_percent.state }}%!"
who: 'carlo' who: 'carlo'
- service: script.send_to_logbook
data:
topic: "SYSTEM"
message: "Disk usage exceeded 90% (/dev/root: {{ states.sensor.disk_use_percent.state }}%)."

View File

@@ -20,6 +20,10 @@ automation:
- service: button.press - service: button.press
target: target:
entity_id: button.qemu_docker2_101_reboot entity_id: button.qemu_docker2_101_reboot
- service: script.send_to_logbook
data:
topic: "FRIGATE"
message: "Frigate server rebooted at 5 AM."
- alias: "Proxmox Updates Repair Issues" - alias: "Proxmox Updates Repair Issues"
id: proxmox_updates_repair id: proxmox_updates_repair
@@ -56,3 +60,7 @@ automation:
- service: repairs.remove - service: repairs.remove
data: data:
issue_id: "{{ issue_id }}" issue_id: "{{ issue_id }}"
- service: script.send_to_logbook
data:
topic: "PROXMOX"
message: "{{ node_name }} has been Patched"

View File

@@ -1,13 +1,15 @@
#------------------------------------------- ######################################################################
# @CCOSTAN # @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Rheem EcoNet Water Heater - Monitoring and control. # -------------------------------------------------------------------
#------------------------------------------- # Rheem EcoNet Water Heater - Monitoring and control
###################################################################### # Related Issue: 1550
## Rheem EcoNet sensors/automations. https://amzn.to/36yOSnN # Logs hot-water availability alerts to Activity feed; keeps announcements.
###################################################################### # -------------------------------------------------------------------
# Docs: https://www.home-assistant.io/integrations/econet/ | Issue #892 # Docs: https://www.home-assistant.io/integrations/econet/ | Existing notes: Issue #892
# Powerwall outage control for Rheem WH lives in config/packages/powerwall.yaml # Powerwall outage control for Rheem WH lives in config/packages/powerwall.yaml
######################################################################
############################################################################## ##############################################################################
### Automations ### Automations
@@ -51,15 +53,13 @@ automation:
entity_id: sensor.rheem_wh_available_hot_water entity_id: sensor.rheem_wh_available_hot_water
below: 30 # Alert when available hot water drops below 30% below: 30 # Alert when available hot water drops below 30%
action: action:
- service: script.notify_engine - service: script.send_to_logbook
data: data:
title: "Hot Water Alert" topic: "WATER"
value1: "Available hot water is below 30%." message: "Hot water availability is below 30%."
who: 'carlo'
group: 'information'
- service: script.speech_engine - service: script.speech_engine
data: data:
value1: "Please be aware that the hot water has dropped below 30% availability. Please consider taking a shower at another time. Gallons used today: {{sensor.phyn_daily_water_usage}}" value1: "Please be aware that the hot water has dropped below 30% availability. Gallons used today: {{sensor.phyn_daily_water_usage}}"
- service: notify.alexa_media_master_bathroom - service: notify.alexa_media_master_bathroom
data: data:
@@ -97,4 +97,3 @@ automation:
# water_heater.rheem_wh # water_heater.rheem_wh

View File

@@ -1,96 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
###################################
## [SkyBell HD](https://amzn.to/2dcexIB)
###################################
skybell:
username: !secret skybell_username
password: !secret skybell_password
camera:
- platform: skybell
monitored_conditions:
- avatar
- activity
activity_name: "Last Activity"
binary_sensor:
- platform: skybell
monitored_conditions:
- button
- motion
light:
- platform: skybell # Part of the Outdoor Front Lights Group
sensor:
- platform: skybell
monitored_conditions:
- chime_level
button:
- platform: skybell
monitored_conditions:
# - do_not_disturb
- motion_sensor
###################################
## Automations
###################################
## Doorbell Press
automation:
- alias: 'Log SkyBell Pressed Activity'
id: 64226512-f35d-4179-bfcb-9de158b8d3f4
trigger:
- platform: state
entity_id:
- binary_sensor.skybell_front_door_button
to: 'on'
- platform: event
event_type: skybell_pressed
condition:
- condition: template
value_template: >
{%- if states.binary_sensor.skybell_front_door_button.attributes.last_triggered -%}
{{ (as_timestamp(now()) - as_timestamp(states.binary_sensor.skybell_front_door_button.attributes.last_triggered)) > 200 }}
{%- else -%}
true
{%- endif -%}
action:
- service: script.skybell_pressed
# Motion Sensing
- alias: 'Log SkyBell Motion detection'
id: a22c2cb7-08b2-4bd1-bc82-77201253a000
trigger:
- platform: event
event_type: skybell_motion
action:
- service: script.front_house_motion
# Turn SkyBell Light and Neato Schedule back on if it's turned off. Like any Good Watchdog.
- alias: Automated Mismatch WatchDog!
id: bff434b9-5916-42d1-8620-5723b4b1879d
trigger:
- platform: state
entity_id:
- light.front_door
- switch.carlo_neato_schedule
to: 'off'
#Turn it back on!
action:
- service: homeassistant.turn_on
data:
entity_id: "{{ trigger.entity_id }}"

View File

@@ -1,17 +1,18 @@
#------------------------------------------- ######################################################################
# @CCOSTAN # @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Speedtest Alerts - Notify when internet speeds drop. # -------------------------------------------------------------------
#------------------------------------------- # Speedtest Alerts - Log internet speed drops/restores to Activity feed
# Related Issue: 1550
# Uses `script.send_to_logbook` + `sensor.activity_feed`.
# -------------------------------------------------------------------
###################################################################### ######################################################################
## Alerts if download/upload fall below thresholds.
######################################################################
# For more info or questions, visit https://www.vcloudinfo.com/click-here
automation: automation:
- alias: "Notify Carlo if Internet Speed is Slow" - alias: "Internet Speed is Slow (Logbook)"
id: notify-carlo-slow-internet-speed id: notify-carlo-slow-internet-speed
description: "Sends a notification to Carlo's phone if download or upload speed falls below 400 Mbps." description: "Logs an Activity entry if download or upload speed falls below 300 Mbps."
trigger: trigger:
- platform: numeric_state - platform: numeric_state
entity_id: sensor.speedtest_download entity_id: sensor.speedtest_download
@@ -31,21 +32,18 @@ automation:
{{ (now - uptime).total_seconds() / 60 >= 10 }} {{ (now - uptime).total_seconds() / 60 >= 10 }}
action: action:
- service: script.notify_engine - service: script.send_to_logbook
data: data:
title: "⚠️ Internet Speed Alert" topic: "NETWORK"
value1: >- message: >-
Download: {{ states('sensor.speedtest_download') }} Mbps, Download: {{ states('sensor.speedtest_download') }} Mbps,
Upload: {{ states('sensor.speedtest_upload') }} Mbps. Upload: {{ states('sensor.speedtest_upload') }} Mbps.
value2: "One or both speeds are below 300 Mbps." One or both speeds are below 300 Mbps.
who: "carlo"
group: "information"
level: "active"
mode: single mode: single
- alias: "Notify Carlo if Internet Speed is Restored" - alias: "Internet Speed Restored (Logbook)"
id: notify-carlo-internet-speed-restored id: notify-carlo-internet-speed-restored
description: "Sends a notification to Carlo's phone when download and upload speeds are back above 300/300 Mbps." description: "Logs an Activity entry when download and upload speeds are back above 300/300 Mbps."
trigger: trigger:
- platform: numeric_state - platform: numeric_state
entity_id: sensor.speedtest_download entity_id: sensor.speedtest_download
@@ -66,14 +64,11 @@ automation:
{% set now = now() %} {% set now = now() %}
{{ (now - uptime).total_seconds() / 60 >= 10 }} {{ (now - uptime).total_seconds() / 60 >= 10 }}
action: action:
- service: script.notify_engine - service: script.send_to_logbook
data: data:
title: "✅ Internet Speed Restored" topic: "NETWORK"
value1: >- message: >-
Download: {{ states('sensor.speedtest_download') }} Mbps, Download: {{ states('sensor.speedtest_download') }} Mbps,
Upload: {{ states('sensor.speedtest_upload') }} Mbps. Upload: {{ states('sensor.speedtest_upload') }} Mbps.
value2: "Internet speeds are back to normal." Internet speeds are back to normal.
who: "parents"
group: "information"
level: "active"
mode: single mode: single

View File

@@ -1,21 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# More information : https://github.com/SmilyOrg/screenmqtt
#-------------------------------------------
homeassistant:
customize:
switch.computer_screens:
friendly_name: 'Computer Screens'
icon: mdi:monitor-multiple
emulated_hue_
#-------------------------------------------
button:
- platform: mqtt
name: computer_screens
state_topic: 'carlo-ultra/monitor/all/power/state'
command_topic: 'carlo-ultra/monitor/all/power/command'
#-------------------------------------------
#group - Added to group.interior_switches

View File

@@ -1,20 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
#---Sensor Mail and Packages-----------------------------
usps:
username: !secret myusps_username
password: !secret myusps_password
camera:
- platform: usps
scan_interval: 5
group:
mail:
name: Mailbox Information
entities:
- sensor.usps_mail
- sensor.usps_packages
- camera.usps_mail

View File

@@ -3,8 +3,9 @@
# For more info visit https://www.vcloudinfo.com/click-here # For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# ------------------------------------------------------------------- # -------------------------------------------------------------------
# Dreame Vacuum Orchestration - Room queue, away/on-demand runs # Dreame Vacuum Orchestration - Continuous phased sweep/mop with away/on-demand
# Weekday sweep, weekend mop, bathrooms last, notifications # Related Issue: 1550
# Phases: sweep main, sweep baths, mop main, mop baths; notifications + idle auto-start
# ------------------------------------------------------------------- # -------------------------------------------------------------------
###################################################################### ######################################################################
@@ -12,29 +13,31 @@
###################################################################### ######################################################################
input_boolean: input_boolean:
l10s_vacuum_weekday_cycle_active:
name: L10s Weekday Cleaning Active
icon: mdi:robot-vacuum
l10s_vacuum_on_demand: l10s_vacuum_on_demand:
name: Dream Clean (On-Demand) name: Dreame Clean (On-Demand)
icon: mdi:rocket-launch icon: mdi:robot-vacuum
input_datetime: input_select:
l10s_vacuum_last_weekday_cycle: l10s_vacuum_phase:
name: L10s Last Weekday Cleaning Cycle name: L10s Vacuum Phase
has_date: true options:
has_time: true - sweep_main
- sweep_bath
- mop_main
- mop_bath
initial: sweep_main
icon: mdi:playlist-check
input_text: input_text:
l10s_vacuum_room_queue: l10s_vacuum_room_queue:
name: L10s Vacuum Room Queue name: L10s Vacuum Room Queue
# Room order (id:name): 14 Kitchen, 12 Dining, 10 Living, 7 Master Bedroom, 15 Foyer, 9 Stacey Office,
# 17 Formal Dining, 13 Hallway, 8 Justin Bedroom, 6 Paige Bedroom, 4 Master Bathroom, 2 Office, 1 Pool Bath, 3 Kids Bathroom.
icon: mdi:format-list-bulleted icon: mdi:format-list-bulleted
max: 255 max: 255
l10s_vacuum_room_catalog: l10s_vacuum_room_catalog:
name: L10s Vacuum Room Catalog name: L10s Vacuum Room Catalog
# Room order (id:name): 14 Kitchen, 12 Dining, 10 Living, 7 Master Bedroom, 15 Foyer, 9 Stacey Office, initial: "6,7,8,9,10,12,13,14,15,17,2,4,1,3"
# 17 Formal Dining, 13 Hallway, 8 Justin Bedroom, 6 Paige Bedroom, 4 Master Bathroom, 2 Office, 1 Pool Bath, 3 Kids Bathroom.
initial: "14,12,10,7,15,9,17,13,8,6,4,2,1,3"
icon: mdi:map icon: mdi:map
max: 255 max: 255
l10s_vacuum_rooms_cleaned_today: l10s_vacuum_rooms_cleaned_today:
@@ -52,54 +55,39 @@ script:
mode: single mode: single
sequence: sequence:
- variables: - variables:
# Weekday runs are sweeping (vacuum only), weekend runs are mopping
cleaning_mode: "{{ 'mopping' if now().weekday() in [5, 6] else 'sweeping' }}"
catalog_raw: "{{ states('input_text.l10s_vacuum_room_catalog') | default('', true) | string | replace(' ', '') }}" catalog_raw: "{{ states('input_text.l10s_vacuum_room_catalog') | default('', true) | string | replace(' ', '') }}"
queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | string | replace(' ', '') }}"
last_reset_raw: "{{ states('input_datetime.l10s_vacuum_last_weekday_cycle') }}"
last_reset_date_str: >
{% set dt = as_datetime(last_reset_raw, default=None) %}
{{ dt.date().isoformat() if dt is not none else '' }}
catalog_ints: "{{ catalog_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}" catalog_ints: "{{ catalog_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}"
queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}"
# Seed if queue is empty AND last reset was not today
can_seed_today: "{{ last_reset_date_str == '' or last_reset_date_str != now().date().isoformat() }}"
will_seed: >
{% set empty_queue = queue_ints | length == 0 %}
{% set on_demand = is_state('input_boolean.l10s_vacuum_on_demand', 'on') %}
{{ (empty_queue or (on_demand and queue_ints | length <= 1)) and catalog_ints | length > 0 and (can_seed_today or on_demand) }}
seeded_queue_list: "{{ catalog_ints if will_seed else queue_ints }}"
valid_queue_list: "{{ seeded_queue_list }}"
# Define bathroom IDs for mopping separation
bath_ids: [1, 3, 4] bath_ids: [1, 3, 4]
nonbath_list: "{{ valid_queue_list | reject('in', bath_ids) | list }}" main_ids: "{{ catalog_ints | reject('in', bath_ids) | list }}"
bath_list: "{{ valid_queue_list | select('in', bath_ids) | list }}" phase_order: ['sweep_main', 'sweep_bath', 'mop_main', 'mop_bath']
# Prioritize non-bathrooms first, then bathrooms phase_state: "{{ states('input_select.l10s_vacuum_phase') }}"
segments_to_clean: > phase: "{{ phase_state if phase_state in phase_order else 'sweep_main' }}"
{% if nonbath_list | length > 0 %} cleaning_mode: "{{ 'mopping' if 'mop_' in phase else 'sweeping' }}"
{{ nonbath_list }} queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | string | replace(' ', '') }}"
{% elif bath_list | length > 0 %} queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}"
{{ bath_list }} phase_segments: >
{% if phase == 'sweep_main' %}
{{ main_ids }}
{% elif phase == 'sweep_bath' %}
{{ bath_ids }}
{% elif phase == 'mop_main' %}
{{ main_ids }}
{% else %} {% else %}
[] {{ bath_ids }}
{% endif %} {% endif %}
segments_to_clean: "{{ queue_ints if queue_ints | length > 0 else phase_segments }}"
# 1. Seed the queue if necessary # 1. Seed the queue if necessary
- choose: - choose:
- conditions: - conditions:
- condition: template - condition: template
value_template: "{{ will_seed }}" value_template: "{{ queue_ints | length == 0 and phase_segments | length > 0 }}"
sequence: sequence:
- service: input_text.set_value - service: input_text.set_value
target: target:
entity_id: input_text.l10s_vacuum_room_queue entity_id: input_text.l10s_vacuum_room_queue
data: data:
value: "{{ catalog_raw }}" value: "{{ phase_segments | join(',') }}"
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.l10s_vacuum_last_weekday_cycle
data:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
default: [] default: []
# 2. Check if there is anything to clean and stop if not # 2. Check if there is anything to clean and stop if not
@@ -122,9 +110,6 @@ script:
entity_id: vacuum.l10s_vacuum entity_id: vacuum.l10s_vacuum
data: data:
fan_speed: Standard fan_speed: Standard
- service: input_boolean.turn_on
target:
entity_id: input_boolean.l10s_vacuum_weekday_cycle_active
- service: dreame_vacuum.vacuum_clean_segment - service: dreame_vacuum.vacuum_clean_segment
target: target:
entity_id: vacuum.l10s_vacuum entity_id: vacuum.l10s_vacuum
@@ -138,36 +123,30 @@ script:
automation: automation:
- alias: 'Away Vacuum: Reset Queue (Mon/Sat)' - alias: 'Vacuum: Reset Cleaned List at 5am'
id: 93a6e7dc-9c32-4d53-9f7c-651cd60f4b84 id: 18f7b6d3-c02c-4ec1-88b3-0c3b8b4c6f7b
trigger: trigger:
- platform: time - platform: time
at: '08:55:00' at: '05:00:00'
condition:
- condition: time
weekday:
- mon
- sat
action: action:
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_room_queue
data:
value: "{{ states('input_text.l10s_vacuum_room_catalog') }}"
- service: input_text.set_value - service: input_text.set_value
target: target:
entity_id: input_text.l10s_vacuum_rooms_cleaned_today entity_id: input_text.l10s_vacuum_rooms_cleaned_today
data: data:
value: "" value: ""
- service: input_boolean.turn_off
target: - alias: 'Vacuum: Auto-Start if Idle 3 Days'
entity_id: input_boolean.l10s_vacuum_weekday_cycle_active id: c6b3f1e8-9a3f-4098-9b9e-1c7f2d6f1d11
- service: input_datetime.set_datetime trigger:
target: - platform: time
entity_id: input_datetime.l10s_vacuum_last_weekday_cycle at: '16:00:00'
data: condition:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}" - condition: template
- service: input_boolean.turn_off value_template: >
{% set last = state_attr('script.l10s_vacuum_start_next_room','last_triggered') %}
{{ last is none or (now() - last).days >= 3 }}
action:
- service: input_boolean.turn_on
target: target:
entity_id: input_boolean.l10s_vacuum_on_demand entity_id: input_boolean.l10s_vacuum_on_demand
@@ -190,6 +169,9 @@ automation:
- condition: template - condition: template
value_template: "{{ not is_state('vacuum.l10s_vacuum', 'cleaning') }}" value_template: "{{ not is_state('vacuum.l10s_vacuum', 'cleaning') }}"
action: action:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.l10s_vacuum_on_demand
- service: script.l10s_vacuum_start_next_room - service: script.l10s_vacuum_start_next_room
- alias: 'Away Vacuum: Dock When Family Returns' - alias: 'Away Vacuum: Dock When Family Returns'
@@ -202,9 +184,6 @@ automation:
entity_id: input_boolean.l10s_vacuum_on_demand entity_id: input_boolean.l10s_vacuum_on_demand
to: 'off' to: 'off'
condition: condition:
- condition: state
entity_id: input_boolean.l10s_vacuum_weekday_cycle_active
state: 'on'
- condition: template - condition: template
value_template: > value_template: >
{{ is_state('vacuum.l10s_vacuum', 'cleaning') or is_state('vacuum.l10s_vacuum', 'returning') or is_state('vacuum.l10s_vacuum', 'paused') }} {{ is_state('vacuum.l10s_vacuum', 'cleaning') or is_state('vacuum.l10s_vacuum', 'returning') or is_state('vacuum.l10s_vacuum', 'paused') }}
@@ -223,52 +202,50 @@ automation:
- platform: state - platform: state
entity_id: sensor.l10s_vacuum_current_room entity_id: sensor.l10s_vacuum_current_room
for: '00:03:00' for: '00:03:00'
- platform: state
entity_id: vacuum.l10s_vacuum
to: 'cleaning'
for: '00:03:00'
variables: variables:
room_map: {14:'kitchen',12:'dining-room',10:'living room',7:'master-bedroom',15:'foyer',9:'stacey-office',17:'formal-dining',13:'hallway',8:'justin-bedroom',6:'paige-bedroom',4:'master-bathroom',2:'office',1:'pool-bath',3:'kids-bathroom'} room_map: {14:'kitchen',12:'dining-room',10:'living room',7:'master-bedroom',15:'foyer',9:'stacey-office',17:'formal-dining',13:'hallway',8:'justin-bedroom',6:'paige-bedroom',4:'master-bathroom',2:'office',1:'pool-bath',3:'kids-bathroom'}
catalog_raw: "{{ states('input_text.l10s_vacuum_room_catalog') | default('', true) | string | replace(' ', '') }}"
catalog_ints: "{{ catalog_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list }}"
queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | string | replace(' ', '') }}" queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | string | replace(' ', '') }}"
queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | select('gt', 0) | list | default([], true) }}" queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | list | default([], true) }}"
working_queue: "{{ queue_ints if queue_ints | length > 0 else catalog_ints }}"
current_room_id: "{{ trigger.to_state.attributes.room_id | default(state_attr('sensor.l10s_vacuum_current_room', 'room_id'), true) | int(0) }}" current_room_id: "{{ trigger.to_state.attributes.room_id | default(state_attr('sensor.l10s_vacuum_current_room', 'room_id'), true) | int(0) }}"
matched_room_id: "{{ current_room_id if current_room_id > 0 and current_room_id in (working_queue | default([], true)) else 0 }}" matched_room_id: "{{ current_room_id if current_room_id > 0 and current_room_id in (queue_ints | default([], true)) else 0 }}"
remaining_rooms: "{{ working_queue | reject('equalto', matched_room_id) | list | join(',') }}" remaining_list: >
remaining_value: > {% set rem = [] %}
{% set rem = remaining_rooms | string %} {% set removed = namespace(done=false) %}
{% if rem | length == 0 and working_queue | length > 1 %} {% for r in queue_ints %}
{{ working_queue | join(',') }} {% if not removed.done and r == matched_room_id %}
{% set removed.done = true %}
{% else %} {% else %}
{% set rem = rem + [r] %}
{% endif %}
{% endfor %}
{{ rem }} {{ rem }}
{% endif %} remaining_rooms: "{{ remaining_list | join(',') }}"
remaining_value_str: > remaining_count: "{{ remaining_list | length }}"
{% set rv = remaining_value %} phase_order: ['sweep_main', 'sweep_bath', 'mop_main', 'mop_bath']
{% if rv is string %} phase_state: "{{ states('input_select.l10s_vacuum_phase') }}"
{{ rv }} phase: "{{ phase_state if phase_state in phase_order else 'sweep_main' }}"
{% elif rv is iterable %} phase_index: "{{ phase_order.index(phase) if phase in phase_order else 0 }}"
{{ rv | map('string') | join(',') }} has_next_phase: "{{ phase_index < (phase_order | length) - 1 }}"
{% else %} next_phase: "{{ phase_order[phase_index + 1] if has_next_phase else '' }}"
{{ rv | string }}
{% endif %}
condition: condition:
# Only run if there's actually a queue and a room was successfully matched to the start of the queue
- condition: template - condition: template
value_template: "{{ working_queue | length > 0 }}" value_template: "{{ queue_ints | length > 0 }}"
- condition: template
value_template: "{{ matched_room_id != 0 }}"
- condition: template - condition: template
value_template: "{{ matched_room_id != 0 }}" value_template: "{{ matched_room_id != 0 }}"
- condition: state
entity_id: vacuum.l10s_vacuum
state: 'cleaning'
- condition: state
entity_id: input_boolean.l10s_vacuum_on_demand
state: 'on'
action: action:
- service: input_text.set_value - service: input_text.set_value
target: target:
entity_id: input_text.l10s_vacuum_room_queue entity_id: input_text.l10s_vacuum_room_queue
data: data:
value: "{{ remaining_value_str }}" value: "{{ remaining_rooms }}"
- variables: - variables:
cleaned_raw: "{{ states('input_text.l10s_vacuum_rooms_cleaned_today') | default('', true) | string }}" cleaned_raw: "{{ states('input_text.l10s_vacuum_rooms_cleaned_today') | default('', true) | string }}"
cleaned_parts: "{{ cleaned_raw | regex_findall('[^,]+') | map('trim') | reject('equalto','') | list }}" cleaned_parts: "{{ cleaned_raw | regex_findall('[^,]+') | map('trim') | reject('equalto','') | list }}"
@@ -280,65 +257,54 @@ automation:
{% else %} {% else %}
{{ parts | join(', ') }} {{ parts | join(', ') }}
{% endif %} {% endif %}
remaining_count: "{{ remaining_value_str | regex_findall('[^,]+') | length if remaining_value_str | length > 0 else 0 }}"
- service: input_text.set_value - service: input_text.set_value
target: target:
entity_id: input_text.l10s_vacuum_rooms_cleaned_today entity_id: input_text.l10s_vacuum_rooms_cleaned_today
data: data:
value: "{{ updated_cleaned }}" value: "{{ updated_cleaned }}"
- service: script.notify_engine - service: script.send_to_logbook
data: data:
title: 'Vacuum Room Cleaned' topic: "VACUUM"
value1: "{{ room_name }} is clean." message: "{{ room_name }} is clean. Remaining: {{ remaining_count }}."
value2: "Remaining: {{ remaining_count }}."
ios_category: 'camera'
camera_entity: 'camera.l10s_vacuum_map'
content_type: 'jpeg'
who: 'carlo'
group: 'information'
- choose: - choose:
- conditions: - conditions:
- condition: template - condition: template
value_template: "{{ remaining_rooms | length > 0 }}" value_template: "{{ remaining_count > 0 }}"
sequence: sequence:
- service: script.l10s_vacuum_start_next_room - service: script.l10s_vacuum_start_next_room
- conditions: - conditions:
- condition: template - condition: template
value_template: "{{ remaining_rooms | length == 0 }}" value_template: "{{ remaining_count == 0 and has_next_phase }}"
sequence: sequence:
- service: input_select.select_option
target:
entity_id: input_select.l10s_vacuum_phase
data:
option: "{{ next_phase }}"
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_room_queue
data:
value: ""
- service: script.l10s_vacuum_start_next_room
- conditions:
- condition: template
value_template: "{{ remaining_count == 0 and not has_next_phase }}"
sequence:
- service: input_select.select_option
target:
entity_id: input_select.l10s_vacuum_phase
data:
option: "sweep_main"
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_room_queue
data:
value: ""
- service: input_boolean.turn_off - service: input_boolean.turn_off
target: target:
entity_id: input_boolean.l10s_vacuum_weekday_cycle_active entity_id: input_boolean.l10s_vacuum_on_demand
- service: input_datetime.set_datetime - service: script.l10s_vacuum_start_next_room
target:
entity_id: input_datetime.l10s_vacuum_last_weekday_cycle
data:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- alias: 'Away Vacuum: Cycle Complete'
id: 8fa7779a-957b-49a3-84e7-36ca93c2e0d2
trigger:
- platform: state
entity_id: sensor.l10s_vacuum_task_status
to: 'completed'
- platform: state
entity_id: vacuum.l10s_vacuum
to: 'docked'
for: 00:05:00
condition:
- condition: template
value_template: "{{ is_state('sensor.l10s_vacuum_task_status', 'completed') }}"
- condition: template
value_template: "{{ (states('input_text.l10s_vacuum_room_queue') | replace(' ', '')) | length == 0 }}"
action:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.l10s_vacuum_weekday_cycle_active
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.l10s_vacuum_last_weekday_cycle
data:
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- alias: 'Vacuum Sensor Cleaning Silencer' - alias: 'Vacuum Sensor Cleaning Silencer'
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7f id: 6548de52-a4a4-4df2-9d66-9c2c15577a7f
@@ -366,6 +332,23 @@ automation:
- condition: template - condition: template
value_template: "{{ states('sensor.l10s_vacuum_error') not in ['no_error', 'unavailable'] }}" value_template: "{{ states('sensor.l10s_vacuum_error') not in ['no_error', 'unavailable'] }}"
action: action:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "{{ states('sensor.l10s_vacuum_error') }} - {{ states('sensor.l10s_vacuum_current_room') }}"
- service: repairs.create
data:
issue_id: "vacuum_error"
title: "Vacuum needs help"
severity: "warning"
persistent: true
description: >-
Vacuum reported an error and needs intervention.
Error: {{ states('sensor.l10s_vacuum_error') }}
Room: {{ states('sensor.l10s_vacuum_current_room') }}
- service: script.notify_engine - service: script.notify_engine
data: data:
title: 'Help vacuum' title: 'Help vacuum'
@@ -390,3 +373,20 @@ automation:
entity_id: vacuum.l10s_vacuum entity_id: vacuum.l10s_vacuum
- delay: 00:20:00 - delay: 00:20:00
- event: event_did_someone_help_vacuum_loop - event: event_did_someone_help_vacuum_loop
- alias: "Vacuum Error Resolved - Clear Repair Issue"
id: 2a0b3f7f-2f1e-4d2d-8dd4-0f6e4e34b02b
mode: single
trigger:
- platform: state
entity_id: sensor.l10s_vacuum_error
to: 'no_error'
action:
- service: repairs.remove
continue_on_error: true
data:
issue_id: "vacuum_error"
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Vacuum error cleared."

View File

@@ -29,6 +29,7 @@ Reusable scripts that other automations call for notifications, lighting, and sa
| File | Why it matters | | File | Why it matters |
| --- | --- | | --- | --- |
| [notify_engine.yaml](notify_engine.yaml) | Single entrypoint for rich push notifications. | | [notify_engine.yaml](notify_engine.yaml) | Single entrypoint for rich push notifications. |
| [send_to_logbook.yaml](send_to_logbook.yaml) | Generic `logbook.log` helper for Activity feed entries (Issue #1550). |
| [speech_engine.yaml](speech_engine.yaml) | TTS/announcement orchestration with templated speech. | | [speech_engine.yaml](speech_engine.yaml) | TTS/announcement orchestration with templated speech. |
| [monthly_color_scene.yaml](monthly_color_scene.yaml) | Seasonal lighting scenes used across automations. | | [monthly_color_scene.yaml](monthly_color_scene.yaml) | Seasonal lighting scenes used across automations. |
| [interior_off.yaml](interior_off.yaml) | One-call <20>all interior lights off<66> helper. | | [interior_off.yaml](interior_off.yaml) | One-call <20>all interior lights off<66> helper. |

View File

@@ -0,0 +1,32 @@
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Send To Logbook - Generic helper for Activity/logbook entries
# Related Issue: 1550
# Calls `logbook.log` using `sensor.activity_feed` as the entity_id.
# -------------------------------------------------------------------
######################################################################
send_to_logbook:
alias: Send To Logbook
mode: queued
fields:
topic:
description: Logbook entry name (headline)
example: "n8n"
message:
description: Logbook entry message
example: "Webhook received and workflow started."
sequence:
- condition: template
value_template: >-
{{ topic is defined and (topic | string | trim) != '' and
message is defined and (message | string | trim) != '' }}
- service: logbook.log
data:
name: "{{ topic | string | trim }}"
message: "{{ message | string | trim }}"
entity_id: sensor.activity_feed

View File

@@ -1,51 +0,0 @@
<h1 align="center">
<a name="logo" href="https://www.vCloudInfo.com/tag/iot"><img src="https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/x_profile.png" alt="Bear Stone Smart Home" width="200"></a>
<br>
Bear Stone Smart Home Documentation
</h1>
<h4 align="center">Be sure to :star: my configuration repo so you can keep up to date on any daily progress!</h4>
<div align="center">
[![X Follow](https://img.shields.io/static/v1?label=talk&message=3k&color=blue&logo=twitter&style=for-the-badge)](https://x.com/ccostan)
[![YouTube Subscribe](https://img.shields.io/youtube/channel/subscribers/UC301G8JJFzY0BZ_0lshpKpQ?label=VIEW&logo=Youtube&logoColor=%23DF5D44&style=for-the-badge)](https://www.youtube.com/vCloudInfo?sub_confirmation=1)
[![GitHub Stars](https://img.shields.io/github/stars/CCOSTAN/Home-AssistantConfig?label=STARS&logo=Github&style=for-the-badge)](https://github.com/CCOSTAN) <br>
[![HA Version Badge](https://raw.githubusercontent.com/ccostan/home-assistantconfig/master/ha-version-badge.svg)](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/.HA_VERSION)
[![Last Commit](https://img.shields.io/github/last-commit/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master)
[![Commit Activity](https://img.shields.io/github/commit-activity/y/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master)
</div>
Shell commands Home Assistant can call for maintenance or integrations that need a CLI nudge.
### Quick navigation
- [Repo overview](../../README.md) | [Config index](../README.md) | [Shell scripts](../shell_scripts)
![Home Assistant header](https://i.imgur.com/vjDH1LJ.png)
### Featured files to browse
| File | Why it matters |
| --- | --- |
| [flush_pm2_logs.yaml](flush_pm2_logs.yaml) | Quick cleanup for PM2 log files. |
| [restart_homebridge.yaml](restart_homebridge.yaml) | One-shot command to restart Homebridge. |
### Tips
- Keep commands idempotent and fast; HA will run them synchronously.
- Store long scripts in `shell_scripts/` and trigger them from here.
**All of my configuration files are tested against the most stable version of home-assistant.**
<a name="bottom" href="https://github.com/CCOSTAN/Home-AssistantConfig#logo"><img align="right" border="0" src="https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/www/custom_ui/floorplan/images/branding/up_arrow.png" width="25" ></a>
**Still have questions on my Config?** <br>
**Message me on X :** [![Follow CCostan](https://img.shields.io/twitter/follow/CCostan)](https://www.x.com/ccostan)
<p align="center">
<a target="_blank" href="https://www.buymeacoffee.com/vCloudInfo"><img src="https://www.buymeacoffee.com/assets/img/BMC-btn-logo.svg" alt="Buy me a coffee"><span style="margin-left:5px">You can buy me a coffee</span></a><a target="_blank" href="https://www.buymeacoffee.com/vCloudInfo"><img src="https://www.buymeacoffee.com/assets/img/BMC-btn-logo.svg" alt="Buy me a coffee"></a>
<br>
<a href="https://eepurl.com/dmXFYz"><img align="center" border="0" src="https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/www/custom_ui/floorplan/images/branding/email_link.png" height="50" ></a><br>
<a href="https://www.vCloudInfo.com/p/affiliate-disclosure.html">
Affiliate Disclosure
</a></p>

View File

@@ -1,2 +0,0 @@
flush_pm2_logs: >-
sudo -u pi -H /usr/bin/pm2 flush

View File

@@ -1,2 +0,0 @@
restart_homebridge: >-
sudo -u pi -H /usr/bin/pm2 restart homebridge

View File

@@ -1,23 +1,26 @@
# - This script is used to update the Home Assistant Docker containers # - This script is used to update the Home Assistant Docker containers
# - It will pull the latest images, check if the image ID has changed, and restart the container if needed # - It will pull the latest images, check if the image ID has changed, and restart the container if needed
# - It will also cleanup unused resources after the update
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig # Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
# Follow me on https://www.vcloudinfo.com/click-here # Follow me on https://www.vcloudinfo.com/click-here
#!/bin/bash #!/bin/bash
set -euo pipefail
# Update system packages # Update system packages
sudo apt-get update && sudo apt-get upgrade -y sudo apt-get update && sudo apt-get upgrade -y
DC=(docker compose)
# Pull the latest images # Pull the latest images
docker-compose pull "${DC[@]}" pull
# Get list of services from docker-compose.yml # Get list of services from docker-compose.yml
EXISTING_SERVICES=$(docker-compose config --services) EXISTING_SERVICES=$("${DC[@]}" config --services)
# Get list of running service containers # Get list of running service containers
RUNNING_CONTAINERS=$(docker-compose ps --services) RUNNING_CONTAINERS=$("${DC[@]}" ps --services)
# Loop through each running service and check if its image has changed # Loop through each running service and check if its image has changed
for service in $RUNNING_CONTAINERS; do for service in $RUNNING_CONTAINERS; do
@@ -25,15 +28,15 @@ for service in $RUNNING_CONTAINERS; do
# Get the current running image ID (remove sha256: prefix) # Get the current running image ID (remove sha256: prefix)
CURRENT_IMAGE_ID=$(docker inspect --format='{{.Image}}' "$service" 2>/dev/null | sed 's/^sha256://') CURRENT_IMAGE_ID=$(docker inspect --format='{{.Image}}' "$service" 2>/dev/null | sed 's/^sha256://')
# Get the latest image ID from docker-compose # Get the latest image ID from docker compose
LATEST_IMAGE_ID=$(docker-compose images -q "$service" 2>/dev/null) LATEST_IMAGE_ID=$("${DC[@]}" images -q "$service" 2>/dev/null)
# If the image ID is different, restart the container # If the image ID is different, restart the container
if [ "$CURRENT_IMAGE_ID" != "$LATEST_IMAGE_ID" ] && [ -n "$LATEST_IMAGE_ID" ]; then if [ "$CURRENT_IMAGE_ID" != "$LATEST_IMAGE_ID" ] && [ -n "$LATEST_IMAGE_ID" ]; then
echo "Updating container: $service" echo "Updating container: $service"
docker-compose stop "$service" "${DC[@]}" stop "$service"
docker-compose rm -f "$service" "${DC[@]}" rm -f "$service"
docker-compose up -d "$service" "${DC[@]}" up -d "$service"
else else
echo "No update needed for: $service" echo "No update needed for: $service"
fi fi
@@ -41,8 +44,3 @@ for service in $RUNNING_CONTAINERS; do
echo "Skipping non-existent service: $service" echo "Skipping non-existent service: $service"
fi fi
done done
# Cleanup unused resources
docker container prune -f
docker image prune -f
docker volume prune -f

View File

@@ -1,43 +0,0 @@
You can use this code to quickly create files from the template editor in HA. I use it mainly for `emulated_hue` and to quickly add in new Customize options to all things HA!
For the sandbox.
{% set trigger = {'entity_id':'sensor.downstairs_thermostat_hvac_state','to_state':'cooling'} %}
#########################################################
Create fast Customize for groups, sensors, covers etc... Just change that first line below 'sensor' to 'group', 'covers' etc..
{% for state in states.group -%}
{% if loop.first %}
{% elif loop.last %}
{% else %}
{% endif %}
{{- state.entity_id }}:
friendly_name: '{{ state.attributes.friendly_name|replace("_"," ",)|title() if state.attributes.friendly_name is defined else state.name|replace("_"," ",)|title() }}'
hidden: {{state.attributes.hidden if state.attributes.hidden is defined else "False"}}
homebridge_hidden: {{state.attributes.homebridge_hidden if state.attributes.homebridge_hidden is defined else "true"}}
{{'icon: '+ state.attributes.icon if state.attributes.icon is defined}}
{{'homebridge_cover_type: '+ state.attributes.homebridge_cover_type if state.attributes.homebridge_cover_type is defined}}
{{'assumed_state: '+ state.attributes.assumed_state if state.attributes.assumed_state is defined}}
{% endfor -%}
#########################################################
#This code lists out EVERY possible entity and attribute for that entity.
# source: https://github.com/skalavala/smarthome/blob/primary/Entities.md
#########################################################
{{ "_".ljust(90, "_") }}
{%- set domains = [states.light, states.switch, states.automation, states.device_tracker, states.group, states.media_player, states.proximity, states.script, states.zone, states.zwave, states.sensor, states.calendar ] %}
{{ "Entity ID".ljust(50) }}{{ "Entity Name" }}
{%- for domain in domains -%}
{% for item in domain %}
{{ "_".ljust(90, "_") }}
{{ item.entity_id.ljust(50) }}{{ item.name }}
{% for attrib in item.attributes %}
{%- if attrib is defined %}
{{attrib.ljust(50)}}: {{ item.attributes[attrib] }}
{%- endif %}
{%- endfor %}
{%- endfor %}
{%- endfor %}
#########################################################

View File

@@ -1,12 +0,0 @@
#!/bin/bash
cd /home/hass/docker_files
docker-compose exec home-assistant python -m homeassistant --config /config --script check_config
cd /home/hass/docker_files/homeassistant
git pull origin master
cd /home/hass/docker_files
docker-compose exec home-assistant python -m homeassistant --config /config --script check_config
cd ~
exit

View File

@@ -1,16 +0,0 @@
#!/bin/bash
cd /home/hass/docker_files
docker-compose exec home-assistant python -m homeassistant --config /config --script check_config
cd /home/hass/docker_files/homeassistant
git add .
git status
echo -n "Enter the Description for the Change: [Minor Edit] "
read CHANGE_MSG
CHANGE_MSG=${CHANGE_MSG:-Minor Edit}
git commit -m "${CHANGE_MSG}"
git push origin master
cd ~
exit

View File

@@ -1,17 +0,0 @@
## These scripts are run from /home/pi
#!/bin/bash
cat hassuser
sudo su -s /bin/bash hass
# source /srv/hass/hass_venv/bin/activate
# to Upgrade:
# pip3 install --upgrade homeassistant - Use HAUpdate.sh script
# To view The HA logs realtime
# sudo journalctl -u home-assistant -f | ccze

View File

@@ -1,6 +0,0 @@
# Restart Homebridge on HASS start
# shell_command:
# restart_homebridge: 'sudo su pi -c "pm2 restart homebridge"'
# start_homebridge: 'sudo su pi -c "pm2 start homebridge"'
# stop_homebridge: 'sudo su pi -c "pm2 stop homebridge"'

View File

@@ -1,23 +0,0 @@
#!/bin/sh
# this script uses hard-coded paths
# This deletes the readme file and begins rebuilding it..
cat /home/hass/.homeassistant/script/header.md > /home/hass/.homeassistant/script/README.md
grep -e '^[a-z]' /home/hass/.homeassistant/script/*.yaml | tr : '\n' > /tmp/scriptnames.txt
sed -i '/^$/d' /tmp/scriptnames.txt
for item in `cat /tmp/scriptnames.txt`
do
res=`grep -R script.$item /home/hass/.homeassistant/. --include=*.yaml`
echo "\n $item \n" | sed 's|/home/hass/\.homeassistant/| https://github\.com/CCOSTAN/Home-AssistantConfig/blob/master/|g'>> /home/hass/.homeassistant/script/README.md
echo "\n $res \n" | sed 's|/home/hass/\.homeassistant/\.| https://github\.com/CCOSTAN/Home-AssistantConfig/blob/master|g' >> /home/hass/.homeassistant/script/README.md
sed -i '/^$/d' /home/hass/.homeassistant/script/README.md
done
cat /home/hass/.homeassistant/script/README.md

View File

@@ -1,44 +0,0 @@
<h1 align="center">
<a name="logo" href="https://www.vCloudInfo.com/tag/iot"><img src="https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/x_profile.png" alt="Bear Stone Smart Home" width="200"></a>
<br>
Bear Stone Smart Home Documentation
</h1>
<h4 align="center">Be sure to :star: my configuration repo so you can keep up to date on any daily progress!</h4>
<div align="center">
[![X Follow](https://img.shields.io/static/v1?label=talk&message=3k&color=blue&logo=twitter&style=for-the-badge)](https://x.com/ccostan)
[![YouTube Subscribe](https://img.shields.io/youtube/channel/subscribers/UC301G8JJFzY0BZ_0lshpKpQ?label=VIEW&logo=Youtube&logoColor=%23DF5D44&style=for-the-badge)](https://www.youtube.com/vCloudInfo?sub_confirmation=1)
[![GitHub Stars](https://img.shields.io/github/stars/CCOSTAN/Home-AssistantConfig?label=STARS&logo=Github&style=for-the-badge)](https://github.com/CCOSTAN) <br>
[![HA Version Badge](https://raw.githubusercontent.com/ccostan/home-assistantconfig/master/ha-version-badge.svg)](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/.HA_VERSION)
[![Last Commit](https://img.shields.io/github/last-commit/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master)
[![Commit Activity](https://img.shields.io/github/commit-activity/y/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master)
</div>
Standalone switch definitions pulled into automations and dashboards. Keep relays, templates, and rest commands tidy here.
### Quick navigation
- [Repo overview](../../README.md) | [Config index](../README.md) | [Automations](../automation)
![Home Assistant header](https://i.imgur.com/vjDH1LJ.png)
### Tips
- Add new switches here and reference them from packages/automations to stay organized.
**All of my configuration files are tested against the most stable version of home-assistant.**
<a name="bottom" href="https://github.com/CCOSTAN/Home-AssistantConfig#logo"><img align="right" border="0" src="https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/www/custom_ui/floorplan/images/branding/up_arrow.png" width="25" ></a>
**Still have questions on my Config?** <br>
**Message me on X :** [![Follow CCostan](https://img.shields.io/twitter/follow/CCostan)](https://www.x.com/ccostan)
<p align="center">
<a target="_blank" href="https://www.buymeacoffee.com/vCloudInfo"><img src="https://www.buymeacoffee.com/assets/img/BMC-btn-logo.svg" alt="Buy me a coffee"><span style="margin-left:5px">You can buy me a coffee</span></a><a target="_blank" href="https://www.buymeacoffee.com/vCloudInfo"><img src="https://www.buymeacoffee.com/assets/img/BMC-btn-logo.svg" alt="Buy me a coffee"></a>
<br>
<a href="https://eepurl.com/dmXFYz"><img align="center" border="0" src="https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/www/custom_ui/floorplan/images/branding/email_link.png" height="50" ></a><br>
<a href="https://www.vCloudInfo.com/p/affiliate-disclosure.html">
Affiliate Disclosure
</a></p>

View File

@@ -35,11 +35,8 @@
[Here is the current weather outside] [Here is the current weather outside]
{% set aq_description = state_attr('sensor.bear_stone_common_air_quality_index', 'description') | default('') %} {% set aq_description = state_attr('sensor.bear_stone_common_air_quality_index', 'description') | default('') %}
{% set aq_index = states('sensor.bear_stone_common_air_quality_index') | int(0) %} {% set aq_index = states('sensor.bear_stone_common_air_quality_index') | int(0) %}
{% if aq_description %} {% if aq_index >= 50 %}
Air Quality: {{ aq_description }} [Air Quality: {{ aq_description }}]
{% endif %}
{% if aq_index >= 150 %}
[Air quality is unhealthy; limit outdoor activity]
{% endif %} {% endif %}
{% set pirateweather_metrics = states.sensor {% set pirateweather_metrics = states.sensor
| selectattr('entity_id','search','pirateweather') | selectattr('entity_id','search','pirateweather')

View File

@@ -1,14 +0,0 @@
>-
{% set pick = [
"ThrowBack", "S01E01", "S01E02","S01E03", "S01E04","S01E05", "S01E06","S01E07", "S01E08","S01E09", "S01E10",
"S01E11", "S01E12","S01E13", "S01E14","S01E15", "S01E16","S01E17", "S01E18","S01E19", "S01E20", "S01E21",
"S02E01", "S02E02","S02E03", "S02E04","S02E05", "S02E06","S02E07", "S02E08","S02E09", "S02E10",
"S02E11", "S02E12","S02E13", "S02E14","S02E15", "S02E16","S02E17", "S02E18","S02E19", "S02E20",
"S02E22", "S02E25", "S02E26", "S02E27", "S02E28", "S02E29", "S02E30", "S02E31", "S02E32", "S02E33", "S02E34",
"S02E35", "S02E36", "S02E37", "S02E38", "S02E39", "S02E40","S02E41", "Bearnews1", "Bearnews2", "Bearnews3", "Bearnews4",
"S03E01", "Bearnews5", "Bearnews6", "Bearnews7", "S03E02", "S03E03", "Logger", "SolarPalmLight", "5TipsToLevelUp", "AlexaMusicCommands",
"SolarFountainOKMEE", "NoCloudGaradget", "AlexaGuardMediaPlayer", "LightningSensor", "LEDBackboard", "CuckooClock", "NodeAnchors", "yahoostocks",
"AugustBatteries", "Remote_Finder", "VideoProjectionMappingDemo", "FeedTheDog", "AlexaGiftNotifications","iPhoneDuplicates", "NotifyScript", "WeightLossJourney",
"SnapPower", "LocalControl", "TossingWink", "EnergyDashboard", "IOSBrokeNoifications", "SolarDriveway", "UPS_Replacement", "VillaNERI", "GardenLED", "RokuOnHA", "RunningAutomationsCard"
] %}
{{ pick|random }}

View File

@@ -0,0 +1,82 @@
{
"Flag_Days_US": {
"static": {
"2/12": "Lincoln's Birthday",
"5/15": "Peace Officers Memorial Day",
"6/14": "Flag Day",
"7/4": "Independence Day",
"7/27": "National Korean War Veterans Armistice Day",
"9/11": "Patriot Day",
"9/17": "Constitution Day",
"10/27": "Navy Day",
"11/11": "Veterans Day",
"12/7": "Pearl Harbor Remembrance Day"
},
"dynamic": {
"01/20/2025": "Inauguration Day",
"01/16/2023": "Martin Luther King Jr. Day",
"01/15/2024": "Martin Luther King Jr. Day",
"01/19/2026": "Martin Luther King Jr. Day",
"01/18/2027": "Martin Luther King Jr. Day",
"01/17/2028": "Martin Luther King Jr. Day",
"01/15/2029": "Martin Luther King Jr. Day",
"01/21/2030": "Martin Luther King Jr. Day",
"02/20/2023": "Washington's Birthday (Presidents Day)",
"02/19/2024": "Washington's Birthday (Presidents Day)",
"02/17/2025": "Washington's Birthday (Presidents Day)",
"02/16/2026": "Washington's Birthday (Presidents Day)",
"02/15/2027": "Washington's Birthday (Presidents Day)",
"02/21/2028": "Washington's Birthday (Presidents Day)",
"02/19/2029": "Washington's Birthday (Presidents Day)",
"02/18/2030": "Washington's Birthday (Presidents Day)",
"05/20/2023": "Armed Forces Day",
"05/18/2024": "Armed Forces Day",
"05/17/2025": "Armed Forces Day",
"05/16/2026": "Armed Forces Day",
"05/15/2027": "Armed Forces Day",
"05/20/2028": "Armed Forces Day",
"05/19/2029": "Armed Forces Day",
"05/18/2030": "Armed Forces Day",
"05/29/2023": "Memorial Day",
"05/27/2024": "Memorial Day",
"05/26/2025": "Memorial Day",
"05/25/2026": "Memorial Day",
"05/31/2027": "Memorial Day",
"05/29/2028": "Memorial Day",
"05/28/2029": "Memorial Day",
"05/27/2030": "Memorial Day",
"09/04/2023": "Labor Day",
"09/02/2024": "Labor Day",
"09/01/2025": "Labor Day",
"09/07/2026": "Labor Day",
"09/06/2027": "Labor Day",
"09/04/2028": "Labor Day",
"09/03/2029": "Labor Day",
"09/02/2030": "Labor Day",
"09/15/2023": "National POW/MIA Recognition Day",
"09/20/2024": "National POW/MIA Recognition Day",
"09/19/2025": "National POW/MIA Recognition Day",
"09/18/2026": "National POW/MIA Recognition Day",
"09/17/2027": "National POW/MIA Recognition Day",
"09/15/2028": "National POW/MIA Recognition Day",
"09/21/2029": "National POW/MIA Recognition Day",
"09/20/2030": "National POW/MIA Recognition Day",
"10/09/2023": "Columbus Day",
"10/14/2024": "Columbus Day",
"10/13/2025": "Columbus Day",
"10/12/2026": "Columbus Day",
"10/11/2027": "Columbus Day",
"10/09/2028": "Columbus Day",
"10/08/2029": "Columbus Day",
"10/14/2030": "Columbus Day",
"11/07/2023": "Election Day",
"11/05/2024": "Election Day",
"11/04/2025": "Election Day",
"11/03/2026": "Election Day",
"11/02/2027": "Election Day",
"11/07/2028": "Election Day",
"11/06/2029": "Election Day",
"11/05/2030": "Election Day"
}
}
}

View File

@@ -0,0 +1,116 @@
{
"MAJOR_US": {
"static": {
"1/1": "New Years Day",
"2/2": "Groundhog Day",
"2/3": "Staceys Birthday",
"2/14": "Valentines Day",
"3/14": "Pi Day",
"3/17": "St. Patricks Day",
"3/26": "Justins Birthday",
"4/1": "April Fools Day",
"4/22": "Earth Day",
"5/4": "Star Wars Day",
"5/5": "Cinco de Mayo",
"6/14": "Flag Day",
"7/4": "Independence Day",
"8/30": "Paiges Birthday",
"9/10": "Mom and Dads Wedding Anniversary",
"9/11": "Patriot Day",
"10/31": "Halloween",
"11/11": "Veterans Day",
"11/16": "Carlos Birthday",
"12/7": "Pearl Harbor Day",
"12/24": "Christmas Eve",
"12/25": "Christmas Day",
"12/31": "New Years Eve"
},
"dynamic": {
"11/23/2023": "Thanksgiving Day",
"01/15/2024": "MLK Day",
"02/14/2024": "Ash Wednesday",
"02/19/2024": "Presidents Day",
"03/24/2024": "Palm Sunday",
"03/29/2024": "Good Friday",
"03/31/2024": "Easter Sunday",
"04/22/2024": "Memorial Day",
"05/12/2024": "Mothers Day",
"06/16/2024": "Fathers Day",
"09/02/2024": "Labor Day",
"10/14/2024": "Columbus Day",
"11/28/2024": "Thanksgiving Day",
"01/20/2025": "MLK Day",
"02/17/2025": "Presidents Day",
"03/05/2025": "Ash Wednesday",
"04/13/2025": "Palm Sunday",
"04/18/2025": "Good Friday",
"04/20/2025": "Easter Sunday",
"04/21/2025": "Memorial Day",
"05/11/2025": "Mothers Day",
"06/15/2025": "Fathers Day",
"09/01/2025": "Labor Day",
"10/13/2025": "Columbus Day",
"11/27/2025": "Thanksgiving Day",
"01/19/2026": "MLK Day",
"02/16/2026": "Presidents Day",
"02/18/2026": "Ash Wednesday",
"03/29/2026": "Palm Sunday",
"04/03/2026": "Good Friday",
"04/05/2026": "Easter Sunday",
"04/20/2026": "Memorial Day",
"05/10/2026": "Mothers Day",
"06/21/2026": "Fathers Day",
"09/07/2026": "Labor Day",
"10/12/2026": "Columbus Day",
"11/26/2026": "Thanksgiving Day",
"01/18/2027": "MLK Day",
"02/10/2027": "Ash Wednesday",
"02/15/2027": "Presidents Day",
"03/21/2027": "Palm Sunday",
"03/26/2027": "Good Friday",
"03/28/2027": "Easter Sunday",
"04/19/2027": "Memorial Day",
"05/09/2027": "Mothers Day",
"06/20/2027": "Fathers Day",
"09/06/2027": "Labor Day",
"10/11/2027": "Columbus Day",
"11/25/2027": "Thanksgiving Day",
"01/17/2028": "MLK Day",
"02/21/2028": "Presidents Day",
"03/01/2028": "Ash Wednesday",
"04/09/2028": "Palm Sunday",
"04/14/2028": "Good Friday",
"04/16/2028": "Easter Sunday",
"04/17/2028": "Memorial Day",
"05/14/2028": "Mothers Day",
"06/18/2028": "Fathers Day",
"09/04/2028": "Labor Day",
"10/09/2028": "Columbus Day",
"11/23/2028": "Thanksgiving Day",
"01/15/2029": "MLK Day",
"02/14/2029": "Ash Wednesday",
"02/19/2029": "Presidents Day",
"03/25/2029": "Palm Sunday",
"03/30/2029": "Good Friday",
"04/01/2029": "Easter Sunday",
"04/23/2029": "Memorial Day",
"05/13/2029": "Mothers Day",
"06/17/2029": "Fathers Day",
"09/03/2029": "Labor Day",
"10/08/2029": "Columbus Day",
"11/22/2029": "Thanksgiving Day",
"01/21/2030": "MLK Day",
"02/18/2030": "Presidents Day",
"03/06/2030": "Ash Wednesday",
"04/14/2030": "Palm Sunday",
"04/19/2030": "Good Friday",
"04/21/2030": "Easter Sunday",
"04/22/2030": "Memorial Day",
"05/12/2030": "Mothers Day",
"06/16/2030": "Fathers Day",
"09/02/2030": "Labor Day",
"10/14/2030": "Columbus Day",
"11/28/2030": "Thanksgiving Day"
}
}
}

View File

@@ -1,16 +1,16 @@
<svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.12.0"> <svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.12.2">
<title>2025.12.0</title> <title>2025.12.2</title>
<linearGradient id="PUIvu" x2="0" y2="100%"> <linearGradient id="wpDAa" x2="0" y2="100%">
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/> <stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
<stop offset="1" stop-opacity=".1"/> <stop offset="1" stop-opacity=".1"/>
</linearGradient> </linearGradient>
<mask id="PVVTg"><rect width="685" height="200" rx="30" fill="#FFF"/></mask> <mask id="Qipao"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#PVVTg)"> <g mask="url(#Qipao)">
<rect width="685" height="200" fill="#08C" x="0"/> <rect width="685" height="200" fill="#08C" x="0"/>
<rect width="685" height="200" fill="url(#PUIvu)"/> <rect width="685" height="200" fill="url(#wpDAa)"/>
</g> </g>
<g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110"> <g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
<text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.12.0</text> <text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.12.2</text>
<text x="55" y="138" textLength="570">2025.12.0</text> <text x="55" y="138" textLength="570">2025.12.2</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 815 B