Compare commits

..

20 Commits

Author SHA1 Message Date
8698a46d4f Exclude Tempest data from long-term stats, found another solution 2025-05-16 19:59:57 -04:00
7d5aa32834 Use Tempest rainfall sensor to trigger window warning 2025-05-15 18:19:03 -04:00
37458be1b8 Unfuck my recorder config... 2025-05-15 17:48:09 -04:00
72421b8716 Switch from Weather.com to Weatherflow for weather sensors 2025-05-15 06:26:41 -04:00
8be8f4bb58 Narrow down to just using the Tempest lighting strikes over past hour 2025-05-15 05:38:24 -04:00
6e619fa647 Input number for front porch lux threshold 2025-05-15 04:08:04 -04:00
9dca18048c Incorporate Weatherflow forecasts into main weather templates 2025-05-15 02:30:03 -04:00
52bfb8bd49 Handle lightning monitoring as more of a group effort 2025-05-15 01:14:19 -04:00
43feaa9b06 Lightning warning now uses local Tempest sensor by default 2025-05-15 00:05:10 -04:00
0847e7fd10 Add dewpoint and apparent temperature templates to INWS weather template 2025-05-15 00:04:49 -04:00
425b1fb0cf Add local Tempest Weather data to INWS weather template 2025-05-15 00:04:23 -04:00
f589cc0e6c Remove automations and blueprint for Chromecasting to TVs 2025-05-15 00:03:16 -04:00
49a4f4650b Update sensor light blueprint 2025-05-15 00:02:51 -04:00
3a2fc504f3 Update Twanne's lighting blueprints 2025-05-15 00:02:28 -04:00
f1180cc34b Track Weatherflow Tempest data in databases 2025-05-14 20:08:52 -04:00
b936838376 Updated readme 2025-05-14 01:28:00 -04:00
2d755be935 Shower Mode Auto Off automation 2025-05-13 23:57:42 -04:00
ed0431ae56 Update .HA_VERSION 2025-05-13 23:57:17 -04:00
a1b68f80b6 Changes for new version of Bubble Cards 2025-05-08 21:35:45 -04:00
adc4bc9b42 Update .HA_VERSION 2025-05-08 21:35:08 -04:00
13 changed files with 6286 additions and 3027 deletions

View File

@ -1 +1 @@
2025.4.4
2025.5.1

View File

