Compare commits

...

18 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
11 changed files with 6275 additions and 3027 deletions

View File

@ -1 +1 @@
2025.5.0 2025.5.1

View File

@ -69,15 +69,6 @@
seconds: 0 seconds: 0
milliseconds: 0 milliseconds: 0
mode: single 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' - id: '1640989510134'
alias: New Years alias: New Years
description: Flash lights for New Years description: Flash lights for New Years
@ -281,15 +272,6 @@
- service: icloud3.restart - service: icloud3.restart
data: {} data: {}
mode: single 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' - id: '1651785688186'
alias: Watchman Audit on Startup alias: Watchman Audit on Startup
description: Runs the Watchman Audit script after Home Assistant has successfully description: Runs the Watchman Audit script after Home Assistant has successfully
@ -3015,18 +2997,21 @@
- id: '1696556688808' - id: '1696556688808'
alias: Rain Window Warning alias: Rain Window Warning
description: Warn when it starts raining and a window is open description: Warn when it starts raining and a window is open
trigger: triggers:
- platform: state - alias: Rain starts
entity_id: binary_sensor.raining entity_id:
from: 'off' - sensor.home_tempest_precipitation_type
to: 'on' from: none
alias: Rain starts not_to:
condition: - unavailable
- unknown
trigger: state
conditions:
- condition: state - condition: state
entity_id: binary_sensor.windows entity_id: binary_sensor.windows
state: 'on' state: 'on'
alias: Windows are open alias: Windows are open
action: actions:
- variables: - variables:
porch: "{% set windows = states('sensor.windows_open') | int %} {% set front porch: "{% set windows = states('sensor.windows_open') | int %} {% set front
= states('sensor.front_windows_open') | int %} {% if windows == front %}\n = states('sensor.front_windows_open') | int %} {% if windows == front %}\n
@ -3037,36 +3022,36 @@
house. Please close them!\n{% endif %}\n" house. Please close them!\n{% endif %}\n"
alias: Define variables alias: Define variables
- parallel: - parallel:
- service: script.text_notify - data:
data:
type: alert type: alert
who: all who: all
title: WINDOWS ARE OPEN! title: WINDOWS ARE OPEN!
message: '{{ message }}' message: '{{ message }}'
tag: rain-window-warning tag: rain-window-warning
alias: Send text notification alias: Send text notification
- service: script.speech_engine action: script.text_notify
data: - data:
who: everywhere who: everywhere
type: weather type: weather
message: '{{ message }}' message: '{{ message }}'
alias: TTS notification alias: TTS notification
- service: script.living_room_lights_alert action: script.speech_engine
data: - data:
type: blue type: blue
duration: 10 duration: 10
alias: Light alert in living room alias: Light alert in living room
action: script.living_room_lights_alert
- if: - if:
- condition: state - condition: state
entity_id: binary_sensor.basement_occupied entity_id: binary_sensor.basement_occupied
state: 'on' state: 'on'
alias: Basement is occupied alias: Basement is occupied
then: then:
- service: script.basement_lights_alert - data:
data:
type: blue type: blue
duration: 10 duration: 10
alias: Light alert in basement alias: Light alert in basement
action: script.basement_lights_alert
alias: Light alert in basement, if occupied alias: Light alert in basement, if occupied
alias: Send the various alerts alias: Send the various alerts
- wait_template: '{{ is_state(''binary_sensor.windows'',''off'') or is_state(''binary_sensor.raining'',''off'') - 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 alias: Windows closed and still raining
sequence: sequence:
- service: script.text_notify - data:
data:
type: alert type: alert
who: all who: all
message: clear_notification message: clear_notification
tag: rain-window-warning tag: rain-window-warning
alias: Clear text notification alias: Clear text notification
- service: script.speech_engine action: script.text_notify
data: - data:
who: common who: common
type: weather type: weather
message: Windows are now closed. Thank you, and enjoy your dry house. message: Windows are now closed. Thank you, and enjoy your dry house.
alias: TTS notification alias: TTS notification
action: script.speech_engine
- conditions: - conditions:
- condition: template - condition: template
value_template: '{{ is_state(''binary_sensor.raining'',''off'') }}' value_template: '{{ is_state(''binary_sensor.raining'',''off'') }}'
alias: Stopped raining alias: Stopped raining
sequence: sequence:
- service: script.text_notify - data:
data:
type: alert type: alert
who: all who: all
message: clear_notification message: clear_notification
tag: rain-window-warning tag: rain-window-warning
alias: Clear text notification alias: Clear text notification
- service: script.speech_engine action: script.text_notify
data: - data:
who: common who: common
type: weather type: weather
message: Nevermind, it has stopped raining. Feel free to do whatever you'd message: Nevermind, it has stopped raining. Feel free to do whatever you'd
like with the windows. like with the windows.
alias: TTS notification alias: TTS notification
action: script.speech_engine
default: default:
- service: script.speech_engine - data:
data:
who: common who: common
type: weather type: weather
message: Well, I guess no one cares if the house floods. Suit yourself, but message: Well, I guess no one cares if the house floods. Suit yourself, but
do not say I didn't warn you. do not say I didn't warn you.
alias: TTS notification alias: TTS notification
action: script.speech_engine
alias: After wait completed alias: After wait completed
mode: single mode: single
- id: '1696884613752' - id: '1696884613752'
@ -6173,3 +6158,49 @@
- input_boolean.tina_night_meds_taken - input_boolean.tina_night_meds_taken
alias: Reset Tina meds taken switches alias: Reset Tina meds taken switches
mode: restart 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: blueprint:
name: Smart Lux Dimmer name: Smart Lux Dimmer
author: AntonH author: AntonH
description: 'Version 4.1 description: 'Version 4.3
Switch or dim lights based on the value of a light sensor. Switch or dim lights based on the value of a light sensor.
@ -24,7 +24,8 @@ blueprint:
value? value?
selector: selector:
entity: entity:
domain: filter:
- domain:
- sensor - sensor
device_class: device_class:
- illuminance - illuminance
@ -81,8 +82,8 @@ blueprint:
min: 0.0 min: 0.0
max: 100.0 max: 100.0
step: 1.0 step: 1.0
mode: slider
unit_of_measurement: '%' unit_of_measurement: '%'
mode: slider
light_value_2: light_value_2:
name: Brightness at minimum light level name: Brightness at minimum light level
description: Brightness of the light at minimum ambient light. description: Brightness of the light at minimum ambient light.
@ -92,8 +93,8 @@ blueprint:
min: 0.0 min: 0.0
max: 100.0 max: 100.0
step: 1.0 step: 1.0
mode: slider
unit_of_measurement: '%' unit_of_measurement: '%'
mode: slider
transition_time: transition_time:
name: Transition time name: Transition time
description: 'The time it takes for the light to transition from the set value description: 'The time it takes for the light to transition from the set value
@ -124,9 +125,9 @@ blueprint:
value: include_color value: include_color
- label: Set temperature - label: Set temperature
value: include_temp value: include_temp
multiple: false
sort: false
custom_value: false custom_value: false
sort: false
multiple: false
light_color: light_color:
name: Light color name: Light color
description: Color of the light when between minimum and maximum ambient light description: Color of the light when between minimum and maximum ambient light
@ -161,8 +162,8 @@ blueprint:
min: 0.0 min: 0.0
max: 100.0 max: 100.0
step: 1.0 step: 1.0
mode: slider
unit_of_measurement: '%' unit_of_measurement: '%'
mode: slider
light_brightness_under_min: light_brightness_under_min:
name: Brightness when ambient light value under min. name: Brightness when ambient light value under min.
description: Brightness of the light when the ambient light is lower than the description: Brightness of the light when the ambient light is lower than the
@ -173,8 +174,8 @@ blueprint:
min: 0.0 min: 0.0
max: 100.0 max: 100.0
step: 1.0 step: 1.0
mode: slider
unit_of_measurement: '%' unit_of_measurement: '%'
mode: slider
include_color_or_temp_over_under: include_color_or_temp_over_under:
name: Include color or temperature values when outside range name: Include color or temperature values when outside range
description: 'Set a color or temperature value for the light when over maximum description: 'Set a color or temperature value for the light when over maximum
@ -193,9 +194,9 @@ blueprint:
value: include_color_outside_range value: include_color_outside_range
- label: Set temperature when outside range - label: Set temperature when outside range
value: include_temp_outside_range value: include_temp_outside_range
multiple: false
sort: false
custom_value: false custom_value: false
sort: false
multiple: false
light_color_over_max: light_color_over_max:
name: Color when ambient light value over max. name: Color when ambient light value over max.
description: Color of the light when the ambient light is higher than the set 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_brightness_over_under: !input include_brightness_over_under
include_color_or_temp_over_under: !input include_color_or_temp_over_under include_color_or_temp_over_under: !input include_color_or_temp_over_under
light_sensor: !input light_sensor_entity light_sensor: !input light_sensor_entity
maxB: !input max_brightness_value max_brightness_value: !input max_brightness_value
minB: !input min_brightness_value min_brightness_value: !input min_brightness_value
light1: !input light_value_1 maxB: '{{ max_brightness_value * 2.55 }}'
light2: !input light_value_2 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 ) }}' slope: '{{ ( light1 - light2 ) / ( maxB - minB ) }}'
constant: '{{ light1 - ( slope * maxB ) }}' constant: '{{ light1 - ( slope * maxB ) }}'
trigger: light_brightness_over_max: !input light_brightness_over_max
platform: state 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 entity_id: !input light_sensor_entity
condition: conditions: !input run_conditions
- condition: !input run_conditions actions:
action:
- choose: - choose:
- conditions: - conditions:
- condition: template - condition: template
@ -258,20 +266,20 @@ action:
- condition: template - condition: template
value_template: '{{ include_color_or_temp == "include_no_color_temp" }}' value_template: '{{ include_color_or_temp == "include_no_color_temp" }}'
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time 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 target: !input target_light
- conditions: - conditions:
- condition: template - condition: template
value_template: '{{ include_color_or_temp == "include_color" }}' value_template: '{{ include_color_or_temp == "include_color" }}'
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time 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 rgb_color: !input light_color
target: !input target_light target: !input target_light
@ -279,10 +287,10 @@ action:
- condition: template - condition: template
value_template: '{{ include_color_or_temp == "include_temp" }}' value_template: '{{ include_color_or_temp == "include_temp" }}'
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time 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 color_temp: !input light_temp
target: !input target_light target: !input target_light
@ -302,20 +310,20 @@ action:
entity_id: !input light_sensor_entity entity_id: !input light_sensor_entity
above: !input max_brightness_value above: !input max_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time transition: !input transition_time
brightness_pct: !input light_brightness_over_max brightness: '{{ brightness_over_max_pct }}'
target: !input target_light target: !input target_light
- conditions: - conditions:
- condition: numeric_state - condition: numeric_state
entity_id: !input light_sensor_entity entity_id: !input light_sensor_entity
below: !input min_brightness_value below: !input min_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time transition: !input transition_time
brightness_pct: !input light_brightness_under_min brightness: '{{ brightness_under_min_pct }}'
target: !input target_light target: !input target_light
- conditions: - conditions:
- condition: numeric_state - condition: numeric_state
@ -323,10 +331,10 @@ action:
below: !input max_brightness_value below: !input max_brightness_value
above: !input min_brightness_value above: !input min_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time 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 target: !input target_light
- conditions: - conditions:
@ -340,10 +348,10 @@ action:
entity_id: !input light_sensor_entity entity_id: !input light_sensor_entity
above: !input max_brightness_value above: !input max_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time transition: !input transition_time
brightness_pct: !input light_brightness_over_max brightness: '{{ brightness_over_max_pct }}'
rgb_color: !input light_color_over_max rgb_color: !input light_color_over_max
target: !input target_light target: !input target_light
- conditions: - conditions:
@ -351,10 +359,10 @@ action:
entity_id: !input light_sensor_entity entity_id: !input light_sensor_entity
below: !input min_brightness_value below: !input min_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time transition: !input transition_time
brightness_pct: !input light_brightness_under_min brightness: '{{ brightness_under_min_pct }}'
rgb_color: !input light_color_under_min rgb_color: !input light_color_under_min
target: !input target_light target: !input target_light
- conditions: - conditions:
@ -363,10 +371,10 @@ action:
below: !input max_brightness_value below: !input max_brightness_value
above: !input min_brightness_value above: !input min_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time 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 rgb_color: !input light_color
target: !input target_light target: !input target_light
@ -381,10 +389,10 @@ action:
entity_id: !input light_sensor_entity entity_id: !input light_sensor_entity
above: !input max_brightness_value above: !input max_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time transition: !input transition_time
brightness_pct: !input light_brightness_over_max brightness: '{{ brightness_over_max_pct }}'
color_temp: !input light_temp_over_max color_temp: !input light_temp_over_max
target: !input target_light target: !input target_light
- conditions: - conditions:
@ -392,10 +400,10 @@ action:
entity_id: !input light_sensor_entity entity_id: !input light_sensor_entity
below: !input min_brightness_value below: !input min_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time transition: !input transition_time
brightness_pct: !input light_brightness_under_min brightness: '{{ brightness_under_min_pct }}'
color_temp: !input light_temp_under_min color_temp: !input light_temp_under_min
target: !input target_light target: !input target_light
- conditions: - conditions:
@ -404,10 +412,10 @@ action:
below: !input max_brightness_value below: !input max_brightness_value
above: !input min_brightness_value above: !input min_brightness_value
sequence: sequence:
- service: light.turn_on - action: light.turn_on
data: data:
transition: !input transition_time 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 color_temp: !input light_temp
target: !input target_light target: !input target_light

