mirror of
https://github.com/CCOSTAN/Home-AssistantConfig.git
synced 2026-01-06 05:51:17 +00:00
Compare commits
87 Commits
ca62ee4f7b
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bc53566aa | ||
|
|
a10ee05b85 | ||
|
|
e6b88ac99d | ||
|
|
a8cd926f46 | ||
|
|
e242477806 | ||
|
|
2e6b319770 | ||
|
|
5e451d70b8 | ||
|
|
8e461d5495 | ||
|
|
1d78dcb0dc | ||
|
|
00506a79e9 | ||
|
|
758ef8974b | ||
|
|
d75511ab34 | ||
|
|
1f1d3eba40 | ||
|
|
438d696bf8 | ||
|
|
864e7756c0 | ||
|
|
9831f3150e | ||
|
|
7543b1c52f | ||
|
|
7106429f78 | ||
|
|
1203bb2d4e | ||
|
|
c8d8423e77 | ||
|
|
7310f24294 | ||
|
|
69edb0658d | ||
|
|
7a6491709b | ||
|
|
23d6235315 | ||
|
|
a7b0f58632 | ||
|
|
dbd5f43b19 | ||
|
|
d8d7c553eb | ||
|
|
f977809de7 | ||
|
|
c365a1c233 | ||
|
|
9d6c73fb05 | ||
|
|
8ec5173f4d | ||
|
|
c245c1ca78 | ||
|
|
96e86d6587 | ||
|
|
3345bf3b95 | ||
|
|
a8eca6f4bb | ||
|
|
d900c642dd | ||
|
|
1e490e53f6 | ||
|
|
5892711916 | ||
|
|
1ff1d9d81c | ||
|
|
02a554a793 | ||
|
|
2265f2b282 | ||
|
|
ea8d57393a | ||
|
|
ddda9e6573 | ||
|
|
aec426e602 | ||
|
|
1835b1203f | ||
|
|
75a250ebd3 | ||
|
|
8e743fe26d | ||
|
|
9fab3f0d90 | ||
|
|
41e56f9bb7 | ||
|
|
d609ca851c | ||
|
|
2c25c2b2d8 | ||
|
|
d6c32c9e16 | ||
|
|
eeb988d100 | ||
|
|
124a7bcfd3 | ||
|
|
6f9679cff1 | ||
|
|
44ff4528f1 | ||
|
|
8ee2aff40c | ||
|
|
bea84af5cd | ||
|
|
c62e778028 | ||
|
|
e83e957ab5 | ||
|
|
fe4b9ac1c9 | ||
|
|
44d8ac0da5 | ||
|
|
5acf4bd760 | ||
|
|
14294b5b5f | ||
|
|
b61c28f186 | ||
|
|
295724ef49 | ||
|
|
9c540c0acc | ||
|
|
6300de3a96 | ||
|
|
61bbe53b48 | ||
|
|
f08be9ff30 | ||
|
|
92c4b53685 | ||
|
|
36b5150db6 | ||
|
|
3721935082 | ||
|
|
10714a953b | ||
|
|
214657f4cc | ||
|
|
5071041fa3 | ||
|
|
6246119214 | ||
|
|
d682517040 | ||
|
|
22d8a80abf | ||
|
|
77cf3e971e | ||
|
|
20ffa76ce4 | ||
|
|
9c6b13dbc3 | ||
|
|
8dc7b063f0 | ||
|
|
a13b2da2aa | ||
|
|
23ad5b421a | ||
|
|
52f3a84078 | ||
|
|
5a54329d57 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -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
|
||||
|
||||
10
README.md
10
README.md
@@ -52,6 +52,15 @@ Live, personal Home Assistant configuration shared for **browsing and inspiratio
|
||||
### Network diagram
|
||||

|
||||
|
||||
**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>
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
2025.11.3
|
||||
2025.12.4
|
||||
@@ -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:'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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 }}'
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ Interior_Lights:
|
||||
- light.garage_hallway
|
||||
- light.sink
|
||||
- light.upstairs_lamp
|
||||
- light.ikea_1 #Upstairs Hallyway outlet.
|
||||
|
||||
Exterior_Lights:
|
||||
entities:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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.
|
||||

|
||||
|
||||
### 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.
|
||||

|
||||
|
||||
### 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:
|
||||
|
||||
|
||||
@@ -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!'
|
||||
|
||||
@@ -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') }}
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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'
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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 didn’t 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
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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 }}
|
||||
@@ -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 %}
|
||||
|
||||
################################################################################
|
||||
|
||||
@@ -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!'
|
||||
|
||||
96
config/packages/llmvision.yaml
Normal file
96
config/packages/llmvision.yaml
Normal 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() }}"
|
||||
18
config/packages/logbook_activity_feed.yaml
Normal file
18
config/packages/logbook_activity_feed.yaml
Normal 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"
|
||||
|
||||
@@ -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 }}"
|
||||
170
config/packages/mariadb_monitoring.yaml
Normal file
170
config/packages/mariadb_monitoring.yaml
Normal 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
23
config/packages/n8n.yaml
Normal 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 }}"
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
|
||||
@@ -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%"
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
|
||||
#-------------------------------------------
|
||||
|
||||
@@ -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 }}%)."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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 }}"
|
||||
@@ -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
|
||||
|
||||
@@ -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) %}
|
||||
|
||||
@@ -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'
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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 }}."
|
||||
|
||||
@@ -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] }}"
|
||||
@@ -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¢erx=400¢ery=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
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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. |
|
||||
|
||||
@@ -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:
|
||||
|
||||
32
config/script/send_to_logbook.yaml
Normal file
32
config/script/send_to_logbook.yaml
Normal 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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
[](https://x.com/ccostan)
|
||||
[](https://www.youtube.com/vCloudInfo?sub_confirmation=1)
|
||||
[](https://github.com/CCOSTAN) <br>
|
||||
[](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/.HA_VERSION)
|
||||
[](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master)
|
||||
[](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)
|
||||
|
||||

|
||||
|
||||
### 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 :** [](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>
|
||||
@@ -1,2 +0,0 @@
|
||||
flush_pm2_logs: >-
|
||||
sudo -u pi -H /usr/bin/pm2 flush
|
||||
@@ -1,2 +0,0 @@
|
||||
restart_homebridge: >-
|
||||
sudo -u pi -H /usr/bin/pm2 restart homebridge
|
||||
@@ -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
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
#########################################################
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"'
|
||||
|
||||
@@ -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
|
||||
@@ -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">
|
||||
|
||||
[](https://x.com/ccostan)
|
||||
[](https://www.youtube.com/vCloudInfo?sub_confirmation=1)
|
||||
[](https://github.com/CCOSTAN) <br>
|
||||
[](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/.HA_VERSION)
|
||||
[](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master)
|
||||
[](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)
|
||||
|
||||

|
||||
|
||||
### 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 :** [](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>
|
||||
@@ -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()) -}}
|
||||
|
||||
@@ -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 |
82
config/www/json_data/flag_days.json
Normal file
82
config/www/json_data/flag_days.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
116
config/www/json_data/holidays.json
Normal file
116
config/www/json_data/holidays.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 |
Reference in New Issue
Block a user