Compare commits

...

87 Commits

Author SHA1 Message Date
github-actions[bot]
9bc53566aa Update HA version badge to 2025.12.4 2026-01-02 20:01:44 +00:00
Carlo Costanzo
a10ee05b85 Refine vacuum automation logic to improve queue handling, update cleaning phase conditions, and enhance logbook messages for better tracking of vacuum state changes. 2026-01-02 15:01:19 -05:00
github-actions[bot]
e6b88ac99d Update HA version badge to 2025.12.4 2025-12-30 06:15:28 +00:00
Carlo Costanzo
a8cd926f46 Remove deprecated MariaDB dashboard configuration and update SQL queries in monitoring package for improved date handling. #341 2025-12-30 01:15:05 -05:00
Carlo Costanzo
e242477806 Add MariaDB monitoring package to README with health sensors and dashboard snippet #341 2025-12-30 01:15:04 -05:00
github-actions[bot]
2e6b319770 Update HA version badge to 2025.12.4 2025-12-29 23:15:33 +00:00
Carlo Costanzo
5e451d70b8 Update recorder configuration to use secret for database URL and add exclusion for current water pressure sensor. Migrated AGAIN to MariaDB #341 2025-12-29 18:15:11 -05:00
github-actions[bot]
8e461d5495 Update HA version badge to 2025.12.4 2025-12-28 22:09:36 +00:00
Carlo Costanzo
1d78dcb0dc Enhance automation configurations by updating the Good Night and Sunset routines with additional comments for clarity and adding 'switch.office_accent' to both routines and the interior switches group. 2025-12-28 17:09:18 -05:00
Carlo Costanzo
00506a79e9 Update HA version to 2025.12.4 and refine vacuum automation logic to improve queue handling and logbook entries for better tracking of vacuum state changes. 2025-12-28 17:09:17 -05:00
github-actions[bot]
758ef8974b Update HA version badge to 2025.12.3 2025-12-26 01:28:29 +00:00
Carlo Costanzo
d75511ab34 Update Duplicati description in README to specify that docker config backups are stored in OneDrive. 2025-12-25 20:28:05 -05:00
github-actions[bot]
1f1d3eba40 Update HA version badge to 2025.12.3 2025-12-22 03:25:19 +00:00
Carlo Costanzo
438d696bf8 Enhance automation configurations by adding 'light.ikea_1' to both sunset trigger and indoor group. Update vacuum automation to clear room queue upon docking after task completion and improve logbook entries for better tracking of vacuum state changes. 2025-12-21 21:34:15 -05:00
github-actions[bot]
864e7756c0 Update HA version badge to 2025.12.3 2025-12-17 15:58:24 +00:00
Carlo Costanzo
9831f3150e Finally got the Vacuum scheduler working! Update HA version to 2025.12.3 and refine vacuum automation logic by adjusting room dequeue timing to 2 minutes and improving Jinja2 loop scoping for better list handling. 2025-12-17 10:57:55 -05:00
github-actions[bot]
7543b1c52f Update HA version badge to 2025.12.2 2025-12-16 17:08:36 +00:00
Carlo Costanzo
7106429f78 Keep trying to get this vacuum logic down pat. Refine vacuum automation logic by adjusting room dequeue conditions to treat 3+ minutes as "cleaning" and enhancing phase transition handling. Update logbook entries for improved tracking of cleaning phases and room states. 2025-12-16 12:07:39 -05:00
github-actions[bot]
1203bb2d4e Update HA version badge to 2025.12.2 2025-12-15 20:53:14 +00:00
Carlo Costanzo
c8d8423e77 Refine vacuum automation logic by improving room dequeue conditions and adding safeguards against premature completion. Enhance logbook entries for better tracking of cleaning state and room revisits. 2025-12-15 15:52:57 -05:00
github-actions[bot]
7310f24294 Update HA version badge to 2025.12.2 2025-12-15 15:42:21 +00:00
Carlo Costanzo
69edb0658d Enhance vacuum automation logic by refining room state tracking and adding wait conditions to ensure proper phase transitions. Update logbook messages for clarity and improve handling of cleaning state changes. 2025-12-15 10:41:57 -05:00
github-actions[bot]
7a6491709b Update HA version badge to 2025.12.2 2025-12-13 17:45:06 +00:00
Carlo Costanzo
23d6235315 Enhance vacuum automation logging by including the current phase in logbook messages and add a new automation for tracking phase changes. This improves visibility into the vacuum's operational state. 2025-12-13 12:44:44 -05:00
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
github-actions[bot]
c62e778028 Update HA version badge to 2025.12.0 2025-12-04 21:26:24 +00:00
Carlo Costanzo
e83e957ab5 Refactor light configuration in living_room_color_defaults.yaml for improved clarity. Update YouTube package comments for better documentation. Simplify rgb_color definition in monthly_colors.yaml by removing unnecessary anchor reference. 2025-12-04 16:25:45 -05:00
Carlo Costanzo
fe4b9ac1c9 Refactor light configuration to use 'color_temp_kelvin' instead of 'kelvin' across multiple automation and scene files for consistency. Update sensor entity ID in glances.yaml for clarity. Enhance notification script to improve message formatting. 2025-12-04 15:36:55 -05:00
github-actions[bot]
44d8ac0da5 Update HA version badge to 2025.12.0 2025-12-04 15:36:43 +00:00
Carlo Costanzo
5acf4bd760 Merge pull request #1545 from CCOSTAN:Template-Migrations
Fix Breaking Changes for Templates
2025-12-04 10:36:23 -05:00
Carlo Costanzo
14294b5b5f Update configuration files and enhance sensor definitions based on Future Breaking CHANGES for HA.
- Updated .gitignore to include new IP change configuration file.
- Bumped Home Assistant version to 2025.12.0.
- Modified logbook.yaml to exclude specific alarm panel entities for cleaner logs.
- Refactored alexa_media_player.yaml and climate.yaml to use template sensors for better organization and clarity.
- Added new template sensors in climate.yaml for tracking AC cooling status.
- Updated glances.yaml to define a template sensor for average temperature.
- Enhanced stats.yaml with new template sensors for various counts (sensors, automations, scripts, etc.).
- Removed outdated superbowl.yaml and weather_camera.yaml.disabled configurations.
- Updated README.md to reflect the new location of IP change monitoring.
2025-12-04 10:29:19 -05:00
github-actions[bot]
b61c28f186 Update HA version badge to 2025.11.3 2025-12-03 22:11:34 +00:00
Carlo Costanzo
295724ef49 Merge pull request #1542 from CCOSTAN:Vacuum-Scheduling-Dreame
Update Dreame Scheduling to be handled by HA
2025-12-03 17:11:15 -05:00
Carlo Costanzo
9c540c0acc Finally got it ALL working!
Enhance configuration files for improved logging and vacuum automation

- Updated logbook.yaml to exclude additional domains and sensor entities for better data management.
- Modified logger.yaml to adjust log levels for template helpers and scripts, enhancing error tracking.
- Added auto_purge and commit_interval settings in recorder.yaml to optimize database management.
- Refined vacuum.yaml to improve queue handling and room identification logic, ensuring more efficient cleaning operations.
2025-12-03 17:06:17 -05:00
github-actions[bot]
6300de3a96 Update HA version badge to 2025.11.3 2025-12-03 16:39:35 +00:00
Carlo Costanzo
61bbe53b48 Enhance friendly location macro to support person and place sensor IDs, improving location reporting in speech briefings. Updated references in the briefing template accordingly. 2025-12-03 11:39:18 -05:00
github-actions[bot]
f08be9ff30 Update HA version badge to 2025.11.3 2025-12-03 16:16:55 +00:00
Carlo Costanzo
92c4b53685 Refactor speech briefing macros for improved clarity and functionality. Updated documentation, enhanced weather reporting with air quality and UV index checks, and streamlined location reporting using a new helper macro. Removed deprecated air quality macro. 2025-12-03 11:16:32 -05:00
Carlo Costanzo
36b5150db6 still trying to figure out this queue issue 2025-12-03 10:17:02 -05:00
github-actions[bot]
3721935082 Update HA version badge to 2025.11.3 2025-12-02 17:06:19 +00:00
Carlo Costanzo
10714a953b Closes Convert to BUTTON from Switch
Fixes #1159
Switched everything to Buttoms but actually - didn't have any in production.

Refactor TPLink configurations by removing the deprecated tplink.yaml file and updating related components to use buttons instead of switches in logger and mqtt screens. Adjusted basketball shell script to reflect the same change.
2025-12-02 12:05:52 -05:00
github-actions[bot]
214657f4cc Update HA version badge to 2025.11.3 2025-12-02 14:50:38 +00:00
Carlo Costanzo
5071041fa3 create a spook repair issue when there are ProxMox updates. Notifications from ProxMox
Fixes #1494
2025-12-02 09:48:29 -05:00
Carlo Costanzo
6246119214 Refactor vacuum automation logic for improved room queue handling
- Updated vacuum.yaml to streamline the processing of room queues and enhance the logic for determining the next room to clean.
- Replaced multiple variables with a more efficient approach using regex for room identification and queue management.
- Simplified the remaining rooms logic to improve clarity and maintainability of the automation conditions.
2025-12-02 09:23:17 -05:00
github-actions[bot]
d682517040 Update HA version badge to 2025.11.3 2025-12-01 22:28:25 +00:00
Carlo Costanzo
22d8a80abf Cleared out more spam 2025-12-01 17:28:01 -05:00
Carlo Costanzo
77cf3e971e Refine vacuum automation conditions for improved functionality
- Updated vacuum.yaml to enhance the logic for vacuum activation conditions, allowing for on-demand cleaning when the family is not home or the input boolean is activated.
- Replaced the previous state condition with a template condition for better flexibility in automation triggers.
2025-12-01 17:23:58 -05:00
github-actions[bot]
20ffa76ce4 Update HA version badge to 2025.11.3 2025-12-01 21:56:19 +00:00
Carlo Costanzo
9c6b13dbc3 Refactor logbook and recorder configurations for clarity and noise reduction. Updated documentation and excluded vcloudinfo entities to streamline activity and database management. 2025-12-01 16:55:52 -05:00
Carlo Costanzo
8dc7b063f0 Clearing out the noice from Create vCloudInfo Utility PAGE
Fixes #802
2025-12-01 16:55:41 -05:00
Carlo Costanzo
a13b2da2aa Refactor vacuum automation logic and enhance cleaning conditions
- Updated vacuum.yaml to improve the handling of cleaning modes and room queues, ensuring better management of vacuum operations based on user-defined conditions.
- Introduced new variables for room identification and refined automation triggers to enhance responsiveness to user presence and on-demand requests.
- Improved the logic for determining which rooms to clean, particularly focusing on bathroom segments and ensuring proper queue management.
- Removed outdated automation entries and streamlined the overall structure for better clarity and maintainability.
2025-12-01 16:38:55 -05:00
Carlo Costanzo
23ad5b421a Add Dreame vacuum automations to README.md for enhanced user guidance
- Introduced a new section detailing the Dreame vacuum automations, including weekday sweeping, weekend mopping, and room-queue segment cleaning.
- Highlighted the integration with the Dreame HACS for efficient coverage and operation of the vacuum.

These updates aim to provide clearer instructions and improve user experience with the vacuum automation features.
2025-11-29 16:20:43 -05:00
Carlo Costanzo
52f3a84078 Update vacuum and recorder configurations to enhance functionality
- Added exclusions for vacuum-related input entities in logbook.yaml and recorder.yaml to streamline data logging.
- Introduced a new input_boolean for on-demand vacuum activation in vacuum.yaml, along with updated automation triggers and conditions for improved control over vacuum operations. Via Alexa
- Refined existing automation aliases for clarity and adjusted conditions to ensure proper functionality during guest mode.
2025-11-29 16:15:04 -05:00
Carlo Costanzo
5a54329d57 Enhance YAML configuration files with improved documentation and new features
- Updated home_stats.yaml with detailed descriptions for home status automation.
- Expanded vacuum.yaml to include new input helpers and automation scripts for managing vacuum cleaning schedules and states.
- Refined speech_engine.yaml to clarify usage and functionality for sending notifications.
- Modified briefing.yaml to include a new macro for reporting cleaned rooms by the vacuum.

These changes aim to improve clarity, usability, and functionality across the automation scripts and configurations.
2025-11-29 15:40:14 -05:00
79 changed files with 1838 additions and 1432 deletions

5
.gitignore vendored
View File