View File

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

View File

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

View File

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

View File

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

View File

@ -3,6 +3,7 @@ weather:
name: "Iron Nerd Weather Station" name: "Iron Nerd Weather Station"
condition_template: > condition_template: >
{% set stations = [ {% set stations = [
states.weather.home_tempest_forecast_home,
states.weather.home, states.weather.home,
states.weather.kdfi_daynight, states.weather.kdfi_daynight,
states.weather.iron_nerd_studios, states.weather.iron_nerd_studios,
@ -12,6 +13,7 @@ weather:
{{ states(result) }} {{ states(result) }}
temperature_template: > temperature_template: >
{% set temps = [ {% set temps = [
states.sensor.home_tempest_temperature,
states.sensor.home_temperature, states.sensor.home_temperature,
states.sensor.kdfi_temperature, states.sensor.kdfi_temperature,
states.sensor.pirateweather_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 %} {% set sensor = temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }} {{ states(sensor) | float }}
temperature_unit: °F 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: > humidity_template: >
{% set humidity = [ {% set humidity = [
states.sensor.home_tempest_humidity,
states.sensor.home_relative_humidity, states.sensor.home_relative_humidity,
states.sensor.kdfi_relative_humidity, states.sensor.kdfi_relative_humidity,
states.sensor.pirateweather_humidity, states.sensor.pirateweather_humidity,
@ -31,6 +53,7 @@ weather:
{{ states(result) | float }} {{ states(result) | float }}
forecast_daily_template: > forecast_daily_template: >
{% set forecasts = [ {% set forecasts = [
states.sensor.weatherflow_daily_weather_forecast.attributes,
states.sensor.weather_com_daily_weather_forecast.attributes, states.sensor.weather_com_daily_weather_forecast.attributes,
states.weather.kdfi_daynight.attributes, states.weather.kdfi_daynight.attributes,
states.sensor.pirateweather_daily_weather_forecast.attributes, states.sensor.pirateweather_daily_weather_forecast.attributes,
@ -40,12 +63,14 @@ weather:
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }} {{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
forecast_hourly_template: > forecast_hourly_template: >
{% set forecasts = [ {% set forecasts = [
states.sensor.weatherflow_hourly_weather_forecast.attributes,
states.sensor.weather_com_hourly_weather_forecast, states.sensor.weather_com_hourly_weather_forecast,
states.sensor.pirateweather_hourly_weather_forecast.attributes states.sensor.pirateweather_hourly_weather_forecast.attributes
] %} ] %}
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }} {{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: > pressure_template: >
{% set pressures = [ {% set pressures = [
states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure, states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure states.sensor.kdfi_barometric_pressure
] %} ] %}
@ -92,6 +117,7 @@ weather:
name: "Iron Nerd Weather Station - Hourly" name: "Iron Nerd Weather Station - Hourly"
condition_template: > condition_template: >
{% set stations = [ {% set stations = [
states.weather.home_tempest_forecast_home,
states.weather.home, states.weather.home,
states.weather.tomorrow_io_stratton_ave_hourly, states.weather.tomorrow_io_stratton_ave_hourly,
states.weather.iron_nerd_studios, states.weather.iron_nerd_studios,
@ -102,6 +128,7 @@ weather:
{{ states(result) }} {{ states(result) }}
temperature_template: > temperature_template: >
{% set temps = [ {% set temps = [
states.sensor.home_tempest_temperature,
states.sensor.home_temperature, states.sensor.home_temperature,
states.sensor.kdfi_temperature, states.sensor.kdfi_temperature,
states.sensor.pirateweather_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 %} {% set sensor = temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %}
{{ states(sensor) | float }} {{ states(sensor) | float }}
temperature_unit: °F 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: > humidity_template: >
{% set humidity = [ {% set humidity = [
states.sensor.home_tempest_humidity,
states.sensor.home_relative_humidity, states.sensor.home_relative_humidity,
states.sensor.kdfi_relative_humidity, states.sensor.kdfi_relative_humidity,
states.sensor.pirateweather_humidity, states.sensor.pirateweather_humidity,
@ -121,6 +168,7 @@ weather:
{{ states(result) | float }} {{ states(result) | float }}
forecast_hourly_template: > forecast_hourly_template: >
{% set forecasts = [ {% set forecasts = [
states.sensor.weatherflow_hourly_weather_forecast.attributes,
states.sensor.weather_com_hourly_weather_forecast, states.sensor.weather_com_hourly_weather_forecast,
states.weather.tomorrow_io_stratton_ave_hourly.attributes, states.weather.tomorrow_io_stratton_ave_hourly.attributes,
states.sensor.pirateweather_hourly_weather_forecast.attributes states.sensor.pirateweather_hourly_weather_forecast.attributes
@ -128,6 +176,7 @@ weather:
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }} {{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: > pressure_template: >
{% set pressures = [ {% set pressures = [
states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure, states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure states.sensor.kdfi_barometric_pressure
] %} ] %}
@ -322,6 +371,60 @@ sensor:
# days: 7 # days: 7
template: 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: - trigger:
- platform: time_pattern - platform: time_pattern
minutes: /15 minutes: /15
@ -668,10 +771,10 @@ template:
{% endif %} {% endif %}
- name: "Lightning Warning" - name: "Lightning Warning"
unique_id: edaddfc4-f7f0-4d75-aada-a2c588afe029 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 device_class: safety
attributes: 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'}}" icon: "{{ 'mdi:flash-alert' if states('sensor.blitzortung_lightning_counter') | int > 0 else 'mdi:flash-outline'}}"
- name: "Audible Weather Alerts Allowed" - name: "Audible Weather Alerts Allowed"
unique_id: 03851823-32d5-44c1-af42-256fcd922069 unique_id: 03851823-32d5-44c1-af42-256fcd922069
@ -709,11 +812,13 @@ template:
unit_of_measurement: 'sensors' unit_of_measurement: 'sensors'
state: > state: >
{% set sensors = [ {% set sensors = [
states.sensor.home_tempest_precipitation_type,
states.sensor.pirateweather_precip, states.sensor.pirateweather_precip,
states.sensor.openweathermap_precipitation_kind, states.sensor.openweathermap_precipitation_kind,
states.sensor.tomorrow_io_stratton_ave_precipitation_type states.sensor.tomorrow_io_stratton_ave_precipitation_type
] %} ] %}
{% set numeric_sensors = [ {% set numeric_sensors = [
states.sensor.home_tempest_precipitation_intensity,
states.sensor.stratton_ave_precipitation states.sensor.stratton_ave_precipitation
] %} ] %}
{% set c1 = sensors | selectattr('state','eq','rain') | list | count %} {% set c1 = sensors | selectattr('state','eq','rain') | list | count %}
@ -723,30 +828,30 @@ template:
unique_id: c0faea33-2ac3-40f1-8558-584c3f5d6b16 unique_id: c0faea33-2ac3-40f1-8558-584c3f5d6b16
icon: mdi:weather-sunny icon: mdi:weather-sunny
state: >- 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 }} {{ forecast.condition }}
attributes: attributes:
high_temp: >- 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 }} {{ forecast.temperature }}
overnight_low: >- 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 }} {{ forecast.templow }}
wind_bearing: >- 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 }} {{ forecast.wind_bearing }}
wind_speed: >- 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 }} {{ forecast.wind_speed }}
precipitation: >- precipitation: >-
{% if state_attr('weather.iron_nerd_weather_station','precipitation') %} {% if state_attr('weather.iron_nerd_weather_station','precipitation') %}
{% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %} {% set forecast = state_attr('weather.iron_nerd_weather_station','forecast')[0] %}
{% else %} {% 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 %} {% endif %}
{{ forecast.precipitation }} {{ forecast.precipitation }}
friendly: >- 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") }} {{ forecast.condition | replace("partlycloudy","partly cloudy") }}
- name: Current Forecast Detail - name: Current Forecast Detail
unique_id: e5ae9864-70b5-402c-9d2f-c4d6a10085df unique_id: e5ae9864-70b5-402c-9d2f-c4d6a10085df
@ -861,23 +966,23 @@ template:
unique_id: a8ae26b0-ed26-4568-bb2b-f7c72707b009 unique_id: a8ae26b0-ed26-4568-bb2b-f7c72707b009
icon: mdi:weather-sunny icon: mdi:weather-sunny
state: >- 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 }} {{ forecast.condition }}
attributes: attributes:
high_temp: >- 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 }} {{ forecast.temperature }}
overnight_low: >- 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 }} {{ forecast.templow }}
wind_bearing: >- 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 }} {{ forecast.wind_bearing }}
wind_speed: >- 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 }} {{ forecast.wind_speed }}
precipitation: >- 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 }} {{ forecast.precipitation }}
- name: Tomorrow Forecast Detail - name: Tomorrow Forecast Detail
unique_id: 21374ed0-80d1-49ba-817d-3e93eb3865e4 unique_id: 21374ed0-80d1-49ba-817d-3e93eb3865e4
@ -1182,7 +1287,7 @@ template:
unit_of_measurement: '°F' unit_of_measurement: '°F'
device_class: temperature device_class: temperature
state: >- 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) %} {% if is_number(forecast.temperature) %}
{{ forecast.temperature }} {{ forecast.temperature }}
{% else %} {% else %}
@ -1193,14 +1298,14 @@ template:
unit_of_measurement: '°F' unit_of_measurement: '°F'
device_class: temperature device_class: temperature
state: >- 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 }} {{ forecast.temperature }}
- name: "Tonight's Low Temp" - name: "Tonight's Low Temp"
unique_id: 8ddc55b6-4728-4897-a32f-90be970f744b unique_id: 8ddc55b6-4728-4897-a32f-90be970f744b
unit_of_measurement: '°F' unit_of_measurement: '°F'
device_class: temperature device_class: temperature
state: >- 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 }} {{ forecast.templow }}
- name: "Clothing Forecast" - name: "Clothing Forecast"
unique_id: 8ed2684b-d0ad-402c-bc3c-340cb9b2437a unique_id: 8ed2684b-d0ad-402c-bc3c-340cb9b2437a
@ -1461,8 +1566,8 @@ template:
unit_of_measurement: '°F' unit_of_measurement: '°F'
state: > state: >
{% set ns = namespace(temps=[]) %} {% set ns = namespace(temps=[]) %}
{% set x = state_attr('sensor.weather_com_hourly_weather_forecast','forecast') | count %} {% set x = state_attr('sensor.weatherflow_hourly_weather_forecast','forecast') | count %}
{% set pd = state_attr('sensor.weather_com_hourly_weather_forecast','forecast') %} {% set pd = state_attr('sensor.weatherflow_hourly_weather_forecast','forecast') %}
{% for i in range(0,x) %} {% for i in range(0,x) %}
{% set hr = as_timestamp(as_local(as_datetime(pd[i].datetime))) | timestamp_custom('%H') | int %} {% 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) %} {% if hr in range(21,24) or hr in range(0,8) %}