@ -69,15 +69,6 @@
seconds: 0
milliseconds: 0
mode: single
- id: '1640916845901'
alias: Cast to Chromecast
description: ''
use_blueprint:
path: kind3r/cast-and-re-cast-a-lovelace-view-to-a-google-hub.yaml
input:
dashboard: lovelace
player: media_player.living_room_tv
view: chromecast
- id: '1640989510134'
alias: New Years
description: Flash lights for New Years
@ -281,15 +272,6 @@
- service: icloud3.restart
data: {}
mode: single
- id: '1645738561470'
alias: Cast to Basement TV
description: ''
use_blueprint:
path: kind3r/cast-and-re-cast-a-lovelace-view-to-a-google-hub.yaml
input:
dashboard: lovelace
player: media_player.basement_tv_chromecast
view: chromecast
- id: '1651785688186'
alias: Watchman Audit on Startup
description: Runs the Watchman Audit script after Home Assistant has successfully
@ -3015,18 +2997,21 @@
- id: '1696556688808'
alias: Rain Window Warning
description: Warn when it starts raining and a window is open
trigger:
- platform: state
entity_id: binary_sensor.raining
from: 'off'
to: 'on'
alias: Rain starts
condition:
triggers:
- alias: Rain starts
entity_id:
- sensor.home_tempest_precipitation_type
from: none
not_to:
- unavailable
- unknown
trigger: state
conditions:
- condition: state
entity_id: binary_sensor.windows
state: 'on'
alias: Windows are open
action:
actions:
- variables:
porch: "{% set windows = states('sensor.windows_open') | int %} {% set front
= states('sensor.front_windows_open') | int %} {% if windows == front %}\n
@ -3037,36 +3022,36 @@
house. Please close them!\n{% endif %}\n"
alias: Define variables
- parallel:
- service: script.text_notify
data:
- data:
type: alert
who: all
title: WINDOWS ARE OPEN!
message: '{{ message }}'
tag: rain-window-warning
alias: Send text notification
- service: script.speech_engine
data:
action: script.text_notify
- data:
who: everywhere
type: weather
message: '{{ message }}'
alias: TTS notification
- service: script.living_room_lights_alert
data:
action: script.speech_engine
- data:
type: blue
duration: 10
alias: Light alert in living room
action: script.living_room_lights_alert
- if:
- condition: state
entity_id: binary_sensor.basement_occupied
state: 'on'
alias: Basement is occupied
then:
- service: script.basement_lights_alert
data:
- data:
type: blue
duration: 10
alias: Light alert in basement
action: script.basement_lights_alert
alias: Light alert in basement, if occupied
alias: Send the various alerts
- wait_template: '{{ is_state(''binary_sensor.windows'',''off'') or is_state(''binary_sensor.raining'',''off'')
@ -3081,46 +3066,46 @@
}}'
alias: Windows closed and still raining
sequence:
- service: script.text_notify
data:
- data:
type: alert
who: all
message: clear_notification
tag: rain-window-warning
alias: Clear text notification
- service: script.speech_engine
data:
action: script.text_notify
- data:
who: common
type: weather
message: Windows are now closed. Thank you, and enjoy your dry house.
alias: TTS notification
action: script.speech_engine
- conditions:
- condition: template
value_template: '{{ is_state(''binary_sensor.raining'',''off'') }}'
alias: Stopped raining
sequence:
- service: script.text_notify
data:
- data:
type: alert
who: all
message: clear_notification
tag: rain-window-warning
alias: Clear text notification
- service: script.speech_engine
data:
action: script.text_notify
- data:
who: common
type: weather
message: Nevermind, it has stopped raining. Feel free to do whatever you'd
like with the windows.
alias: TTS notification
action: script.speech_engine
default:
- service: script.speech_engine
data:
- data:
who: common
type: weather
message: Well, I guess no one cares if the house floods. Suit yourself, but
do not say I didn't warn you.
alias: TTS notification
action: script.speech_engine
alias: After wait completed
mode: single
- id: '1696884613752'
@ -6173,3 +6158,49 @@
- input_boolean.tina_night_meds_taken
alias: Reset Tina meds taken switches
mode: restart
- id: '1747130058536'
alias: Shower Mode Auto Off
description: Kallen keeps leaving shower mode on, so I'm fixing that
triggers:
- trigger: state
entity_id:
- input_boolean.shower_mode
from: 'off'
to: 'on'
id: shower-on
alias: Shower Mode On
- trigger: event
event_type: timer.finished
event_data:
entity_id: timer.shower_mode_auto_off
id: timer-finished
alias: Timer Finished
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- shower-on
alias: Shower On
sequence:
- alias: Start timer
action: timer.start
metadata: {}
data: {}
target:
entity_id: timer.shower_mode_auto_off
- conditions:
- condition: trigger
id:
- timer-finished
alias: Timer Finished
sequence:
- alias: Turn off shower mode
action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.shower_mode
alias: Routing
mode: restart

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
blueprint:
name: Smart Lux Dimmer
author: AntonH
description: 'Version 4.1
description: 'Version 4.3
Switch or dim lights based on the value of a light sensor.
@ -24,10 +24,11 @@ blueprint:
value?
selector:
entity:
domain:
- sensor
device_class:
- illuminance
filter:
- domain:
- sensor
device_class:
- illuminance
multiple: false
target_light:
name: Target lights
@ -81,8 +82,8 @@ blueprint:
min: 0.0
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
mode: slider
light_value_2:
name: Brightness at minimum light level
description: Brightness of the light at minimum ambient light.
@ -92,8 +93,8 @@ blueprint:
min: 0.0
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
mode: slider
transition_time:
name: Transition time
description: 'The time it takes for the light to transition from the set value
@ -124,9 +125,9 @@ blueprint:
value: include_color
- label: Set temperature
value: include_temp
multiple: false
sort: false
custom_value: false
sort: false
multiple: false
light_color:
name: Light color
description: Color of the light when between minimum and maximum ambient light
@ -161,8 +162,8 @@ blueprint:
min: 0.0
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
mode: slider
light_brightness_under_min:
name: Brightness when ambient light value under min.
description: Brightness of the light when the ambient light is lower than the
@ -173,8 +174,8 @@ blueprint:
min: 0.0
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
mode: slider
include_color_or_temp_over_under:
name: Include color or temperature values when outside range
description: 'Set a color or temperature value for the light when over maximum
@ -193,9 +194,9 @@ blueprint:
value: include_color_outside_range
- label: Set temperature when outside range
value: include_temp_outside_range
multiple: false
sort: false
custom_value: false
sort: false
multiple: false
light_color_over_max:
name: Color when ambient light value over max.
description: Color of the light when the ambient light is higher than the set
@ -236,18 +237,25 @@ variables:
include_brightness_over_under: !input include_brightness_over_under
include_color_or_temp_over_under: !input include_color_or_temp_over_under
light_sensor: !input light_sensor_entity
maxB: !input max_brightness_value
minB: !input min_brightness_value
light1: !input light_value_1
light2: !input light_value_2
max_brightness_value: !input max_brightness_value
min_brightness_value: !input min_brightness_value
maxB: '{{ max_brightness_value * 2.55 }}'
minB: '{{ min_brightness_value * 2.55 }}'
light_value_1: !input light_value_1
light_value_2: !input light_value_2
light1: '{{ light_value_1 * 2.55 }}'
light2: '{{ light_value_2 * 2.55 }}'
slope: '{{ ( light1 - light2 ) / ( maxB - minB ) }}'
constant: '{{ light1 - ( slope * maxB ) }}'
trigger:
platform: state
light_brightness_over_max: !input light_brightness_over_max
light_brightness_under_min: !input light_brightness_under_min
brightness_over_max_pct: '{{ light_brightness_over_max * 2.55 }}'
brightness_under_min_pct: '{{ light_brightness_under_min * 2.55 }}'
triggers:
trigger: state
entity_id: !input light_sensor_entity
condition:
- condition: !input run_conditions
action:
conditions: !input run_conditions
actions:
- choose:
- conditions:
- condition: template
@ -258,20 +266,20 @@ action:
- condition: template
value_template: '{{ include_color_or_temp == "include_no_color_temp" }}'
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: '{{ (( slope * states(light_sensor)|int ) + constant)|round
brightness: '{{ (( slope * states(light_sensor)|int ) + constant)|round
}}'
target: !input target_light
- conditions:
- condition: template
value_template: '{{ include_color_or_temp == "include_color" }}'
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: '{{ (( slope * states(light_sensor)|int ) + constant)|round
brightness: '{{ (( slope * states(light_sensor)|int ) + constant)|round
}}'
rgb_color: !input light_color
target: !input target_light
@ -279,10 +287,10 @@ action:
- condition: template
value_template: '{{ include_color_or_temp == "include_temp" }}'
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: '{{ (( slope * states(light_sensor)|int ) + constant)|round
brightness: '{{ (( slope * states(light_sensor)|int ) + constant)|round
}}'
color_temp: !input light_temp
target: !input target_light
@ -302,20 +310,20 @@ action:
entity_id: !input light_sensor_entity
above: !input max_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: !input light_brightness_over_max
brightness: '{{ brightness_over_max_pct }}'
target: !input target_light
- conditions:
- condition: numeric_state
entity_id: !input light_sensor_entity
below: !input min_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: !input light_brightness_under_min
brightness: '{{ brightness_under_min_pct }}'
target: !input target_light
- conditions:
- condition: numeric_state
@ -323,10 +331,10 @@ action:
below: !input max_brightness_value
above: !input min_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: '{{ (( slope * states(light_sensor)|int ) + constant)|round
brightness: '{{ (( slope * states(light_sensor)|int ) + constant)|round
}}'
target: !input target_light
- conditions:
@ -340,10 +348,10 @@ action:
entity_id: !input light_sensor_entity
above: !input max_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: !input light_brightness_over_max
brightness: '{{ brightness_over_max_pct }}'
rgb_color: !input light_color_over_max
target: !input target_light
- conditions:
@ -351,10 +359,10 @@ action:
entity_id: !input light_sensor_entity
below: !input min_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: !input light_brightness_under_min
brightness: '{{ brightness_under_min_pct }}'
rgb_color: !input light_color_under_min
target: !input target_light
- conditions:
@ -363,10 +371,10 @@ action:
below: !input max_brightness_value
above: !input min_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: '{{ (( slope * states(light_sensor)|int ) + constant)|round
brightness: '{{ (( slope * states(light_sensor)|int ) + constant)|round
}}'
rgb_color: !input light_color
target: !input target_light
@ -381,10 +389,10 @@ action:
entity_id: !input light_sensor_entity
above: !input max_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: !input light_brightness_over_max
brightness: '{{ brightness_over_max_pct }}'
color_temp: !input light_temp_over_max
target: !input target_light
- conditions:
@ -392,10 +400,10 @@ action:
entity_id: !input light_sensor_entity
below: !input min_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: !input light_brightness_under_min
brightness: '{{ brightness_under_min_pct }}'
color_temp: !input light_temp_under_min
target: !input target_light
- conditions:
@ -404,10 +412,10 @@ action:
below: !input max_brightness_value
above: !input min_brightness_value
sequence:
- service: light.turn_on
- action: light.turn_on
data:
transition: !input transition_time
brightness_pct: '{{ (( slope * states(light_sensor)|int ) + constant)|round
brightness: '{{ (( slope * states(light_sensor)|int ) + constant)|round
}}'
color_temp: !input light_temp
target: !input target_light