@@ -29,6 +29,7 @@ home-assistant_v2
home-assistant_v2.*
.homekit.state
ipchange.yaml
config/packages/ipchange.yaml
ip_bans.yaml
production_auth.json
OZW_Log.txt
@@ -61,6 +62,7 @@ llmvision
backups
deps
config/backups
panel-notes/
icloud
__pycache__
hacs
@@ -73,3 +75,6 @@ tts
.ssh
.auth
.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
![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; docker config backups land in OneDrive. |
| 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)
Only listing hardware that appears in active packages/automations here.
https://amzn.to/48jVzZ3
@@ -88,4 +97,3 @@ https://amzn.to/48jVzZ3
<a href="https://www.vCloudInfo.com/p/affiliate-disclosure.html">
Affiliate Disclosure
</a></p>

View File

@@ -1 +1 @@
2025.11.3
2025.12.4

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'
id: 5cc158a5-038a-4078-a9fb-c9f9cf9ecd49
@@ -17,6 +24,11 @@
above: 60
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
data:
title: 'VERY HIGH WINDS:'

View File

@@ -1,5 +1,12 @@
######################################################################
## Some home facts when we get back home from being away.
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Home Stats Automation - arrival briefing with weather and safety checks
# Announces key home status after family returns or on manual trigger.
# -------------------------------------------------------------------
# Notes: Waits for garage doors to close before speaking.
######################################################################
- alias: 'Home Stats'
id: f98e1ef4-051b-4214-908d-d8b35f076a3e
@@ -30,4 +37,3 @@
call_outside_weather: 1
call_garage_check: 1
call_window_check: 1
call_light_check: 1

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
id: 814c48ea-e2e1-4b75-92b0-581081af5ce5
@@ -9,11 +16,7 @@
value_template: "{{ states('persistent_notification.httplogin') != 'unknown' }}"
action:
- service: script.notify_engine
- service: script.send_to_logbook
data:
value1: 'Bad Login: '
value2: 'There was a Hack attempt!'
value3: 'Go Check the GUI for details.'
who: 'carlo'
group: 'information'
topic: "SYSTEM"
message: "Bad Login: There was a hack attempt. Check the HA UI for details."

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
id: 74edd73d-f0a5-45cf-9561-c6a1777236e5
@@ -8,12 +15,10 @@
- platform: event
event_type: feedreader
action:
- service: script.notify_engine
- service: script.send_to_logbook
data:
value1: 'Check the MQTT Dump'
value2: '/dump/{{ trigger.platform }}'
who: 'carlo'
group: 'information'
topic: "SYSTEM"
message: "Check the MQTT dump: /dump/{{ trigger.platform }}"
- service: mqtt.publish
data:
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
id: f3f0a8d1-6c40-43e0-91e4-827194f78506
@@ -9,12 +17,10 @@
- platform: homeassistant
event: start
action:
- service: script.notify_engine
- service: script.send_to_logbook
data:
title: 'Home Assistant StartUp'
value1: 'Home Assistant is Up and Running!'
who: 'carlo'
group: 'information'
topic: "SYSTEM"
message: "Home Assistant is Up and Running!"
- service: homeassistant.turn_off
entity_id:
@@ -35,4 +41,3 @@
message: "Home Assistant has been restarted."
data:
type: announce

View File

@@ -1,8 +1,12 @@
###################################
## Sunrise and Sunset stuff
# @CCOSTAN
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
###################################
# -------------------------------------------------------------------
# Sunset Trigger - evening lighting kickoff
# Turns on interior/exterior accents around sunset with safety checks.
# -------------------------------------------------------------------
######################################################################
- alias: 'Sunset Stuff on'
id: d0db568c-0aa2-42cc-b5be-ba546e39b639
@@ -49,9 +53,12 @@
- switch.foyer_outlet
- switch.den_outlet
- switch.front_office_lamp
- switch.office_accent
- switch.living_room_outlet
- switch.living_room_tv_outlet
- service: light.turn_on
entity_id:
- light.living_room_accents
- light.upstairs_lamp
- light.ikea_1 #Upstairs Hallyway switchoutlet.

View File

@@ -56,7 +56,7 @@
- light.living_room_lights
- light.living_room_accents
brightness: 255
kelvin: 5500
color_temp_kelvin: 5500
- service: script.speech_engine
data:

View File

@@ -1,5 +1,11 @@
######################################################################
## Good night Routine
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Good Night Routine - bedtime shutdown and bed presence actions
# Powers down interior accents when the household is in bed.
# -------------------------------------------------------------------
######################################################################
- alias: 'Good Night Trigger'
@@ -52,6 +58,7 @@
- switch.kitchen_accent_2
- group.master_bathroom_accents
- switch.alarm_panel_1_motion_detection
- light.ikea_1 #Upstairs Hallyway switchoutlet.
- service: script.interior_off
- service: number.set_value
target:
@@ -87,6 +94,7 @@
target:
entity_id:
- switch.kitchen_accent_2
- switch.office_accent
- light.outdoor_bathroom
- group.master_bathroom_accents
- group.landscaping

View File

@@ -36,14 +36,14 @@
target:
entity_id: light.living_room_lights
data:
kelvin: 5500
color_temp_kelvin: 5500
brightness: 255
default:
- service: light.turn_on
target:
entity_id: light.living_room_lights
data:
kelvin: 2700
color_temp_kelvin: 2700
brightness: 200
- alias: 'Restore Living Room After Entry Secured'
@@ -74,26 +74,26 @@
target:
entity_id: light.living_room_lights
data:
kelvin: 5500
color_temp_kelvin: 5500
brightness: 255
- service: light.turn_on
target:
entity_id: light.living_room_accents
data:
kelvin: 5500
color_temp_kelvin: 5500
brightness: 200
default:
- service: light.turn_on
target:
entity_id: light.living_room_lights
data:
kelvin: 2700
color_temp_kelvin: 2700
brightness: 200
- service: light.turn_on
target:
entity_id: light.living_room_accents
data:
kelvin: 2700
color_temp_kelvin: 2700
brightness: 170
- alias: 'Living Room Red on Entry/Garage Open'

View File

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

View File

@@ -17,6 +17,7 @@ Interior_Lights:
- light.garage_hallway
- light.sink
- light.upstairs_lamp
- light.ikea_1 #Upstairs Hallyway outlet.
Exterior_Lights:
entities:

View File

@@ -19,6 +19,7 @@ Interior Switches:
- switch.den_outlet
- switch.living_room_outlet
- switch.living_room_tv_outlet
- switch.office_accent
- switch.office_lamp_switch
- switch.front_office_lamp

View File

@@ -1,84 +1,97 @@
#-------------------------------------------
# HomeKit Configuration for Home Assistant
#
# Description: This file controls the HomeKit integration settings,
# defining which entities are exposed to Apple HomeKit.
#
# Follow me on https://www.vcloudinfo.com/click-here
# Original Repository: https://github.com/CCOSTAN/Home-AssistantConfig
##-------------------------------------------
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# HomeKit Configuration - Multi-bridge for stability + Alexa-friendly streams
# Main bridge for lights/locks/climate; cameras/lock split to accessory bridges.
# Camera streams use go2rtc substreams/restreams for faster Echo Show playback.
# -------------------------------------------------------------------
######################################################################
filter:
include_domains:
- climate
- cover
- lock
exclude_domains:
- camera
- media_player
- sensor
- script
- sensor
- switch
- scene
- light
include_entities:
- camera.bedroomgate
- camera.driveway
- camera.filtergate
- camera.frontdoorbell
- camera.poolcam
- camera.frontlawn
- camera.garagecam
- light.bedroom
- light.bedroom_lights
- light.den_lights
- light.dinette_lights
- light.dining_room_lights
- light.foyer
- light.garage_lights
- light.hallway_lights
- light.kitchen_lights
- light.living_room_accents
- light.living_room_lights
- light.office_lights
- light.outdoor_front_lights
- light.upstairs_lights
- light.upstairs_lamp
- light.sink
- switch.lr_amp
exclude_entities:
- lock.spaceship_door_lock
- lock.spaceship_charger_door_lock
- lock.spaceship_trunk_lock
- lock.spaceship_frunk_lock
- climate.spaceship_hvac_climate_system
entity_config:
camera.frontdoorbell:
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/frontdoorbell?mp4
camera.poolcam:
linked_motion_sensor: binary_sensor.poolcam_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/poolcam?mp4
camera.frontlawn:
linked_motion_sensor: binary_sensor.frontlawn_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/frontlawn?mp4
camera.garagecam:
linked_motion_sensor: binary_sensor.garagecam_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/garagecam?mp4
camera.bedroomgate:
linked_motion_sensor: binary_sensor.bedroomgate_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/bedroomgate?mp4
camera.driveway:
linked_motion_sensor: binary_sensor.driveway_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/driveway?mp4
camera.filtergate:
linked_motion_sensor: binary_sensor.filtergate_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/filtergate?mp4
# Main bridge (everything except cameras + front door lock)
- name: Home Assistant Bridge
mode: bridge
port: 21063
filter:
include_domains:
- climate
- cover
- lock
exclude_domains:
- camera
- media_player
- sensor
- script
- switch
- scene
- light
include_entities:
- light.bedroom
- light.bedroom_lights
- light.den_lights
- light.dinette_lights
- light.dining_room_lights
- light.foyer
- light.garage_lights
- light.hallway_lights
- light.kitchen_lights
- light.living_room_accents
- light.living_room_lights
- light.office_lights
- light.outdoor_front_lights
- light.upstairs_lights
- light.upstairs_lamp
- light.sink
- switch.lr_amp
exclude_entities:
- lock.front_door
# Cameras in accessory mode (better performance/reliability)
- name: HomeKit Cameras
mode: accessory
port: 21064
filter:
include_entities:
- camera.bedroomgate
- camera.driveway
- camera.filtergate
- camera.frontdoorbell
- camera.poolcam
- camera.frontlawn
- camera.garagecam
entity_config:
camera.frontdoorbell:
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/frontdoorbell_alexa
camera.poolcam:
linked_motion_sensor: binary_sensor.poolcam_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/poolcam_sub
camera.frontlawn:
linked_motion_sensor: binary_sensor.frontlawn_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/frontlawn_sub
camera.garagecam:
linked_motion_sensor: binary_sensor.garagecam_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/garagecam_sub
camera.bedroomgate:
linked_motion_sensor: binary_sensor.bedroomgate_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/bedroomgate?mp4
camera.driveway:
linked_motion_sensor: binary_sensor.driveway_motion_sensor
video_codec: copy
stream_source: rtsp://192.168.10.14:8554/driveway_sub
camera.filtergate:
linked_motion_sensor: binary_sensor.filtergate_motion_sensor
video_codec: copy
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

@@ -1,24 +1,47 @@
#-------------------------------------------
# Logbook Configuration
# Description: Settings for the Home Assistant logbook component
# This component is responsible for displaying items in the logbook.
# Follow me on https://www.vcloudinfo.com/click-here
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
#-------------------------------------------
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Logbook Configuration - Activity/Logbook display controls
# Defines what is hidden from the Activity/logbook view to keep noise down.
# -------------------------------------------------------------------
# Notes: Filters vcloudinfo availability chatter plus location/weather noise.
######################################################################
exclude:
domains:
- persistent_notification
- update
entity_globs:
- sensor.*_location
- sensor.*_place
- sensor.*_geocoded_location
- sensor.pirateweather_*
- weather.*
- input_text.l10s_vacuum_*
- input_datetime.l10s_vacuum_*
- input_boolean.l10s_vacuum_*
- sensor.*_battery
- sensor.*_battery_state
- sensor.*_uptime*
- sensor.*_last_update*
- sensor.*_since
- sensor.*_last_boot
- sensor.sun_next_*
- sensor.*_activity
- sensor.*_bssid
- sensor.*_wifi_signal_strength
- "*alarm_panel_1*"
- "*alarm_panel_2*"
entities:
- automation.cuckoo_clock
- automation.detect_lights_and_adjust_the_brightness_when_turned_on_based_on_time
- binary_sensor.office_motion
- binary_sensor.vcloudinfo_com
- binary_sensor.refrigerator_door_open
- binary_sensor.rheem_wh_running
- sensor.vcloudinfo_com
- group.garage_doors
- media_player.LivingRoomCC
- sensor.date
@@ -41,3 +64,4 @@ exclude:
- sensor.small_garage_wifi_signal_strength
- sensor.time
- sensor.upstairs_ac_cooling_numeric
- sensor.vcloudinfo_com

View File