View File

@ -207,6 +207,14 @@ input_number:
step: 5 step: 5
unit_of_measurement: lx unit_of_measurement: lx
icon: mdi:sun-wireless 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 # Settings for adaptive adjustments
daytime_colortemp_front_porch: 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 ;) 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. 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).
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).
## Attributions ## Attributions
@ -34,7 +32,6 @@ ## HACS Components
- [Node-RED Companion](https://github.com/zachowj/hass-node-red) - [Node-RED Companion](https://github.com/zachowj/hass-node-red)
- [Holidays](https://github.com/bruxy70/Holidays) - [Holidays](https://github.com/bruxy70/Holidays)
- [Twitch Helix](https://github.com/Radioh/ha_twitch_helix) - [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) - [Pirate Weather](https://github.com/alexander0042/pirate-weather-ha)
- [Holidays](https://github.com/bruxy70/Holidays) - [Holidays](https://github.com/bruxy70/Holidays)
- [Thermal Comfort](https://github.com/dolezsa/thermal_comfort) - [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) - [HASS.Agent Media Player](https://github.com/LAB02-Research/HASS.Agent-MediaPlayer)
- [Music Assistant](https://github.com/music-assistant/hass-music-assistant) - [Music Assistant](https://github.com/music-assistant/hass-music-assistant)
- [Blitzortung Lightning Detector](https://github.com/mrk-its/homeassistant-blitzortung) - [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) - [WeatherAPI](https://github.com/iprak/weatherapi)
- [Browser Mod](https://github.com/thomasloven/hass-browser_mod) - [Browser Mod](https://github.com/thomasloven/hass-browser_mod)
- [Watchman](https://github.com/dummylabs/thewatchman) - [Watchman](https://github.com/dummylabs/thewatchman)
@ -50,7 +47,6 @@ ## HACS Components
- [PyScript](https://github.com/custom-components/pyscript) - [PyScript](https://github.com/custom-components/pyscript)
- [Hass Animated Scenes](https://github.com/chazzu/hass-animated-scenes) - [Hass Animated Scenes](https://github.com/chazzu/hass-animated-scenes)
- [Jokes](https://github.com/LaggAt/ha-jokes) - [Jokes](https://github.com/LaggAt/ha-jokes)
- [Google Photos](https://github.com/Daanoz/ha-google-photos)
- [Uptime Kuma](https://github.com/meichthys/uptime_kuma) - [Uptime Kuma](https://github.com/meichthys/uptime_kuma)
- [Jellyfin](https://github.com/koying/jellyfin_ha) - [Jellyfin](https://github.com/koying/jellyfin_ha)
- [Sonoff LAN](https://github.com/AlexxIT/SonoffLAN) - [Sonoff LAN](https://github.com/AlexxIT/SonoffLAN)
@ -58,6 +54,9 @@ ## HACS Components
- [Govee LAN Control](https://github.com/wez/govee-lan-hass) - [Govee LAN Control](https://github.com/wez/govee-lan-hass)
- [Discord Game](https://github.com/LordBoos/discord_game) - [Discord Game](https://github.com/LordBoos/discord_game)
- [Versatile Thermostat](https://github.com/jmcollin78/versatile_thermostat) - [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> </details>
@ -70,22 +69,19 @@ ## HACS Lovelace Cards
- [Bubble Card](https://github.com/Clooos/Bubble-Card) Backbone of the new mobile dashboard - [Bubble Card](https://github.com/Clooos/Bubble-Card) Backbone of the new mobile dashboard
- [Config Template Card](https://github.com/iantrich/config-template-card) - [Config Template Card](https://github.com/iantrich/config-template-card)
- [Decluttering Card](https://github.com/custom-cards/decluttering-card) - [Streamline Card](https://github.com/brunosabot/streamline-card)
- [Card Tools](https://github.com/thomasloven/lovelace-card-tools) (required for various other cards)
- [Layout Card](https://github.com/thomasloven/lovelace-layout-card) - [Layout Card](https://github.com/thomasloven/lovelace-layout-card)
- [Scheduler Card](https://github.com/nielsfaber/scheduler-card) (required for Scheduler component) - [Scheduler Card](https://github.com/nielsfaber/scheduler-card) (required for Scheduler component)
- [Horizon Card](https://github.com/rejuvenate/lovelace-horizon-card) - [Horizon Card](https://github.com/rejuvenate/lovelace-horizon-card)
- [Lovelace Home Feed Card](https://github.com/gadgetchnnel/lovelace-home-feed-card) - [Lovelace Home Feed Card](https://github.com/gadgetchnnel/lovelace-home-feed-card)
- [Mini Graph Card](https://github.com/kalkih/mini-graph-card) - [Mini Graph Card](https://github.com/kalkih/mini-graph-card)
- [Battery State Card](https://github.com/maxwroc/battery-state-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) - [Flipdown Timer Card](https://github.com/pmongloid/flipdown-timer-card)
- [Atomic Calendar Revive](https://github.com/totaldebug/atomic-calendar-revive) - [Atomic Calendar Revive](https://github.com/totaldebug/atomic-calendar-revive)
- [Plotly Graph Card](https://github.com/dbuezas/lovelace-plotly-graph-card) - [Plotly Graph Card](https://github.com/dbuezas/lovelace-plotly-graph-card)
- [Mushroom](https://github.com/piitaya/lovelace-mushroom) - [Mushroom](https://github.com/piitaya/lovelace-mushroom)
- [Apexcharts Card](https://github.com/RomRider/apexcharts-card) - [Apexcharts Card](https://github.com/RomRider/apexcharts-card)
- [Auto Entities Card](https://github.com/thomasloven/lovelace-auto-entities) - [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) - [Weather Radar Card](https://github.com/Makin-Things/weather-radar-card)
- [Stack In Card](https://github.com/custom-cards/stack-in-card) - [Stack In Card](https://github.com/custom-cards/stack-in-card)
- [Paper Buttons Row](https://github.com/jcwillox/lovelace-paper-buttons-row) - [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) - [Multiple Entity Row](https://github.com/benct/lovelace-multiple-entity-row)
- [Weather Card](https://github.com/bramkragten/weather-card) - [Weather Card](https://github.com/bramkragten/weather-card)
- [Template Entity Row](https://github.com/thomasloven/lovelace-template-entity-row) - [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) - [Waze Travel Time](https://github.com/r-renato/ha-card-waze-travel-time)
- [Fold Entity Row](https://github.com/thomasloven/lovelace-fold-entity-row) - [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) - [Room Card](https://github.com/marcokreeft87/room-card)
- [Simple Thermostat Card](https://github.com/nervetattoo/simple-thermostat) - [Simple Thermostat Card](https://github.com/nervetattoo/simple-thermostat)
- [Clock Weather Card](https://github.com/pkissling/clock-weather-card) - [Clock Weather Card](https://github.com/pkissling/clock-weather-card)
- [Tabbed Card](https://github.com/kinghat/tabbed-card) - [Tabbed Card](https://github.com/kinghat/tabbed-card)
- [HA Team Tracker Card](https://github.com/vasqued2/ha-teamtracker-card) - [HA Team Tracker Card](https://github.com/vasqued2/ha-teamtracker-card)
- [Banner Card](https://github.com/nervetattoo/banner-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) - [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) - [Button Card](https://github.com/custom-cards/button-card)
- [Number Box Card](https://github.com/htmltiger/numberbox-card) - [Number Box Card](https://github.com/htmltiger/numberbox-card)
- [Restriction Card](https://github.com/iantrich/restriction-card) - [Restriction Card](https://github.com/iantrich/restriction-card)
- [Timer Bar Card](https://github.com/rianadon/timer-bar-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) - [Sankey Chart Card](https://github.com/MindFreeze/ha-sankey-chart)
- [Hourly Weather Card](https://github.com/decompil3d/lovelace-hourly-weather) - [Hourly Weather Card](https://github.com/decompil3d/lovelace-hourly-weather)
- [Formula One Card](https://github.com/marcokreeft87/formulaone-card) - [Formula One Card](https://github.com/marcokreeft87/formulaone-card)
- [UV Index Card](https://github.com/t1gr0u/uv-index-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) - [Windrose Card](https://github.com/aukedejong/lovelace-windrose-card)
- [Swipe Card](https://github.com/bramkragten/swipe-card)
- [Meteoalarm Card](https://github.com/MrBartusek/MeteoalarmCard) - [Meteoalarm Card](https://github.com/MrBartusek/MeteoalarmCard)
- [Weather Chart Card](https://github.com/mlamberts78/weather-chart-card) - [Weather Chart Card](https://github.com/mlamberts78/weather-chart-card)
- [Comfortable Environment Card](https://github.com/argaar/comfortable-environment-card) - [Comfortable Environment Card](https://github.com/argaar/comfortable-environment-card)
@ -135,6 +123,16 @@ ## AppDaemon Apps
</details> </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 ## Themes/Icons
<details> <details>
@ -146,5 +144,6 @@ ## Themes/Icons
- [BHA Icon Pack](https://github.com/hulkhaugen/hass-bha-icons) - [BHA Icon Pack](https://github.com/hulkhaugen/hass-bha-icons)
- [Custom Icons Library](https://github.com/Mariusthvdb/custom-icons) - [Custom Icons Library](https://github.com/Mariusthvdb/custom-icons)
- [FontAwesome](https://github.com/thomasloven/hass-fontawesome) - [FontAwesome](https://github.com/thomasloven/hass-fontawesome)
- [Material Symbols](https://github.com/beecho01/material-symbols)
</details> </details>