View File

@ -31,12 +31,15 @@ blueprint:
text: {}
light_sensor_entity:
name: Light Sensor
description: Which light sensor do you want to use to measure the ambient light
value?
selector:
entity:
domain:
- sensor
device_class:
- illuminance
filter:
- domain:
- sensor
device_class:
- illuminance
multiple: false
max_brightness_value:
name: Maximum ambient light value
@ -94,15 +97,17 @@ variables:
light_sensor: !input light_sensor_entity
maxB: !input max_brightness_value
minB: !input min_brightness_value
light1: !input light_value_1
light2: !input light_value_2
light_value_1: !input light_value_1
light_value_2: !input light_value_2
light1: '{{ light_value_1 * 2.55 }}'
light2: '{{ light_value_2 * 2.55 }}'
slope: '{{ ( light1 - light2 ) / ( maxB - minB ) }}'
constant: '{{ light1 - ( slope * maxB ) }}'
days: !input schedule_days
trigger:
platform: state
triggers:
trigger: state
entity_id: !input light_sensor_entity
condition:
conditions:
- condition: numeric_state
entity_id: !input light_sensor_entity
above: !input min_brightness_value
@ -111,9 +116,9 @@ condition:
before: !input schedule_stop
- condition: template
value_template: '{{ now().strftime(''%a'') | lower in days }}'
action:
- service: light.turn_on
actions:
- action: light.turn_on
data:
brightness_pct: "{% if states(light_sensor)|int > maxB %}\n 0\n{% else %}\n {{
(( slope * states(light_sensor)|int ) + constant)|round }}\n{% endif %}\n"
brightness: "{% if states(light_sensor)|int > maxB %}\n 0\n{% else %}\n {{ ((
slope * states(light_sensor)|int ) + constant)|round }}\n{% endif %}\n"
target: !input target_light

View File