@@ -36,18 +36,19 @@ logs:
homeassistant.components.mqtt: error
homeassistant.components.mqtt.discovery: critical
homeassistant.components.persistent_notification: critical
homeassistant.components.template: warn
homeassistant.components.rest.sensor: critical
homeassistant.components.recorder: error
homeassistant.components.sensor.pi_hole: critical
homeassistant.components.sensor.rest: info
homeassistant.components.sensor.darksky: warn
homeassistant.components.tplink.switch: error
homeassistant.components.tplink.button: error
homeassistant.components.unifi: error
homeassistant.components.device_tracker.unifi: error
homeassistant.components.switch.unifi: error
homeassistant.components.zwave: warn
homeassistant.exceptions: info
homeassistant.helpers.script: info
homeassistant.helpers.script: warn
homeassistant.helpers.entity: critical
homeassistant.loader: warn
homeassistant.components.websocket_api: error
@@ -58,4 +59,4 @@ logs:
urllib3.connectionpool: error
requests.packages.urllib3.connectionpool: critical
root: warn

View File

@@ -43,9 +43,11 @@ 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 |
| [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 |
| [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` |
| [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` |
| [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` |
| [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` |
| [mariadb_monitoring.yaml](mariadb_monitoring.yaml) | MariaDB health sensors and Lovelace dashboard snippet for recorder stats. | `sensor.mariadb_status`, `sensor.database_size` |
| [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` |
| [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` |
| [finance.yaml](finance.yaml) | Yahoo Finance sensor bundle for portfolio glances and Lovelace cards. | `sensor.tsla`, `sensor.aapl`, `sensor.amzn`, `sensor.msft` |
@@ -59,6 +61,12 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
- Shared script keeps targets consistent: away → eco, home + >92°F → 78°F, home default → 80°F. Grid-down conditions pause non-essential cool-downs.
![Nest Climate Control](../www/custom_ui/floorplan/images/branding/Nest_Climate_Control.png)
### Dreame vacuum automations
- 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 segment IDs to enforce bathrooms last in each sweep/mop pass, dock on arrival, and auto-run if idle for 3+ days.
- Room queue advances on a 2-minute dwell in `sensor.l10s_vacuum_current_room` (queue = remaining rooms); phase changes happen on `sensor.l10s_vacuum_task_status: completed` and an empty queue.
![Dreame Automations](../www/custom_ui/floorplan/images/branding/Dreame%20Automations.png)
### Blog & video deep dives
When a package has a dedicated blog post or video, I link it right inside the YAML comments. Here are the same references for quick browsing:

View File

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

View File

@@ -1,16 +1,16 @@
#-------------------------------------------
# @CCOSTAN
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Alexa Media Player - Sensors and notifications via Alexa Media integration.
#-------------------------------------------
# Track Alexa media state and expose routine/command triggers.
# -------------------------------------------------------------------
######################################################################
## Track Alexa media state and expose routine/command triggers.
######################################################################
sensor:
- platform: template
sensors:
last_alexa:
value_template: >
{{ states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='entity_id') | first | default('none') }}
#-------------------------------------------
template:
- sensor:
- name: "Last Alexa"
unique_id: last_alexa
state: >
{{ states.media_player | selectattr('attributes.last_called','eq',True) | map(attribute='entity_id') | first | default('none') }}

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'
value1: 'The August Door lock is at {{ states("sensor.front_door_battery") }}% '
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'
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

@@ -1,12 +1,13 @@
#-------------------------------------------
# @CCOSTAN
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Climate Control - Seasonal HVAC automations and sensors.
#-------------------------------------------
# Thermostat helpers for upstairs/downstairs comfort.
# -------------------------------------------------------------------
######################################################################
## Thermostat helpers for upstairs/downstairs comfort.
######################################################################
# For more info visit https://www.vcloudinfo.com/click-here | Contact: @CCOSTAN
# Contact: @CCOSTAN | Entity reference details below
# Entity reference and attribute summaries:
#
# Entity ID: climate.downstairs
@@ -40,6 +41,28 @@
######################################################################
# ---------------------------------------------------------------------------
# Template helpers compressor status flags and numeric runtime helpers
# ---------------------------------------------------------------------------
template:
- binary_sensor:
- name: "Downstairs AC is Cooling"
unique_id: downstairs_ac_cooling
state: >
{{ state_attr('climate.downstairs', 'hvac_action') == 'cooling' }}
- name: "Upstairs AC is Cooling"
unique_id: upstairs_ac_cooling
state: >
{{ state_attr('climate.upstairs', 'hvac_action') == 'cooling' }}
sensor:
- name: "Downstairs AC Cooling Numeric"
unique_id: downstairs_ac_cooling_numeric
state: "{{ 1 if is_state('binary_sensor.downstairs_ac_cooling', 'on') else 0 }}"
- name: "Upstairs AC Cooling Numeric"
unique_id: upstairs_ac_cooling_numeric
state: "{{ 1 if is_state('binary_sensor.upstairs_ac_cooling', 'on') else 0 }}"
input_datetime:
downstairs_last_filter_change:
name: Downstairs Last Filter Change
@@ -51,30 +74,9 @@ input_datetime:
has_time: true
# ---------------------------------------------------------------------------
# Binary sensors true when the thermostat reports the compressor is running
# Integration sensors tally runtime based on compressor state
# ---------------------------------------------------------------------------
binary_sensor:
- platform: template
sensors:
downstairs_ac_cooling:
friendly_name: "Downstairs AC is Cooling"
value_template: >
{{ state_attr('climate.downstairs', 'hvac_action') == 'cooling' }}
upstairs_ac_cooling:
friendly_name: "Upstairs AC is Cooling"
value_template: >
{{ state_attr('climate.upstairs', 'hvac_action') == 'cooling' }}
sensor:
- platform: template
sensors:
downstairs_ac_cooling_numeric:
friendly_name: "Downstairs AC Cooling Numeric"
value_template: "{{ 1 if is_state('binary_sensor.downstairs_ac_cooling', 'on') else 0 }}"
upstairs_ac_cooling_numeric:
friendly_name: "Upstairs AC Cooling Numeric "
value_template: "{{ 1 if is_state('binary_sensor.upstairs_ac_cooling', 'on') else 0 }}"
- platform: integration
name: Downstairs AC Runtime Raw
source: sensor.downstairs_ac_cooling_numeric
@@ -132,6 +134,10 @@ script:
entity_id: group.family
state: 'not_home'
sequence:
- service: script.send_to_logbook
data:
topic: "CLIMATE"
message: "Downstairs HVAC set to ECO (family not_home)."
- service: climate.set_preset_mode
data:
entity_id: climate.downstairs
@@ -146,6 +152,10 @@ script:
entity_id: sensor.pirateweather_temperature
above: 92
sequence:
- service: script.send_to_logbook
data:
topic: "CLIMATE"
message: "Downstairs target set to 78F (family home, temp >92F)."
- service: climate.set_hvac_mode
data:
entity_id: climate.downstairs
@@ -159,6 +169,10 @@ script:
entity_id: group.family
state: 'home'
sequence:
- service: script.send_to_logbook
data:
topic: "CLIMATE"
message: "Downstairs target set to 80F (family home)."
- service: climate.set_hvac_mode
data:
entity_id: climate.downstairs
@@ -181,6 +195,11 @@ automation:
entity_id: sensor.downstairs_ac_runtime_since_last_filter_change
above: 800 # hours
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
data:
title: "Home Maintenance Reminder"
@@ -198,6 +217,11 @@ automation:
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
above: 450 # hours
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
data:
title: "Home Maintenance Reminder"
@@ -243,6 +267,10 @@ automation:
data:
entity_id: climate.upstairs
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
id: set_downstairs_nest_77_both_in_bed
@@ -430,4 +458,3 @@ automation:
- delay: "00:20:00"
- service: script.set_downstairs_target_temp_based_on_conditions
- 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
data:
value: "{{ trigger.to_state.entity_id.split('.')[1] }}"
- service: script.notify_engine
- service: script.send_to_logbook
data:
who: 'parents'
value1: "Large Garage has been auto-opened for {{ states('input_text.last_person_home') }}."
title: 'Garage Auto-Opened'
group: 'Welcome_Home'
camera_entity: camera.garagecam
topic: "GARAGE"
message: "Large Garage was auto-opened for {{ states('input_text.last_person_home') }}."
######################################################################
## 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."
who: "family"
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,33 +414,17 @@ automation:
from: 'home'
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
target:
entity_id: media_player.kitchen
data:
media_content_id: 'show garage camera from home assistant'
media_content_type: custom
- delay: '00:20:00'
- service: media_player.play_media
target:
entity_id: media_player.kitchen
data:
media_content_id: 'hide garage camera'
media_content_type: custom
- service: media_player.play_media
target:
entity_id: media_player.kitchen
data:
media_content_id: 'show garage camera from home assistant'
media_content_type: custom
- delay: '00:20:00'
- service: media_player.play_media
target:
entity_id: media_player.kitchen
data:
media_content_id: 'hide garage camera'
media_content_type: custom

View File

@@ -1,18 +1,21 @@
#-------------------------------------------
# @CCOSTAN
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Glances - ProxMox/server stats via Glances integration.
#-------------------------------------------
# CPU, memory, and disk sensors from Glances API.
# -------------------------------------------------------------------
######################################################################
## CPU, memory, and disk sensors from Glances API.
######################################################################
sensor:
- platform: template
sensors:
proxmox_garage_avg_temp:
friendly_name: "Proxmox Garage Average Temperature"
unit_of_measurement: "°F"
value_template: >-
template:
- sensor:
- name: "Proxmox Garage Average Temperature"
unique_id: proxmox_garage_avg_temp
device_class: temperature
state_class: measurement
unit_of_measurement: "\u00B0F"
state: >-
{{ (
(states('sensor.proxmox1_package_id_0_temperature') | float(0) +
states('sensor.proxmox1_pch_skylake_1_temperature') | float(0) +
@@ -37,12 +40,12 @@ automation:
id: proxmox-garage-high-temp-warning-automation
trigger:
- platform: numeric_state
entity_id: sensor.proxmox_garage_avg_temp
entity_id: sensor.proxmox_garage_average_temperature
above: 145 # Adjust threshold as needed
action:
- service: script.notify_engine
data:
title: "🔥 Proxmox Garage Alert!"
value1: "The average temperature of your Proxmox servers is above 145°F!"
title: "?? Proxmox Garage Alert!"
value1: "The average temperature of your Proxmox servers is above 145\u00B0F!"
who: 'carlo'
group: 'information'

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:
- 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
scan_interval: 14400
value_template: >
@@ -45,28 +45,21 @@ sensor:
# Sensor Uses Flag data generated by AI
################################################################################
- 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
scan_interval: 14400
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') %}
{% if value_json is defined and value_json.Flag_Days_US is defined %}
{% set static_days = value_json.Flag_Days_US.static %}
{% set dynamic_days = value_json.Flag_Days_US.dynamic %}
{% if static_days is defined and now_string in static_days %}
True
{% elif dynamic_days is defined %}
{% for day_val in dynamic_days %}
{% if day_val.date == now_full_string %}
True
{% endif %}
{% endfor %}
{% else %}
False
{% endif %}
{% 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 = flag_data.static if flag_data.static is defined else {} %}
{% set dynamic_days = flag_data.dynamic if flag_data.dynamic is defined else {} %}
{% if now_string in static_days %}
True
{% elif now_full_string in dynamic_days %}
True
{% else %}
False
{% endif %}
################################################################################

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
# 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:
snooze_lightning:
name: Snooze Lightning
@@ -45,6 +47,11 @@ automation:
state: 'off'
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
data:
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"

View File

@@ -1,38 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Logger Controls - Realtime debugging helpers.
#-------------------------------------------
######################################################################
## Adjust Home Assistant log level from the UI.
######################################################################
input_select:
log_level:
name: Log Level
options:
- critical
- fatal
- error
- warning
- warn
- info
- debug
- notset
initial: warn
icon: mdi:bug
###################################
## Dynamically set the log levels without having to restart HASS or edit configuration.yaml
#- Thanks @VDRainer
###################################
automation:
- alias: Log Level
id: 8196e9d4-5174-492e-8523-6ef70ccbd8dd
trigger:
platform: state
entity_id:
- input_select.log_level
# - input_select.log_component
action:
- service: logger.set_level
data:
homeassistant.components: "{{ states.input_select.log_level.state }}"

View File

@@ -0,0 +1,170 @@
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# MariaDB Monitoring - SQL sensor bundle for DB health
# Recorder-backed metrics for MariaDB performance and capacity checks.
# -------------------------------------------------------------------
# Notes: Uses SQL integration against recorder_db_url.
# Notes: COUNT(*) queries run every 6h; increase scan_interval or disable if slow.
######################################################################
sql:
- name: "MariaDB Status"
db_url: !secret recorder_db_url
query: >-
SELECT 'running' as status
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'Uptime'
AND CAST(VARIABLE_VALUE AS UNSIGNED) > 0;
column: "status"
value_template: "{{ value if value else 'stopped' }}"
- name: "MariaDB Version"
db_url: !secret recorder_db_url
query: >-
SELECT @@version as version;
column: "version"
- name: "MariaDB Performance"
db_url: !secret recorder_db_url
query: >-
SELECT ROUND(
(SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'Queries') /
(SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'Uptime')
) as performance;
column: "performance"
unit_of_measurement: "q/s"
- name: "Database Size"
db_url: !secret recorder_db_url
query: >-
SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) as size
FROM information_schema.tables
WHERE table_schema = 'homeassistant';
column: "size"
unit_of_measurement: "MB"
value_template: "{{ value | float(0) }}"
- name: "Database Tables Count"
db_url: !secret recorder_db_url
query: >-
SELECT COUNT(*) as count
FROM information_schema.tables
WHERE table_schema = 'homeassistant';
column: "count"
unit_of_measurement: "tables"
- name: "Database Oldest Record"
db_url: !secret recorder_db_url
query: >-
SELECT DATE_FORMAT(FROM_UNIXTIME(MIN(last_updated_ts)), '%Y-%m-%d') as oldest
FROM states;
column: "oldest"
- name: "Database Total Records"
db_url: !secret recorder_db_url
query: >-
SELECT COUNT(*) as count
FROM states;
column: "count"
unit_of_measurement: "records"
- name: "Database Records Per Day"
db_url: !secret recorder_db_url
query: >-
SELECT ROUND(
COUNT(*) /
GREATEST(DATEDIFF(NOW(), FROM_UNIXTIME(MIN(last_updated_ts))), 1),
0
) as avg
FROM states;
column: "avg"
unit_of_measurement: "records/day"
- name: "MariaDB Uptime"
db_url: !secret recorder_db_url
query: >-
SELECT VARIABLE_VALUE as value
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'Uptime';
column: "value"
unit_of_measurement: "seconds"
- name: "MariaDB Connections"
db_url: !secret recorder_db_url
query: >-
SELECT VARIABLE_VALUE as value
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'Threads_connected';
column: "value"
unit_of_measurement: "connections"
- name: "MariaDB Questions"
db_url: !secret recorder_db_url
query: >-
SELECT VARIABLE_VALUE as value
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'Questions';
column: "value"
unit_of_measurement: "queries"
- name: "MariaDB Buffer Pool Size"
db_url: !secret recorder_db_url
query: >-
SELECT CONCAT(ROUND(@@innodb_buffer_pool_size / 1024 / 1024 / 1024, 1), ' GB') as value;
column: "value"
- name: "MariaDB Max Connections"
db_url: !secret recorder_db_url
query: >-
SELECT @@max_connections as value;
column: "value"
- name: "MariaDB Log File Size"
db_url: !secret recorder_db_url
query: >-
SELECT CONCAT(ROUND(@@innodb_log_file_size / 1024 / 1024, 0), ' MB') as value;
column: "value"
- name: "MariaDB Tmp Table Size"
db_url: !secret recorder_db_url
query: >-
SELECT CONCAT(ROUND(@@tmp_table_size / 1024 / 1024, 0), ' MB') as value;
column: "value"
- name: "MariaDB IO Capacity"
db_url: !secret recorder_db_url
query: >-
SELECT @@innodb_io_capacity as value;
column: "value"
- name: "MariaDB IO Threads"
db_url: !secret recorder_db_url
query: >-
SELECT CONCAT(
'Read: ', @@innodb_read_io_threads,
', Write: ', @@innodb_write_io_threads
) as value;
column: "value"
- name: "MariaDB Table Cache"
db_url: !secret recorder_db_url
query: >-
SELECT @@table_open_cache as value;
column: "value"
- name: "MariaDB Buffer Sizes"
db_url: !secret recorder_db_url
query: >-
SELECT CONCAT(
'Sort: ', ROUND(@@sort_buffer_size / 1024 / 1024, 0), 'M, ',
'Read: ', ROUND(@@read_buffer_size / 1024 / 1024, 0), 'M, ',
'Join: ', ROUND(@@join_buffer_size / 1024 / 1024, 0), 'M'
) as value;
column: "value"

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
# Phyn Plus Water Shutoff - Leak detection and auto shutoff.
#-------------------------------------------
######################################################################
## Phyn Plus monitoring via custom integration.
######################################################################
# -------------------------------------------------------------------
# Phyn Plus Water Shutoff - Leak detection and auto shutoff
# Related Issue: 1550
# Push + Activity feed + Repairs issue while valve is closed.
# -------------------------------------------------------------------
# Info: https://www.vcloudinfo.com/2020/05/phyn-plus-smart-water-shutoff-device.html
# HACS: https://github.com/MizterB/homeassistant-phyn
## Phyn Plus Water ShutOff - https://amzn.to/2Zy3sbJ
# Product: https://amzn.to/2Zy3sbJ
######################################################################
automation:
@@ -27,6 +28,22 @@ automation:
state: 'off'
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
data:
title: 'Phyn Leak Detection'
@@ -107,8 +124,11 @@ automation:
entity_id: valve.phyn_shutoff_valve
to: 'open'
action:
- service: repairs.remove
continue_on_error: true
data:
issue_id: "phyn_leak_shutoff"
- service: persistent_notification.dismiss
data:
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
# Tesla Powerwall - Monitoring and outage automations.
#-------------------------------------------
######################################################################
## Powerwall status sensors and load-shedding helpers.
######################################################################
# Read more: https://www.vcloudinfo.com/2018/01/going-green-to-save-some-green-in-2018.html | Issue #272
# -------------------------------------------------------------------
# Tesla Powerwall - Monitoring and outage automations
# Related Issue: 1550
# Powerwall status sensors, outage alerting, and load-shedding helpers.
# -------------------------------------------------------------------
# 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
# --------------------------------------------------------------
######################################################################
# Binary Sensors:
# - binary_sensor.powerwall_charging ............. battery_charging (on=charging)
# - binary_sensor.powerwall_connected_to_tesla ... connectivity (on=connected)
@@ -54,6 +55,11 @@ automation:
trigger.from_state.state not in ['unavailable', 'unknown', 'null'] }}
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
data:
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
state: 'on'
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
data:
title: "Powerwall Low Charge Alert - Current Charge: {{ states('sensor.powerwall_charge') }}"
@@ -131,6 +153,29 @@ automation:
who: 'parents'
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"
id: 25b3d3d8-92fa-454a-9f1c-6d3fd0f3af58
description: "Protect battery by shutting down non-essentials when Powerwall drops below 75%"

View File

@@ -54,5 +54,15 @@ automation:
data:
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 }}%!"
value3: 'Attempting to clean'
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
- alias: "Disk Use Alarm"
@@ -49,3 +53,7 @@ automation:
value1: 'Hard Drive Monitor:'
value2: "Your harddrive is running out of Space! /dev/root:{{ states.sensor.disk_use_percent.state }}%!"
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

@@ -1,16 +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
# Proxmox Frigate Host - Nightly reboot schedule.
#-------------------------------------------
# -------------------------------------------------------------------
# Proxmox Host Automations - reboots and update alerts
# Nightly Frigate host reboot plus update repair issues.
# -------------------------------------------------------------------
# Notes: Creates HA repair issues when proxmox nodes report updates.
######################################################################
## Automates nightly reboot of the Frigate server via Proxmox API.
######################################################################
# More info: https://www.vcloudinfo.com/click-here
automation:
- alias: "Nightly Frigate Server Reboot"
id: nightly_frigate_reboot
description: "Reboots the Frigate server every day at 5 AM"
mode: single
trigger:
- platform: time
at: "05:00:00"
@@ -18,23 +20,47 @@ automation:
- service: button.press
target:
entity_id: button.qemu_docker2_101_reboot
mode: single
- service: script.send_to_logbook
data:
topic: "FRIGATE"
message: "Frigate server rebooted at 5 AM."
- alias: "Notify Carlo of Proxmox Updates"
id: notify_carlo_proxmox_updates
description: "Sends a notification to Carlo when there are updates available for the Proxmox hosts."
- alias: "Proxmox Updates Repair Issues"
id: proxmox_updates_repair
description: "Track repair issues when Proxmox hosts report updates."
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.node_proxmox02_updates_packages
to: 'on'
- platform: state
entity_id: binary_sensor.node_proxmox1_updates_packages
to: 'on'
- platform: state
entity_id: binary_sensor.node_proxmox02_updates_packages
variables:
node_name: >
{% if 'proxmox1' in trigger.entity_id %}Proxmox1{% else %}Proxmox02{% endif %}
issue_id: >
{% if 'proxmox1' in trigger.entity_id %}
proxmox1_updates_available
{% else %}
proxmox02_updates_available
{% endif %}
action:
- service: script.notify_engine
data:
who: carlo
title: "Proxmox Updates Available"
value1: "There are updates available for the Proxmox hosts. Please review and apply updates as needed."
group: "information"
mode: single
- choose:
- conditions: "{{ trigger.to_state.state == 'on' }}"
sequence:
- service: repairs.create
data:
issue_id: "{{ issue_id }}"
severity: warning
persistent: false
title: "{{ node_name }} has updates available"
description: >
{{ trigger.entity_id }} is ON, indicating pending updates on {{ node_name }}.
Apply updates in Proxmox, then reload this sensor to clear the issue.
default:
- service: repairs.remove
data:
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
# Rheem EcoNet Water Heater - Monitoring and control.
#-------------------------------------------
######################################################################
## Rheem EcoNet sensors/automations. https://amzn.to/36yOSnN
######################################################################
# Docs: https://www.home-assistant.io/integrations/econet/ | Issue #892
# -------------------------------------------------------------------
# Rheem EcoNet Water Heater - Monitoring and control
# Related Issue: 1550
# Logs hot-water availability alerts to Activity feed; keeps announcements.
# -------------------------------------------------------------------
# Docs: https://www.home-assistant.io/integrations/econet/ | Existing notes: Issue #892
# Powerwall outage control for Rheem WH lives in config/packages/powerwall.yaml
######################################################################
##############################################################################
### Automations
@@ -51,15 +53,13 @@ automation:
entity_id: sensor.rheem_wh_available_hot_water
below: 30 # Alert when available hot water drops below 30%
action:
- service: script.notify_engine
- service: script.send_to_logbook
data:
title: "Hot Water Alert"
value1: "Available hot water is below 30%."
who: 'carlo'
group: 'information'
topic: "WATER"
message: "Hot water availability is below 30%."
- service: script.speech_engine
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
data:
@@ -97,4 +97,3 @@ automation:
# 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
switch:
- 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
# 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:
- alias: "Notify Carlo if Internet Speed is Slow"
- alias: "Internet Speed is Slow (Logbook)"
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:
- platform: numeric_state
entity_id: sensor.speedtest_download
@@ -31,21 +32,18 @@ automation:
{{ (now - uptime).total_seconds() / 60 >= 10 }}
action:
- service: script.notify_engine
- service: script.send_to_logbook
data:
title: "⚠️ Internet Speed Alert"
value1: >-
topic: "NETWORK"
message: >-
Download: {{ states('sensor.speedtest_download') }} Mbps,
Upload: {{ states('sensor.speedtest_upload') }} Mbps.
value2: "One or both speeds are below 300 Mbps."
who: "carlo"
group: "information"
level: "active"
One or both speeds are below 300 Mbps.
mode: single
- alias: "Notify Carlo if Internet Speed is Restored"
- alias: "Internet Speed Restored (Logbook)"
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:
- platform: numeric_state
entity_id: sensor.speedtest_download
@@ -66,14 +64,11 @@ automation:
{% set now = now() %}
{{ (now - uptime).total_seconds() / 60 >= 10 }}
action:
- service: script.notify_engine
- service: script.send_to_logbook
data:
title: "✅ Internet Speed Restored"
value1: >-
topic: "NETWORK"
message: >-
Download: {{ states('sensor.speedtest_download') }} Mbps,
Upload: {{ states('sensor.speedtest_upload') }} Mbps.
value2: "Internet speeds are back to normal."
who: "parents"
group: "information"
level: "active"
Internet speeds are back to normal.
mode: single

View File

@@ -1,12 +1,13 @@
#-------------------------------------------
# @CCOSTAN
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Stats - Historical metrics and AI notifications.
#-------------------------------------------
# Build historical stats for AI/alerting.
# -------------------------------------------------------------------
# Contact: @CCOSTAN
######################################################################
## Build historical stats for AI/alerting.
######################################################################
# Find me on X @CCOSTAN
### Building out some Historical stats for AI. #####################
command_line:
@@ -71,65 +72,62 @@ sensor:
days: 7
### Building some interesting stats for tweeting. ###
- platform: template
sensors:
sensor_count:
friendly_name: 'Number of Sensors'
value_template: >-
template:
- sensor:
- name: "Number of Sensors"
unique_id: stats_number_of_sensors
unit_of_measurement: "count"
icon: mdi:counter
state: >-
{{ states.sensor | list | count }}
unit_of_measurement: 'count'
icon_template: mdi:counter
automation_count:
friendly_name: 'Number of Automations'
value_template: >-
- name: "Number of Automations"
unique_id: stats_number_of_automations
unit_of_measurement: "count"
icon: mdi:robot
state: >-
{{ states.automation | list | count }}
unit_of_measurement: 'count'
icon_template: mdi:robot
script_count:
friendly_name: 'Number of Scripts'
value_template: >-
- name: "Number of Scripts"
unique_id: stats_number_of_scripts
unit_of_measurement: "count"
icon: mdi:script-text
state: >-
{{ states.script | list | count }}
unit_of_measurement: 'count'
icon_template: mdi:script-text
binary_sensor_count:
friendly_name: 'Number of Binary Sensors'
value_template: >-
- name: "Number of Binary Sensors"
unique_id: stats_number_of_binary_sensors
unit_of_measurement: "count"
icon: mdi:binary-sensor
state: >-
{{ states.binary_sensor | list | count }}
unit_of_measurement: 'count'
icon_template: mdi:binary-sensor
tracker_count:
friendly_name: 'Number of Devices'
value_template: >-
{{ states.device_tracker| list | count }}
unit_of_measurement: 'count'
icon_template: mdi:account-group
lights_count:
friendly_name: 'Number of Lights'
value_template: >
- name: "Number of Devices"
unique_id: stats_number_of_devices
unit_of_measurement: "count"
icon: mdi:account-group
state: >-
{{ states.device_tracker | list | count }}
- name: "Number of Lights"
unique_id: stats_number_of_lights
unit_of_measurement: "count"
icon: mdi:lightbulb
state: >
{{ states.light | list | count }}
unit_of_measurement: 'count'
icon_template: mdi:lightbulb
lights_on_count:
friendly_name: "Number of lights on"
value_template: >-
{% set lights = states.light | selectattr('state', 'eq', 'on') | list %}
{% set qty = lights | count %}
{% set p1 = 'lights are' if qty > 1 else 'light is' %}
{% if qty == 0 %}
No lights on.
{% else %}
{{ qty }} {{ p1 }} on.
{% endif %}
unit_of_measurement: 'count'
icon_template: mdi:binary-sensor
protect_count:
friendly_name: 'Number of Smoke Detectors'
value_template: >
- name: "Number of lights on"
unique_id: stats_number_of_lights_on
unit_of_measurement: "count"
icon: mdi:binary-sensor
state: >-
{{ states.light | selectattr('state', 'eq', 'on') | list | count }}
- name: "Number of Smoke Detectors"
unit_of_measurement: "count"
icon: mdi:smoke-detector
state: >
{% if states('group.protects') == 'on' %}
{% for e in states.group.protects.attributes.entity_id if states(e) == 'on' %}
{% if loop.last %}
@@ -139,20 +137,19 @@ sensor:
{% else %}
0
{% endif %}
unit_of_measurement: 'count'
icon_template: mdi:smoke-detector
camera_count:
friendly_name: 'Number of online Cameras'
value_template: >
- name: "Number of online Cameras"
unique_id: stats_number_of_online_cameras
unit_of_measurement: "count"
icon: mdi:camera
state: >
{{ states.camera | list | count }}
unit_of_measurement: 'count'
icon_template: mdi:camera
total_wifi_clients:
friendly_name: "Total WiFi Clients"
- name: "Total WiFi Clients"
unique_id: total_wifi_clients
unit_of_measurement: "clients"
icon_template: mdi:wifi
value_template: >
icon: mdi:wifi
state: >
{% set g = states('sensor.unifi_ap_garage_clients') | int(0) %}
{% set o = states('sensor.unifi_ap_office_clients') | int(0) %}
{% set s = states('sensor.unifi_ap_study_clients') | int(0) %}

View File

@@ -1,109 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Super Bowl Lights - Flash routines on scoring events.
#-------------------------------------------
######################################################################
## Game-day automations; update sensors yearly. Issue #1502.
######################################################################
automation:
- alias: 'Super Bowl Team Score Change'
id: 5b3a4c89-1234-4567-8901-23456789abcd
mode: single
trigger:
- platform: state
entity_id: sensor.team_tracker_kc
attribute: team_score
- platform: state
entity_id: sensor.team_tracker_phi
attribute: team_score
condition:
- condition: template
value_template: "{{ now().month == 2 }}"
action:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.flash
- service: light.turn_on
target:
entity_id:
- light.outdoor_front_lights
- light.living_room_accents
- light.m1_back_left
- light.m1_back_right
- light.m1_front_left
- light.m1_front_right
- light.main_slider
data:
rgb_color: >
{% if trigger.entity_id == 'sensor.team_tracker_phi' %}
[0, 255, 0]
{% else %}
[255, 0, 0]
{% endif %}
brightness: 255
- delay:
minutes: 5
- service: light.turn_on
target:
entity_id:
- light.m1_back_left
- light.m1_back_right
data:
brightness: 255
rgb_color: [255, 255, 255]
- alias: 'Super Bowl Winner Celebration'
id: 5b3a4c89-1234-4567-8901-23456789abce
mode: single
trigger:
- platform: state
entity_id:
- sensor.team_tracker_kc
- sensor.team_tracker_phi
attribute: team_winner
to: 'true'
condition:
- condition: template
value_template: "{{ now().month == 2 }}"
action:
- service: light.turn_on
target:
entity_id:
- light.outdoor_front_lights
- light.living_room_accents
- light.m1_back_left
- light.m1_back_right
- light.m1_front_left
- light.m1_front_right
- light.main_slider
data:
rgb_color: >
{% if trigger.entity_id == 'sensor.team_tracker_phi' %}
[0, 255, 0]
{% else %}
[255, 0, 0]
{% endif %}
brightness: 255
effect: 'colorloop'
- delay:
minutes: 3
- service: light.turn_on
target:
entity_id:
- light.outdoor_front_lights
- light.living_room_accents
- light.m1_back_left
- light.m1_back_right
- light.m1_front_left
- light.m1_front_right
- light.main_slider
data:
rgb_color: >
{% if trigger.entity_id == 'sensor.team_tracker_phi' %}
[0, 255, 0]
{% else %}
[255, 0, 0]
{% endif %}
brightness: 255
effect: 'none'

View File

@@ -1,12 +0,0 @@
#-------------------------------------------
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
###################################
## TPink compatible Devices - https://www.vcloudinfo.com/2018/12/how-to-waterproof-your-outdoor-smart.html
TPLink no longer needed as it was moved into the UI.
###################################
tplink:
# discovery: false
switch:
- host: 192.168.10.116

View File

@@ -1,23 +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_
#-------------------------------------------
switch:
- 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

@@ -1,23 +1,435 @@
#-------------------------------------------
# @CCOSTAN
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# Vacuum - Dreame/Neato cleaning schedules and alerts.
#-------------------------------------------
# -------------------------------------------------------------------
# Dreame Vacuum Orchestration - Continuous phased sweep/mop with away/on-demand
# Related Issue: 1550
# Phases: sweep main, sweep baths, mop main, mop baths; notifications + idle auto-start
# -------------------------------------------------------------------
# Notes:
# - `sensor.l10s_vacuum_current_room` can change during transit; require a dwell (`for:`) before dequeuing.
# - Treat 2+ minutes in a room as "being cleaned" and dequeue immediately (queue = remaining rooms).
# - Phase changes are driven by `sensor.l10s_vacuum_task_status: completed` and an empty queue (queue is the source of truth).
# - Avoid reissuing `dreame_vacuum.vacuum_clean_segment` while already cleaning; only send a new segment job when starting/resuming or switching phases.
# - Jinja2 loop scoping: use a `namespace` when building lists (otherwise the queue can appear empty and get cleared).
# - Docked + task complete only logs queue state; no auto-clearing.
# - Queue-empty trigger ignores already-completed tasks to avoid immediate reseeding.
# - Queue-empty no longer auto-reseeds; phase advance handles the next run on completion.
# - Mop phases use `sweeping_and_mopping` instead of mop-only.
######################################################################
## Vacuum control and notifications (migrated from Neato to Dreame).
## 1. Helpers
######################################################################
input_boolean:
l10s_vacuum_on_demand:
name: Dreame Clean (On-Demand)
icon: mdi:robot-vacuum
input_select:
l10s_vacuum_phase:
name: L10s Vacuum Phase
options:
- sweep_main
- sweep_bath
- mop_main
- mop_bath
initial: sweep_main
icon: mdi:playlist-check
input_text:
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
max: 255
l10s_vacuum_room_catalog:
name: L10s Vacuum Room Catalog
initial: "6,7,8,9,10,12,13,14,15,17,2,4,1,3"
icon: mdi:map
max: 255
l10s_vacuum_rooms_cleaned_today:
name: L10s Vacuum Rooms Cleaned Today
icon: mdi:clipboard-check-outline
max: 255
## 2. Script: Start Next Room
######################################################################
script:
l10s_vacuum_start_next_room:
alias: 'Away Vacuum: Start Next Room'
mode: single
sequence:
- variables:
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 }}"
bath_ids: [1, 3, 4]
main_ids: "{{ catalog_ints | reject('in', bath_ids) | list }}"
phase_order: ['sweep_main', 'sweep_bath', 'mop_main', 'mop_bath']
phase_state: "{{ states('input_select.l10s_vacuum_phase') }}"
phase: "{{ phase_state if phase_state in phase_order else 'sweep_main' }}"
cleaning_mode: "{{ 'sweeping_and_mopping' if 'mop_' in phase else 'sweeping' }}"
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 }}"
phase_segments: >
{% if phase == 'sweep_main' %}
{{ main_ids }}
{% elif phase == 'sweep_bath' %}
{{ bath_ids }}
{% elif phase == 'mop_main' %}
{{ main_ids }}
{% else %}
{{ bath_ids }}
{% endif %}
segments_to_clean: "{{ queue_ints if queue_ints | length > 0 else phase_segments }}"
# 1. Seed the queue if necessary
- choose:
- conditions:
- condition: template
value_template: "{{ queue_ints | length == 0 and phase_segments | length > 0 }}"
sequence:
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_room_queue
data:
value: "{{ phase_segments | join(',') }}"
default: []
# 2. Check if there is anything to clean and stop if not
- choose:
- conditions:
- condition: template
value_template: "{{ segments_to_clean | length == 0 }}"
sequence:
- stop: 'No rooms left to clean today.'
default: []
# 3. Start cleaning
- service: select.select_option
target:
entity_id: select.l10s_vacuum_cleaning_mode
data:
option: "{{ cleaning_mode }}"
- service: vacuum.set_fan_speed
target:
entity_id: vacuum.l10s_vacuum
data:
fan_speed: Standard
- service: dreame_vacuum.vacuum_clean_segment
target:
entity_id: vacuum.l10s_vacuum
data:
# Clean the non-bathrooms if any, otherwise clean the bathrooms
segments: "{{ segments_to_clean }}"
## 3. Automations
######################################################################
# Neato D7: https://amzn.to/2kqnnqu | Dreame: https://amzn.to/4f7NpFP
##############################################################################
### Configuration - Authentication via the DEVELOPER Portal
### HACS - https://github.com/Tasshack/dreame-vacuum
##############################################################################
automation:
##############################################################################
### Automations - Help Vacuum!
### https://www.vcloudinfo.com/2020/05/home-assistant-neato-vacuum-automation.html
##############################################################################
- alias: 'Vacuum: Reset Cleaned List at 5am'
id: 18f7b6d3-c02c-4ec1-88b3-0c3b8b4c6f7b
trigger:
- platform: time
at: '05:00:00'
action:
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_rooms_cleaned_today
data:
value: ""
- alias: 'Vacuum: Auto-Start if Idle 3 Days'
id: c6b3f1e8-9a3f-4098-9b9e-1c7f2d6f1d11
trigger:
- platform: time
at: '16:00:00'
condition:
- condition: template
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:
entity_id: input_boolean.l10s_vacuum_on_demand
- alias: 'Away Vacuum: Start or Resume When we leave or On-Demand'
id: 7f7e0a3c-6452-4f6b-8464-c6c25770a148
trigger:
- platform: state
entity_id: group.family
to: 'not_home'
- platform: state
entity_id: input_boolean.l10s_vacuum_on_demand
to: 'on'
condition:
- condition: state
entity_id: input_boolean.guest_mode
state: 'off'
- condition: template
value_template: >
{{ is_state('input_boolean.l10s_vacuum_on_demand', 'on') or is_state('group.family', 'not_home') }}
- condition: template
value_template: >
true
- condition: template
value_template: "{{ not is_state('vacuum.l10s_vacuum', 'cleaning') }}"
action:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.l10s_vacuum_on_demand
- service: script.l10s_vacuum_start_next_room
- alias: 'Away Vacuum: Dock When Family Returns'
id: 1ef172f2-4b30-4e5b-953d-d4d1ca8701ad
trigger:
- platform: state
entity_id: group.family
to: 'home'
- platform: state
entity_id: input_boolean.l10s_vacuum_on_demand
to: 'off'
condition:
- condition: template
value_template: >
{{ is_state('vacuum.l10s_vacuum', 'cleaning') or is_state('vacuum.l10s_vacuum', 'returning') or is_state('vacuum.l10s_vacuum', 'paused') }}
action:
- service: vacuum.pause
target:
entity_id: vacuum.l10s_vacuum
- delay: 00:00:10
- service: vacuum.return_to_base
target:
entity_id: vacuum.l10s_vacuum
- service: input_boolean.turn_off
target:
entity_id: input_boolean.l10s_vacuum_on_demand
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Family home; docking vacuum and disabling On-Demand."
- alias: 'Away Vacuum: Confirm Room Cleaned'
id: c581c570-55b0-4acd-8b5d-53cfb486cc2a
mode: single
trigger:
- platform: state
entity_id: sensor.l10s_vacuum_current_room
for: '00:02:00'
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'}
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) }}"
cleaned_room_state: "{{ trigger.to_state.state if trigger.to_state is not none else '' }}"
cleaned_room_id: "{{ (trigger.to_state.attributes.room_id if trigger.to_state is not none else 0) | int(0) }}"
matched_room_id: "{{ cleaned_room_id if cleaned_room_id > 0 and cleaned_room_id in (queue_ints | default([], true)) else 0 }}"
room_name: "{{ room_map.get(matched_room_id, cleaned_room_state) }}"
remaining_list: >
{% set ns = namespace(rem=[]) %}
{% set removed = namespace(done=false) %}
{% for r in queue_ints %}
{% if not removed.done and r == matched_room_id %}
{% set removed.done = true %}
{% else %}
{% set ns.rem = ns.rem + [r] %}
{% endif %}
{% endfor %}
{{ ns.rem }}
remaining_rooms: "{{ remaining_list | join(',') }}"
remaining_count: "{{ remaining_list | length }}"
phase_order: ['sweep_main', 'sweep_bath', 'mop_main', 'mop_bath']
phase_state: "{{ states('input_select.l10s_vacuum_phase') }}"
phase: "{{ phase_state if phase_state in phase_order else 'sweep_main' }}"
phase_index: "{{ phase_order.index(phase) if phase in phase_order else 0 }}"
has_next_phase: "{{ phase_index < (phase_order | length) - 1 }}"
next_phase: "{{ phase_order[phase_index + 1] if has_next_phase else '' }}"
condition:
- condition: template
value_template: >
{{ trigger.from_state is not none and trigger.to_state is not none and trigger.from_state.state != trigger.to_state.state }}
- condition: template
value_template: "{{ queue_ints | length > 0 }}"
- condition: template
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:
- variables:
vac_status: "{{ state_attr('vacuum.l10s_vacuum', 'status') | default('', true) | string | lower }}"
vac_charging: "{{ state_attr('vacuum.l10s_vacuum', 'charging') | default(false, true) }}"
- condition: template
value_template: >
{% set is_formal_dining = matched_room_id == 17 %}
{{ not (is_formal_dining and (vac_charging or vac_status in ['charging', 'docked'])) }}
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_room_queue
data:
value: "{{ remaining_rooms }}"
- variables:
cleaned_raw: "{{ states('input_text.l10s_vacuum_rooms_cleaned_today') | default('', true) | string }}"
cleaned_parts: "{{ cleaned_raw | regex_findall('[^,]+') | map('trim') | reject('equalto','') | list }}"
updated_cleaned: >
{% set parts = cleaned_parts %}
{% if room_name not in parts %}
{{ (parts + [room_name]) | join(', ') }}
{% else %}
{{ parts | join(', ') }}
{% endif %}
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_rooms_cleaned_today
data:
value: "{{ updated_cleaned }}"
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "{{ room_name }} completed. Phase: {{ phase }}. Remaining: {{ remaining_count }}."
- choose:
- conditions:
- condition: template
value_template: "{{ remaining_count == 0 }}"
sequence:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Queue empty for phase {{ phase }}; waiting for task completion to advance."
default: []
- alias: 'Away Vacuum: Clear Queue on Dock After Completion'
id: 6a2d6d8c-3c67-4e3f-9c97-0a2560890d60
mode: single
trigger:
- platform: state
entity_id: vacuum.l10s_vacuum
to: 'docked'
variables:
queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | trim }}"
queue_empty: "{{ queue_raw == '' }}"
condition:
- condition: state
entity_id: sensor.l10s_vacuum_task_status
state: 'completed'
action:
- choose:
- conditions:
- condition: template
value_template: "{{ queue_empty }}"
sequence:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Docked after completion; queue already empty."
- conditions:
- condition: template
value_template: "{{ not queue_empty }}"
sequence:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Docked after completion; queue still has rooms: {{ queue_raw }}."
default: []
- alias: 'Away Vacuum: Advance Phase on Task Complete'
id: 3b49236f-6da5-4b4d-a743-82b4ea00db62
mode: single
trigger:
- platform: state
entity_id: sensor.l10s_vacuum_task_status
to: 'completed'
condition:
- condition: state
entity_id: input_boolean.l10s_vacuum_on_demand
state: 'on'
variables:
queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | trim }}"
queue_empty: "{{ queue_raw == '' }}"
phase_order: ['sweep_main', 'sweep_bath', 'mop_main', 'mop_bath']
phase_state: "{{ states('input_select.l10s_vacuum_phase') }}"
phase: "{{ phase_state if phase_state in phase_order else 'sweep_main' }}"
phase_index: "{{ phase_order.index(phase) if phase in phase_order else 0 }}"
has_next_phase: "{{ phase_index < (phase_order | length) - 1 }}"
next_phase: "{{ phase_order[phase_index + 1] if has_next_phase else '' }}"
action:
- choose:
- conditions:
- condition: template
value_template: "{{ queue_empty }}"
sequence:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: >
Phase complete: {{ phase }}. {{
'Advancing to ' ~ next_phase ~ '.' if has_next_phase else 'All phases complete; shutting down.'
}}
- choose:
- conditions:
- condition: template
value_template: "{{ has_next_phase }}"
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: ""
- wait_template: "{{ not is_state('vacuum.l10s_vacuum', 'returning') and not is_state('vacuum.l10s_vacuum', 'cleaning') }}"
timeout: '01:30:00'
continue_on_timeout: false
- service: script.l10s_vacuum_start_next_room
- conditions:
- condition: template
value_template: "{{ 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
target:
entity_id: input_boolean.l10s_vacuum_on_demand
- service: vacuum.return_to_base
target:
entity_id: vacuum.l10s_vacuum
default: []
- conditions:
- condition: template
value_template: "{{ not queue_empty }}"
sequence:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Task complete but queue not empty for {{ phase }}; resuming: {{ queue_raw }}."
- wait_template: "{{ not is_state('vacuum.l10s_vacuum', 'returning') and not is_state('vacuum.l10s_vacuum', 'cleaning') }}"
timeout: '01:30:00'
continue_on_timeout: false
- service: script.l10s_vacuum_start_next_room
default: []
- alias: 'Vacuum Sensor Cleaning Silencer'
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7f
@@ -25,17 +437,14 @@ automation:
- platform: numeric_state
entity_id: sensor.l10s_vacuum_sensor_dirty_left
below: 10
condition:
- condition: state
entity_id: sensor.l10s_vacuum_task_status
state: 'completed'
action:
- service: button.press
target:
entity_id: button.l10s_vacuum_reset_sensor
- alias: 'Help Vacuum'
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7e
@@ -44,12 +453,26 @@ automation:
entity_id: sensor.l10s_vacuum_error
- platform: event
event_type: event_did_someone_help_vacuum_loop
condition:
- condition: template
value_template: "{{ states('sensor.l10s_vacuum_error') not in ['no_error', 'unavailable'] }}"
action:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "{{ states('sensor.l10s_vacuum_error') }} - {{ states('sensor.l10s_vacuum_current_room') }} (phase: {{ states('input_select.l10s_vacuum_phase') }})"
- 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
data:
@@ -60,60 +483,50 @@ automation:
camera_entity: 'camera.l10s_vacuum_map'
content_type: 'jpeg'
group: 'information'
- wait_template: "{{ is_state('group.bed', 'off') }}"
- wait_template: "{{ is_state('group.family', 'home') }}"
- delay: 00:03:00
- service: vacuum.locate
entity_id: vacuum.l10s_vacuum
- service: script.speech_engine
data:
value1: >
{{ "Vacuum error: " ~ states('sensor.l10s_vacuum_error') ~ " [ask Residents to help]" }}
Currently in {{states('sensor.l10s_vacuum_current_room')}}"
- delay: 00:01:00
{{ "Vacuum error: " ~ states('sensor.l10s_vacuum_error') ~ " [ask Residents to help]" }}
Currently in {{states('sensor.l10s_vacuum_current_room')}}
- delay: 00:01:00
- service: vacuum.locate
entity_id: vacuum.l10s_vacuum
- delay: 00:20:00
- event: event_did_someone_help_vacuum_loop
# https://www.vcloudinfo.com/click-here - For more info or contact.
- alias: 'Set Vacuum Mode: Weekdays Sweeping, Weekends Sweeping and Mopping'
id: l10s_vacuum_mode_schedule
- alias: "Vacuum Error Resolved - Clear Repair Issue"
id: 2a0b3f7f-2f1e-4d2d-8dd4-0f6e4e34b02b
mode: single
trigger:
- platform: time
at: '08:00:00'
condition: []
- platform: state
entity_id: sensor.l10s_vacuum_error
to: 'no_error'
action:
- choose:
- conditions:
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
sequence:
- service: select.select_option
target:
entity_id: select.l10s_vacuum_cleaning_mode
data:
option: sweeping
- conditions:
- condition: time
weekday:
- sat
- sun
sequence:
- service: select.select_option
target:
entity_id: select.l10s_vacuum_cleaning_mode
data:
option: sweeping_and_mopping
default: []
- service: repairs.remove
continue_on_error: true
data:
issue_id: "vacuum_error"
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Vacuum error cleared (phase: {{ states('input_select.l10s_vacuum_phase') }})."
- alias: "Vacuum Phase Changed"
id: 3e99c6fb-7c4a-4a9f-8f2d-9f1b9a6b4baf
mode: single
trigger:
- platform: state
entity_id: input_select.l10s_vacuum_phase
condition:
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.to_state is not none }}"
action:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "Phase changed: {{ trigger.from_state.state }} -> {{ trigger.to_state.state }}."

