mirror of
https://github.com/CCOSTAN/Home-AssistantConfig.git
synced 2025-12-12 10:02:18 +00:00
Compare commits
43 Commits
6300de3a96
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
36b5150db6 | ||
|
|
6246119214 | ||
|
|
77cf3e971e | ||
|
|
a13b2da2aa | ||
|
|
23ad5b421a | ||
|
|
52f3a84078 | ||
|
|
5a54329d57 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -29,6 +29,7 @@ home-assistant_v2
|
|||||||
home-assistant_v2.*
|
home-assistant_v2.*
|
||||||
.homekit.state
|
.homekit.state
|
||||||
ipchange.yaml
|
ipchange.yaml
|
||||||
|
config/packages/ipchange.yaml
|
||||||
ip_bans.yaml
|
ip_bans.yaml
|
||||||
production_auth.json
|
production_auth.json
|
||||||
OZW_Log.txt
|
OZW_Log.txt
|
||||||
@@ -61,6 +62,7 @@ llmvision
|
|||||||
backups
|
backups
|
||||||
deps
|
deps
|
||||||
config/backups
|
config/backups
|
||||||
|
panel-notes/
|
||||||
icloud
|
icloud
|
||||||
__pycache__
|
__pycache__
|
||||||
hacs
|
hacs
|
||||||
@@ -73,3 +75,6 @@ tts
|
|||||||
.ssh
|
.ssh
|
||||||
.auth
|
.auth
|
||||||
.nest
|
.nest
|
||||||
|
panel-notes
|
||||||
|
docker_14
|
||||||
|
docker_69
|
||||||
|
|||||||
@@ -52,6 +52,14 @@ Live, personal Home Assistant configuration shared for **browsing and inspiratio
|
|||||||
### Network diagram
|
### 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. |
|
||||||
|
| Cloudflared | [cloudflare/cloudflared](https://hub.docker.com/r/cloudflare/cloudflared) | Secure tunnel/edge access to Home Assistant without opening inbound ports. |
|
||||||
|
| WordPress | [wordpress](https://hub.docker.com/_/wordpress) | Hosts [vCloudInfo.com](https://www.vcloudinfo.com) for docs, how-tos, videos, and long-form writeups that accompany this config. |
|
||||||
|
|
||||||
### Gear tied to real automations (affiliate links)
|
### Gear tied to real automations (affiliate links)
|
||||||
Only listing hardware that appears in active packages/automations here.
|
Only listing hardware that appears in active packages/automations here.
|
||||||
https://amzn.to/48jVzZ3
|
https://amzn.to/48jVzZ3
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2025.11.3
|
2025.12.1
|
||||||
@@ -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'
|
- alias: 'Home Stats'
|
||||||
id: f98e1ef4-051b-4214-908d-d8b35f076a3e
|
id: f98e1ef4-051b-4214-908d-d8b35f076a3e
|
||||||
@@ -30,4 +37,3 @@
|
|||||||
call_outside_weather: 1
|
call_outside_weather: 1
|
||||||
call_garage_check: 1
|
call_garage_check: 1
|
||||||
call_window_check: 1
|
call_window_check: 1
|
||||||
call_light_check: 1
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
- light.living_room_lights
|
- light.living_room_lights
|
||||||
- light.living_room_accents
|
- light.living_room_accents
|
||||||
brightness: 255
|
brightness: 255
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
|
|
||||||
- service: script.speech_engine
|
- service: script.speech_engine
|
||||||
data:
|
data:
|
||||||
|
|||||||
@@ -36,14 +36,14 @@
|
|||||||
target:
|
target:
|
||||||
entity_id: light.living_room_lights
|
entity_id: light.living_room_lights
|
||||||
data:
|
data:
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 255
|
brightness: 255
|
||||||
default:
|
default:
|
||||||
- service: light.turn_on
|
- service: light.turn_on
|
||||||
target:
|
target:
|
||||||
entity_id: light.living_room_lights
|
entity_id: light.living_room_lights
|
||||||
data:
|
data:
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 200
|
brightness: 200
|
||||||
|
|
||||||
- alias: 'Restore Living Room After Entry Secured'
|
- alias: 'Restore Living Room After Entry Secured'
|
||||||
@@ -74,26 +74,26 @@
|
|||||||
target:
|
target:
|
||||||
entity_id: light.living_room_lights
|
entity_id: light.living_room_lights
|
||||||
data:
|
data:
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 255
|
brightness: 255
|
||||||
- service: light.turn_on
|
- service: light.turn_on
|
||||||
target:
|
target:
|
||||||
entity_id: light.living_room_accents
|
entity_id: light.living_room_accents
|
||||||
data:
|
data:
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 200
|
brightness: 200
|
||||||
default:
|
default:
|
||||||
- service: light.turn_on
|
- service: light.turn_on
|
||||||
target:
|
target:
|
||||||
entity_id: light.living_room_lights
|
entity_id: light.living_room_lights
|
||||||
data:
|
data:
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 200
|
brightness: 200
|
||||||
- service: light.turn_on
|
- service: light.turn_on
|
||||||
target:
|
target:
|
||||||
entity_id: light.living_room_accents
|
entity_id: light.living_room_accents
|
||||||
data:
|
data:
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 170
|
brightness: 170
|
||||||
|
|
||||||
- alias: 'Living Room Red on Entry/Garage Open'
|
- alias: 'Living Room Red on Entry/Garage Open'
|
||||||
|
|||||||
@@ -1,84 +1,97 @@
|
|||||||
#-------------------------------------------
|
######################################################################
|
||||||
# HomeKit Configuration for Home Assistant
|
# @CCOSTAN - Follow Me on X
|
||||||
#
|
# For more info visit https://www.vcloudinfo.com/click-here
|
||||||
# Description: This file controls the HomeKit integration settings,
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
# defining which entities are exposed to Apple HomeKit.
|
# -------------------------------------------------------------------
|
||||||
#
|
# HomeKit Configuration - Multi-bridge for stability + Alexa-friendly streams
|
||||||
# Follow me on https://www.vcloudinfo.com/click-here
|
# Main bridge for lights/locks/climate; cameras/lock split to accessory bridges.
|
||||||
# Original Repository: https://github.com/CCOSTAN/Home-AssistantConfig
|
# Camera streams use go2rtc substreams/restreams for faster Echo Show playback.
|
||||||
##-------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
|
######################################################################
|
||||||
|
|
||||||
filter:
|
# Main bridge (everything except cameras + front door lock)
|
||||||
include_domains:
|
- name: Home Assistant Bridge
|
||||||
- climate
|
mode: bridge
|
||||||
- cover
|
port: 21063
|
||||||
- lock
|
filter:
|
||||||
exclude_domains:
|
include_domains:
|
||||||
- camera
|
- climate
|
||||||
- media_player
|
- cover
|
||||||
- sensor
|
- lock
|
||||||
- script
|
exclude_domains:
|
||||||
- sensor
|
- camera
|
||||||
- switch
|
- media_player
|
||||||
- scene
|
- sensor
|
||||||
- light
|
- script
|
||||||
include_entities:
|
- switch
|
||||||
- camera.bedroomgate
|
- scene
|
||||||
- camera.driveway
|
- light
|
||||||
- camera.filtergate
|
include_entities:
|
||||||
- camera.frontdoorbell
|
- light.bedroom
|
||||||
- camera.poolcam
|
- light.bedroom_lights
|
||||||
- camera.frontlawn
|
- light.den_lights
|
||||||
- camera.garagecam
|
- light.dinette_lights
|
||||||
- light.bedroom
|
- light.dining_room_lights
|
||||||
- light.bedroom_lights
|
- light.foyer
|
||||||
- light.den_lights
|
- light.garage_lights
|
||||||
- light.dinette_lights
|
- light.hallway_lights
|
||||||
- light.dining_room_lights
|
- light.kitchen_lights
|
||||||
- light.foyer
|
- light.living_room_accents
|
||||||
- light.garage_lights
|
- light.living_room_lights
|
||||||
- light.hallway_lights
|
- light.office_lights
|
||||||
- light.kitchen_lights
|
- light.outdoor_front_lights
|
||||||
- light.living_room_accents
|
- light.upstairs_lights
|
||||||
- light.living_room_lights
|
- light.upstairs_lamp
|
||||||
- light.office_lights
|
- light.sink
|
||||||
- light.outdoor_front_lights
|
- switch.lr_amp
|
||||||
- light.upstairs_lights
|
exclude_entities:
|
||||||
- light.upstairs_lamp
|
- lock.front_door
|
||||||
- light.sink
|
# Cameras in accessory mode (better performance/reliability)
|
||||||
- switch.lr_amp
|
- name: HomeKit Cameras
|
||||||
exclude_entities:
|
mode: accessory
|
||||||
- lock.spaceship_door_lock
|
port: 21064
|
||||||
- lock.spaceship_charger_door_lock
|
filter:
|
||||||
- lock.spaceship_trunk_lock
|
include_entities:
|
||||||
- lock.spaceship_frunk_lock
|
- camera.bedroomgate
|
||||||
- climate.spaceship_hvac_climate_system
|
- 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
|
||||||
|
|
||||||
entity_config:
|
# Front door lock in accessory mode (keeps lock responsive/available)
|
||||||
camera.frontdoorbell:
|
- name: HomeKit Front Door Lock
|
||||||
video_codec: copy
|
mode: accessory
|
||||||
stream_source: rtsp://192.168.10.14:8554/frontdoorbell?mp4
|
port: 21065
|
||||||
camera.poolcam:
|
filter:
|
||||||
linked_motion_sensor: binary_sensor.poolcam_motion_sensor
|
include_entities:
|
||||||
video_codec: copy
|
- lock.front_door
|
||||||
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
|
|
||||||
|
|||||||
@@ -10,12 +10,30 @@
|
|||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
exclude:
|
exclude:
|
||||||
|
domains:
|
||||||
|
- persistent_notification
|
||||||
|
- update
|
||||||
entity_globs:
|
entity_globs:
|
||||||
- sensor.*_location
|
- sensor.*_location
|
||||||
- sensor.*_place
|
- sensor.*_place
|
||||||
- sensor.*_geocoded_location
|
- sensor.*_geocoded_location
|
||||||
- sensor.pirateweather_*
|
- sensor.pirateweather_*
|
||||||
- weather.*
|
- 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:
|
entities:
|
||||||
- automation.cuckoo_clock
|
- automation.cuckoo_clock
|
||||||
- automation.detect_lights_and_adjust_the_brightness_when_turned_on_based_on_time
|
- automation.detect_lights_and_adjust_the_brightness_when_turned_on_based_on_time
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ logs:
|
|||||||
homeassistant.components.mqtt: error
|
homeassistant.components.mqtt: error
|
||||||
homeassistant.components.mqtt.discovery: critical
|
homeassistant.components.mqtt.discovery: critical
|
||||||
homeassistant.components.persistent_notification: critical
|
homeassistant.components.persistent_notification: critical
|
||||||
|
homeassistant.components.template: warn
|
||||||
homeassistant.components.rest.sensor: critical
|
homeassistant.components.rest.sensor: critical
|
||||||
homeassistant.components.recorder: error
|
homeassistant.components.recorder: error
|
||||||
homeassistant.components.sensor.pi_hole: critical
|
homeassistant.components.sensor.pi_hole: critical
|
||||||
@@ -47,7 +48,7 @@ logs:
|
|||||||
homeassistant.components.switch.unifi: error
|
homeassistant.components.switch.unifi: error
|
||||||
homeassistant.components.zwave: warn
|
homeassistant.components.zwave: warn
|
||||||
homeassistant.exceptions: info
|
homeassistant.exceptions: info
|
||||||
homeassistant.helpers.script: info
|
homeassistant.helpers.script: warn
|
||||||
homeassistant.helpers.entity: critical
|
homeassistant.helpers.entity: critical
|
||||||
homeassistant.loader: warn
|
homeassistant.loader: warn
|
||||||
homeassistant.components.websocket_api: error
|
homeassistant.components.websocket_api: error
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
|
|||||||
| [lightning.yaml](lightning.yaml) | Blitzortung lightning counter monitoring with snoozeable push actions. | `sensor.blitzortung_lightning_counter`, `input_boolean.snooze_lightning`, notify engine actions |
|
| [lightning.yaml](lightning.yaml) | Blitzortung lightning counter monitoring with snoozeable push actions. | `sensor.blitzortung_lightning_counter`, `input_boolean.snooze_lightning`, notify engine actions |
|
||||||
| [phynplus.yaml](phynplus.yaml) | Tie the Phyn Plus smart shutoff into HA notifications, automations, and valve overrides. | `valve.phyn_shutoff_valve`, `binary_sensor.phyn_leak_test_running`, `script.notify_engine_two_button` |
|
| [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` |
|
| [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` |
|
| [vacuum.yaml](vacuum.yaml) | Dreame (ex-Neato) vacuum orchestration with continuous phased sweep/mop cycles. | `input_select.l10s_vacuum_phase`, `input_text.l10s_vacuum_room_queue`, `sensor.l10s_vacuum_task_status` |
|
||||||
| [hass_agent_homepc.yaml](hass_agent_homepc.yaml) | Mirrors PC lock/unlock state from HASS.Agent to the office lamp for instant desk presence cues. | `sensor.carlo_homepc_carlo_homepc_sessionstate`, `switch.office_lamp_switch` |
|
| [hass_agent_homepc.yaml](hass_agent_homepc.yaml) | Mirrors PC lock/unlock state from HASS.Agent to the office lamp for instant desk presence cues. | `sensor.carlo_homepc_carlo_homepc_sessionstate`, `switch.office_lamp_switch` |
|
||||||
| [finance.yaml](finance.yaml) | Yahoo Finance sensor bundle for portfolio glances and Lovelace cards. | `sensor.tsla`, `sensor.aapl`, `sensor.amzn`, `sensor.msft` |
|
| [finance.yaml](finance.yaml) | Yahoo Finance sensor bundle for portfolio glances and Lovelace cards. | `sensor.tsla`, `sensor.aapl`, `sensor.amzn`, `sensor.msft` |
|
||||||
|
|
||||||
@@ -59,6 +59,11 @@ 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.
|
- 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.
|
||||||
|

|
||||||
|
|
||||||
### Blog & video deep dives
|
### 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:
|
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:
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
|
# -------------------------------------------------------------------
|
||||||
# Alexa Media Player - Sensors and notifications via Alexa Media integration.
|
# 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
|
|
||||||
@@ -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
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
|
# -------------------------------------------------------------------
|
||||||
# Climate Control - Seasonal HVAC automations and sensors.
|
# Climate Control - Seasonal HVAC automations and sensors.
|
||||||
#-------------------------------------------
|
# Thermostat helpers for upstairs/downstairs comfort.
|
||||||
|
# -------------------------------------------------------------------
|
||||||
######################################################################
|
######################################################################
|
||||||
## Thermostat helpers for upstairs/downstairs comfort.
|
# Contact: @CCOSTAN | Entity reference details below
|
||||||
######################################################################
|
|
||||||
# For more info visit https://www.vcloudinfo.com/click-here | Contact: @CCOSTAN
|
|
||||||
# Entity reference and attribute summaries:
|
# Entity reference and attribute summaries:
|
||||||
#
|
#
|
||||||
# Entity ID: climate.downstairs
|
# 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:
|
input_datetime:
|
||||||
downstairs_last_filter_change:
|
downstairs_last_filter_change:
|
||||||
name: Downstairs Last Filter Change
|
name: Downstairs Last Filter Change
|
||||||
@@ -51,30 +74,9 @@ input_datetime:
|
|||||||
has_time: true
|
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:
|
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
|
- platform: integration
|
||||||
name: Downstairs AC Runtime Raw
|
name: Downstairs AC Runtime Raw
|
||||||
source: sensor.downstairs_ac_cooling_numeric
|
source: sensor.downstairs_ac_cooling_numeric
|
||||||
|
|||||||
@@ -413,33 +413,17 @@ automation:
|
|||||||
from: 'home'
|
from: 'home'
|
||||||
|
|
||||||
action:
|
action:
|
||||||
- choose:
|
- service: media_player.play_media
|
||||||
- conditions: "{{ is_state('binary_sensor.sleepnumber_carlo_stacey_is_in_bed','on') }}"
|
target:
|
||||||
sequence:
|
entity_id: media_player.kitchen
|
||||||
- service: media_player.play_media
|
data:
|
||||||
data:
|
media_content_id: 'show garage camera from home assistant'
|
||||||
entity_id: media_player.stacey_bedroom
|
media_content_type: custom
|
||||||
media_content_id: 'show garage camera from home assistant'
|
- delay: '00:20:00'
|
||||||
media_content_type: custom
|
- service: media_player.play_media
|
||||||
- delay: '00:10:00'
|
target:
|
||||||
- service: media_player.play_media
|
entity_id: media_player.kitchen
|
||||||
data:
|
data:
|
||||||
entity_id: media_player.stacey_bedroom
|
media_content_id: 'hide garage camera'
|
||||||
media_content_id: 'hide garage camera'
|
media_content_type: custom
|
||||||
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
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
|
# -------------------------------------------------------------------
|
||||||
# Glances - ProxMox/server stats via Glances integration.
|
# Glances - ProxMox/server stats via Glances integration.
|
||||||
#-------------------------------------------
|
# CPU, memory, and disk sensors from Glances API.
|
||||||
|
# -------------------------------------------------------------------
|
||||||
######################################################################
|
######################################################################
|
||||||
## CPU, memory, and disk sensors from Glances API.
|
|
||||||
######################################################################
|
template:
|
||||||
sensor:
|
- sensor:
|
||||||
- platform: template
|
- name: "Proxmox Garage Average Temperature"
|
||||||
sensors:
|
unique_id: proxmox_garage_avg_temp
|
||||||
proxmox_garage_avg_temp:
|
device_class: temperature
|
||||||
friendly_name: "Proxmox Garage Average Temperature"
|
state_class: measurement
|
||||||
unit_of_measurement: "°F"
|
unit_of_measurement: "\u00B0F"
|
||||||
value_template: >-
|
state: >-
|
||||||
{{ (
|
{{ (
|
||||||
(states('sensor.proxmox1_package_id_0_temperature') | float(0) +
|
(states('sensor.proxmox1_package_id_0_temperature') | float(0) +
|
||||||
states('sensor.proxmox1_pch_skylake_1_temperature') | float(0) +
|
states('sensor.proxmox1_pch_skylake_1_temperature') | float(0) +
|
||||||
@@ -37,12 +40,12 @@ automation:
|
|||||||
id: proxmox-garage-high-temp-warning-automation
|
id: proxmox-garage-high-temp-warning-automation
|
||||||
trigger:
|
trigger:
|
||||||
- platform: numeric_state
|
- platform: numeric_state
|
||||||
entity_id: sensor.proxmox_garage_avg_temp
|
entity_id: sensor.proxmox_garage_average_temperature
|
||||||
above: 145 # Adjust threshold as needed
|
above: 145 # Adjust threshold as needed
|
||||||
action:
|
action:
|
||||||
- service: script.notify_engine
|
- service: script.notify_engine
|
||||||
data:
|
data:
|
||||||
title: "🔥 Proxmox Garage Alert!"
|
title: "?? Proxmox Garage Alert!"
|
||||||
value1: "The average temperature of your Proxmox servers is above 145°F!"
|
value1: "The average temperature of your Proxmox servers is above 145\u00B0F!"
|
||||||
who: 'carlo'
|
who: 'carlo'
|
||||||
group: 'information'
|
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:
|
sensor:
|
||||||
- platform: rest
|
- platform: rest
|
||||||
resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/json_data/holidays.json
|
resource: http://localhost:8123/local/json_data/holidays.json
|
||||||
name: Holiday
|
name: Holiday
|
||||||
scan_interval: 14400
|
scan_interval: 14400
|
||||||
value_template: >
|
value_template: >
|
||||||
@@ -45,28 +45,21 @@ sensor:
|
|||||||
# Sensor Uses Flag data generated by AI
|
# Sensor Uses Flag data generated by AI
|
||||||
################################################################################
|
################################################################################
|
||||||
- platform: rest
|
- platform: rest
|
||||||
resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/json_data/flag_days.json
|
resource: http://localhost:8123/local/json_data/flag_days.json
|
||||||
name: Flag
|
name: Flag
|
||||||
scan_interval: 14400
|
scan_interval: 14400
|
||||||
value_template: >-
|
value_template: >-
|
||||||
{% set now_string = now().strftime('%m/%d') %}
|
{% set now_string = now().month ~ '/' ~ now().day %}
|
||||||
{% set now_full_string = now().strftime('%m/%d/%Y') %}
|
{% set now_full_string = now().strftime('%m/%d/%Y') %}
|
||||||
{% if value_json is defined and value_json.Flag_Days_US is defined %}
|
{% set flag_data = value_json.Flag_Days_US if value_json is defined and value_json.Flag_Days_US is defined else {} %}
|
||||||
{% set static_days = value_json.Flag_Days_US.static %}
|
{% set static_days = flag_data.static if flag_data.static is defined else {} %}
|
||||||
{% set dynamic_days = value_json.Flag_Days_US.dynamic %}
|
{% set dynamic_days = flag_data.dynamic if flag_data.dynamic is defined else {} %}
|
||||||
{% if static_days is defined and now_string in static_days %}
|
{% if now_string in static_days %}
|
||||||
True
|
True
|
||||||
{% elif dynamic_days is defined %}
|
{% elif now_full_string in dynamic_days %}
|
||||||
{% for day_val in dynamic_days %}
|
True
|
||||||
{% if day_val.date == now_full_string %}
|
|
||||||
True
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% else %}
|
|
||||||
False
|
|
||||||
{% endif %}
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
False
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|||||||
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() }}"
|
||||||
@@ -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 }}"
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
#-------------------------------------------
|
|
||||||
# @CCOSTAN
|
|
||||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
|
||||||
###################################
|
|
||||||
## [SkyBell HD](https://amzn.to/2dcexIB)
|
|
||||||
###################################
|
|
||||||
|
|
||||||
|
|
||||||
skybell:
|
|
||||||
username: !secret skybell_username
|
|
||||||
password: !secret skybell_password
|
|
||||||
|
|
||||||
camera:
|
|
||||||
- platform: skybell
|
|
||||||
monitored_conditions:
|
|
||||||
- avatar
|
|
||||||
- activity
|
|
||||||
activity_name: "Last Activity"
|
|
||||||
|
|
||||||
binary_sensor:
|
|
||||||
- platform: skybell
|
|
||||||
monitored_conditions:
|
|
||||||
- button
|
|
||||||
- motion
|
|
||||||
|
|
||||||
light:
|
|
||||||
- platform: skybell # Part of the Outdoor Front Lights Group
|
|
||||||
|
|
||||||
sensor:
|
|
||||||
- platform: skybell
|
|
||||||
monitored_conditions:
|
|
||||||
- chime_level
|
|
||||||
|
|
||||||
button:
|
|
||||||
- platform: skybell
|
|
||||||
monitored_conditions:
|
|
||||||
# - do_not_disturb
|
|
||||||
- motion_sensor
|
|
||||||
|
|
||||||
###################################
|
|
||||||
## Automations
|
|
||||||
###################################
|
|
||||||
## Doorbell Press
|
|
||||||
automation:
|
|
||||||
- alias: 'Log SkyBell Pressed Activity'
|
|
||||||
id: 64226512-f35d-4179-bfcb-9de158b8d3f4
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
- platform: state
|
|
||||||
entity_id:
|
|
||||||
- binary_sensor.skybell_front_door_button
|
|
||||||
to: 'on'
|
|
||||||
- platform: event
|
|
||||||
event_type: skybell_pressed
|
|
||||||
|
|
||||||
condition:
|
|
||||||
- condition: template
|
|
||||||
value_template: >
|
|
||||||
{%- if states.binary_sensor.skybell_front_door_button.attributes.last_triggered -%}
|
|
||||||
{{ (as_timestamp(now()) - as_timestamp(states.binary_sensor.skybell_front_door_button.attributes.last_triggered)) > 200 }}
|
|
||||||
{%- else -%}
|
|
||||||
true
|
|
||||||
{%- endif -%}
|
|
||||||
|
|
||||||
action:
|
|
||||||
- service: script.skybell_pressed
|
|
||||||
|
|
||||||
|
|
||||||
# Motion Sensing
|
|
||||||
- alias: 'Log SkyBell Motion detection'
|
|
||||||
id: a22c2cb7-08b2-4bd1-bc82-77201253a000
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
- platform: event
|
|
||||||
event_type: skybell_motion
|
|
||||||
|
|
||||||
action:
|
|
||||||
- service: script.front_house_motion
|
|
||||||
|
|
||||||
# Turn SkyBell Light and Neato Schedule back on if it's turned off. Like any Good Watchdog.
|
|
||||||
|
|
||||||
- alias: Automated Mismatch WatchDog!
|
|
||||||
id: bff434b9-5916-42d1-8620-5723b4b1879d
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
- platform: state
|
|
||||||
entity_id:
|
|
||||||
- light.front_door
|
|
||||||
- switch.carlo_neato_schedule
|
|
||||||
to: 'off'
|
|
||||||
|
|
||||||
#Turn it back on!
|
|
||||||
action:
|
|
||||||
- service: homeassistant.turn_on
|
|
||||||
data:
|
|
||||||
entity_id: "{{ trigger.entity_id }}"
|
|
||||||
@@ -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
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
|
# -------------------------------------------------------------------
|
||||||
# Stats - Historical metrics and AI notifications.
|
# 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. #####################
|
### Building out some Historical stats for AI. #####################
|
||||||
command_line:
|
command_line:
|
||||||
@@ -71,65 +72,62 @@ sensor:
|
|||||||
days: 7
|
days: 7
|
||||||
|
|
||||||
### Building some interesting stats for tweeting. ###
|
### Building some interesting stats for tweeting. ###
|
||||||
- platform: template
|
|
||||||
sensors:
|
template:
|
||||||
sensor_count:
|
- sensor:
|
||||||
friendly_name: 'Number of Sensors'
|
- name: "Number of Sensors"
|
||||||
value_template: >-
|
unique_id: stats_number_of_sensors
|
||||||
|
unit_of_measurement: "count"
|
||||||
|
icon: mdi:counter
|
||||||
|
state: >-
|
||||||
{{ states.sensor | list | count }}
|
{{ states.sensor | list | count }}
|
||||||
unit_of_measurement: 'count'
|
|
||||||
icon_template: mdi:counter
|
|
||||||
|
|
||||||
automation_count:
|
- name: "Number of Automations"
|
||||||
friendly_name: 'Number of Automations'
|
unique_id: stats_number_of_automations
|
||||||
value_template: >-
|
unit_of_measurement: "count"
|
||||||
|
icon: mdi:robot
|
||||||
|
state: >-
|
||||||
{{ states.automation | list | count }}
|
{{ states.automation | list | count }}
|
||||||
unit_of_measurement: 'count'
|
|
||||||
icon_template: mdi:robot
|
|
||||||
|
|
||||||
script_count:
|
- name: "Number of Scripts"
|
||||||
friendly_name: 'Number of Scripts'
|
unique_id: stats_number_of_scripts
|
||||||
value_template: >-
|
unit_of_measurement: "count"
|
||||||
|
icon: mdi:script-text
|
||||||
|
state: >-
|
||||||
{{ states.script | list | count }}
|
{{ states.script | list | count }}
|
||||||
unit_of_measurement: 'count'
|
|
||||||
icon_template: mdi:script-text
|
|
||||||
|
|
||||||
binary_sensor_count:
|
- name: "Number of Binary Sensors"
|
||||||
friendly_name: 'Number of Binary Sensors'
|
unique_id: stats_number_of_binary_sensors
|
||||||
value_template: >-
|
unit_of_measurement: "count"
|
||||||
|
icon: mdi:binary-sensor
|
||||||
|
state: >-
|
||||||
{{ states.binary_sensor | list | count }}
|
{{ 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:
|
- name: "Number of Devices"
|
||||||
friendly_name: 'Number of Lights'
|
unique_id: stats_number_of_devices
|
||||||
value_template: >
|
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 }}
|
{{ 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 %}
|
- name: "Number of lights on"
|
||||||
No lights on.
|
unique_id: stats_number_of_lights_on
|
||||||
{% else %}
|
unit_of_measurement: "count"
|
||||||
{{ qty }} {{ p1 }} on.
|
icon: mdi:binary-sensor
|
||||||
{% endif %}
|
state: >-
|
||||||
unit_of_measurement: 'count'
|
{{ states.light | selectattr('state', 'eq', 'on') | list | count }}
|
||||||
icon_template: mdi:binary-sensor
|
|
||||||
protect_count:
|
- name: "Number of Smoke Detectors"
|
||||||
friendly_name: 'Number of Smoke Detectors'
|
unit_of_measurement: "count"
|
||||||
value_template: >
|
icon: mdi:smoke-detector
|
||||||
|
state: >
|
||||||
{% if states('group.protects') == 'on' %}
|
{% if states('group.protects') == 'on' %}
|
||||||
{% for e in states.group.protects.attributes.entity_id if states(e) == 'on' %}
|
{% for e in states.group.protects.attributes.entity_id if states(e) == 'on' %}
|
||||||
{% if loop.last %}
|
{% if loop.last %}
|
||||||
@@ -139,20 +137,19 @@ sensor:
|
|||||||
{% else %}
|
{% else %}
|
||||||
0
|
0
|
||||||
{% endif %}
|
{% endif %}
|
||||||
unit_of_measurement: 'count'
|
|
||||||
icon_template: mdi:smoke-detector
|
- name: "Number of online Cameras"
|
||||||
camera_count:
|
unique_id: stats_number_of_online_cameras
|
||||||
friendly_name: 'Number of online Cameras'
|
unit_of_measurement: "count"
|
||||||
value_template: >
|
icon: mdi:camera
|
||||||
|
state: >
|
||||||
{{ states.camera | list | count }}
|
{{ states.camera | list | count }}
|
||||||
unit_of_measurement: 'count'
|
|
||||||
icon_template: mdi:camera
|
- name: "Total WiFi Clients"
|
||||||
total_wifi_clients:
|
|
||||||
friendly_name: "Total WiFi Clients"
|
|
||||||
unique_id: total_wifi_clients
|
unique_id: total_wifi_clients
|
||||||
unit_of_measurement: "clients"
|
unit_of_measurement: "clients"
|
||||||
icon_template: mdi:wifi
|
icon: mdi:wifi
|
||||||
value_template: >
|
state: >
|
||||||
{% set g = states('sensor.unifi_ap_garage_clients') | int(0) %}
|
{% set g = states('sensor.unifi_ap_garage_clients') | int(0) %}
|
||||||
{% set o = states('sensor.unifi_ap_office_clients') | int(0) %}
|
{% set o = states('sensor.unifi_ap_office_clients') | int(0) %}
|
||||||
{% set s = states('sensor.unifi_ap_study_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,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,315 @@
|
|||||||
#-------------------------------------------
|
######################################################################
|
||||||
# @CCOSTAN
|
# @CCOSTAN - Follow Me on X
|
||||||
|
# For more info visit https://www.vcloudinfo.com/click-here
|
||||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
# Vacuum - Dreame/Neato cleaning schedules and alerts.
|
# -------------------------------------------------------------------
|
||||||
#-------------------------------------------
|
# Dreame Vacuum Orchestration - Continuous phased sweep/mop with away/on-demand
|
||||||
|
# Phases: sweep main, sweep baths, mop main, mop baths; notifications + idle auto-start
|
||||||
|
# -------------------------------------------------------------------
|
||||||
######################################################################
|
######################################################################
|
||||||
## 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: "{{ '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:
|
automation:
|
||||||
|
|
||||||
##############################################################################
|
- alias: 'Vacuum: Reset Cleaned List at 5am'
|
||||||
### Automations - Help Vacuum!
|
id: 18f7b6d3-c02c-4ec1-88b3-0c3b8b4c6f7b
|
||||||
### https://www.vcloudinfo.com/2020/05/home-assistant-neato-vacuum-automation.html
|
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: "{{ 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
|
||||||
|
|
||||||
|
- alias: 'Away Vacuum: Confirm Room Cleaned'
|
||||||
|
id: c581c570-55b0-4acd-8b5d-53cfb486cc2a
|
||||||
|
trigger:
|
||||||
|
- platform: state
|
||||||
|
entity_id: sensor.l10s_vacuum_current_room
|
||||||
|
for: '00:03: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') | list | default([], true) }}"
|
||||||
|
current_room_id: "{{ trigger.to_state.attributes.room_id | default(state_attr('sensor.l10s_vacuum_current_room', 'room_id'), true) | int(0) }}"
|
||||||
|
matched_room_id: "{{ current_room_id if current_room_id > 0 and current_room_id in (queue_ints | default([], true)) else 0 }}"
|
||||||
|
remaining_list: >
|
||||||
|
{% set 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 rem = rem + [r] %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{{ 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: "{{ 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:
|
||||||
|
- 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 }}"
|
||||||
|
room_name: "{{ room_map.get(matched_room_id, states('sensor.l10s_vacuum_current_room')) }}"
|
||||||
|
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.notify_engine
|
||||||
|
data:
|
||||||
|
title: 'Vacuum Room Cleaned'
|
||||||
|
value1: "{{ room_name }} is clean."
|
||||||
|
value2: "Remaining: {{ remaining_count }}."
|
||||||
|
ios_category: 'camera'
|
||||||
|
camera_entity: 'camera.l10s_vacuum_map'
|
||||||
|
content_type: 'jpeg'
|
||||||
|
who: 'carlo'
|
||||||
|
group: 'information'
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ remaining_count > 0 }}"
|
||||||
|
sequence:
|
||||||
|
- service: script.l10s_vacuum_start_next_room
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ remaining_count == 0 and 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: ""
|
||||||
|
- service: script.l10s_vacuum_start_next_room
|
||||||
|
- conditions:
|
||||||
|
- condition: template
|
||||||
|
value_template: "{{ remaining_count == 0 and not has_next_phase }}"
|
||||||
|
sequence:
|
||||||
|
- service: input_select.select_option
|
||||||
|
target:
|
||||||
|
entity_id: input_select.l10s_vacuum_phase
|
||||||
|
data:
|
||||||
|
option: "sweep_main"
|
||||||
|
- service: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_text.l10s_vacuum_room_queue
|
||||||
|
data:
|
||||||
|
value: ""
|
||||||
|
- service: input_boolean.turn_off
|
||||||
|
target:
|
||||||
|
entity_id: input_boolean.l10s_vacuum_on_demand
|
||||||
|
- service: script.l10s_vacuum_start_next_room
|
||||||
|
|
||||||
- alias: 'Vacuum Sensor Cleaning Silencer'
|
- alias: 'Vacuum Sensor Cleaning Silencer'
|
||||||
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7f
|
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7f
|
||||||
@@ -25,18 +317,15 @@ automation:
|
|||||||
- platform: numeric_state
|
- platform: numeric_state
|
||||||
entity_id: sensor.l10s_vacuum_sensor_dirty_left
|
entity_id: sensor.l10s_vacuum_sensor_dirty_left
|
||||||
below: 10
|
below: 10
|
||||||
|
|
||||||
condition:
|
condition:
|
||||||
- condition: state
|
- condition: state
|
||||||
entity_id: sensor.l10s_vacuum_task_status
|
entity_id: sensor.l10s_vacuum_task_status
|
||||||
state: 'completed'
|
state: 'completed'
|
||||||
|
|
||||||
action:
|
action:
|
||||||
- service: button.press
|
- service: button.press
|
||||||
target:
|
target:
|
||||||
entity_id: button.l10s_vacuum_reset_sensor
|
entity_id: button.l10s_vacuum_reset_sensor
|
||||||
|
|
||||||
|
|
||||||
- alias: 'Help Vacuum'
|
- alias: 'Help Vacuum'
|
||||||
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7e
|
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7e
|
||||||
trigger:
|
trigger:
|
||||||
@@ -44,13 +333,10 @@ automation:
|
|||||||
entity_id: sensor.l10s_vacuum_error
|
entity_id: sensor.l10s_vacuum_error
|
||||||
- platform: event
|
- platform: event
|
||||||
event_type: event_did_someone_help_vacuum_loop
|
event_type: event_did_someone_help_vacuum_loop
|
||||||
|
|
||||||
condition:
|
condition:
|
||||||
- condition: template
|
- condition: template
|
||||||
value_template: "{{ states('sensor.l10s_vacuum_error') not in ['no_error', 'unavailable'] }}"
|
value_template: "{{ states('sensor.l10s_vacuum_error') not in ['no_error', 'unavailable'] }}"
|
||||||
|
|
||||||
action:
|
action:
|
||||||
|
|
||||||
- service: script.notify_engine
|
- service: script.notify_engine
|
||||||
data:
|
data:
|
||||||
title: 'Help vacuum'
|
title: 'Help vacuum'
|
||||||
@@ -60,60 +346,18 @@ automation:
|
|||||||
camera_entity: 'camera.l10s_vacuum_map'
|
camera_entity: 'camera.l10s_vacuum_map'
|
||||||
content_type: 'jpeg'
|
content_type: 'jpeg'
|
||||||
group: 'information'
|
group: 'information'
|
||||||
|
|
||||||
- wait_template: "{{ is_state('group.bed', 'off') }}"
|
- wait_template: "{{ is_state('group.bed', 'off') }}"
|
||||||
- wait_template: "{{ is_state('group.family', 'home') }}"
|
- wait_template: "{{ is_state('group.family', 'home') }}"
|
||||||
- delay: 00:03:00
|
- delay: 00:03:00
|
||||||
|
|
||||||
- service: vacuum.locate
|
- service: vacuum.locate
|
||||||
entity_id: vacuum.l10s_vacuum
|
entity_id: vacuum.l10s_vacuum
|
||||||
|
|
||||||
- service: script.speech_engine
|
- service: script.speech_engine
|
||||||
data:
|
data:
|
||||||
value1: >
|
value1: >
|
||||||
{{ "Vacuum error: " ~ states('sensor.l10s_vacuum_error') ~ " [ask Residents to help]" }}
|
{{ "Vacuum error: " ~ states('sensor.l10s_vacuum_error') ~ " [ask Residents to help]" }}
|
||||||
Currently in {{states('sensor.l10s_vacuum_current_room')}}"
|
Currently in {{states('sensor.l10s_vacuum_current_room')}}
|
||||||
|
|
||||||
- delay: 00:01:00
|
- delay: 00:01:00
|
||||||
- service: vacuum.locate
|
- service: vacuum.locate
|
||||||
entity_id: vacuum.l10s_vacuum
|
entity_id: vacuum.l10s_vacuum
|
||||||
|
|
||||||
- delay: 00:20:00
|
- delay: 00:20:00
|
||||||
- event: event_did_someone_help_vacuum_loop
|
- event: event_did_someone_help_vacuum_loop
|
||||||
|
|
||||||
# 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
|
|
||||||
trigger:
|
|
||||||
- platform: time
|
|
||||||
at: '08:00:00'
|
|
||||||
condition: []
|
|
||||||
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: []
|
|
||||||
|
|||||||
@@ -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
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
|
# -------------------------------------------------------------------
|
||||||
# YouTube Channel - Track vCloudInfo channel stats via YouTube sensor.
|
# 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
|
# 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
|
# Issue reference: https://github.com/CCOSTAN/Home-AssistantConfig/issues/720
|
||||||
sensor:
|
sensor:
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
######################################################################
|
######################################################################
|
||||||
#db_url: sqlite:///data/home-assistant_v2.db
|
#db_url: sqlite:///data/home-assistant_v2.db
|
||||||
purge_keep_days: 30
|
purge_keep_days: 30
|
||||||
|
auto_purge: true
|
||||||
|
commit_interval: 30
|
||||||
exclude:
|
exclude:
|
||||||
domains:
|
domains:
|
||||||
- camera
|
- camera
|
||||||
@@ -45,8 +47,12 @@ exclude:
|
|||||||
- sensor.*uptime*
|
- sensor.*uptime*
|
||||||
- sensor.sun_next_*
|
- sensor.sun_next_*
|
||||||
- sensor.vpn_client_*
|
- sensor.vpn_client_*
|
||||||
|
- sensor.*_wifi_signal_strength
|
||||||
- switch.*_do_not_disturb_*
|
- switch.*_do_not_disturb_*
|
||||||
- switch.*_repeat_switch
|
- switch.*_repeat_switch
|
||||||
|
- input_text.l10s_vacuum_*
|
||||||
|
- input_datetime.l10s_vacuum_*
|
||||||
|
- input_boolean.l10s_vacuum_*
|
||||||
|
|
||||||
entities:
|
entities:
|
||||||
- automation.update_garage_get_status
|
- automation.update_garage_get_status
|
||||||
@@ -57,6 +63,8 @@ exclude:
|
|||||||
- number.alarm_panel_1_screen_brightness
|
- number.alarm_panel_1_screen_brightness
|
||||||
- script.amp_settings
|
- script.amp_settings
|
||||||
- script.speech_processing
|
- script.speech_processing
|
||||||
|
- button.l10s_vacuum_backup_map_1
|
||||||
|
- binary_sensor.vcloudinfo_com
|
||||||
- sensor.bear_stone
|
- sensor.bear_stone
|
||||||
- sensor.carlo_ap
|
- sensor.carlo_ap
|
||||||
- sensor.carlo_fast
|
- sensor.carlo_fast
|
||||||
|
|||||||
@@ -66,60 +66,60 @@
|
|||||||
entities:
|
entities:
|
||||||
light.m1_front_left:
|
light.m1_front_left:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 255
|
brightness: 255
|
||||||
light.m1_front_right:
|
light.m1_front_right:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 255
|
brightness: 255
|
||||||
light.m1_back_right:
|
light.m1_back_right:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 255
|
brightness: 255
|
||||||
light.m1_back_left:
|
light.m1_back_left:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 255
|
brightness: 255
|
||||||
light.tv_stand_light:
|
light.tv_stand_light:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 200
|
brightness: 200
|
||||||
light.tv_light:
|
light.tv_light:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 200
|
brightness: 200
|
||||||
light.couch_1:
|
light.couch_1:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 5500
|
color_temp_kelvin: 5500
|
||||||
brightness: 255
|
brightness: 255
|
||||||
|
|
||||||
- name: Living_Room_Evening_Amber
|
- name: Living_Room_Evening_Amber
|
||||||
entities:
|
entities:
|
||||||
light.m1_front_left:
|
light.m1_front_left:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 200
|
brightness: 200
|
||||||
light.m1_front_right:
|
light.m1_front_right:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 200
|
brightness: 200
|
||||||
light.m1_back_right:
|
light.m1_back_right:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 200
|
brightness: 200
|
||||||
light.m1_back_left:
|
light.m1_back_left:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 200
|
brightness: 200
|
||||||
light.tv_stand_light:
|
light.tv_stand_light:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 170
|
brightness: 170
|
||||||
light.tv_light:
|
light.tv_light:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 170
|
brightness: 170
|
||||||
light.couch_1:
|
light.couch_1:
|
||||||
state: on
|
state: on
|
||||||
kelvin: 2700
|
color_temp_kelvin: 2700
|
||||||
brightness: 220
|
brightness: 220
|
||||||
|
|||||||
@@ -116,7 +116,7 @@
|
|||||||
rgb_color: &yellow [255,255,0]
|
rgb_color: &yellow [255,255,0]
|
||||||
light.outdoor_sconce_1:
|
light.outdoor_sconce_1:
|
||||||
state: 'on'
|
state: 'on'
|
||||||
rgb_color: &bubble_gum [255,193,204]
|
rgb_color: [255,193,204] #bubble_gum
|
||||||
light.outdoor_sconce_2:
|
light.outdoor_sconce_2:
|
||||||
state: 'on'
|
state: 'on'
|
||||||
rgb_color: *lavender
|
rgb_color: *lavender
|
||||||
|
|||||||
@@ -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
|
### Script for Sending Notifications to Mobile Phones
|
||||||
# This script (`notify_engine`) and its variant (`notify_engine_two_button`) are designed to send
|
# This script (`notify_engine`) and its variant (`notify_engine_two_button`) are designed to send
|
||||||
# customized notifications to specified recipients in Home Assistant.
|
# customized notifications to specified recipients in Home Assistant.
|
||||||
@@ -23,11 +32,6 @@
|
|||||||
# - 'icon1', 'icon2': Icons for the buttons (optional).
|
# - 'icon1', 'icon2': Icons for the buttons (optional).
|
||||||
# - 'destructive1', 'destructive2': Boolean flags to mark buttons as destructive (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:
|
notify_engine:
|
||||||
sequence:
|
sequence:
|
||||||
@@ -51,7 +55,7 @@ notify_engine:
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
data:
|
data:
|
||||||
title: "{{ title }}"
|
title: "{{ title }}"
|
||||||
message: "{{ value1 }} {{ value2 }} {{ value3 }}"
|
message: "{{ ' '.join([value1|default('', true), value2|default('', true), value3|default('', true)]) | trim }}"
|
||||||
data:
|
data:
|
||||||
group: "{{ group|default('information') }}"
|
group: "{{ group|default('information') }}"
|
||||||
interuption_level: "{{ level|default('active') }}"
|
interuption_level: "{{ level|default('active') }}"
|
||||||
@@ -78,7 +82,7 @@ notify_engine_two_button:
|
|||||||
notify.ios_family
|
notify.ios_family
|
||||||
{% endif %}
|
{% endif %}
|
||||||
data:
|
data:
|
||||||
message: "{{ value1 }} {{ value2 }} {{ value3 }}"
|
message: "{{ ' '.join([value1|default('', true), value2|default('', true), value3|default('', true)]) | trim }}"
|
||||||
title: "{{ title|default('', true) }}"
|
title: "{{ title|default('', true) }}"
|
||||||
data:
|
data:
|
||||||
actions:
|
actions:
|
||||||
|
|||||||
@@ -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:
|
# @CCOSTAN - Follow Me on X
|
||||||
# action:
|
# For more info visit https://www.vcloudinfo.com/click-here
|
||||||
# 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
|
|
||||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
# 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
|
# Define the "speech_engine" script
|
||||||
speech_engine:
|
speech_engine:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
</div>
|
</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
|
### Quick navigation
|
||||||
- [Repo overview](../../README.md) | [Config index](../README.md) | [Packages](../packages)
|
- [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. |
|
| [date_time.yaml](date_time.yaml) | Time/date sensors used across automations. |
|
||||||
| [MQTT.yaml](MQTT.yaml) | Generic MQTT sensor definitions. |
|
| [MQTT.yaml](MQTT.yaml) | Generic MQTT sensor definitions. |
|
||||||
| [ipchange.yaml](ipchange.yaml) | IP change detector for presence/alerts. |
|
|
||||||
|
|
||||||
### Tips
|
### Tips
|
||||||
- Great place for lightweight utility sensors you want everywhere.
|
- 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">
|
<a href="https://www.vCloudInfo.com/p/affiliate-disclosure.html">
|
||||||
Affiliate Disclosure
|
Affiliate Disclosure
|
||||||
</a></p>
|
</a></p>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
# - This script is used to update the Home Assistant Docker containers
|
# - This script is used to update the Home Assistant Docker containers
|
||||||
# - It will pull the latest images, check if the image ID has changed, and restart the container if needed
|
# - It will pull the latest images, check if the image ID has changed, and restart the container if needed
|
||||||
# - It will also cleanup unused resources after the update
|
|
||||||
|
|
||||||
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
|
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
# Follow me on https://www.vcloudinfo.com/click-here
|
# Follow me on https://www.vcloudinfo.com/click-here
|
||||||
|
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
# Update system packages
|
# Update system packages
|
||||||
sudo apt-get update && sudo apt-get upgrade -y
|
sudo apt-get update && sudo apt-get upgrade -y
|
||||||
|
|
||||||
|
DC=(docker compose)
|
||||||
|
|
||||||
# Pull the latest images
|
# Pull the latest images
|
||||||
docker-compose pull
|
"${DC[@]}" pull
|
||||||
|
|
||||||
# Get list of services from docker-compose.yml
|
# Get list of services from docker-compose.yml
|
||||||
EXISTING_SERVICES=$(docker-compose config --services)
|
EXISTING_SERVICES=$("${DC[@]}" config --services)
|
||||||
|
|
||||||
# Get list of running service containers
|
# Get list of running service containers
|
||||||
RUNNING_CONTAINERS=$(docker-compose ps --services)
|
RUNNING_CONTAINERS=$("${DC[@]}" ps --services)
|
||||||
|
|
||||||
# Loop through each running service and check if its image has changed
|
# Loop through each running service and check if its image has changed
|
||||||
for service in $RUNNING_CONTAINERS; do
|
for service in $RUNNING_CONTAINERS; do
|
||||||
@@ -25,15 +28,15 @@ for service in $RUNNING_CONTAINERS; do
|
|||||||
# Get the current running image ID (remove sha256: prefix)
|
# Get the current running image ID (remove sha256: prefix)
|
||||||
CURRENT_IMAGE_ID=$(docker inspect --format='{{.Image}}' "$service" 2>/dev/null | sed 's/^sha256://')
|
CURRENT_IMAGE_ID=$(docker inspect --format='{{.Image}}' "$service" 2>/dev/null | sed 's/^sha256://')
|
||||||
|
|
||||||
# Get the latest image ID from docker-compose
|
# Get the latest image ID from docker compose
|
||||||
LATEST_IMAGE_ID=$(docker-compose images -q "$service" 2>/dev/null)
|
LATEST_IMAGE_ID=$("${DC[@]}" images -q "$service" 2>/dev/null)
|
||||||
|
|
||||||
# If the image ID is different, restart the container
|
# If the image ID is different, restart the container
|
||||||
if [ "$CURRENT_IMAGE_ID" != "$LATEST_IMAGE_ID" ] && [ -n "$LATEST_IMAGE_ID" ]; then
|
if [ "$CURRENT_IMAGE_ID" != "$LATEST_IMAGE_ID" ] && [ -n "$LATEST_IMAGE_ID" ]; then
|
||||||
echo "Updating container: $service"
|
echo "Updating container: $service"
|
||||||
docker-compose stop "$service"
|
"${DC[@]}" stop "$service"
|
||||||
docker-compose rm -f "$service"
|
"${DC[@]}" rm -f "$service"
|
||||||
docker-compose up -d "$service"
|
"${DC[@]}" up -d "$service"
|
||||||
else
|
else
|
||||||
echo "No update needed for: $service"
|
echo "No update needed for: $service"
|
||||||
fi
|
fi
|
||||||
@@ -41,8 +44,3 @@ for service in $RUNNING_CONTAINERS; do
|
|||||||
echo "Skipping non-existent service: $service"
|
echo "Skipping non-existent service: $service"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Cleanup unused resources
|
|
||||||
docker container prune -f
|
|
||||||
docker image prune -f
|
|
||||||
docker volume prune -f
|
|
||||||
|
|||||||
@@ -35,11 +35,8 @@
|
|||||||
[Here is the current weather outside]
|
[Here is the current weather outside]
|
||||||
{% set aq_description = state_attr('sensor.bear_stone_common_air_quality_index', 'description') | default('') %}
|
{% set aq_description = state_attr('sensor.bear_stone_common_air_quality_index', 'description') | default('') %}
|
||||||
{% set aq_index = states('sensor.bear_stone_common_air_quality_index') | int(0) %}
|
{% set aq_index = states('sensor.bear_stone_common_air_quality_index') | int(0) %}
|
||||||
{% if aq_description %}
|
{% if aq_index >= 50 %}
|
||||||
Air Quality: {{ aq_description }}
|
[Air Quality: {{ aq_description }}]
|
||||||
{% endif %}
|
|
||||||
{% if aq_index >= 150 %}
|
|
||||||
[Air quality is unhealthy; limit outdoor activity]
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% set pirateweather_metrics = states.sensor
|
{% set pirateweather_metrics = states.sensor
|
||||||
| selectattr('entity_id','search','pirateweather')
|
| selectattr('entity_id','search','pirateweather')
|
||||||
@@ -88,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 %}
|
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 -%}
|
{%- 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() -%}
|
{%- macro window_check() -%}
|
||||||
{% if states.group.entry_points.state != 'off' -%}
|
{% if states.group.entry_points.state != 'off' -%}
|
||||||
{% set comma = joiner(', ') %}
|
{% set comma = joiner(', ') %}
|
||||||
@@ -165,6 +137,13 @@
|
|||||||
{% endif -%}
|
{% endif -%}
|
||||||
{%- endmacro -%}
|
{%- 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() -%}
|
{%- macro moon() -%}
|
||||||
{% if (now().hour == 17) %}
|
{% if (now().hour == 17) %}
|
||||||
Current Moon phase: {{ states('sensor.moon') }} [Give a fact and mention today's phase]
|
Current Moon phase: {{ states('sensor.moon') }} [Give a fact and mention today's phase]
|
||||||
@@ -320,10 +299,6 @@
|
|||||||
|
|
||||||
{{ NewDevice | default }}
|
{{ NewDevice | default }}
|
||||||
|
|
||||||
{% if call_light_check == 1 %}
|
|
||||||
{{ light_check() }}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if call_garbage_day == 1 %}
|
{% if call_garbage_day == 1 %}
|
||||||
{{ garbage_day() }}
|
{{ garbage_day() }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -332,6 +307,12 @@
|
|||||||
{{ medicine() }}
|
{{ medicine() }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{{ vacuum_rooms_cleaned() }}
|
||||||
|
|
||||||
|
{{ holiday() }}
|
||||||
|
|
||||||
|
{{ outside_weather }}
|
||||||
|
|
||||||
{% if value1 is not none %}
|
{% if value1 is not none %}
|
||||||
{{ value1 | default }}
|
{{ value1 | default }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -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">
|
<svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.12.1">
|
||||||
<title>2025.11.3</title>
|
<title>2025.12.1</title>
|
||||||
<linearGradient id="kHjMd" x2="0" y2="100%">
|
<linearGradient id="NqPQa" x2="0" y2="100%">
|
||||||
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
|
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
|
||||||
<stop offset="1" stop-opacity=".1"/>
|
<stop offset="1" stop-opacity=".1"/>
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<mask id="fqyad"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
|
<mask id="tjzSG"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
|
||||||
<g mask="url(#fqyad)">
|
<g mask="url(#tjzSG)">
|
||||||
<rect width="685" height="200" fill="#08C" x="0"/>
|
<rect width="685" height="200" fill="#08C" x="0"/>
|
||||||
<rect width="685" height="200" fill="url(#kHjMd)"/>
|
<rect width="685" height="200" fill="url(#NqPQa)"/>
|
||||||
</g>
|
</g>
|
||||||
<g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
|
<g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
|
||||||
<text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.11.3</text>
|
<text x="65" y="148" textLength="570" fill="#000" opacity="0.25">2025.12.1</text>
|
||||||
<text x="55" y="138" textLength="570">2025.11.3</text>
|
<text x="55" y="138" textLength="570">2025.12.1</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 815 B After Width: | Height: | Size: 815 B |
Reference in New Issue
Block a user