@ -1,7 +1,7 @@
blueprint:
name: The Everything Light
author: AntonH
description: "**Version 2.5**\nThe Everything Light: select any trigger and turn
description: "**Version 2.10**\nThe Everything Light: select any trigger and turn
on your light in multiple ways:\n - just turn the light on in it's default state\n
\ - turn it on with a set brightness, color and/or temperature value\n - turn
it on dynamically with a brightness value that changes according to an ambient
@ -55,13 +55,13 @@ blueprint:
Toggle the light.
- **FIXED MODE: **
- **FIXED MODE:**
The light will turn on at a set brightness percentage, optionally color or
temperature can be set.
- **DYNAMIC MODE**
- **DYNAMIC MODE:**
The light will be assigned a brightness value based on the value of a ambient
light sensor, optionally color or temperature can be set.
@ -74,15 +74,15 @@ blueprint:
options:
- label: DEFAULT MODE
value: default
- label: TOGGLE
- label: TOGGLE MODE
value: toggle
- label: FIXED MODE
value: fixed
- label: DYNAMIC MODE
value: dynamic
multiple: false
sort: false
custom_value: false
sort: false
multiple: false
transition_time:
name: Transition time (FIXED & DYNAMIC MODE)
description: "The time it takes for the light to transition to the assigned
@ -110,9 +110,9 @@ blueprint:
value: include_color
- label: Set temperature
value: include_temperature
multiple: false
sort: false
custom_value: false
sort: false
multiple: false
light_color:
name: Light color (FIXED & DYNAMIC MODE)
description: Color of the light when between minimum and maximum ambient light
@ -125,22 +125,28 @@ blueprint:
color_rgb: {}
light_temperature:
name: Light temperature (FIXED & DYNAMIC MODE)
description: Temperature of the light when between minimum and maximum ambient
description: 'Temperature of the light when between minimum and maximum ambient
light values.
(not all lights will support all values, please consult your lights spec sheet.)
'
default: 2000
selector:
color_temp: {}
color_temp:
unit: kelvin
min: 1500
max: 6500
brightness:
name: Brightness (FIXED BRIGHTNESS MODE)
description: Set the brightness value the light needs to turn on at
default: 0
default: 100
selector:
number:
min: 0.0
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
light_sensor_entity:
name: Light Sensor (DYNAMIC MODE)
description: Which light sensor do you want to use to measure the ambient light
@ -188,7 +194,6 @@ blueprint:
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
light_value_2:
name: Brightness at minimum light level (DYNAMIC MODE)
description: Brightness of the light at minimum ambient light.
@ -199,7 +204,6 @@ blueprint:
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
light_brightness_over_max:
name: Brightness when ambient light value over max (DYNAMIC MODE)
description: Brightness of the light when the ambient light is higher than the
@ -211,19 +215,17 @@ blueprint:
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
light_brightness_under_min:
name: Brightness when ambient light value under min (DYNAMIC MODE)
description: Brightness of the light when the ambient light is lower than the
set minimum value.
default: 100
default: 255
selector:
number:
min: 0.0
max: 100.0
step: 1.0
mode: slider
unit_of_measurement: '%'
include_color_or_temp_over_under:
name: Include color or temperature values when outside range (DYNAMIC MODE)
description: 'Set a color or temperature value for the light when over maximum
@ -242,9 +244,9 @@ blueprint:
value: include_color_outside_range
- label: Set temperature when outside range
value: include_temp_outside_range
multiple: false
sort: false
custom_value: false
sort: false
multiple: false
light_color_over_max:
name: Color when ambient light value over max (DYNAMIC MODE)
description: Color of the light when the ambient light is higher than the set
@ -267,18 +269,32 @@ blueprint:
color_rgb: {}
light_temp_over_max:
name: Temperature when ambient light value over max (DYNAMIC MODE)
description: Temperature of the light when the ambient light is higher than
description: 'Temperature of the light when the ambient light is higher than
the set maximum value.
(not all lights will support all values, please consult your lights spec sheet.)
'
default: 2000
selector:
color_temp: {}
color_temp:
unit: kelvin
min: 1500
max: 6500
light_temp_under_min:
name: Temperature when ambient light value under min (DYNAMIC MODE)
description: Temperature of the light when the ambient light is lower than the
set minimum value.
description: 'Temperature of the light when the ambient light is lower than
the set minimum value.
(not all lights will support all values, please consult your lights spec sheet.)
'
default: 2000
selector:
color_temp: {}
color_temp:
unit: kelvin
min: 1500
max: 6500
include_turn_off:
name: Include light turn off function
description: 'Select if the light needs to turn back off again and how you want
@ -307,8 +323,8 @@ blueprint:
value: trigger
- label: Staircase function
value: staircase
sort: false
custom_value: false
sort: false
turn_off_triggers:
name: Turn off triggers
description: Triggers that turn the light off
@ -343,71 +359,75 @@ variables:
include_color_or_temp: !input include_color_or_temp
light_color: !input light_color
light_temperature: !input light_temperature
light_brightness: !input brightness
brightness: !input brightness
light_brightness: '{{ brightness * 2.55 }}'
light_sensor: !input light_sensor_entity
maxB: !input max_brightness_value
minB: !input min_brightness_value
light1: !input light_value_1
light2: !input light_value_2
light_value_1: !input light_value_1
light_value_2: !input light_value_2
light1: '{{ light_value_1 * 2.55 }}'
light2: '{{ light_value_2 * 2.55 }}'
slope: '{{ ( light1 - light2 ) / ( maxB - minB ) }}'
constant: '{{ light1 - ( slope * maxB ) }}'
dynamic_brightness_pct: "{% if mode == \"dynamic\" %}\n {{ (( slope * states(light_sensor)|int
dynamic_brightness: "{% if mode == \"dynamic\" %}\n {{ (( slope * states(light_sensor)|int
) + constant)|round }}\n{% else %}\n 0\n{% endif %}\n"
include_color_or_temp_over_under: !input include_color_or_temp_over_under
light_brightness_over_max: !input light_brightness_over_max
brightness_over_max_pct: '{{ light_brightness_over_max * 2.55 }}'
light_color_over_max: !input light_color_over_max
light_temp_over_max: !input light_temp_over_max
light_brightness_under_min: !input light_brightness_under_min
brightness_under_min_pct: '{{ light_brightness_under_min * 2.55 }}'
light_color_under_min: !input light_color_under_min
light_temp_under_min: !input light_temp_under_min
include_turn_off: !input include_turn_off
trigger: !input triggers
condition:
- condition: !input run_conditions
action:
conditions: !input run_conditions
actions:
- choose:
- conditions: '{{ mode == "toggle" }}'
sequence:
- service: homeassistant.toggle
- action: homeassistant.toggle
target: !input target_light
- conditions: '{{ mode == "default" }}'
sequence:
- service: homeassistant.turn_on
- action: homeassistant.turn_on
target: !input target_light
- conditions: '{{ mode == "fixed" }}'
sequence:
- service: light.turn_on
- action: light.turn_on
data: "{% if include_color_or_temp == \"include_color\" %}\n {{ { \"transition\":
transition_time, \"brightness_pct\": light_brightness, \"rgb_color\": light_color
transition_time, \"brightness\": light_brightness, \"rgb_color\": light_color
} }}\n{% elif include_color_or_temp == \"include_temperature\" %}\n {{ {
\"transition\": transition_time, \"brightness_pct\": light_brightness, \"color_temp\":
\"transition\": transition_time, \"brightness\": light_brightness, \"color_temp\":
light_temperature } }}\n{% else %}\n {{ { \"transition\": transition_time,
\"brightness_pct\": light_brightness } }}\n{% endif %}\n"
\"brightness\": light_brightness } }}\n{% endif %}\n"
target: !input target_light
- conditions: '{{ mode == "dynamic" }}'
sequence:
- service: light.turn_on
- action: light.turn_on
data: "{% if states(light_sensor)|int > maxB %}\n {% if include_color_or_temp_over_under
== \"include_color_outside_range\" %}\n {{ { \"transition\": transition_time,
\"brightness_pct\": light_brightness_over_max, \"rgb_color\": light_color_over_max
\"brightness\": brightness_over_max_pct, \"rgb_color\": light_color_over_max
} }}\n {% elif include_color_or_temp_over_under == \"include_temp_outside_range\"
%}\n {{ { \"transition\": transition_time, \"brightness_pct\": light_brightness_over_max,
%}\n {{ { \"transition\": transition_time, \"brightness\": brightness_over_max_pct,
\"color_temp\": light_temp_over_max } }}\n {% else %}\n {{ { \"transition\":
transition_time, \"brightness_pct\": light_brightness_over_max } }}\n {%
endif %}\n{% elif states(light_sensor)|int < minB %}\n {% if include_color_or_temp_over_under
transition_time, \"brightness\": brightness_over_max_pct } }}\n {% endif
%}\n{% elif states(light_sensor)|int < minB %}\n {% if include_color_or_temp_over_under
== \"include_color_outside_range\" %}\n {{ { \"transition\": transition_time,
\"brightness_pct\": light_brightness_under_min, \"rgb_color\": light_color_under_min
\"brightness\": brightness_under_min_pct, \"rgb_color\": light_color_under_min
} }}\n {% elif include_color_or_temp_over_under == \"include_temp_outside_range\"
%}\n {{ { \"transition\": transition_time, \"brightness_pct\": light_brightness_under_min,
%}\n {{ { \"transition\": transition_time, \"brightness\": brightness_under_min_pct,
\"color_temp\": light_temp_under_min } }}\n {% else %}\n {{ { \"transition\":
transition_time, \"brightness_pct\": light_brightness_under_min } }}\n {%
endif %}\n{% else %}\n {% if include_color_or_temp == \"include_color\" %}\n
\ {{ { \"transition\": transition_time, \"brightness_pct\": light_brightness,
\"rgb_color\": light_color } }}\n {% elif include_color_or_temp == \"include_temperature\"
%}\n {{ { \"transition\": transition_time, \"brightness_pct\": dynamic_brightness_pct,
transition_time, \"brightness\": brightness_under_min_pct } }}\n {% endif
%}\n{% else %}\n {% if include_color_or_temp == \"include_color\" %}\n {{
{ \"transition\": transition_time, \"brightness\": light_brightness, \"rgb_color\":
light_color } }}\n {% elif include_color_or_temp == \"include_temperature\"
%}\n {{ { \"transition\": transition_time, \"brightness\": dynamic_brightness,
\"color_temp\": light_temperature } }}\n {% else %}\n {{ { \"transition\":
transition_time, \"brightness_pct\": dynamic_brightness_pct } }}\n {% endif
%}\n{% endif %}\n"
transition_time, \"brightness\": dynamic_brightness } }}\n {% endif %}\n{%
endif %}\n"
target: !input target_light
- if: !input turn_off_conditions
then:
@ -420,11 +440,11 @@ action:
timeout: !input staircase_duration
else:
- delay: !input staircase_duration
- service: homeassistant.turn_off
- action: homeassistant.turn_off
target: !input target_light
- conditions: '{{ "trigger" in include_turn_off and not "staircase" in include_turn_off
}}'
sequence:
- wait_for_trigger: !input turn_off_triggers
- service: homeassistant.turn_off
- action: homeassistant.turn_off
target: !input target_light

View File

@ -10,6 +10,7 @@ blueprint:
selector:
entity:
integration: cast
multiple: false
view:
name: Lovelace view path
description: Path of the view to cast. A path has to be defined in your Lovelace
@ -21,11 +22,11 @@ blueprint:
source_url: https://community.home-assistant.io/t/cast-and-re-cast-a-lovelace-view-to-a-google-hub/259631
trigger:
- platform: state
entity_id: !input 'player'
entity_id: !input player
to: 'off'
for: 00:00:20
- platform: state
entity_id: !input 'player'
entity_id: !input player
to: paused
for: 00:00:20
- platform: time_pattern
@ -38,38 +39,38 @@ action:
- condition: or
conditions:
- condition: state
entity_id: !input 'player'
entity_id: !input player
state: 'off'
- condition: state
entity_id: !input 'player'
entity_id: !input player
state: paused
for: 00:00:20
sequence:
- service: media_player.volume_mute
data:
is_volume_muted: true
entity_id: !input 'player'
entity_id: !input player
- service: media_player.turn_off
data:
entity_id: !input 'player'
entity_id: !input player
- delay:
seconds: 2
- service: media_player.turn_on
data:
entity_id: !input 'player'
entity_id: !input player
- service: cast.show_lovelace_view
data:
view_path: !input 'view'
dashboard_path: !input 'dashboard'
entity_id: !input 'player'
view_path: !input view
dashboard_path: !input dashboard
entity_id: !input player
- service: cast.show_lovelace_view
data:
view_path: !input 'view'
dashboard_path: !input 'dashboard'
entity_id: !input 'player'
view_path: !input view
dashboard_path: !input dashboard
entity_id: !input player
- delay:
seconds: 10
- service: media_player.volume_mute
data:
is_volume_muted: false
entity_id: !input 'player'
entity_id: !input player

View File

@ -116,6 +116,7 @@ recorder:
- sensor.portainer*
- sensor.mosquitto*
- sensor.*_rssi
- sensor.weatherflow_hub*
entities:
- sensor.avg_ping
- sensor.max_ping
@ -130,6 +131,8 @@ recorder:
- sensor.mariadb_database_size
- sensor.random_joke
- sensor.bypassed_sensors
- sensor.home_tempest_signal_strength
- sensor.home_tempest_uptime
include:
entities:
- media_player.living_room_tv
@ -175,6 +178,8 @@ influxdb:
entity_globs:
- binary_sensor.*tamper*
- light.*screen*
- sensor.weatherflow_hub*
- sensor.home_tempest*
entities:
- sensor.last_boot
- sensor.date
@ -187,6 +192,8 @@ influxdb:
- light.all_lights
- fan.all_fans
- sensor.random_joke
- sensor.home_tempest_signal_strength
- sensor.home_tempest_uptime
include:
domains:
- sun
@ -356,6 +363,8 @@ prometheus:
exclude_entity_globs:
- binary_sensor.*tamper*
- light.*screen*
- sensor.weatherflow_hub*
- sensor.home_tempest*
exclude_entities:
- sensor.last_boot
- sensor.date
@ -368,6 +377,8 @@ prometheus:
- light.all_lights
- fan.all_fans
- sensor.random_joke
- sensor.home_tempest_signal_strength
- sensor.home_tempest_uptime
include_domains:
- sun
- light

View File

@ -3,6 +3,7 @@ weather:
name: "Iron Nerd Weather Station"
condition_template: >
{% set stations = [
states.weather.home_tempest_forecast_home,
states.weather.home,
states.weather.kdfi_daynight,
states.weather.iron_nerd_studios,
@ -12,6 +13,7 @@ weather:
{{ states(result) }}
temperature_template: >
{% set temps = [
states.sensor.home_tempest_temperature,
states.sensor.home_temperature,
states.sensor.kdfi_temperature,
states.sensor.pirateweather_temperature,
@ -20,8 +22,28 @@ weather:
{% set sensor = temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }}
temperature_unit: °F
dew_point_template: >
{% set dewpoints = [
states.sensor.home_tempest_dew_point,
states.sensor.home_dew_point,
states.sensor.kdfi_dew_point,
states.sensor.pirateweather_dew_point,
states.sensor.openweathermap_dew_point
] %}
{% set sensor = dewpoints | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }}
apparent_temperature_template: >
{% set apparent_temps = [
states.sensor.home_tempest_feels_like,
states.sensor.home_temperature_feels_like,
states.sensor.pirateweather_apparent_temperature,
states.sensor.stratton_ave_apparent_temperature
] %}
{% set sensor = apparent_temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }}
humidity_template: >
{% set humidity = [
states.sensor.home_tempest_humidity,
states.sensor.home_relative_humidity,
states.sensor.kdfi_relative_humidity,
states.sensor.pirateweather_humidity,
@ -31,6 +53,7 @@ weather:
{{ states(result) | float }}
forecast_daily_template: >
{% set forecasts = [
states.sensor.weatherflow_daily_weather_forecast.attributes,
states.sensor.weather_com_daily_weather_forecast.attributes,
states.weather.kdfi_daynight.attributes,
states.sensor.pirateweather_daily_weather_forecast.attributes,
@ -40,12 +63,14 @@ weather:
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
forecast_hourly_template: >
{% set forecasts = [
states.sensor.weatherflow_hourly_weather_forecast.attributes,
states.sensor.weather_com_hourly_weather_forecast,
states.sensor.pirateweather_hourly_weather_forecast.attributes
] %}
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: >
{% set pressures = [
states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure
] %}
@ -92,6 +117,7 @@ weather:
name: "Iron Nerd Weather Station - Hourly"
condition_template: >
{% set stations = [
states.weather.home_tempest_forecast_home,
states.weather.home,
states.weather.tomorrow_io_stratton_ave_hourly,
states.weather.iron_nerd_studios,
@ -102,6 +128,7 @@ weather:
{{ states(result) }}
temperature_template: >
{% set temps = [
states.sensor.home_tempest_temperature,
states.sensor.home_temperature,
states.sensor.kdfi_temperature,
states.sensor.pirateweather_temperature,
@ -110,8 +137,28 @@ weather:
{% set sensor = temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }}
temperature_unit: °F
dew_point_template: >
{% set dewpoints = [
states.sensor.home_tempest_dew_point,
states.sensor.home_dew_point,
states.sensor.kdfi_dew_point,
states.sensor.pirateweather_dew_point,
states.sensor.openweathermap_dew_point
] %}
{% set sensor = dewpoints | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }}
apparent_temperature_template: >
{% set apparent_temps = [
states.sensor.home_tempest_feels_like,
states.sensor.home_temperature_feels_like,
states.sensor.pirateweather_apparent_temperature,
states.sensor.stratton_ave_apparent_temperature
] %}
{% set sensor = apparent_temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }}
humidity_template: >
{% set humidity = [
states.sensor.home_tempest_humidity,
states.sensor.home_relative_humidity,
states.sensor.kdfi_relative_humidity,
states.sensor.pirateweather_humidity,
@ -121,6 +168,7 @@ weather:
{{ states(result) | float }}
forecast_hourly_template: >
{% set forecasts = [
states.sensor.weatherflow_hourly_weather_forecast.attributes,
states.sensor.weather_com_hourly_weather_forecast,
states.weather.tomorrow_io_stratton_ave_hourly.attributes,
states.sensor.pirateweather_hourly_weather_forecast.attributes
@ -128,6 +176,7 @@ weather:
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: >
{% set pressures = [
states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure
] %}
@ -322,6 +371,60 @@ sensor:
# days: 7
template:
- trigger:
- platform: time_pattern
minutes: /15
- platform: state
entity_id: weather.home_tempest_forecast_home
- platform: homeassistant
event: start
action:
- service: weather.get_forecasts
data:
type: daily
target:
entity_id: weather.home_tempest_forecast_home
response_variable: daily
- variables:
today: "{{ daily['weather.home_tempest_forecast_home'].forecast[0] }}"
sensor:
- name: Weatherflow Daily Weather Forecast
unique_id: 2c70c4ee-7f7f-42b4-ad40-90ce2b6c6d77
state: "{{ now().isoformat() }}"
attributes:
forecast: "{{ daily['weather.home_tempest_forecast_home'].forecast }}"
- name: Weatherflow High
unique_id: 296b4361-459a-48e7-9793-c003b88fcdef
state: "{{ today.temperature }}"
unit_of_measurement: °F
- name: Weatherflow Low
unique_id: 61c344be-33d3-4e1d-8d0d-277c2b850c0d
state: "{{ today.templow }}"
unit_of_measurement: °F
- name: Weatherflow Rain Chance Today
unique_id: ab0327ff-f20f-4d16-aeb5-78682b3e2397
state: "{{ today.precipitation_probability }}"
unit_of_measurement: "%"
- trigger:
- platform: time_pattern
minutes: /15
- platform: state
entity_id: weather.home_tempest_forecast_home
- platform: homeassistant
event: start
action:
- service: weather.get_forecasts
data:
type: hourly
target:
entity_id: weather.home_tempest_forecast_home
response_variable: hourly
sensor:
- name: Weatherflow Hourly Weather Forecast
unique_id: aa0b368c-ea23-4514-a697-e122353eb76d
state: "{{ now().isoformat() }}"
attributes:
forecast: "{{ hourly['weather.home_tempest_forecast_home'].forecast }}"
- trigger:
- platform: time_pattern
minutes: /15
@ -668,10 +771,10 @@ template:
{% endif %}
- name: "Lightning Warning"
unique_id: edaddfc4-f7f0-4d75-aada-a2c588afe029
state: "{{ states('sensor.blitzortung_lightning_counter') | int > 0 }}"
state: "{{ states('sensor.home_tempest_cloud_sensors_lightning_strikes_last_hour') | int > 0 }}"
device_class: safety
attributes:
current_strikes: "{{ states('sensor.blitzortung_lightning_counter') | int }}"
current_strikes: "{{ states('sensor.home_tempest_cloud_sensors_lightning_strikes_last_hour') | int }}"
icon: "{{ 'mdi:flash-alert' if states('sensor.blitzortung_lightning_counter') | int > 0 else 'mdi:flash-outline'}}"
- name: "Audible Weather Alerts Allowed"
unique_id: 03851823-32d5-44c1-af42-256fcd922069
@ -709,11 +812,13 @@ template:
unit_of_measurement: 'sensors'
state: >
{% set sensors = [
states.sensor.home_tempest_precipitation_type,
states.sensor.pirateweather_precip,
states.sensor.openweathermap_precipitation_kind,
states.sensor.tomorrow_io_stratton_ave_precipitation_type
] %}
{% set numeric_sensors = [
states.sensor.home_tempest_precipitation_intensity,
states.sensor.stratton_ave_precipitation
] %}
{% set c1 = sensors | selectattr('state','eq','rain') | list | count %}
@ -723,30 +828,30 @@ template:
unique_id: c0faea33-2ac3-40f1-8558-584c3f5d6b16
icon: mdi:weather-sunny
state: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{{ forecast.condition }}
attributes:
high_temp: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{{ forecast.temperature }}
overnight_low: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{{ forecast.templow }}
wind_bearing: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{{ forecast.wind_bearing }}
wind_speed: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{{ forecast.wind_speed }}
precipitation: >-
{% if state_attr('weather.iron_nerd_weather_station','precipitation') %}
{% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %}
{% else %}
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{% endif %}
{{ forecast.precipitation }}
friendly: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{{ forecast.condition | replace("partlycloudy","partly cloudy") }}
- name: Current Forecast Detail
unique_id: e5ae9864-70b5-402c-9d2f-c4d6a10085df
@ -861,23 +966,23 @@ template:
unique_id: a8ae26b0-ed26-4568-bb2b-f7c72707b009
icon: mdi:weather-sunny
state: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[1] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[1] %}
{{ forecast.condition }}
attributes:
high_temp: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[1] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[1] %}
{{ forecast.temperature }}
overnight_low: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[1] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[1] %}
{{ forecast.templow }}
wind_bearing: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[1] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[1] %}
{{ forecast.wind_bearing }}
wind_speed: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[1] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[1] %}
{{ forecast.wind_speed }}
precipitation: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[1] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[1] %}
{{ forecast.precipitation }}
- name: Tomorrow Forecast Detail
unique_id: 21374ed0-80d1-49ba-817d-3e93eb3865e4
@ -1182,7 +1287,7 @@ template:
unit_of_measurement: '°F'
device_class: temperature
state: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{% if is_number(forecast.temperature) %}
{{ forecast.temperature }}
{% else %}
@ -1193,14 +1298,14 @@ template:
unit_of_measurement: '°F'
device_class: temperature
state: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[2] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[2] %}
{{ forecast.temperature }}
- name: "Tonight's Low Temp"
unique_id: 8ddc55b6-4728-4897-a32f-90be970f744b
unit_of_measurement: '°F'
device_class: temperature
state: >-
{% set forecast = state_attr('sensor.weather_com_daily_weather_forecast','forecast')[0] %}
{% set forecast = state_attr('sensor.weatherflow_daily_weather_forecast','forecast')[0] %}
{{ forecast.templow }}
- name: "Clothing Forecast"
unique_id: 8ed2684b-d0ad-402c-bc3c-340cb9b2437a
@ -1461,8 +1566,8 @@ template:
unit_of_measurement: '°F'
state: >
{% set ns = namespace(temps=[]) %}
{% set x = state_attr('sensor.weather_com_hourly_weather_forecast','forecast') | count %}
{% set pd = state_attr('sensor.weather_com_hourly_weather_forecast','forecast') %}
{% set x = state_attr('sensor.weatherflow_hourly_weather_forecast','forecast') | count %}
{% set pd = state_attr('sensor.weatherflow_hourly_weather_forecast','forecast') %}
{% for i in range(0,x) %}
{% set hr = as_timestamp(as_local(as_datetime(pd[i].datetime))) | timestamp_custom('%H') | int %}
{% if hr in range(21,24) or hr in range(0,8) %}

11
packages/dashboards.yaml Normal file
View File

@ -0,0 +1,11 @@
template:
- trigger:
- trigger: event
event_type: bubble_card_update_modules
sensor:
- name: "Bubble Card Modules"
state: "saved"
icon: "mdi:puzzle"
attributes:
modules: "{{ trigger.event.data.modules }}"
last_updated: "{{ trigger.event.data.last_updated }}"

View File

@ -207,6 +207,14 @@ input_number:
step: 5
unit_of_measurement: lx
icon: mdi:sun-wireless
front_porch_lux_threshold:
name: Front Porch Lux Threshold
min: 0
max: 2000
step: 5
mode: box
unit_of_measurement: lx
icon: mdi:sun-wireless
# Settings for adaptive adjustments
daytime_colortemp_front_porch:

View File

@ -2,11 +2,9 @@ # Tony's Home Assistant Configs
Just a place to track my work on my personal Home Assistant configuration, and learn as I go. Maybe also TRY to keep myself a little bit more organized ;)
## New location for Node-RED flows
## Node-RED flows
I have recently started using the Node-RED Projects feature, which makes version control for my flows a LOT easier than it was before.
With this change, the Node-RED flows are now in their own repo. They can be found at [HA-NerdFlows](https://github.com/tm24fan8/HA-NerdFlows).
My Node-RED flows can be found at [HA-NerdFlows](https://gitea.nerdhomeinc.com/home_automation/HA-NerdFlows). Additionally, code used in function nodes in my Node-RED flows can be found at [HA-NerdFlows-Functions](https://gitea.nerdhomeinc.com/home_automation/HA-NerdFlows-Functions).
## Attributions
@ -34,7 +32,6 @@ ## HACS Components
- [Node-RED Companion](https://github.com/zachowj/hass-node-red)
- [Holidays](https://github.com/bruxy70/Holidays)
- [Twitch Helix](https://github.com/Radioh/ha_twitch_helix)
- [Local Tuya](https://github.com/rospogrigio/localtuya)
- [Pirate Weather](https://github.com/alexander0042/pirate-weather-ha)
- [Holidays](https://github.com/bruxy70/Holidays)
- [Thermal Comfort](https://github.com/dolezsa/thermal_comfort)
@ -42,7 +39,7 @@ ## HACS Components
- [HASS.Agent Media Player](https://github.com/LAB02-Research/HASS.Agent-MediaPlayer)
- [Music Assistant](https://github.com/music-assistant/hass-music-assistant)
- [Blitzortung Lightning Detector](https://github.com/mrk-its/homeassistant-blitzortung)
- [Midea Air Conditioning](https://github.com/mill1000/midea-ac-py)
- [Midea Air Conditioning](https://github.com/wuwentao/midea_ac_lan)
- [WeatherAPI](https://github.com/iprak/weatherapi)
- [Browser Mod](https://github.com/thomasloven/hass-browser_mod)
- [Watchman](https://github.com/dummylabs/thewatchman)
@ -50,7 +47,6 @@ ## HACS Components
- [PyScript](https://github.com/custom-components/pyscript)
- [Hass Animated Scenes](https://github.com/chazzu/hass-animated-scenes)
- [Jokes](https://github.com/LaggAt/ha-jokes)
- [Google Photos](https://github.com/Daanoz/ha-google-photos)
- [Uptime Kuma](https://github.com/meichthys/uptime_kuma)
- [Jellyfin](https://github.com/koying/jellyfin_ha)
- [Sonoff LAN](https://github.com/AlexxIT/SonoffLAN)
@ -58,6 +54,9 @@ ## HACS Components
- [Govee LAN Control](https://github.com/wez/govee-lan-hass)
- [Discord Game](https://github.com/LordBoos/discord_game)
- [Versatile Thermostat](https://github.com/jmcollin78/versatile_thermostat)
- [GasBuddy](https://github.com/firstof9/ha-gasbuddy)
- [Union Pacific Big Boy Tracker](https://github.com/jheizer/up_4014_tracker)
- [WeatherFlow Forecast](https://github.com/briis/weatherflow_forecast)
</details>
@ -70,22 +69,19 @@ ## HACS Lovelace Cards
- [Bubble Card](https://github.com/Clooos/Bubble-Card) Backbone of the new mobile dashboard
- [Config Template Card](https://github.com/iantrich/config-template-card)
- [Decluttering Card](https://github.com/custom-cards/decluttering-card)
- [Card Tools](https://github.com/thomasloven/lovelace-card-tools) (required for various other cards)
- [Streamline Card](https://github.com/brunosabot/streamline-card)
- [Layout Card](https://github.com/thomasloven/lovelace-layout-card)
- [Scheduler Card](https://github.com/nielsfaber/scheduler-card) (required for Scheduler component)
- [Horizon Card](https://github.com/rejuvenate/lovelace-horizon-card)
- [Lovelace Home Feed Card](https://github.com/gadgetchnnel/lovelace-home-feed-card)
- [Mini Graph Card](https://github.com/kalkih/mini-graph-card)
- [Battery State Card](https://github.com/maxwroc/battery-state-card)
- [Compass Card](https://github.com/tomvanswam/compass-card)
- [Flipdown Timer Card](https://github.com/pmongloid/flipdown-timer-card)
- [Atomic Calendar Revive](https://github.com/totaldebug/atomic-calendar-revive)
- [Plotly Graph Card](https://github.com/dbuezas/lovelace-plotly-graph-card)
- [Mushroom](https://github.com/piitaya/lovelace-mushroom)
- [Apexcharts Card](https://github.com/RomRider/apexcharts-card)
- [Auto Entities Card](https://github.com/thomasloven/lovelace-auto-entities)
- [Slider Button Card](https://github.com/custom-cards/slider-button-card)
- [Weather Radar Card](https://github.com/Makin-Things/weather-radar-card)
- [Stack In Card](https://github.com/custom-cards/stack-in-card)
- [Paper Buttons Row](https://github.com/jcwillox/lovelace-paper-buttons-row)
@ -93,32 +89,24 @@ ## HACS Lovelace Cards
- [Multiple Entity Row](https://github.com/benct/lovelace-multiple-entity-row)
- [Weather Card](https://github.com/bramkragten/weather-card)
- [Template Entity Row](https://github.com/thomasloven/lovelace-template-entity-row)
- [Canvas Gauge Card](https://github.com/custom-cards/canvas-gauge-card)
- [Datetime Card](https://github.com/a-p-z/datetime-card)
- [Waze Travel Time](https://github.com/r-renato/ha-card-waze-travel-time)
- [Fold Entity Row](https://github.com/thomasloven/lovelace-fold-entity-row)
- [Slider Entity Row](https://github.com/thomasloven/lovelace-slider-entity-row)
- [Room Card](https://github.com/marcokreeft87/room-card)
- [Simple Thermostat Card](https://github.com/nervetattoo/simple-thermostat)
- [Clock Weather Card](https://github.com/pkissling/clock-weather-card)
- [Tabbed Card](https://github.com/kinghat/tabbed-card)
- [HA Team Tracker Card](https://github.com/vasqued2/ha-teamtracker-card)
- [Banner Card](https://github.com/nervetattoo/banner-card)
- [Lovelace Lock Card](https://github.com/CyrisXD/love-lock-card)
- [Card Templater](https://github.com/gadgetchnnel/lovelace-card-templater)
- [Energy Overview Card](https://github.com/Sese-Schneider/ha-energy-overview-card)
- [Button Card](https://github.com/custom-cards/button-card)
- [Number Box Card](https://github.com/htmltiger/numberbox-card)
- [Restriction Card](https://github.com/iantrich/restriction-card)
- [Timer Bar Card](https://github.com/rianadon/timer-bar-card)
- [Minimalistic Area Card](https://github.com/junalmeida/homeassistant-minimalistic-area-card)
- [Sankey Chart Card](https://github.com/MindFreeze/ha-sankey-chart)
- [Hourly Weather Card](https://github.com/decompil3d/lovelace-hourly-weather)
- [Formula One Card](https://github.com/marcokreeft87/formulaone-card)
- [UV Index Card](https://github.com/t1gr0u/uv-index-card)
- [Github Flexi Card](https://github.com/maxwroc/github-flexi-card)
- [Windrose Card](https://github.com/aukedejong/lovelace-windrose-card)
- [Swipe Card](https://github.com/bramkragten/swipe-card)
- [Meteoalarm Card](https://github.com/MrBartusek/MeteoalarmCard)
- [Weather Chart Card](https://github.com/mlamberts78/weather-chart-card)
- [Comfortable Environment Card](https://github.com/argaar/comfortable-environment-card)
@ -135,6 +123,16 @@ ## AppDaemon Apps
</details>
## Custom Jinja2 Templates/Macros
<details>
<summary>Click here</summary>
- [Easy Time](https://github.com/Petro31/easy-time-jinja)
- [Relative Time](https://github.com/TheFes/relative-time-plus)
</details>
## Themes/Icons
<details>
@ -146,5 +144,6 @@ ## Themes/Icons
- [BHA Icon Pack](https://github.com/hulkhaugen/hass-bha-icons)
- [Custom Icons Library](https://github.com/Mariusthvdb/custom-icons)
- [FontAwesome](https://github.com/thomasloven/hass-fontawesome)
- [Material Symbols](https://github.com/beecho01/material-symbols)
</details>