View File

@@ -1,48 +0,0 @@
#-------------------------------------------
# Pirate Weather Forecast Sensors
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
automation:
- alias: "Update Daily Weather Forecasts"
id: a8717b62-da37-4811-9f7c-96d178a7bfda_daily
trigger:
- platform: time_pattern
minutes: "/30"
action:
- service: weather.get_forecasts
data:
type: daily
target:
entity_id: weather.pirateweather
response_variable: daily
- alias: "Update Hourly Weather Forecasts"
id: a8717b62-da37-4811-9f7c-96d178a7bfda_hourly
trigger:
- platform: time_pattern
minutes: "/30"
action:
- service: weather.get_forecasts
data:
type: hourly
target:
entity_id: weather.pirateweather
response_variable: hourly
sensor:
- platform: template
sensors:
pirateweather_daily:
friendly_name: "Pirate Weather Daily"
unique_id: pirateweather_daily
value_template: "{{ daily['weather.pirateweather'].forecast[0].condition }}"
attribute_templates:
forecast: "{{ daily['weather.pirateweather'].forecast }}"
pirateweather_hourly:
friendly_name: "Pirate Weather Hourly"
unique_id: pirateweather_hourly
value_template: "{{ hourly['weather.pirateweather'].forecast[0].condition }}"
attribute_templates:
forecast: "{{ hourly['weather.pirateweather'].forecast[:24] }}"

