Compare commits

...

15 Commits

15 changed files with 1011 additions and 366 deletions

1
.HA_VERSION Normal file
View File

@ -0,0 +1 @@
2025.2.5

20
.gitignore vendored
View File

@ -3,23 +3,20 @@
/.cloud
/.google.token
/.ssh
/.codegpt
# ignore some directories.
/icloud/
/www/
/www/*
/tts/
/deps/
/hadashboards/
/intents/
/themes/
/custom_components
/deps
/hacs
/image
/node-red/
/files
/appdaemon/*
/appdaemon/apps/*
/appdaemon/
/glances/
/downloads/
/lightwand/
@ -27,7 +24,6 @@
# ignore any of these files no matter where they are using double *
**.DS_Store
**._*
**.HA_VERSION
**.pyc
**.conf
**.uuid
@ -72,12 +68,4 @@
**test.jinja
# exceptions
!/appdaemon/apps/
!/appdaemon/apps/apps.yaml
!/node-red/projects/
!/node-red/projects/NerdFlows/
!/node-red/projects/NerdFlows/flows.json
!/node-red/projects/NerdFlows/flows_cred.json
!/node-red/projects/NerdFlows/package.json
!/node-red/projects/NerdFlows/README.md
.codegpt
!/www/bubble/

View File

@ -125,7 +125,6 @@
- light.basement_studio_lights
- light.tina_lamp_top
- light.tina_lamp_side
- light.tina_desk_strip
- light.stairwell_led_strip
data:
color_name: red
@ -152,7 +151,6 @@
- light.master_bedroom_lights
- light.tina_lamp_top
- light.tina_lamp_side
- light.tina_desk_strip
data:
flash: long
- alias: Send TTS notification to the common areas
@ -1151,10 +1149,23 @@
entity_id: switch.adaptive_lighting_master_bedroom
action: switch.turn_off
brightness_down_short_action:
- data: {}
target:
entity_id: switch.adaptive_lighting_master_bedroom
action: switch.turn_off
- if:
- condition: state
entity_id: light.master_bedroom_lights
state: 'off'
then:
- action: input_select.select_option
metadata: {}
data:
option: Nightlight
target:
entity_id: input_select.master_bedroom_scenes
else:
- data: {}
target:
entity_id: switch.adaptive_lighting_master_bedroom
action: switch.turn_off
alias: Activate nightlight if lights are off, otherwise act normal
brightness_down_long_action:
- data: {}
target:
@ -1299,16 +1310,16 @@
input:
dimmer_device: 40c14ccfe958d21d75888a968bbbf908
on_short_action:
- service: input_boolean.toggle
data: {}
- data: {}
target:
entity_id: input_boolean.tina_desk_lights
entity_id: light.tina_desk_lights
action: light.turn_on
on_long_action:
- service: input_select.select_option
data:
- data:
option: Reset
target:
entity_id: input_select.tina_desk_scenes
action: input_select.select_option
off_short_action: []
off_long_action: []
- id: '1693174941627'
@ -1574,7 +1585,6 @@
- light.living_room_color_3
- light.tina_lamp_side
- light.tina_lamp_top
- light.tina_desk_strip
- light.stairwell_led_strip
- light.basement_stairwell
- light.basement_tall_lamp
@ -1590,7 +1600,6 @@
- light.living_room_color_3
- light.tina_lamp_side
- light.tina_lamp_top
- light.tina_desk_strip
- light.stairwell_led_strip
- delay:
seconds: 1
@ -1611,7 +1620,6 @@
entity_id:
- light.living_room_lights
- light.tina_lamp
- light.tina_desk_strip
- light.stairwell_led_strip
- light.basement_studio_lights
data:
@ -1623,7 +1631,6 @@
entity_id:
- light.living_room_lights
- light.tina_lamp
- light.tina_desk_strip
- light.stairwell_led_strip
data:
color_name: red
@ -1695,52 +1702,25 @@
alias: Tina Desk Lights Handler
description: Handles turning on the desk lights with smart scene selection and also
turning them off
trigger:
- platform: state
entity_id: input_boolean.tina_desk_lights
from: 'off'
to: 'on'
id: toggle-on
alias: Toggle On
- platform: state
entity_id: input_boolean.tina_desk_lights
from: 'on'
to: 'off'
id: toggle-off
alias: Toggle Off
- platform: state
entity_id: input_select.tina_desk_scenes
triggers:
- entity_id: input_select.tina_desk_scenes
to: Reset
id: reset
alias: Reset
- platform: state
entity_id: light.tina_desk_lights
from: 'on'
to: 'off'
id: lights-off
alias: Lights Off
- platform: state
entity_id: light.tina_desk_lights
from: 'off'
to: 'on'
id: lights-on
alias: Lights On
- platform: state
entity_id: binary_sensor.tina_desktop_on
trigger: state
- entity_id: binary_sensor.tina_desktop_on
from: 'off'
to: 'on'
id: computer-on
alias: Computer On
condition: []
action:
trigger: state
conditions: []
actions:
- alias: Reset
if:
- alias: Triggered by Toggle On, Reset, or Computer On
- alias: Triggered by Reset or Computer On
condition: or
conditions:
- condition: trigger
id: toggle-on
alias: Toggle On
- condition: trigger
id: reset
alias: Reset
@ -1748,52 +1728,12 @@
id: computer-on
alias: Computer On
then:
- service: input_select.select_option
target:
- target:
entity_id: input_select.tina_desk_scenes
data:
option: '{{ states(''sensor.tina_desk_scene'') }}'
alias: Reset to appropriate default scene
- if:
- condition: trigger
id: toggle-off
then:
- service: light.turn_off
target:
entity_id: light.tina_desk_lights
data: {}
alias: Toggle Off
- if:
- condition: trigger
id: lights-off
then:
- if:
- condition: state
entity_id: input_boolean.tina_desk_lights
state: 'on'
then:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.tina_desk_lights
data: {}
alias: Lights Off
- if:
- condition: trigger
id: lights-on
then:
- if:
- condition: state
entity_id: input_boolean.tina_desk_lights
state: 'off'
then:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.tina_desk_lights
data: {}
- delay:
seconds: 2
alias: Prevent script from re-triggering when boolean is turned on
alias: Lights On
action: input_select.select_option
mode: single
- id: '1696286403914'
alias: Basement Lights Handling
@ -6094,3 +6034,66 @@
entity_id: input_datetime.minnesota_wild_start
alias: Minnesota Wild Start
mode: restart
- id: '1740098474888'
alias: Tina Pain Meds Handler
description: ''
triggers:
- at: input_datetime.tina_ibuprofen_notify
id: ibuprofen-notify
alias: Ibuprofen Notify
trigger: time
- alias: Tylenol Notify
at: input_datetime.tina_tylenol_notify
id: tylenol-notify
trigger: time
- entity_id:
- input_boolean.tina_ibuprofen_taken
from: 'off'
to: 'on'
id: ibuprofen-taken
alias: Ibuprofen Taken
trigger: state
- alias: Tylenol Taken
entity_id:
- input_boolean.tina_tylenol_taken
from: 'off'
to: 'on'
id: tylenol-taken
trigger: state
conditions: []
actions:
- choose:
- conditions:
- condition: and
conditions:
- condition: trigger
id:
- ibuprofen-notify
- ibuprofen-taken
- condition: state
entity_id: input_boolean.tina_ibuprofen_active
state: 'on'
alias: Ibuprofen
sequence:
- data:
reason: '{{ trigger.id }}'
alias: Call ibuprofen script
action: script.tina_ibuprofen
- conditions:
- condition: and
conditions:
- condition: trigger
id:
- tylenol-notify
- tylenol-taken
- condition: state
entity_id: input_boolean.tina_tylenol_active
state: 'on'
alias: Tylenol
sequence:
- data:
reason: '{{ trigger.id }}'
alias: Call tylenol script
action: script.tina_tylenol
mode: parallel
max: 10

View File

@ -283,7 +283,6 @@ script:
- light.living_room_color_1
- light.living_room_color_2
- light.living_room_color_3
- light.tina_desk_strip
- light.tina_lamp_side
- light.tina_lamp_top
- light.mud_room_overhead
@ -320,7 +319,6 @@ script:
entity_id:
- light.living_room_lights
- light.tina_lamp
- light.tina_desk_strip
- light.basement_studio_lights
data:
color_name: >

View File

@ -0,0 +1,4 @@
input_boolean:
do_not_enter_basement_studio:
name: Do Not Enter - Basement Studio
icon: mdi:minus-circle

View File

@ -1,101 +1,3 @@
scrape:
- resource: https://www.gasbuddy.com/station/59010
sensor:
- name: South Side Shell
unique_id: b3385058-173c-4446-9f0f-3a45f21715d8
select: &selector "#root > div > div.Page-module__content___196kn.Page-module__padded___3hQ0U > div > div > div:nth-child(2) > div.grid__column___nhz7X.grid__desktop10___2T18R > div:nth-child(1) > div.grid__column___nhz7X.grid__desktop8___38Y4U > div:nth-child(3) > div > div.GasPriceCollection-module__collectionContainer___29Ngz > div:nth-child(2) > div:nth-child(1) > span"
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59007
sensor:
- name: Circle K
unique_id: 63d947bc-486a-478e-9fbe-7fb2f38a1e1e
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/123478
sensor:
- name: Kroger
unique_id: b705d912-8ef4-4e55-9168-d7e152773ba0
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59014
sensor:
- name: Kecks
unique_id: 4fa4a7bb-45b1-4d17-ab92-06ebd6a39ebb
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59006
sensor:
- name: The Barn
unique_id: 51137245-9c4a-4992-aa7c-19cd38bd614d
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59016
sensor:
- name: The Big Fish
unique_id: d5e057d5-3f7b-4c6b-ad0c-5e6ffa10b861
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/107803
sensor:
- name: Marathon Cleveland Avenue
unique_id: 3ef9c1d0-46b0-4850-8df2-d478c833aa4d
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59013
sensor:
- name: Speedway
unique_id: 44484541-1a71-4e36-9e81-486eea3882cc
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59009
sensor:
- name: Meijer
unique_id: dc687fd2-ed4d-4fae-a2b8-38ae7a944a68
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59012
sensor:
- name: East Side Shell
unique_id: db36f6b4-6f87-48af-a339-1f8e8bbc95e3
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/59011
sensor:
- name: Shell Ottawa Avenue
unique_id: d9508ad6-4298-4262-bac9-931a3bc510df
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
- resource: https://www.gasbuddy.com/station/71535
sensor:
- name: Ridis
unique_id: 9db2cbc3-39ea-4471-9541-64aa7aa8de71
select: *selector
device_class: monetary
value_template: '{{ value | replace("$", "") | float }}'
icon: mdi:gas-station
sensor:
- platform: statistics
unique_id: fcf4e80e-8459-4e23-a94f-5f127b628c20

View File

@ -32,9 +32,6 @@ input_boolean:
give_me_darkness:
name: Give Me Darkness
icon: mdi:weather-night
tina_desk_lights:
name: Tina Desk Lights
icon: mdi:desk
holiday_mode_hold:
name: Holiday Mode Hold
icon: mdi:party-popper
@ -819,7 +816,6 @@ switch:
- light.living_room_color_3
- light.tina_lamp_top
- light.tina_lamp_side
- light.tina_desk_strip
colors:
- color_type: rgb_color
color: [255,0,0]

View File

@ -124,6 +124,8 @@ template:
state: >
{% if is_state('binary_sensor.basement_studio_motion','on') %}
true
{% elif is_state('sensor.xia_desktop_current_username','tm24f') %}
false
{% elif is_state('binary_sensor.tony_desktop_on','off') and
is_state('binary_sensor.kallen_desktop_on','off') %}
false
@ -405,7 +407,6 @@ automation:
# - light.living_room_led_strip
# - light.tina_lamp_top
# - light.tina_lamp_side
# - light.tina_desk_strip
# - alias: "Save Current Adaptive State"
# service: scene.create
# data:
@ -425,7 +426,6 @@ automation:
# entity_id:
# - light.living_room_lights
# - light.tina_lamp
# - light.tina_desk_strip
# - light.living_room_led_strip
# data:
# color_name: green
@ -865,9 +865,7 @@ script:
- front_porch
- living_room
- mud_room
- service: input_boolean.turn_on
target:
entity_id: input_boolean.tina_desk_lights
- tina_desk
- delay:
hours: 0
minutes: 0
@ -925,9 +923,7 @@ script:
area_id:
- living_room
- mud_room
- service: input_boolean.turn_on
target:
entity_id: input_boolean.tina_desk_lights
- tina_desk
- delay:
hours: 0
minutes: 0

View File

@ -773,16 +773,16 @@ script:
{% if ct > state_attr('input_datetime.kallen_school_day_start','timestamp') %}
{{ (state_attr('input_datetime.tina_workday_start','timestamp') - 1800) | timestamp_custom('%H:%M', false) }}
{% elif ct > state_attr('input_datetime.tina_workday_start','timestamp') and ct < state_attr('input_datetime.kallen_school_day_start','timestamp') %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 3600) | timestamp_custom('%H:%M', false) }}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 3900) | timestamp_custom('%H:%M', false) }}
{% elif state_attr('input_datetime.tina_workday_start','timestamp') < (state_attr('input_datetime.kallen_school_day_start','timestamp')) %}
{{ (state_attr('input_datetime.tina_workday_start','timestamp') - 1800) | timestamp_custom('%H:%M', false) }}
{% else %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 3600) | timestamp_custom('%H:%M', false) }}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 3900) | timestamp_custom('%H:%M', false) }}
{% endif %}
{% elif is_state('input_boolean.work_today','on') and is_state('input_boolean.kallen_school_today','off') %}
{{ (state_attr('input_datetime.tina_workday_start', 'timestamp') - 1800) | timestamp_custom('%H:%M', false) }}
{% elif is_state('input_boolean.kallen_school_today','on') %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 3600) | timestamp_custom('%H:%M', false) }}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 3900) | timestamp_custom('%H:%M', false) }}
{% else %}
11:00
{% endif %}

View File

@ -19,6 +19,18 @@ input_boolean:
tina_night_meds_taken:
name: Tina Night Meds Taken
icon: mdi:medication
tina_ibuprofen_active:
name: Tina Ibuprofen Active
icon: mdi:medication
tina_ibuprofen_taken:
name: Tina Ibuprofen Taken
icon: mdi:medication
tina_tylenol_active:
name: Tina Tylenol Active
icon: mdi:medication
tina_tylenol_taken:
name: Tina Tylenol Taken
icon: mdi:medication
tina_awake:
name: Tina Awake
icon: mdi:eye-check
@ -54,6 +66,26 @@ input_datetime:
has_date: true
has_time: true
icon: mdi:medication
tina_ibuprofen_taken:
name: Tina Ibuprofen Taken
has_date: true
has_time: true
icon: mdi:medication
tina_ibuprofen_notify:
name: Tina Ibuprofen Notify
has_date: true
has_time: true
icon: mdi:medication
tina_tylenol_taken:
name: Tina Tylenol Taken
has_date: true
has_time: true
icon: mdi:medication
tina_tylenol_notify:
name: Tina Tylenol Notify
has_date: true
has_time: true
icon: mdi:medication
automation:
- id: cd9f921f-71c7-4e29-9aee-7421ef19bdd3

View File

@ -1617,7 +1617,6 @@ script:
# snapshot_entities:
# - light.tina_lamp_side
# - light.tina_lamp_top
# - light.tina_desk_strip
# - switch.adaptive_lighting_living_room
# - switch.adaptive_lighting_tina_lamp
# - service: switch.turn_off
@ -1631,7 +1630,6 @@ script:
# entity_id:
# - light.tina_lamp_side
# - light.tina_lamp_top
# - light.tina_desk_strip
# data:
# color_name: red
# - service: script.living_room_lights_alert

View File

@ -57,6 +57,7 @@ ## HACS Components
- [Powercalc](https://github.com/bramstroker/homeassistant-powercalc)
- [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)
</details>
@ -67,7 +68,7 @@ ## HACS Lovelace Cards
<details>
<summary>Click here</summary>
- [Bubble Card](https://github.com/Clooos/Bubble-Card)
- [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)
@ -86,7 +87,6 @@ ## HACS Lovelace Cards
- [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)
- [Platinum Weather Card](https://github.com/Makin-Things/platinum-weather-card) (Not currently in use, but VERY nicely done)
- [Stack In Card](https://github.com/custom-cards/stack-in-card)
- [Paper Buttons Row](https://github.com/jcwillox/lovelace-paper-buttons-row)
- [State Switch](https://github.com/thomasloven/lovelace-state-switch)
@ -122,6 +122,7 @@ ## HACS Lovelace Cards
- [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)
- [Versatile Thermostat UI Card](https://github.com/jmcollin78/versatile-thermostat-ui-card)
</details>

View File

@ -86,18 +86,14 @@ kallen_timer_cancel:
global_off:
alias: Global Off
sequence:
- service: light.turn_off
data: {}
- data: {}
target:
entity_id: all
- service: fan.turn_off
data: {}
action: light.turn_off
- data: {}
target:
entity_id: all
- service: input_boolean.turn_off
data: {}
target:
entity_id: input_boolean.tina_desk_lights
action: fan.turn_off
mode: single
icon: mdi:earth-off
global_on:
@ -111,40 +107,35 @@ global_on:
icon: mdi:earth
max_brightness:
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.tina_desk_lights
data: {}
alias: Turn on Tina Desk Lights
- alias: Turn off Adaptive Lighting and Motion Lighting
service: switch.turn_off
data: {}
target:
label_id:
- adaptive_lighting
- motion_lighting
action: switch.turn_off
- delay:
hours: 0
minutes: 0
seconds: 1
milliseconds: 0
- alias: Cancel motion timers
service: timer.cancel
data: {}
target:
label_id: motion_lighting
- service: input_boolean.turn_off
data: {}
action: timer.cancel
- data: {}
target:
entity_id: input_boolean.front_porch_light_on
alias: Turn off Front Porch automation
- service: light.turn_on
data:
action: input_boolean.turn_off
- data:
kelvin: 5000
brightness_pct: 100
target:
entity_id: all
alias: Turn on ALL LIGHTS to maximum brightness
action: light.turn_on
mode: single
alias: Max Brightness
icon: mdi:brightness-7
@ -780,14 +771,9 @@ adaptive_on_first_floor:
value: Adaptive
alias: If living room lights are on
- if:
- condition: or
conditions:
- condition: state
entity_id: light.tina_lamp
state: 'on'
- condition: state
entity_id: light.tina_desk_strip
state: 'on'
- condition: state
entity_id: light.tina_lamp
state: 'on'
then:
- service: input_select.select_option
target:
@ -1013,41 +999,35 @@ adaptive_on_second_floor:
bright_on_first_floor:
alias: Bright on First Floor
sequence:
- service: light.turn_on
target:
- target:
entity_id:
- light.living_room_lights
- light.downstairs_bathroom_lights
- light.mud_room_overhead
data: {}
- service: input_boolean.turn_on
target:
entity_id: input_boolean.tina_desk_lights
data: {}
action: light.turn_on
- delay:
seconds: 1
- service: input_select.select_option
target:
- target:
entity_id:
- input_select.living_room_scenes
- input_select.downstairs_bathroom_scenes
- input_select.mud_room_scenes
data:
option: Bright
- service: light.turn_on
target:
action: input_select.select_option
- target:
entity_id:
- light.tina_desk_strip
- light.tina_lamp
data:
color_temp_kelvin: 2700
- service: light.turn_on
target:
action: light.turn_on
- target:
entity_id:
- light.tina_lamp
- light.tina_desk_strip
data:
brightness: 255
action: light.turn_on
bright_on_second_floor:
alias: Bright on Second Floor
sequence:
@ -1145,11 +1125,11 @@ evening_on_first_floor:
entity_id: person.christina_stork
state: home
then:
- service: input_select.select_option
target:
- target:
entity_id: input_select.tina_desk_scenes
data:
option: Night Mode
action: input_select.select_option
alias: If Tina is home, turn on desk lights
- alias: Check if script is being called by Give Me Darkness automation
if:
@ -1163,40 +1143,40 @@ evening_on_first_floor:
entity_id: timer.mud_room_motion_timer
state: idle
then:
- service: light.turn_on
metadata: {}
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
- service: input_select.select_option
target:
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
else:
- service: light.turn_off
target:
- target:
entity_id:
- light.living_room_lights
data: {}
action: light.turn_off
- alias: Set mud room light to nightlight
if:
- condition: state
entity_id: timer.mud_room_motion_timer
state: idle
then:
- service: light.turn_on
metadata: {}
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
- service: input_select.select_option
target:
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
alias: Give Me Darkness on
- conditions:
- condition: state
@ -1209,69 +1189,65 @@ evening_on_first_floor:
value_template: '{{ sunset_lights == 1 }}'
alias: If sunset_lights = 1
then:
- service: light.turn_on
target:
- target:
entity_id:
- light.living_room_lights
- light.mud_room_overhead
data: {}
- service: input_select.select_option
target:
action: light.turn_on
- target:
entity_id:
- input_select.living_room_scenes
data:
option: Adaptive
action: input_select.select_option
- alias: Set mud room light to nightlight
if:
- condition: state
entity_id: timer.mud_room_motion_timer
state: idle
then:
- service: light.turn_on
metadata: {}
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
- service: input_select.select_option
target:
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
else:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.tina_desk_lights
data: {}
- service: light.turn_on
target:
- target:
entity_id:
- light.living_room_lights
- light.mud_room_overhead
data: {}
- service: input_select.select_option
target:
action: light.turn_on
- target:
entity_id:
- input_select.living_room_scenes
data:
option: Adaptive
action: input_select.select_option
- alias: Set mud room light to nightlight
if:
- condition: state
entity_id: timer.mud_room_motion_timer
state: idle
then:
- service: light.turn_on
metadata: {}
- metadata: {}
data: {}
target:
entity_id: light.mud_room_overhead
- service: input_select.select_option
target:
action: light.turn_on
- target:
entity_id:
- input_select.mud_room_scenes
data:
option: Nightlight
action: input_select.select_option
alias: Give Me Darkness off
evening_on_second_floor:
alias: Evening on Second Floor
@ -1569,15 +1545,6 @@ day_mode_in_tina_desk:
target:
entity_id: light.tina_lamp_side
data: {}
- service: light.turn_on
target:
entity_id: light.tina_desk_strip
data:
rgb_color:
- 0
- 255
- 255
brightness: 89
- wait_template: '{{ is_state(''light.tina_lamp_side'',''off'') }}'
timeout:
seconds: 15
@ -1606,23 +1573,13 @@ day_mode_in_tina_desk:
evening_mode_in_tina_desk:
alias: Evening Mode in Tina Desk
sequence:
- alias: Turn on all lights
parallel:
- service: light.turn_on
data: {}
target:
entity_id:
- light.tina_lamp_top
- light.tina_lamp_side
- service: light.turn_on
target:
entity_id: light.tina_desk_strip
data:
rgb_color:
- 127
- 0
- 255
brightness: 128
- alias: Turn on lamp
service: light.turn_on
data: {}
target:
entity_id:
- light.tina_lamp_top
- light.tina_lamp_side
- alias: Apply adaptive lighting to lamp
if:
- condition: state
@ -1652,25 +1609,15 @@ night_mode_in_tina_desk:
target:
entity_id: switch.adaptive_lighting_tina_lamp
data: {}
- parallel:
- service: light.turn_on
target:
entity_id: light.tina_lamp
data:
rgb_color:
- 127
- 0
- 255
brightness: 128
- service: light.turn_on
target:
entity_id: light.tina_desk_strip
data:
rgb_color:
- 127
- 0
- 255
brightness: 128
- service: light.turn_on
target:
entity_id: light.tina_lamp
data:
rgb_color:
- 127
- 0
- 255
brightness: 128
mode: restart
icon: mdi:palette
bright_mode_in_tina_desk:
@ -1680,25 +1627,15 @@ bright_mode_in_tina_desk:
target:
entity_id: switch.adaptive_lighting_tina_lamp
data: {}
- parallel:
- service: light.turn_on
target:
entity_id: light.tina_lamp
data:
rgb_color:
- 255
- 210
- 175
brightness: 255
- service: light.turn_on
target:
entity_id: light.tina_desk_strip
data:
rgb_color:
- 255
- 210
- 175
brightness: 255
- service: light.turn_on
target:
entity_id: light.tina_lamp
data:
rgb_color:
- 255
- 210
- 175
brightness: 255
mode: restart
icon: mdi:palette
tony_morning_meds:
@ -3054,3 +2991,365 @@ tina_night_meds:
- action: TINA_NIGHT_MEDS_SKIPPED
title: Skip
description: ''
tina_ibuprofen:
sequence:
- alias: Turn off boolean if this is a notification
if:
- condition: template
value_template: '{{ reason != ''ibuprofen-taken'' }}'
alias: If reason is not ibuprofen-taken
then:
- target:
entity_id: input_boolean.tina_ibuprofen_taken
data: {}
alias: Turn off boolean
action: input_boolean.turn_off
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ reason == ''ibuprofen-notify'' }}'
alias: Ibuprofen Notify
sequence:
- data:
type: alert
who: tina
title: Tina Ibuprofen Time
message: It is time to take your next dose of Ibuprofen
tag: tina-ibuprofen
actions:
- action: TINA_IBUPROFEN_TAKEN
title: Taken
- action: TINA_IBUPROFEN_SKIPPED
title: Skipped
- action: TINA_IBUPROFEN_ASK_LATER
title: Ask Later
alias: Send actionable text notification
action: script.text_notify
- wait_for_trigger:
- platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_IBUPROFEN_TAKEN
id: ibuprofen-taken
alias: Ibuprofen Taken
- alias: Ibuprofen Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_IBUPROFEN_SKIPPED
id: ibuprofen-skipped
- alias: Ibuprofen Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_IBUPROFEN_ASK_LATER
id: ibuprofen-ask-later
- platform: state
entity_id:
- input_boolean.tina_ibuprofen_taken
from: 'off'
to: 'on'
id: ibuprofen-manual
alias: Manual
- platform: state
entity_id:
- input_boolean.tina_ibuprofen_active
from: 'on'
to: 'off'
id: cancel
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-taken'' }}'
alias: Ibuprofen Taken
sequence:
- target:
entity_id: input_boolean.tina_ibuprofen_taken
data: {}
alias: Turn on boolean
action: input_boolean.turn_on
- conditions:
- alias: Ibuprofen Skipped
condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-skipped'' }}'
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
- conditions:
- alias: Ibuprofen Ask Later
condition: template
value_template: '{{ wait.trigger.id == ''ibuprofen-ask-later'' }}'
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4,30)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: No response
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
alias: Act on wait triggers
- data:
type: alert
who: tina
message: clear_notification
tag: tina-ibuprofen
alias: Clear actionable text notification
action: script.text_notify
- conditions:
- condition: template
value_template: '{{ reason == ''ibuprofen-taken'' }}'
alias: Ibuprofen Taken
sequence:
- target:
entity_id: input_datetime.tina_ibuprofen_taken
data:
datetime: '{% from ''time.jinja'' import current_time %} {{ current_time(''datetime'',24)
}}
'
alias: Set time taken
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
alias: Tina Ibuprofen
mode: queued
icon: mdi:medication
max: 10
description: ''
tina_tylenol:
sequence:
- alias: Turn off boolean if this is a notification
if:
- condition: template
value_template: '{{ reason != ''tylenol-taken'' }}'
alias: If reason is not tylenol-taken
then:
- target:
entity_id: input_boolean.tina_tylenol_taken
data: {}
alias: Turn off boolean
action: input_boolean.turn_off
- alias: Routing
choose:
- conditions:
- condition: template
value_template: '{{ reason == ''tylenol-notify'' }}'
alias: Tylenol Notify
sequence:
- data:
type: alert
who: tina
title: Tina Tylenol Time
message: It is time to take your next dose of Tylenol
tag: tina-tylenol
actions:
- action: TINA_TYLENOL_TAKEN
title: Taken
- action: TINA_TYLENOL_SKIPPED
title: Skipped
- action: TINA_TYLENOL_ASK_LATER
title: Ask Later
alias: Send actionable text notification
action: script.text_notify
- wait_for_trigger:
- platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_TYLENOL_TAKEN
id: tylenol-taken
alias: Tylenol Taken
- alias: Tylenol Skipped
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_TYLENOL_SKIPPED
id: tylenol-skipped
- alias: Tylenol Ask Later
platform: event
event_type: ios.notification_action_fired
event_data:
actionName: TINA_TYLENOL_ASK_LATER
id: tylenol-ask-later
- platform: state
entity_id:
- input_boolean.tina_tylenol_taken
from: 'off'
to: 'on'
id: tylenol-manual
alias: Manual
- platform: state
entity_id:
- input_boolean.tina_tylenol_active
from: 'on'
to: 'off'
id: cancel
timeout:
hours: 0
minutes: 30
seconds: 0
milliseconds: 0
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: '{{ wait.trigger.id == ''tylenol-taken'' }}'
alias: Tylenol Taken
sequence:
- target:
entity_id: input_boolean.tina_tylenol_taken
data: {}
alias: Turn on boolean
action: input_boolean.turn_on
- conditions:
- alias: Tylenol Skipped
condition: template
value_template: '{{ wait.trigger.id == ''tylenol-skipped'' }}'
sequence:
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
- conditions:
- alias: Tylenol Ask Later
condition: template
value_template: '{{ wait.trigger.id == ''tylenol-ask-later'' }}'
sequence:
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4,30)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
- conditions:
- condition: template
value_template: '{{ wait.trigger == ''none'' or wait.trigger.idx is undefined
}}'
alias: No response
sequence:
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0,30)
}}
'
alias: Set notification time
action: input_datetime.set_datetime
alias: Act on wait triggers
- data:
type: alert
who: tina
message: clear_notification
tag: tina-tylenol
alias: Clear actionable text notification
action: script.text_notify
- conditions:
- condition: template
value_template: '{{ reason == ''tylenol-taken'' }}'
alias: Tylenol Taken
sequence:
- target:
entity_id: input_datetime.tina_tylenol_taken
data:
datetime: '{% from ''time.jinja'' import current_time %} {{ current_time(''datetime'',24)
}}
'
alias: Set time taken
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_tylenol_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(8)
}}
'
alias: Set tylenol notification time
action: input_datetime.set_datetime
- target:
entity_id: input_datetime.tina_ibuprofen_notify
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(4)
}}
'
alias: Set ibuprofen notification time
action: input_datetime.set_datetime
alias: Tina Tylenol
mode: queued
icon: mdi:medication
max: 10
description: ''

View File

@ -68,7 +68,6 @@
states.light.downstairs_bathroom_right,
states.light.tina_lamp_top,
states.light.tina_lamp_side,
states.light.tina_desk_strip,
states.light.basement_tall_lamp,
states.light.basement_short_lamp,
states.light.basement_stairwell,
@ -103,7 +102,6 @@
states.light.downstairs_bathroom_right,
states.light.tina_lamp_top,
states.light.tina_lamp_side,
states.light.tina_desk_strip
] %}
{{ lights | selectattr('state','eq','on') | list | count | int }}
- name: Second Floor Lights On

View File

@ -0,0 +1,429 @@
# Bubble Modules
#
# How to use:
#
# - To edit or add modules (global styles and templates), first copy the
# "bubble-modules.yaml" file from "/www/community/Bubble-Card/" (if installed via HACS)
# to "/www/bubble/" (you'll need to create this folder).
#
# Then add these lines in your "configuration.yaml" under "homeassistant:":
#
# homeassistant:
# allowlist_external_dirs:
# - /config/www/bubble
# # This step is not needed if you already have this line:
# - /config/www
#
# Then save and restart Home Assistant.
#
# - After making changes, you need to refresh your page to apply the modifications.
#
# - Styles and templates defined under "default:" are applied globally to all cards by default.
#
# - See the final example in this file for further details on how to create a module.
#
# - You can share/find modules here:
# github.com/Clooos/Bubble-Card/discussions/categories/share-your-modules
default:
name: Default
description: Empty and enabled by default. Move your styles/templates here in the <code>bubble-modules.yaml</code> file to apply them to all cards.
code: |
/* CSS or JS templates (see examples below) */
home-assistant-default:
name: Home Assistant default styling
version: "v1.1"
creator: "Clooos"
link: "https://github.com/Clooos/Bubble-Card/discussions/1230"
description: This module applies Home Assistants default styling to Bubble Card. To set it as the default, move it under <code>default:</code> in the <code>bubble-modules.yaml</code> file.
code: |
:host {
--bubble-button-accent-color: rgba(0,140,255,0.3); /* Edit this color if needed */
--bubble-main-background-color: var(--ha-card-background, var(--card-background-color, #fff));
--bubble-border-radius: var(--ha-card-border-radius, 12px);
--bubble-icon-border-radius: 32px;
--bubble-button-border-radius: var(--bubble-border-radius);
--bubble-climate-button-background-color: var(--bubble-icon-background-color);
--bubble-border: var(--ha-card-border-width, 1px) solid var(--ha-card-border-color, var(--divider-color, #e0e0e0));
--bubble-secondary-background-color: transparent;
}
.bubble-container {
-webkit-backdrop-filter: var(--ha-card-backdrop-filter, none);
backdrop-filter: var(--ha-card-backdrop-filter, none);
box-shadow: var(--ha-card-box-shadow, none);
box-sizing: border-box;
}
.bubble-icon-container,
.large .bubble-icon-container {
--mdc-icon-size: 22px;
min-width: 36px !important;
min-height: 36px !important;
}
.large .bubble-cover-card-container > .bubble-buttons {
--bubble-cover-main-background-color: none;
}
.bubble-range-fill {
--bubble-accent-color: var(--bubble-button-accent-color);
}
.bubble-sub-button.background-on::before,
.bubble-sub-button.background-off::before,
.bubble-temperature-container::before,
.bubble-icon-container::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: var(--control-number-buttons-background-opacity, .2);
border-radius: var(--bubble-border-radius);
background: var(--control-number-buttons-background-color, var(--disabled-color));
}
.is-on {
--bubble-icon-background-color: var(--view-background,var(--lovelace-background,var(--primary-background-color)));
transition: all ease-in 0.3s !important;
}
.bubble-icon-container::before {
background: var(--state-inactive-color);
border-radius: var(--bubble-icon-border-radius);
}
.bubble-sub-button {
border: 0px solid transparent !important;
}
.no-icon-select-arrow {
right: 4px !important;
}
.large .bubble-icon-container {
margin-left: 9px;
}
.bubble-state {
opacity: 1;
font-weight: 400;
font-size: 12px;
letter-spacing: .4px;
}
:not(.bubble-separator) > .bubble-name {
font-weight: 500;
font-size: 14px;
letter-spacing: 0.1px;
}
.bubble-pop-up-background {
filter: brightness(0.96); /* Improve pop-up background contrast */
--bubble-pop-up-border-radius: calc(var(--ha-card-border-radius, 12px) * 1.4);
}
.bubble-header-container {
--bubble-secondary-background-color: var(--background-color-2);
}
ha-select {
--bubble-list-item-accent-color: none !important;
--mdc-theme-surface: var(--card-background-color);
}
mwc-list-item[selected] {
color: inherit !important;
--mdc-ripple-press-opacity: 0 !important;
}
mwc-list-item[selected]::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--primary-color);
opacity: 0.24;
}
icon_container_color:
name: "Example: Customize the icon container color"
version: "v1.1"
creator: "Clooos"
link: "https://github.com/Clooos/Bubble-Card/discussions/1231"
unsupported:
- horizontal-buttons-stack
- separator
description: |
A list of predefined colors to customize the icon container color.
Configure this module via the editor or in YAML, for example:
<br><br>
<code-block><pre>
icon_container_color:
color: light-blue
</pre></code-block>
code: |
.bubble-icon-container {
opacity: 1 !important;
background: var(--${this.config.icon_container_color?.color}-color) !important;
}
editor:
- name: color
label: "Color"
selector:
ui_color:
include_none: true
get_state_attribute:
# Some informations about your module (this is shown in the editor)
name: "Advanced example: Get state/attribute from other entities"
version: "v1.1"
creator: "Clooos"
link: "https://github.com/Clooos/Bubble-Card"
# Disable this module for unsupported "card_type"
unsupported:
- horizontal-buttons-stack
- separator
# The description have HTML support like in this example. This model is my favorite.
description: |
Get state/attribute from other entities and replace the default state/attribute field.
<img class="example" src="https://github.com/Clooos/Bubble-Card/blob/main/img/get_state_template_example.png?raw=true" />
Configure this module via the editor or in YAML, for example:
<br><br>
<code-block><pre>
get_state_attribute:
- entity: weather.home
- entity: sensor.weather_station
attribute: humidity
- entity: sensor.weather_station
attribute: temperature
</pre></code-block>
<br>
<b>If it doesn't work, make sure at least one of "Show state" or "Show attribute" is turned on in your card configuration.</b>
# Code blocks must always start with ${(() => { and end with })()}
# Inline codes must always start with ${ and end with }
#
# This section only supports JavaScript and/or CSS
code: |
${(() => {
// Retrieve the configuration or use an empty array by default
const config = this.config.get_state_attribute || [];
// Format the retrieved value from the entity for each entry
const values = config
.map(cfg => {
const entity = hass.states[cfg.entity];
if (entity) {
return cfg.attribute
? hass.formatEntityAttributeValue(entity, cfg.attribute)
: hass.formatEntityState(entity);
}
return null;
})
.filter(value => value !== null); // Remove null values
// Update the DOM element with the class 'bubble-state'
// displaying values separated by ' • '
card.querySelector('.bubble-state').innerText = values.join(' • ');
})()}
# The editor part can be tricky, but improves modules a lot!
#
# In this example, it will create your configuration to this variable:
# this.config.get_state_attribute
#
# To understand what you can do here, take a look at the "ha-form" sources here:
# https://github.com/home-assistant/frontend/tree/03a415beff6e6f9c87a95287804f6c03c8fef3d5/src/components/ha-form
#
# And here for the selectors:
# https://github.com/home-assistant/frontend/blob/03a415beff6e6f9c87a95287804f6c03c8fef3d5/src/data/selector.ts
#
# I will try to document that for clarity!
editor:
- type: expandable
title: "Select entities and attributes"
icon: "mdi:list-box-outline"
schema:
- name: '0'
type: expandable
title: "Entity 1"
schema:
- name: entity
label: "Entity"
selector:
entity: {}
- name: attribute
label: "Attribute"
selector:
attribute: {}
- name: '1'
type: expandable
title: "Entity 2"
schema:
- name: entity
label: "Entity"
selector:
entity: {}
- name: attribute
label: "Attribute"
selector:
attribute: {}
- name: '2'
type: expandable
title: "Entity 3"
schema:
- name: entity
label: "Entity"
selector:
entity: {}
- name: attribute
label: "Attribute"
selector:
attribute: {}
- name: '3'
type: expandable
title: "Entity 4"
schema:
- name: entity
label: "Entity"
selector:
entity: {}
- name: attribute
label: "Attribute"
selector:
attribute: {}
# Temperature
temperature_colouring:
name: "Temperature colouring"
version: "v1.0"
creator: "Timmy"
unsupported:
- horizontal-buttons-stack
- media-player
description: |
This module provides dynamic colouring based on temperature sensor values.
Colour adjustments are applied to selected sub-buttons and/or state display elements.
Required entities:
- A temperature sensor
You can configure which elements should receive dynamic colouring:
- Sub-buttons (1-6)
- State display
Example YAML configuration:
temperature_colouring:
temperature_sensor: sensor.kitchen_temperature
elements:
sub_buttons: [1, 3, 5] # Apply to sub-buttons 1, 3, and 5
state_display: true # Apply to state display element
code: |
${(() => {
const temperature = parseFloat(hass?.states[this.config?.temperature_colouring?.temperature_sensor]?.state || 0);
const elements = this.config?.temperature_colouring?.elements || {};
let color;
if (temperature <= 32) {
color = 'rgba(0,0,139,0.8)';
} else if (temperature <= 41) {
color = 'rgba(0,71,171,0.8)';
} else if (temperature <= 50) {
color = 'rgba(30,144,255,0.8)';
} else if (temperature <= 61) {
color = 'rgba(100,149,237,0.8)';
} else if (temperature <= 68) {
color = 'rgba(60,179,113,0.8)';
} else if (temperature <= 73) {
color = 'rgba(152,251,152,0.8)';
} else if (temperature <= 78) {
color = 'rgba(255,223,186,0.8)';
} else if (temperature <= 80) {
color = 'rgba(255,215,0,0.8)';
} else if (temperature <= 95) {
color = 'rgba(178,34,34,0.8)';
} else {
color = 'rgba(139,0,0,0.8)';
}
// Apply colour to selected sub-buttons
if (elements.sub_buttons) {
const subButtons = Array.isArray(elements.sub_buttons) ? elements.sub_buttons : [];
subButtons.forEach(num => {
if (num >= 1 && num <= 6) {
const subButton = card?.querySelector(`.bubble-sub-button-${num} ha-icon`);
if (subButton) {
subButton.style.color = color;
}
}
});
}
// Apply colour to state display if enabled
if (elements.state_display) {
const stateElement = card?.querySelector('.bubble-state.state.display-state');
if (stateElement) {
stateElement.style.color = color;
}
}
return ''; // No CSS needed as we're applying styles directly to elements
})()}
editor:
- type: expandable
title: "Entity Configuration"
icon: "mdi:thermometer"
schema:
- name: temperature_sensor
label: "Temperature Sensor (Required)"
selector:
entity:
device_class: temperature
required: true
- name: elements
type: grid
schema:
- name: sub_buttons
label: "Sub-buttons to Style"
selector:
select:
multiple: true
options:
- label: "Sub-button 1"
value: 1
- label: "Sub-button 2"
value: 2
- label: "Sub-button 3"
value: 3
- label: "Sub-button 4"
value: 4
- label: "Sub-button 5"
value: 5
- label: "Sub-button 6"
value: 6
- name: state_display
label: "State Display"
selector:
boolean: {}