mirror of
https://github.com/CCOSTAN/Home-AssistantConfig.git
synced 2025-12-12 18:12:25 +00:00
Compare commits
49 Commits
3721935082
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d6c73fb05 | ||
|
|
8ec5173f4d | ||
|
|
c245c1ca78 | ||
|
|
96e86d6587 | ||
|
|
3345bf3b95 | ||
|
|
a8eca6f4bb | ||
|
|
d900c642dd | ||
|
|
1e490e53f6 | ||
|
|
5892711916 | ||
|
|
1ff1d9d81c | ||
|
|
02a554a793 | ||
|
|
2265f2b282 | ||
|
|
ea8d57393a | ||
|
|
ddda9e6573 | ||
|
|
aec426e602 | ||
|
|
1835b1203f | ||
|
|
75a250ebd3 | ||
|
|
8e743fe26d | ||
|
|
9fab3f0d90 | ||
|
|
41e56f9bb7 | ||
|
|
d609ca851c | ||
|
|
2c25c2b2d8 | ||
|
|
d6c32c9e16 | ||
|
|
eeb988d100 | ||
|
|
124a7bcfd3 | ||
|
|
6f9679cff1 | ||
|
|
44ff4528f1 | ||
|
|
8ee2aff40c | ||
|
|
bea84af5cd | ||
|
|
c62e778028 | ||
|
|
e83e957ab5 | ||
|
|
fe4b9ac1c9 | ||
|
|
44d8ac0da5 | ||
|
|
5acf4bd760 | ||
|
|
14294b5b5f | ||
|
|
b61c28f186 | ||
|
|
295724ef49 | ||
|
|
9c540c0acc | ||
|
|
6300de3a96 | ||
|
|
61bbe53b48 | ||
|
|
f08be9ff30 | ||
|
|
92c4b53685 | ||
|
|
36b5150db6 | ||
|
|
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.2
|
||||||
@@ -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,13 +1,18 @@
|
|||||||
#-------------------------------------------
|
######################################################################
|
||||||
# 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.
|
||||||
##-------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
# Main bridge (everything except cameras + front door lock)
|
||||||
|
- name: Home Assistant Bridge
|
||||||
|
mode: bridge
|
||||||
|
port: 21063
|
||||||
filter:
|
filter:
|
||||||
include_domains:
|
include_domains:
|
||||||
- climate
|
- climate
|
||||||
@@ -18,18 +23,10 @@ filter:
|
|||||||
- media_player
|
- media_player
|
||||||
- sensor
|
- sensor
|
||||||
- script
|
- script
|
||||||
- sensor
|
|
||||||
- switch
|
- switch
|
||||||
- scene
|
- scene
|
||||||
- light
|
- light
|
||||||
include_entities:
|
include_entities:
|
||||||
- camera.bedroomgate
|
|
||||||
- camera.driveway
|
|
||||||
- camera.filtergate
|
|
||||||
- camera.frontdoorbell
|
|
||||||
- camera.poolcam
|
|
||||||
- camera.frontlawn
|
|
||||||
- camera.garagecam
|
|
||||||
- light.bedroom
|
- light.bedroom
|
||||||
- light.bedroom_lights
|
- light.bedroom_lights
|
||||||
- light.den_lights
|
- light.den_lights
|
||||||
@@ -48,28 +45,36 @@ filter:
|
|||||||
- light.sink
|
- light.sink
|
||||||
- switch.lr_amp
|
- switch.lr_amp
|
||||||
exclude_entities:
|
exclude_entities:
|
||||||
- lock.spaceship_door_lock
|
- lock.front_door
|
||||||
- lock.spaceship_charger_door_lock
|
# Cameras in accessory mode (better performance/reliability)
|
||||||
- lock.spaceship_trunk_lock
|
- name: HomeKit Cameras
|
||||||
- lock.spaceship_frunk_lock
|
mode: accessory
|
||||||
- climate.spaceship_hvac_climate_system
|
port: 21064
|
||||||
|
filter:
|
||||||
|
include_entities:
|
||||||
|
- camera.bedroomgate
|
||||||
|
- camera.driveway
|
||||||
|
- camera.filtergate
|
||||||
|
- camera.frontdoorbell
|
||||||
|
- camera.poolcam
|
||||||
|
- camera.frontlawn
|
||||||
|
- camera.garagecam
|
||||||
entity_config:
|
entity_config:
|
||||||
camera.frontdoorbell:
|
camera.frontdoorbell:
|
||||||
video_codec: copy
|
video_codec: copy
|
||||||
stream_source: rtsp://192.168.10.14:8554/frontdoorbell?mp4
|
stream_source: rtsp://192.168.10.14:8554/frontdoorbell_alexa
|
||||||
camera.poolcam:
|
camera.poolcam:
|
||||||
linked_motion_sensor: binary_sensor.poolcam_motion_sensor
|
linked_motion_sensor: binary_sensor.poolcam_motion_sensor
|
||||||
video_codec: copy
|
video_codec: copy
|
||||||
stream_source: rtsp://192.168.10.14:8554/poolcam?mp4
|
stream_source: rtsp://192.168.10.14:8554/poolcam_sub
|
||||||
camera.frontlawn:
|
camera.frontlawn:
|
||||||
linked_motion_sensor: binary_sensor.frontlawn_motion_sensor
|
linked_motion_sensor: binary_sensor.frontlawn_motion_sensor
|
||||||
video_codec: copy
|
video_codec: copy
|
||||||
stream_source: rtsp://192.168.10.14:8554/frontlawn?mp4
|
stream_source: rtsp://192.168.10.14:8554/frontlawn_sub
|
||||||
camera.garagecam:
|
camera.garagecam:
|
||||||
linked_motion_sensor: binary_sensor.garagecam_motion_sensor
|
linked_motion_sensor: binary_sensor.garagecam_motion_sensor
|
||||||
video_codec: copy
|
video_codec: copy
|
||||||
stream_source: rtsp://192.168.10.14:8554/garagecam?mp4
|
stream_source: rtsp://192.168.10.14:8554/garagecam_sub
|
||||||
camera.bedroomgate:
|
camera.bedroomgate:
|
||||||
linked_motion_sensor: binary_sensor.bedroomgate_motion_sensor
|
linked_motion_sensor: binary_sensor.bedroomgate_motion_sensor
|
||||||
video_codec: copy
|
video_codec: copy
|
||||||
@@ -77,8 +82,16 @@ entity_config:
|
|||||||
camera.driveway:
|
camera.driveway:
|
||||||
linked_motion_sensor: binary_sensor.driveway_motion_sensor
|
linked_motion_sensor: binary_sensor.driveway_motion_sensor
|
||||||
video_codec: copy
|
video_codec: copy
|
||||||
stream_source: rtsp://192.168.10.14:8554/driveway?mp4
|
stream_source: rtsp://192.168.10.14:8554/driveway_sub
|
||||||
camera.filtergate:
|
camera.filtergate:
|
||||||
linked_motion_sensor: binary_sensor.filtergate_motion_sensor
|
linked_motion_sensor: binary_sensor.filtergate_motion_sensor
|
||||||
video_codec: copy
|
video_codec: copy
|
||||||
stream_source: rtsp://192.168.10.14:8554/filtergate?mp4
|
stream_source: rtsp://192.168.10.14:8554/filtergate?mp4
|
||||||
|
|
||||||
|
# Front door lock in accessory mode (keeps lock responsive/available)
|
||||||
|
- name: HomeKit Front Door Lock
|
||||||
|
mode: accessory
|
||||||
|
port: 21065
|
||||||
|
filter:
|
||||||
|
include_entities:
|
||||||
|
- lock.front_door
|
||||||
|
|||||||
@@ -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,22 +413,6 @@ automation:
|
|||||||
from: 'home'
|
from: 'home'
|
||||||
|
|
||||||
action:
|
action:
|
||||||
- choose:
|
|
||||||
- conditions: "{{ is_state('binary_sensor.sleepnumber_carlo_stacey_is_in_bed','on') }}"
|
|
||||||
sequence:
|
|
||||||
- service: media_player.play_media
|
|
||||||
data:
|
|
||||||
entity_id: media_player.stacey_bedroom
|
|
||||||
media_content_id: 'show garage camera from home assistant'
|
|
||||||
media_content_type: custom
|
|
||||||
- delay: '00:10:00'
|
|
||||||
- service: media_player.play_media
|
|
||||||
data:
|
|
||||||
entity_id: media_player.stacey_bedroom
|
|
||||||
media_content_id: 'hide garage camera'
|
|
||||||
media_content_type: custom
|
|
||||||
|
|
||||||
default:
|
|
||||||
- service: media_player.play_media
|
- service: media_player.play_media
|
||||||
target:
|
target:
|
||||||
entity_id: media_player.kitchen
|
entity_id: media_player.kitchen
|
||||||
|
|||||||
@@ -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,29 +45,22 @@ sensor:
|
|||||||
# Sensor Uses Flag data generated by AI
|
# Sensor Uses Flag data generated by AI
|
||||||
################################################################################
|
################################################################################
|
||||||
- platform: rest
|
- platform: rest
|
||||||
resource: https://raw.githubusercontent.com/CCOSTAN/Home-AssistantConfig/master/config/json_data/flag_days.json
|
resource: http://localhost:8123/local/json_data/flag_days.json
|
||||||
name: Flag
|
name: Flag
|
||||||
scan_interval: 14400
|
scan_interval: 14400
|
||||||
value_template: >-
|
value_template: >-
|
||||||
{% set now_string = now().strftime('%m/%d') %}
|
{% set now_string = now().month ~ '/' ~ now().day %}
|
||||||
{% set now_full_string = now().strftime('%m/%d/%Y') %}
|
{% set now_full_string = now().strftime('%m/%d/%Y') %}
|
||||||
{% if value_json is defined and value_json.Flag_Days_US is defined %}
|
{% set flag_data = value_json.Flag_Days_US if value_json is defined and value_json.Flag_Days_US is defined else {} %}
|
||||||
{% set static_days = value_json.Flag_Days_US.static %}
|
{% set static_days = flag_data.static if flag_data.static is defined else {} %}
|
||||||
{% set dynamic_days = value_json.Flag_Days_US.dynamic %}
|
{% set dynamic_days = flag_data.dynamic if flag_data.dynamic is defined else {} %}
|
||||||
{% if static_days is defined and now_string in static_days %}
|
{% if now_string in static_days %}
|
||||||
True
|
True
|
||||||
{% elif dynamic_days is defined %}
|
{% elif now_full_string in dynamic_days %}
|
||||||
{% for day_val in dynamic_days %}
|
|
||||||
{% if day_val.date == now_full_string %}
|
|
||||||
True
|
True
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% else %}
|
{% else %}
|
||||||
False
|
False
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
|
||||||
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Countdown Sensor using WolfRam Alpha Natural language queries
|
# Countdown Sensor using WolfRam Alpha Natural language queries
|
||||||
|
|||||||
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 }}"
|
|
||||||
23
config/packages/n8n.yaml
Normal file
23
config/packages/n8n.yaml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
######################################################################
|
||||||
|
# @CCOSTAN - Follow Me on X
|
||||||
|
# For more info visit https://www.vcloudinfo.com/click-here
|
||||||
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# n8n Discord Router - Route HA events to Discord via JoAnnaBot
|
||||||
|
# Central REST command into n8n's Discord routing webhook
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# <No related GitHub issue>
|
||||||
|
# REST endpoint: n8n webhook /discord-router
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
rest_command:
|
||||||
|
send_to_discord:
|
||||||
|
url: "http://192.168.10.69:5678/webhook/discord-router"
|
||||||
|
method: POST
|
||||||
|
content_type: "application/json"
|
||||||
|
payload: >
|
||||||
|
{
|
||||||
|
"topic": "{{ topic }}",
|
||||||
|
"message": "{{ message }}"
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,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
|
- name: "Number of Devices"
|
||||||
tracker_count:
|
unique_id: stats_number_of_devices
|
||||||
friendly_name: 'Number of Devices'
|
unit_of_measurement: "count"
|
||||||
value_template: >-
|
icon: mdi:account-group
|
||||||
|
state: >-
|
||||||
{{ states.device_tracker | list | count }}
|
{{ states.device_tracker | list | count }}
|
||||||
unit_of_measurement: 'count'
|
|
||||||
icon_template: mdi:account-group
|
|
||||||
|
|
||||||
lights_count:
|
- name: "Number of Lights"
|
||||||
friendly_name: 'Number of Lights'
|
unique_id: stats_number_of_lights
|
||||||
value_template: >
|
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
|
||||||
|
# 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
|
# service: script.speech_engine
|
||||||
# data:
|
# data:
|
||||||
# value1:
|
# call_no_announcement: 1
|
||||||
# call_no_announcement:
|
# call_dark_outside: 1
|
||||||
# call_dark_outside:
|
# call_window_check: 1
|
||||||
# call_window_check:
|
# call_garage_check: 1
|
||||||
# call_garage_check:
|
# call_garbage_day: 1
|
||||||
# call_garbage_day
|
# call_inside_weather: 1
|
||||||
# call_light_check
|
# call_outside_weather: 1
|
||||||
# call_inside_weather
|
|
||||||
# call_outside_weather
|
|
||||||
# Follow me on https://www.vcloudinfo.com/click-here
|
|
||||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
|
||||||
######################################################################################################
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|||||||
@@ -1,19 +1,13 @@
|
|||||||
#-------------------------------------------
|
######################################################################
|
||||||
# Speech Briefing Macros
|
# @CCOSTAN - Follow Me on X
|
||||||
# Description: Contains various macros for generating speech briefings
|
# For more info visit https://www.vcloudinfo.com/click-here
|
||||||
#
|
|
||||||
# Features:
|
|
||||||
# - Weather reports (inside and outside)
|
|
||||||
# - Responsibility reminders
|
|
||||||
# - Dark outside notification
|
|
||||||
# - Holiday and countdown announcements
|
|
||||||
# - Air quality reports
|
|
||||||
# - Inspirational quotes and facts
|
|
||||||
#
|
|
||||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
# Blog Post: https://www.vcloudinfo.com/category/home-assistant
|
# -------------------------------------------------------------------
|
||||||
# Follow me on https://www.vcloudinfo.com/click-here
|
# Speech Briefing Macros - TTS prompt helpers for daily briefings
|
||||||
#-------------------------------------------
|
# Generates macro prompts for weather, reminders, and AI-driven speech routines.
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Weather, responsibilities, holidays, air quality, and fact prompts parsed by speech_processing/speech_engine.
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
|
||||||
>-
|
>-
|
||||||
@@ -32,37 +26,50 @@
|
|||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
|
|
||||||
{%- macro inside_weather() -%}
|
{%- macro inside_weather() -%}
|
||||||
Inside the house, it is {{ states.climate.downstairs.attributes['current_temperature'] }} degrees with {{ states('sensor.downstairs_thermostat_humidity') }} percent humidity. [Only mention humidity if it seems unusually high]
|
{% set temp = state_attr('climate.downstairs', 'current_temperature') | default('unknown') %}
|
||||||
|
{% set humidity = states('sensor.downstairs_thermostat_humidity') %}
|
||||||
|
Inside the house, it is {{ temp }} degrees{% if humidity not in ['unknown','unavailable','none'] %} with {{ humidity }} percent humidity{% endif %}. [Only mention humidity if it seems unusually high]
|
||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
|
|
||||||
{% macro outside_weather() %}
|
{% macro outside_weather() %}
|
||||||
[Here is the current weather outside]
|
[Here is the current weather outside]
|
||||||
Air Quality: {{state_attr('sensor.bear_stone_common_air_quality_index', 'description')}}
|
{% set aq_description = state_attr('sensor.bear_stone_common_air_quality_index', 'description') | default('') %}
|
||||||
{%- for entity in states.sensor if 'pirateweather' in entity.entity_id %}
|
{% set aq_index = states('sensor.bear_stone_common_air_quality_index') | int(0) %}
|
||||||
{%- set state = entity.state %}
|
{% if aq_index >= 50 %}
|
||||||
{%- set unit = entity.attributes.unit_of_measurement if 'unit_of_measurement' in entity.attributes else '' %}
|
[Air Quality: {{ aq_description }}]
|
||||||
{%- set friendly_name = ' '.join(entity.attributes.friendly_name.split(' ')[1:]) %}
|
{% endif %}
|
||||||
{%- if state not in ['0', '0.0', 'none'] and 'UV Index' not in friendly_name %}
|
{% set pirateweather_metrics = states.sensor
|
||||||
{%- if 'Temperature' in friendly_name -%}
|
| selectattr('entity_id','search','pirateweather')
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
| rejectattr('state','in',['0','0.0','none','unknown','unavailable'])
|
||||||
{%- elif 'Minutely' in friendly_name -%}
|
| list %}
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
{% for entity in pirateweather_metrics %}
|
||||||
{%- elif 'Precip' in friendly_name -%}
|
{% set value = entity.state %}
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
{% set unit = entity.attributes.unit_of_measurement | default('') %}
|
||||||
{%- elif 'Wind Speed' in friendly_name and state | float(0) > 15 -%}
|
{% set base_name = entity.attributes.friendly_name | default(entity.entity_id) %}
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
{% set friendly_name = ' '.join(base_name.split(' ')[1:]) or base_name %}
|
||||||
{%- elif 'Cloud Coverage' in friendly_name and state | float(0) > 75 -%}
|
{% set numeric = value | float(0) %}
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
{% set include = (
|
||||||
{%- elif 'Humidity' in friendly_name and (state | float(0) < 50 or state | float(0) > 85) -%}
|
'Temperature' in friendly_name
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
or 'Minutely' in friendly_name
|
||||||
{%- elif 'Nearest Storm Distance' in friendly_name and state | float(0) <= 10 -%}
|
or 'Precip' in friendly_name
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
or ('Wind Speed' in friendly_name and numeric > 15)
|
||||||
{%- endif -%}
|
or ('Cloud Coverage' in friendly_name and numeric > 75)
|
||||||
{%- endif %}
|
or ('Humidity' in friendly_name and (numeric < 50 or numeric > 85))
|
||||||
{% endfor -%}
|
or ('Nearest Storm Distance' in friendly_name and numeric <= 10)
|
||||||
|
) %}
|
||||||
|
{% if include and 'UV Index' not in friendly_name %}
|
||||||
|
{{ friendly_name }}: {{ value }} {{ unit }}
|
||||||
|
{% endif %}
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
{% set uv_index = states('sensor.pirateweather_uv_index') | float(0) %}
|
||||||
|
{% if uv_index >= 6 %}
|
||||||
|
UV index is {{ uv_index }}.
|
||||||
|
[Give a helpful suggestion based on the current UV index or weather conditions]
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{%- if states('sensor.nws_alerts') | int(0) > 0 -%}
|
{%- if states('sensor.nws_alerts') | int(0) > 0 -%}
|
||||||
{%- set alert_description = state_attr('sensor.nws_alerts', 'Alerts') %}
|
{%- set alert_description = state_attr('sensor.nws_alerts', 'Alerts') | default('') %}
|
||||||
[Summarize the included weather alert and give overall details on any storms relevant to the residents of the home. Use the Situation Overview Section to best understand what is going on - Be sure to highlight any impacts to Seminole County or Tallahassee]
|
[Summarize the included weather alert and give overall details on any storms relevant to the residents of the home. Use the Situation Overview Section to best understand what is going on - Be sure to highlight any impacts to Seminole County or Tallahassee]
|
||||||
{{ alert_description }}
|
{{ alert_description }}
|
||||||
[END of Weather Alert]
|
[END of Weather Alert]
|
||||||
@@ -78,31 +85,6 @@
|
|||||||
The internal temperature of the refrigerator is currently {{ states('sensor.blink_blink1_temperature') }} degrees. The freezer temperature is {{ states('sensor.refrigerator_freezer_temp') }} degrees and the fridge temperature is {{ states('sensor.refrigerator_fridge_temp') }} degrees. {% if is_state('binary_sensor.refrigerator_door_open', 'on') %}The fridge door is currently open.{% endif %}
|
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(', ') %}
|
||||||
@@ -155,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]
|
||||||
@@ -162,26 +151,7 @@
|
|||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
|
|
||||||
{%- macro uv() -%}
|
{%- macro uv() -%}
|
||||||
{% if states.sensor.pirateweather_uv_index.state|int(9999)>= 6 %}
|
{# UV details are now included in outside_weather with a threshold gate #}
|
||||||
UV index is {{ states.sensor.pirateweather_uv_index.state }}.
|
|
||||||
{%- for entity in states.sensor if 'pirateweather' in entity.entity_id %}
|
|
||||||
{%- set state = entity.state %}
|
|
||||||
{%- set unit = entity.attributes.unit_of_measurement if 'unit_of_measurement' in entity.attributes else '' %}
|
|
||||||
{%- set friendly_name = ' '.join(entity.attributes.friendly_name.split(' ')[1:]) %}
|
|
||||||
{%- if state not in ['0', '0.0', 'none'] and 'UV Index' not in friendly_name %}
|
|
||||||
{%- if 'Temperature' in friendly_name -%}
|
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
|
||||||
{%- elif 'Minutely' in friendly_name -%}
|
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
|
||||||
{%- elif 'Cloud Coverage' in friendly_name and state | float > 75 -%}
|
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
|
||||||
{%- elif 'Humidity' in friendly_name and (state | float < 50 or state | float > 85) -%}
|
|
||||||
{{ friendly_name }}: {{ state }} {{ unit }}
|
|
||||||
{%- endif -%}
|
|
||||||
{%- endif %}
|
|
||||||
{% endfor -%}
|
|
||||||
[Give a helpful suggestion based on the current UV index or weather conditions]
|
|
||||||
{% endif %}
|
|
||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
|
|
||||||
{%- macro holiday() -%}
|
{%- macro holiday() -%}
|
||||||
@@ -215,15 +185,34 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
|
|
||||||
{% macro air_quality() %}
|
|
||||||
{{states('sensor.bear_stone_common_air_quality_index')}}
|
|
||||||
{{state_attr('sensor.bear_stone_common_air_quality_index', 'description')}}
|
|
||||||
{% endmacro %}
|
|
||||||
|
|
||||||
{% macro fact_of_the_day() %}
|
{% macro fact_of_the_day() %}
|
||||||
[incorporate into the message a relevant fact about something that happened in the past on this day]
|
[incorporate into the message a relevant fact about something that happened in the past on this day]
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
|
{# friendly duration/location helper #}
|
||||||
|
{% macro friendly_location(person_id, place_sensor_id, name) %}
|
||||||
|
{% set person = states[person_id] %}
|
||||||
|
{% if not person %}
|
||||||
|
{{ name }}: Away
|
||||||
|
{% else %}
|
||||||
|
{% set person_state = states(person_id) %}
|
||||||
|
{% set place_state = states(place_sensor_id) if place_sensor_id in states else 'unknown' %}
|
||||||
|
{% set location_label = place_state if place_state not in ['unknown','unavailable','','none'] else person_state %}
|
||||||
|
{% set location_label = 'Away' if location_label in ['unknown','unavailable','','none'] else location_label %}
|
||||||
|
{% set last_changed = as_timestamp(person.last_changed) %}
|
||||||
|
{% set seconds = (as_timestamp(now()) - last_changed) | int(0) if last_changed else 0 %}
|
||||||
|
{% set hours = (seconds // 3600) | int %}
|
||||||
|
{% set minutes = ((seconds % 3600) // 60) | int %}
|
||||||
|
{% set duration = (hours ~ ' hours') if hours >= 1 else (minutes ~ ' minutes') %}
|
||||||
|
{% if person_state == 'driving' %}
|
||||||
|
{% set driving_label = location_label if location_label != 'Away' else '' %}
|
||||||
|
{{ name }}: Driving{% if driving_label %} near {{ driving_label }}{% endif %}{% if seconds >= 60 %} for {{ duration }}{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{{ name }}: {{ location_label }}{% if seconds >= 60 %} for {{ duration }}{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
{# a macro that removes all newline characters, empty spaces, and returns formatted text and replaces underscores with spaces #}
|
{# a macro that removes all newline characters, empty spaces, and returns formatted text and replaces underscores with spaces #}
|
||||||
{%- macro cleanup(data) -%}
|
{%- macro cleanup(data) -%}
|
||||||
{%- for item in data.split("\n") if item | trim != "" -%}
|
{%- for item in data.split("\n") if item | trim != "" -%}
|
||||||
@@ -249,30 +238,10 @@
|
|||||||
[Current date time: {{ month }} {{ day }}, {{ year }} {{ time }}]
|
[Current date time: {{ month }} {{ day }}, {{ year }} {{ time }}]
|
||||||
|
|
||||||
[Resident: Location:
|
[Resident: Location:
|
||||||
- Carlo:
|
- {{ friendly_location('person.carlo', 'sensor.carlo_place', 'Carlo') }}
|
||||||
{%- if states('sensor.carlo_place') != 'unknown' %}
|
- {{ friendly_location('person.stacey', 'sensor.stacey_place', 'Stacey') }}
|
||||||
{{ states('sensor.carlo_place') }}
|
- {{ friendly_location('person.justin', 'sensor.justin_place', 'Justin') }}
|
||||||
{% else -%}
|
- {{ friendly_location('person.paige', 'sensor.paige_place', 'Paige') }}
|
||||||
Away
|
|
||||||
{% endif -%}
|
|
||||||
- Stacey:
|
|
||||||
{%- if states('sensor.stacey_place') != 'unknown' %}
|
|
||||||
{{ states('sensor.stacey_place') }}
|
|
||||||
{% else -%}
|
|
||||||
Away
|
|
||||||
{% endif -%}
|
|
||||||
- Justin:
|
|
||||||
{%- if states('sensor.justin_place') != 'unknown' %}
|
|
||||||
{{ states('sensor.justin_place') }}
|
|
||||||
{% else -%}
|
|
||||||
Away
|
|
||||||
{% endif -%}
|
|
||||||
- Paige:
|
|
||||||
{%- if states('sensor.paige_place') != 'unknown' %}
|
|
||||||
{{ states('sensor.paige_place') }}
|
|
||||||
{% else -%}
|
|
||||||
Away
|
|
||||||
{% endif -%}
|
|
||||||
{% if range(1, 100) | random <= 25 %}
|
{% if range(1, 100) | random <= 25 %}
|
||||||
Cat Molly: Always home.
|
Cat Molly: Always home.
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -298,13 +267,7 @@
|
|||||||
{{ inside_weather() }}
|
{{ inside_weather() }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if call_outside_weather == 1 and is_state('sun.sun', 'above_horizon') %}
|
|
||||||
{{ outside_weather() }}
|
{{ outside_weather() }}
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (states('sensor.bear_stone_common_air_quality_index')|int(0)) > 50 %}
|
|
||||||
{{ air_quality() }}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (states('sensor.blitzortung_lightning_counter')|int(0)) > 0 %}
|
{% if (states('sensor.blitzortung_lightning_counter')|int(0)) > 0 %}
|
||||||
{{ lightning() }}
|
{{ lightning() }}
|
||||||
@@ -336,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 %}
|
||||||
@@ -348,14 +307,20 @@
|
|||||||
{{ 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 %}
|
||||||
|
|
||||||
{# call a Random fact about the house or inspiration quote #}
|
{# call a Random fact about the house or inspiration quote #}
|
||||||
{{ ([moon, uv, holiday, days_until, outside_weather, outside_weather, fact_of_the_day]|random)() }}
|
{{ ([moon, holiday, days_until, fact_of_the_day]|random)() }}
|
||||||
]
|
]
|
||||||
[Previous broadcast: "{{ state_attr('sensor.openai_response', 'response') }}" ]
|
[Previous broadcast for context: "{{ state_attr('sensor.openai_response', 'response') }}" ]
|
||||||
|
|
||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
{{- cleanup(mother_of_all_macros()) -}}
|
{{- cleanup(mother_of_all_macros()) -}}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
>-
|
|
||||||
{% set pick = [
|
|
||||||
"ThrowBack", "S01E01", "S01E02","S01E03", "S01E04","S01E05", "S01E06","S01E07", "S01E08","S01E09", "S01E10",
|
|
||||||
"S01E11", "S01E12","S01E13", "S01E14","S01E15", "S01E16","S01E17", "S01E18","S01E19", "S01E20", "S01E21",
|
|
||||||
"S02E01", "S02E02","S02E03", "S02E04","S02E05", "S02E06","S02E07", "S02E08","S02E09", "S02E10",
|
|
||||||
"S02E11", "S02E12","S02E13", "S02E14","S02E15", "S02E16","S02E17", "S02E18","S02E19", "S02E20",
|
|
||||||
"S02E22", "S02E25", "S02E26", "S02E27", "S02E28", "S02E29", "S02E30", "S02E31", "S02E32", "S02E33", "S02E34",
|
|
||||||
"S02E35", "S02E36", "S02E37", "S02E38", "S02E39", "S02E40","S02E41", "Bearnews1", "Bearnews2", "Bearnews3", "Bearnews4",
|
|
||||||
"S03E01", "Bearnews5", "Bearnews6", "Bearnews7", "S03E02", "S03E03", "Logger", "SolarPalmLight", "5TipsToLevelUp", "AlexaMusicCommands",
|
|
||||||
"SolarFountainOKMEE", "NoCloudGaradget", "AlexaGuardMediaPlayer", "LightningSensor", "LEDBackboard", "CuckooClock", "NodeAnchors", "yahoostocks",
|
|
||||||
"AugustBatteries", "Remote_Finder", "VideoProjectionMappingDemo", "FeedTheDog", "AlexaGiftNotifications","iPhoneDuplicates", "NotifyScript", "WeightLossJourney",
|
|
||||||
"SnapPower", "LocalControl", "TossingWink", "EnergyDashboard", "IOSBrokeNoifications", "SolarDriveway", "UPS_Replacement", "VillaNERI", "GardenLED", "RokuOnHA", "RunningAutomationsCard"
|
|
||||||
] %}
|
|
||||||
{{ pick|random }}
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.1 MiB |
82
config/www/json_data/flag_days.json
Normal file
82
config/www/json_data/flag_days.json
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
{
|
||||||
|
"Flag_Days_US": {
|
||||||
|
"static": {
|
||||||
|
"2/12": "Lincoln's Birthday",
|
||||||
|
"5/15": "Peace Officers Memorial Day",
|
||||||
|
"6/14": "Flag Day",
|
||||||
|
"7/4": "Independence Day",
|
||||||
|
"7/27": "National Korean War Veterans Armistice Day",
|
||||||
|
"9/11": "Patriot Day",
|
||||||
|
"9/17": "Constitution Day",
|
||||||
|
"10/27": "Navy Day",
|
||||||
|
"11/11": "Veterans Day",
|
||||||
|
"12/7": "Pearl Harbor Remembrance Day"
|
||||||
|
},
|
||||||
|
"dynamic": {
|
||||||
|
"01/20/2025": "Inauguration Day",
|
||||||
|
"01/16/2023": "Martin Luther King Jr. Day",
|
||||||
|
"01/15/2024": "Martin Luther King Jr. Day",
|
||||||
|
"01/19/2026": "Martin Luther King Jr. Day",
|
||||||
|
"01/18/2027": "Martin Luther King Jr. Day",
|
||||||
|
"01/17/2028": "Martin Luther King Jr. Day",
|
||||||
|
"01/15/2029": "Martin Luther King Jr. Day",
|
||||||
|
"01/21/2030": "Martin Luther King Jr. Day",
|
||||||
|
"02/20/2023": "Washington's Birthday (Presidents Day)",
|
||||||
|
"02/19/2024": "Washington's Birthday (Presidents Day)",
|
||||||
|
"02/17/2025": "Washington's Birthday (Presidents Day)",
|
||||||
|
"02/16/2026": "Washington's Birthday (Presidents Day)",
|
||||||
|
"02/15/2027": "Washington's Birthday (Presidents Day)",
|
||||||
|
"02/21/2028": "Washington's Birthday (Presidents Day)",
|
||||||
|
"02/19/2029": "Washington's Birthday (Presidents Day)",
|
||||||
|
"02/18/2030": "Washington's Birthday (Presidents Day)",
|
||||||
|
"05/20/2023": "Armed Forces Day",
|
||||||
|
"05/18/2024": "Armed Forces Day",
|
||||||
|
"05/17/2025": "Armed Forces Day",
|
||||||
|
"05/16/2026": "Armed Forces Day",
|
||||||
|
"05/15/2027": "Armed Forces Day",
|
||||||
|
"05/20/2028": "Armed Forces Day",
|
||||||
|
"05/19/2029": "Armed Forces Day",
|
||||||
|
"05/18/2030": "Armed Forces Day",
|
||||||
|
"05/29/2023": "Memorial Day",
|
||||||
|
"05/27/2024": "Memorial Day",
|
||||||
|
"05/26/2025": "Memorial Day",
|
||||||
|
"05/25/2026": "Memorial Day",
|
||||||
|
"05/31/2027": "Memorial Day",
|
||||||
|
"05/29/2028": "Memorial Day",
|
||||||
|
"05/28/2029": "Memorial Day",
|
||||||
|
"05/27/2030": "Memorial Day",
|
||||||
|
"09/04/2023": "Labor Day",
|
||||||
|
"09/02/2024": "Labor Day",
|
||||||
|
"09/01/2025": "Labor Day",
|
||||||
|
"09/07/2026": "Labor Day",
|
||||||
|
"09/06/2027": "Labor Day",
|
||||||
|
"09/04/2028": "Labor Day",
|
||||||
|
"09/03/2029": "Labor Day",
|
||||||
|
"09/02/2030": "Labor Day",
|
||||||
|
"09/15/2023": "National POW/MIA Recognition Day",
|
||||||
|
"09/20/2024": "National POW/MIA Recognition Day",
|
||||||
|
"09/19/2025": "National POW/MIA Recognition Day",
|
||||||
|
"09/18/2026": "National POW/MIA Recognition Day",
|
||||||
|
"09/17/2027": "National POW/MIA Recognition Day",
|
||||||
|
"09/15/2028": "National POW/MIA Recognition Day",
|
||||||
|
"09/21/2029": "National POW/MIA Recognition Day",
|
||||||
|
"09/20/2030": "National POW/MIA Recognition Day",
|
||||||
|
"10/09/2023": "Columbus Day",
|
||||||
|
"10/14/2024": "Columbus Day",
|
||||||
|
"10/13/2025": "Columbus Day",
|
||||||
|
"10/12/2026": "Columbus Day",
|
||||||
|
"10/11/2027": "Columbus Day",
|
||||||
|
"10/09/2028": "Columbus Day",
|
||||||
|
"10/08/2029": "Columbus Day",
|
||||||
|
"10/14/2030": "Columbus Day",
|
||||||
|
"11/07/2023": "Election Day",
|
||||||
|
"11/05/2024": "Election Day",
|
||||||
|
"11/04/2025": "Election Day",
|
||||||
|
"11/03/2026": "Election Day",
|
||||||
|
"11/02/2027": "Election Day",
|
||||||
|
"11/07/2028": "Election Day",
|
||||||
|
"11/06/2029": "Election Day",
|
||||||
|
"11/05/2030": "Election Day"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
116
config/www/json_data/holidays.json
Normal file
116
config/www/json_data/holidays.json
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
{
|
||||||
|
"MAJOR_US": {
|
||||||
|
"static": {
|
||||||
|
"1/1": "New Years Day",
|
||||||
|
"2/2": "Groundhog Day",
|
||||||
|
"2/3": "Staceys Birthday",
|
||||||
|
"2/14": "Valentines Day",
|
||||||
|
"3/14": "Pi Day",
|
||||||
|
"3/17": "St. Patricks Day",
|
||||||
|
"3/26": "Justins Birthday",
|
||||||
|
"4/1": "April Fools Day",
|
||||||
|
"4/22": "Earth Day",
|
||||||
|
"5/4": "Star Wars Day",
|
||||||
|
"5/5": "Cinco de Mayo",
|
||||||
|
"6/14": "Flag Day",
|
||||||
|
"7/4": "Independence Day",
|
||||||
|
"8/30": "Paiges Birthday",
|
||||||
|
"9/10": "Mom and Dads Wedding Anniversary",
|
||||||
|
"9/11": "Patriot Day",
|
||||||
|
"10/31": "Halloween",
|
||||||
|
"11/11": "Veterans Day",
|
||||||
|
"11/16": "Carlos Birthday",
|
||||||
|
"12/7": "Pearl Harbor Day",
|
||||||
|
"12/24": "Christmas Eve",
|
||||||
|
"12/25": "Christmas Day",
|
||||||
|
"12/31": "New Years Eve"
|
||||||
|
},
|
||||||
|
"dynamic": {
|
||||||
|
"11/23/2023": "Thanksgiving Day",
|
||||||
|
"01/15/2024": "MLK Day",
|
||||||
|
"02/14/2024": "Ash Wednesday",
|
||||||
|
"02/19/2024": "Presidents Day",
|
||||||
|
"03/24/2024": "Palm Sunday",
|
||||||
|
"03/29/2024": "Good Friday",
|
||||||
|
"03/31/2024": "Easter Sunday",
|
||||||
|
"04/22/2024": "Memorial Day",
|
||||||
|
"05/12/2024": "Mothers Day",
|
||||||
|
"06/16/2024": "Fathers Day",
|
||||||
|
"09/02/2024": "Labor Day",
|
||||||
|
"10/14/2024": "Columbus Day",
|
||||||
|
"11/28/2024": "Thanksgiving Day",
|
||||||
|
"01/20/2025": "MLK Day",
|
||||||
|
"02/17/2025": "Presidents Day",
|
||||||
|
"03/05/2025": "Ash Wednesday",
|
||||||
|
"04/13/2025": "Palm Sunday",
|
||||||
|
"04/18/2025": "Good Friday",
|
||||||
|
"04/20/2025": "Easter Sunday",
|
||||||
|
"04/21/2025": "Memorial Day",
|
||||||
|
"05/11/2025": "Mothers Day",
|
||||||
|
"06/15/2025": "Fathers Day",
|
||||||
|
"09/01/2025": "Labor Day",
|
||||||
|
"10/13/2025": "Columbus Day",
|
||||||
|
"11/27/2025": "Thanksgiving Day",
|
||||||
|
"01/19/2026": "MLK Day",
|
||||||
|
"02/16/2026": "Presidents Day",
|
||||||
|
"02/18/2026": "Ash Wednesday",
|
||||||
|
"03/29/2026": "Palm Sunday",
|
||||||
|
"04/03/2026": "Good Friday",
|
||||||
|
"04/05/2026": "Easter Sunday",
|
||||||
|
"04/20/2026": "Memorial Day",
|
||||||
|
"05/10/2026": "Mothers Day",
|
||||||
|
"06/21/2026": "Fathers Day",
|
||||||
|
"09/07/2026": "Labor Day",
|
||||||
|
"10/12/2026": "Columbus Day",
|
||||||
|
"11/26/2026": "Thanksgiving Day",
|
||||||
|
"01/18/2027": "MLK Day",
|
||||||
|
"02/10/2027": "Ash Wednesday",
|
||||||
|
"02/15/2027": "Presidents Day",
|
||||||
|
"03/21/2027": "Palm Sunday",
|
||||||
|
"03/26/2027": "Good Friday",
|
||||||
|
"03/28/2027": "Easter Sunday",
|
||||||
|
"04/19/2027": "Memorial Day",
|
||||||
|
"05/09/2027": "Mothers Day",
|
||||||
|
"06/20/2027": "Fathers Day",
|
||||||
|
"09/06/2027": "Labor Day",
|
||||||
|
"10/11/2027": "Columbus Day",
|
||||||
|
"11/25/2027": "Thanksgiving Day",
|
||||||
|
"01/17/2028": "MLK Day",
|
||||||
|
"02/21/2028": "Presidents Day",
|
||||||
|
"03/01/2028": "Ash Wednesday",
|
||||||
|
"04/09/2028": "Palm Sunday",
|
||||||
|
"04/14/2028": "Good Friday",
|
||||||
|
"04/16/2028": "Easter Sunday",
|
||||||
|
"04/17/2028": "Memorial Day",
|
||||||
|
"05/14/2028": "Mothers Day",
|
||||||
|
"06/18/2028": "Fathers Day",
|
||||||
|
"09/04/2028": "Labor Day",
|
||||||
|
"10/09/2028": "Columbus Day",
|
||||||
|
"11/23/2028": "Thanksgiving Day",
|
||||||
|
"01/15/2029": "MLK Day",
|
||||||
|
"02/14/2029": "Ash Wednesday",
|
||||||
|
"02/19/2029": "Presidents Day",
|
||||||
|
"03/25/2029": "Palm Sunday",
|
||||||
|
"03/30/2029": "Good Friday",
|
||||||
|
"04/01/2029": "Easter Sunday",
|
||||||
|
"04/23/2029": "Memorial Day",
|
||||||
|
"05/13/2029": "Mothers Day",
|
||||||
|
"06/17/2029": "Fathers Day",
|
||||||
|
"09/03/2029": "Labor Day",
|
||||||
|
"10/08/2029": "Columbus Day",
|
||||||
|
"11/22/2029": "Thanksgiving Day",
|
||||||
|
"01/21/2030": "MLK Day",
|
||||||
|
"02/18/2030": "Presidents Day",
|
||||||
|
"03/06/2030": "Ash Wednesday",
|
||||||
|
"04/14/2030": "Palm Sunday",
|
||||||
|
"04/19/2030": "Good Friday",
|
||||||
|
"04/21/2030": "Easter Sunday",
|
||||||
|
"04/22/2030": "Memorial Day",
|
||||||
|
"05/12/2030": "Mothers Day",
|
||||||
|
"06/16/2030": "Fathers Day",
|
||||||
|
"09/02/2030": "Labor Day",
|
||||||
|
"10/14/2030": "Columbus Day",
|
||||||
|
"11/28/2030": "Thanksgiving Day"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
<svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.11.3">
|
<svg width="68.5" height="20" viewBox="0 0 685 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.12.2">
|
||||||
<title>2025.11.3</title>
|
<title>2025.12.2</title>
|
||||||
<linearGradient id="KbULv" x2="0" y2="100%">
|
<linearGradient id="pOwrd" 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="Yenil"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
|
<mask id="aXyHH"><rect width="685" height="200" rx="30" fill="#FFF"/></mask>
|
||||||
<g mask="url(#Yenil)">
|
<g mask="url(#aXyHH)">
|
||||||
<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(#KbULv)"/>
|
<rect width="685" height="200" fill="url(#pOwrd)"/>
|
||||||
</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.2</text>
|
||||||
<text x="55" y="138" textLength="570">2025.11.3</text>
|
<text x="55" y="138" textLength="570">2025.12.2</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 815 B After Width: | Height: | Size: 815 B |
Reference in New Issue
Block a user