View File

@@ -1,11 +0,0 @@
#-------------------------------------------
# Camera Related Packages
# @CCOSTAN
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
#---Sensor for Light-----------------------------
camera:
- platform: generic
still_image_url: 'https://icons.wxug.com/data/weather-maps/radar/united-states/saint-petersburg-florida-region-current-radar.gif'
# still_image_url: 'https://radblast.wunderground.com/cgi-bin/radar/WUNIDS_map?station=MCO&brand=wui&num=1&delay=15&type=TR0&frame=0&scale=1.000&noclutter=0&showstorms=0&mapx=400&mapy=240&centerx=400&centery=240&transx=0&transy=0&showlabels=1&severe=0&rainsnow=0&lightning=0&smooth=0&rand=25183060&lat=0&lon=0&label=you'
name: WU Doppler Weather

View File

@@ -1,11 +1,10 @@
#-------------------------------------------
# @CCOSTAN
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# YouTube Channel - Track vCloudInfo channel stats via YouTube sensor.
#-------------------------------------------
######################################################################
## Channel metrics for @vCloudInfo/CCOSTAN.
######################################################################
# -------------------------------------------------------------------
# Based on Pinkywafer's package: https://github.com/pinkywafer/Home-Assistant_Config/blob/master/packages/youtube/vcloudinfo.yaml
# Issue reference: https://github.com/CCOSTAN/Home-AssistantConfig/issues/720
sensor:

View File

@@ -1,16 +1,17 @@
#-------------------------------------------
# Recorder Configuration
# Description: Settings for the Home Assistant recorder component
#
# This component is responsible for storing events and states in a database
# and purging old data to maintain database size.
#
# Documentation: https://www.home-assistant.io/integrations/recorder/
# Follow me on https://www.vcloudinfo.com/click-here
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
#-------------------------------------------
#db_url: sqlite:///data/home-assistant_v2.db
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Recorder Configuration - database retention and exclusions
# Stores HA history while purging noise and controlling DB size.
# -------------------------------------------------------------------
# Notes: Keeps 30 days; excludes vcloudinfo pings and other high-churn entities; MariaDB via recorder_db_url.
######################################################################
db_url: !secret recorder_db_url
purge_keep_days: 30
auto_purge: true
commit_interval: 30
exclude:
domains:
- camera
@@ -27,7 +28,6 @@ exclude:
- binary_sensor.*_motion
- binary_sensor.*_motion_*
- binary_sensor.*is_present
# - binary_sensor.*occupancy*
- light.sleepnumber_*
- number.sleepnumber_*
- number.*_effect_speed
@@ -47,16 +47,25 @@ exclude:
- sensor.*uptime*
- sensor.sun_next_*
- sensor.vpn_client_*
- sensor.*_wifi_signal_strength
- switch.*_do_not_disturb_*
- switch.*_repeat_switch
- input_text.l10s_vacuum_*
- input_datetime.l10s_vacuum_*
- input_boolean.l10s_vacuum_*
entities:
- automation.update_garage_get_status
- binary_sensor.bear_stone
- binary_sensor.vcloudinfo_com
- binary_sensor.powerwall_charging
- sensor.phyn_current_water_pressure
- sensor.vcloudinfo_com
- number.alarm_panel_1_screen_brightness
- script.amp_settings
- script.speech_processing
- button.l10s_vacuum_backup_map_1
- binary_sensor.vcloudinfo_com
- sensor.bear_stone
- sensor.carlo_ap
- sensor.carlo_fast
@@ -86,6 +95,7 @@ exclude:
- sensor.stacey_iphone11_activity
- sensor.stacey_iphone11_audio_output
- sensor.time
- sensor.vcloudinfo_com
- switch.bear_stone
- switch.alarm_panel_1_screensaver

View File

@@ -66,60 +66,60 @@
entities:
light.m1_front_left:
state: on
kelvin: 5500
color_temp_kelvin: 5500
brightness: 255
light.m1_front_right:
state: on
kelvin: 5500
color_temp_kelvin: 5500
brightness: 255
light.m1_back_right:
state: on
kelvin: 5500
color_temp_kelvin: 5500
brightness: 255
light.m1_back_left:
state: on
kelvin: 5500
color_temp_kelvin: 5500
brightness: 255
light.tv_stand_light:
state: on
kelvin: 5500
color_temp_kelvin: 5500
brightness: 200
light.tv_light:
state: on
kelvin: 5500
color_temp_kelvin: 5500
brightness: 200
light.couch_1:
state: on
kelvin: 5500
color_temp_kelvin: 5500
brightness: 255
- name: Living_Room_Evening_Amber
entities:
light.m1_front_left:
state: on
kelvin: 2700
color_temp_kelvin: 2700
brightness: 200
light.m1_front_right:
state: on
kelvin: 2700
color_temp_kelvin: 2700
brightness: 200
light.m1_back_right:
state: on
kelvin: 2700
color_temp_kelvin: 2700
brightness: 200
light.m1_back_left:
state: on
kelvin: 2700
color_temp_kelvin: 2700
brightness: 200
light.tv_stand_light:
state: on
kelvin: 2700
color_temp_kelvin: 2700
brightness: 170
light.tv_light:
state: on
kelvin: 2700
color_temp_kelvin: 2700
brightness: 170
light.couch_1:
state: on
kelvin: 2700
color_temp_kelvin: 2700
brightness: 220

View File

@@ -116,7 +116,7 @@
rgb_color: &yellow [255,255,0]
light.outdoor_sconce_1:
state: 'on'
rgb_color: &bubble_gum [255,193,204]
rgb_color: [255,193,204] #bubble_gum
light.outdoor_sconce_2:
state: 'on'
rgb_color: *lavender

View File

@@ -29,6 +29,7 @@ Reusable scripts that other automations call for notifications, lighting, and sa
| File | Why it matters |
| --- | --- |
| [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. |
| [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. |

View File

@@ -1,4 +1,13 @@
######################################################################################################
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Notification Engine Scripts - Flexible push helpers for family devices.
# Compose messages from value1/value2/value3 with optional actions.
# -------------------------------------------------------------------
# Video Tutorial: https://youtu.be/mK1wdpxhLbM
######################################################################
### Script for Sending Notifications to Mobile Phones
# This script (`notify_engine`) and its variant (`notify_engine_two_button`) are designed to send
# customized notifications to specified recipients in Home Assistant.
@@ -23,11 +32,6 @@
# - 'icon1', 'icon2': Icons for the buttons (optional).
# - 'destructive1', 'destructive2': Boolean flags to mark buttons as destructive (optional).
# Author: @CCOSTAN
# Original Repository: https://github.com/CCOSTAN/Home-AssistantConfig
# Video Tutorial for Android Compatibility: https://youtu.be/mK1wdpxhLbM
######################################################################################################
notify_engine:
sequence:
@@ -51,7 +55,7 @@ notify_engine:
{% endif %}
data:
title: "{{ title }}"
message: "{{ value1 }} {{ value2 }} {{ value3 }}"
message: "{{ ' '.join([value1|default('', true), value2|default('', true), value3|default('', true)]) | trim }}"
data:
group: "{{ group|default('information') }}"
interuption_level: "{{ level|default('active') }}"
@@ -78,7 +82,7 @@ notify_engine_two_button:
notify.ios_family
{% endif %}
data:
message: "{{ value1 }} {{ value2 }} {{ value3 }}"
message: "{{ ' '.join([value1|default('', true), value2|default('', true), value3|default('', true)]) | trim }}"
title: "{{ title|default('', true) }}"
data:
actions:

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,20 +1,23 @@
######################################################################################################
###Script to send notifications to the ChromeCast Audios during normal hours and only when we are home! (Current target: living room Chromecasts only; use Alexa notify/announce services for other rooms.) Call like this:
# action:
# service: script.speech_engine
# data:
# value1:
# call_no_announcement:
# call_dark_outside:
# call_window_check:
# call_garage_check:
# call_garbage_day
# call_light_check
# call_inside_weather
# call_outside_weather
# Follow me on https://www.vcloudinfo.com/click-here
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
######################################################################################################
# -------------------------------------------------------------------
# Speech Engine Script - queued announcements to Chromecast targets
# Sends templated speech briefings to media players when family/guests are home.
# -------------------------------------------------------------------
# Notes: Optional call_* flags control sections (dark_outside, window/garage checks, garbage day, inside/outside weather). Defaults to living room Chromecast if no media_player is provided.
######################################################################
# Usage example:
# service: script.speech_engine
# data:
# call_no_announcement: 1
# call_dark_outside: 1
# call_window_check: 1
# call_garage_check: 1
# call_garbage_day: 1
# call_inside_weather: 1
# call_outside_weather: 1
# Define the "speech_engine" script
speech_engine:

View File

@@ -17,7 +17,7 @@
</div>
Standalone sensors that aren<EFBFBD>t bundled in packages<EFBFBD>time/utility helpers, MQTT feeds, and IP change detectors.
Standalone sensors that aren't bundled in packages - time/utility helpers and MQTT feeds. (IP change monitoring now lives in `config/packages/ipchange.yaml`.)
### Quick navigation
- [Repo overview](../../README.md) | [Config index](../README.md) | [Packages](../packages)
@@ -29,7 +29,6 @@ Standalone sensors that aren
| --- | --- |
| [date_time.yaml](date_time.yaml) | Time/date sensors used across automations. |
| [MQTT.yaml](MQTT.yaml) | Generic MQTT sensor definitions. |
| [ipchange.yaml](ipchange.yaml) | IP change detector for presence/alerts. |
### Tips
- Great place for lightweight utility sensors you want everywhere.
@@ -50,3 +49,5 @@ Standalone sensors that aren
<a href="https://www.vCloudInfo.com/p/affiliate-disclosure.html">
Affiliate Disclosure
</a></p>

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
# - 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
# Follow me on https://www.vcloudinfo.com/click-here
#!/bin/bash
set -euo pipefail
# Update system packages
sudo apt-get update && sudo apt-get upgrade -y
DC=(docker compose)
# Pull the latest images
docker-compose pull
"${DC[@]}" pull
# 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
RUNNING_CONTAINERS=$(docker-compose ps --services)
RUNNING_CONTAINERS=$("${DC[@]}" ps --services)
# Loop through each running service and check if its image has changed
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)
CURRENT_IMAGE_ID=$(docker inspect --format='{{.Image}}' "$service" 2>/dev/null | sed 's/^sha256://')
# Get the latest image ID from docker-compose
LATEST_IMAGE_ID=$(docker-compose images -q "$service" 2>/dev/null)
# Get the latest image ID from docker compose
LATEST_IMAGE_ID=$("${DC[@]}" images -q "$service" 2>/dev/null)
# If the image ID is different, restart the container
if [ "$CURRENT_IMAGE_ID" != "$LATEST_IMAGE_ID" ] && [ -n "$LATEST_IMAGE_ID" ]; then
echo "Updating container: $service"
docker-compose stop "$service"
docker-compose rm -f "$service"
docker-compose up -d "$service"
"${DC[@]}" stop "$service"
"${DC[@]}" rm -f "$service"
"${DC[@]}" up -d "$service"
else
echo "No update needed for: $service"
fi
@@ -41,8 +44,3 @@ for service in $RUNNING_CONTAINERS; do
echo "Skipping non-existent service: $service"
fi
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

@@ -251,7 +251,7 @@ light:
use_random_color: true
fade_out_rate: 50
switch:
button:
- platform: template
name: Basketball Status Lights
id: bb_on_lights_off

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

@@ -1,19 +1,13 @@
#-------------------------------------------
# Speech Briefing Macros
# Description: Contains various macros for generating speech briefings
#
# Features:
# - Weather reports (inside and outside)
# - Responsibility reminders
# - Dark outside notification
# - Holiday and countdown announcements
# - Air quality reports
# - Inspirational quotes and facts
#
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
# Blog Post: https://www.vcloudinfo.com/category/home-assistant
# Follow me on https://www.vcloudinfo.com/click-here
#-------------------------------------------
######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Speech Briefing Macros - TTS prompt helpers for daily briefings
# Generates macro prompts for weather, reminders, and AI-driven speech routines.
# -------------------------------------------------------------------
# Weather, responsibilities, holidays, air quality, and fact prompts parsed by speech_processing/speech_engine.
######################################################################
>-
@@ -32,37 +26,50 @@
{%- endmacro -%}
{%- macro inside_weather() -%}
Inside the house, it is {{ states.climate.downstairs.attributes['current_temperature'] }} degrees with {{ states('sensor.downstairs_thermostat_humidity') }} percent humidity. [Only mention humidity if it seems unusually high]
{% set temp = state_attr('climate.downstairs', 'current_temperature') | default('unknown') %}
{% set humidity = states('sensor.downstairs_thermostat_humidity') %}
Inside the house, it is {{ temp }} degrees{% if humidity not in ['unknown','unavailable','none'] %} with {{ humidity }} percent humidity{% endif %}. [Only mention humidity if it seems unusually high]
{%- endmacro -%}
{% macro outside_weather() %}
[Here is the current weather outside]
Air Quality: {{state_attr('sensor.bear_stone_common_air_quality_index', 'description')}}
{%- for entity in states.sensor if 'pirateweather' in entity.entity_id %}
{%- set state = entity.state %}
{%- set unit = entity.attributes.unit_of_measurement if 'unit_of_measurement' in entity.attributes else '' %}
{%- set friendly_name = ' '.join(entity.attributes.friendly_name.split(' ')[1:]) %}
{%- if state not in ['0', '0.0', 'none'] and 'UV Index' not in friendly_name %}
{%- if 'Temperature' in friendly_name -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Minutely' in friendly_name -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Precip' in friendly_name -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Wind Speed' in friendly_name and state | float(0) > 15 -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Cloud Coverage' in friendly_name and state | float(0) > 75 -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Humidity' in friendly_name and (state | float(0) < 50 or state | float(0) > 85) -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Nearest Storm Distance' in friendly_name and state | float(0) <= 10 -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- endif -%}
{%- endif %}
{% endfor -%}
{% 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) %}
{% if aq_index >= 50 %}
[Air Quality: {{ aq_description }}]
{% endif %}
{% set pirateweather_metrics = states.sensor
| selectattr('entity_id','search','pirateweather')
| rejectattr('state','in',['0','0.0','none','unknown','unavailable'])
| list %}
{% for entity in pirateweather_metrics %}
{% set value = entity.state %}
{% set unit = entity.attributes.unit_of_measurement | default('') %}
{% set base_name = entity.attributes.friendly_name | default(entity.entity_id) %}
{% set friendly_name = ' '.join(base_name.split(' ')[1:]) or base_name %}
{% set numeric = value | float(0) %}
{% set include = (
'Temperature' in friendly_name
or 'Minutely' in friendly_name
or 'Precip' in friendly_name
or ('Wind Speed' in friendly_name and numeric > 15)
or ('Cloud Coverage' in friendly_name and numeric > 75)
or ('Humidity' in friendly_name and (numeric < 50 or numeric > 85))
or ('Nearest Storm Distance' in friendly_name and numeric <= 10)
) %}
{% if include and 'UV Index' not in friendly_name %}
{{ friendly_name }}: {{ value }} {{ unit }}
{% endif %}
{%- endfor %}
{% set uv_index = states('sensor.pirateweather_uv_index') | float(0) %}
{% if uv_index >= 6 %}
UV index is {{ uv_index }}.
[Give a helpful suggestion based on the current UV index or weather conditions]
{% endif %}
{%- if states('sensor.nws_alerts') | int(0) > 0 -%}
{%- set alert_description = state_attr('sensor.nws_alerts', 'Alerts') %}
{%- set alert_description = state_attr('sensor.nws_alerts', 'Alerts') | default('') %}
[Summarize the included weather alert and give overall details on any storms relevant to the residents of the home. Use the Situation Overview Section to best understand what is going on - Be sure to highlight any impacts to Seminole County or Tallahassee]
{{ alert_description }}
[END of Weather Alert]
@@ -78,31 +85,6 @@
The internal temperature of the refrigerator is currently {{ states('sensor.blink_blink1_temperature') }} degrees. The freezer temperature is {{ states('sensor.refrigerator_freezer_temp') }} degrees and the fridge temperature is {{ states('sensor.refrigerator_fridge_temp') }} degrees. {% if is_state('binary_sensor.refrigerator_door_open', 'on') %}The fridge door is currently open.{% endif %}
{%- endmacro -%}
{%- macro light_check() -%}
{% if states.group.all_lights.state != 'off' -%}
There are
{% for state in states.light if state.state == 'on' -%}
{%- if loop.last -%}
{{ loop.index }}
{%- endif -%}
{%- endfor %}
lights on right now.
{% set comma = joiner(', ') %}
The
{% for group in states.group|groupby('state') -%}
{%- for entity in group.list if entity.state == 'on'
and entity.name.split(' ')[1]|lower == 'lights'
and entity.name.split(' ')[0]|lower != 'all'
and entity.name.split(' ')[0]|lower != 'interior'
-%}
{{ 'and' if loop.last and not loop.first else comma() }}
{{ entity.name|replace('Lights','')}}
{%- endfor -%}
{%- endfor -%}
lights are on.
{%- endif -%}
{%- endmacro -%}
{%- macro window_check() -%}
{% if states.group.entry_points.state != 'off' -%}
{% set comma = joiner(', ') %}
@@ -155,6 +137,13 @@
{% endif -%}
{%- endmacro -%}
{%- macro vacuum_rooms_cleaned() -%}
{% set cleaned = states('input_text.l10s_vacuum_rooms_cleaned_today') %}
{% if cleaned | length > 0 %}
Vacuum cleaned: {{ cleaned }}.
{% endif %}
{%- endmacro -%}
{%- macro moon() -%}
{% if (now().hour == 17) %}
Current Moon phase: {{ states('sensor.moon') }} [Give a fact and mention today's phase]
@@ -162,26 +151,7 @@
{%- endmacro -%}
{%- macro uv() -%}
{% if states.sensor.pirateweather_uv_index.state|int(9999)>= 6 %}
UV index is {{ states.sensor.pirateweather_uv_index.state }}.
{%- for entity in states.sensor if 'pirateweather' in entity.entity_id %}
{%- set state = entity.state %}
{%- set unit = entity.attributes.unit_of_measurement if 'unit_of_measurement' in entity.attributes else '' %}
{%- set friendly_name = ' '.join(entity.attributes.friendly_name.split(' ')[1:]) %}
{%- if state not in ['0', '0.0', 'none'] and 'UV Index' not in friendly_name %}
{%- if 'Temperature' in friendly_name -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Minutely' in friendly_name -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Cloud Coverage' in friendly_name and state | float > 75 -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- elif 'Humidity' in friendly_name and (state | float < 50 or state | float > 85) -%}
{{ friendly_name }}: {{ state }} {{ unit }}
{%- endif -%}
{%- endif %}
{% endfor -%}
[Give a helpful suggestion based on the current UV index or weather conditions]
{% endif %}
{# UV details are now included in outside_weather with a threshold gate #}
{%- endmacro -%}
{%- macro holiday() -%}
@@ -215,15 +185,34 @@
{% endif %}
{%- endmacro -%}
{% macro air_quality() %}
{{states('sensor.bear_stone_common_air_quality_index')}}
{{state_attr('sensor.bear_stone_common_air_quality_index', 'description')}}
{% endmacro %}
{% macro fact_of_the_day() %}
[incorporate into the message a relevant fact about something that happened in the past on this day]
{% endmacro %}
{# friendly duration/location helper #}
{% macro friendly_location(person_id, place_sensor_id, name) %}
{% set person = states[person_id] %}
{% if not person %}
{{ name }}: Away
{% else %}
{% set person_state = states(person_id) %}
{% set place_state = states(place_sensor_id) if place_sensor_id in states else 'unknown' %}
{% set location_label = place_state if place_state not in ['unknown','unavailable','','none'] else person_state %}
{% set location_label = 'Away' if location_label in ['unknown','unavailable','','none'] else location_label %}
{% set last_changed = as_timestamp(person.last_changed) %}
{% set seconds = (as_timestamp(now()) - last_changed) | int(0) if last_changed else 0 %}
{% set hours = (seconds // 3600) | int %}
{% set minutes = ((seconds % 3600) // 60) | int %}
{% set duration = (hours ~ ' hours') if hours >= 1 else (minutes ~ ' minutes') %}
{% if person_state == 'driving' %}
{% set driving_label = location_label if location_label != 'Away' else '' %}
{{ name }}: Driving{% if driving_label %} near {{ driving_label }}{% endif %}{% if seconds >= 60 %} for {{ duration }}{% endif %}
{% else %}
{{ name }}: {{ location_label }}{% if seconds >= 60 %} for {{ duration }}{% endif %}
{% endif %}
{% endif %}
{% endmacro %}
{# a macro that removes all newline characters, empty spaces, and returns formatted text and replaces underscores with spaces #}
{%- macro cleanup(data) -%}
{%- for item in data.split("\n") if item | trim != "" -%}
@@ -249,30 +238,10 @@
[Current date time: {{ month }} {{ day }}, {{ year }} {{ time }}]
[Resident: Location:
- Carlo:
{%- if states('sensor.carlo_place') != 'unknown' %}
{{ states('sensor.carlo_place') }}
{% else -%}
Away
{% endif -%}
- Stacey:
{%- if states('sensor.stacey_place') != 'unknown' %}
{{ states('sensor.stacey_place') }}
{% else -%}
Away
{% endif -%}
- Justin:
{%- if states('sensor.justin_place') != 'unknown' %}
{{ states('sensor.justin_place') }}
{% else -%}
Away
{% endif -%}
- Paige:
{%- if states('sensor.paige_place') != 'unknown' %}
{{ states('sensor.paige_place') }}
{% else -%}
Away
{% endif -%}
- {{ friendly_location('person.carlo', 'sensor.carlo_place', 'Carlo') }}
- {{ friendly_location('person.stacey', 'sensor.stacey_place', 'Stacey') }}
- {{ friendly_location('person.justin', 'sensor.justin_place', 'Justin') }}
- {{ friendly_location('person.paige', 'sensor.paige_place', 'Paige') }}
{% if range(1, 100) | random <= 25 %}
Cat Molly: Always home.
{% endif %}
@@ -298,13 +267,7 @@
{{ inside_weather() }}
{% endif %}
{% if call_outside_weather == 1 and is_state('sun.sun', 'above_horizon') %}
{{ outside_weather() }}
{% endif %}
{% if (states('sensor.bear_stone_common_air_quality_index')|int(0)) > 50 %}
{{ air_quality() }}
{% endif %}
{% if (states('sensor.blitzortung_lightning_counter')|int(0)) > 0 %}
{{ lightning() }}
@@ -336,10 +299,6 @@
{{ NewDevice | default }}
{% if call_light_check == 1 %}
{{ light_check() }}
{% endif %}
{% if call_garbage_day == 1 %}
{{ garbage_day() }}
{% endif %}
@@ -347,15 +306,21 @@
{% if now().strftime('%H')|int(0) > 21 %}
{{ medicine() }}
{% endif %}
{{ vacuum_rooms_cleaned() }}
{{ holiday() }}
{{ outside_weather }}
{% if value1 is not none %}
{{ value1 | default }}
{% endif %}
{# call a Random fact about the house or inspiration quote #}
{{ ([moon, uv, holiday, days_until, outside_weather, outside_weather, fact_of_the_day]|random)() }}
{{ ([moon, holiday, days_until, fact_of_the_day]|random)() }}
]
[Previous broadcast: "{{ state_attr('sensor.openai_response', 'response') }}" ]
[Previous broadcast for context: "{{ state_attr('sensor.openai_response', 'response') }}" ]
{%- endmacro -%}
{{- cleanup(mother_of_all_macros()) -}}

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 }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

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.11.3">
<title>2025.11.3</title>
<linearGradient id="gLRkQ" x2="0" y2="100%">
<svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.12.4">
<title>2025.12.4</title>
<linearGradient id="AYtEH" x2="0" y2="100%">
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="llNOQ"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#llNOQ)">
<mask id="FkSkC"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#FkSkC)">
<rect width="685" height="200" fill="#08C" x="0"/>
<rect width="685" height="200" fill="url(#gLRkQ)"/>
<rect width="685" height="200" fill="url(#AYtEH)"/>
</g>
<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.11.3</text>
<text x="55" y="138" textLength="570">2025.11.3</text>
<text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.12.4</text>
<text x="55" y="138" textLength="570">2025.12.4</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 815 B