diff --git a/ui-lovelace.yaml b/ui-lovelace.yaml
index a8e5f7a7..20d0b16b 100644
--- a/ui-lovelace.yaml
+++ b/ui-lovelace.yaml
@@ -4,6 +4,149 @@ kiosk_mode:
hide_header: true
ignore_entity_settings: true
button_card_templates:
+ androidtv_button_base:
+ show_name: false
+ styles:
+ grid:
+ - grid-template-columns: 1fr
+ - grid-template-rows: 1fr
+ - grid-template-areas: '"i" "n"'
+ card:
+ - padding: 20px 8px 20px 8px
+ - min-height: 102px
+ - max-height: 125px
+ - max-width: 130px
+ - background-color: var(--secondary-background-color)
+ img_cell:
+ - justify-content: start
+ - align-self: start
+ icon:
+ - --mdc-icon-size: 50px
+ - width: 100%
+ - color: var(--white-color)
+ androidtv_button_command:
+ template: androidtv_button_base
+ variables:
+ - command
+ tap_action:
+ action: call-service
+ service: remote.send_command
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ data:
+ command: '[[[ return variables.command ]]]'
+ androidtv_button_media:
+ styles:
+ grid:
+ - grid-template-columns: 1fr
+ - grid-template-rows: min-content
+ - grid-template-areas: '"i" "n"'
+ - align-content: center
+ card:
+ - padding: 12px 8px 12px 8px
+ - height: 90px
+ - max-height: 90px
+ - max-width: 160px
+ - background-color: var(--secondary-background-color)
+ img_cell:
+ - justify-content: start
+ - align-self: start
+ - height: 40px
+ - width: 40px
+ - place-self: start
+ icon:
+ - width: 100%
+ - color: var(--white-color)
+ name:
+ - margin-top: 8px
+ - justify-self: start
+ - align-self: start
+ - font-size: 14px
+ - font-weight: 500
+ - color: var(--white-color)
+ androidtv_button_status:
+ styles:
+ grid:
+ - grid-template-columns: 1fr min-content
+ - grid-template-rows: min-content 1fr
+ - grid-template-areas: '"i status" "n n"'
+ card:
+ - padding: 26px 8px 20px 8px
+ - min-height: 145px
+ - max-height: 145px
+ - background-color: var(--secondary-background-color)
+ img_cell:
+ - justify-content: start
+ - align-self: start
+ icon:
+ - --mdc-icon-size: 60px
+ - width: 100%
+ - color: var(--white-color)
+ name:
+ - margin-top: 8px
+ - justify-self: start
+ - align-self: start
+ - font-size: 16px
+ - font-weight: 500
+ - color: var(--white-color)
+ custom_fields:
+ status:
+ - position: absolute
+ - right: calc(var(--ha-card-border-radius, 12px) / 2)
+ - top: 10px
+ - align-self: start
+ - justify-self: start
+ androidtv_remote_source:
+ template: androidtv_button_status
+ variables:
+ - source
+ - badge_icon_color
+ tap_action:
+ action: call-service
+ service: media_player.select_source
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ data:
+ source: '[[[ return variables.source ]]]'
+ custom_fields:
+ status: "[[[\n if (entity.attributes.source === variables.source)\n return\
+ \ ``;\n\
+ ]]]"
+ androidtv_harmony_source:
+ template: androidtv_button_status
+ variables:
+ - activity
+ - badge_icon_color
+ tap_action:
+ action: call-service
+ service: remote.turn_on
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ data:
+ activity: '[[[ return variables.activity ]]]'
+ custom_fields:
+ status: "[[[\n if (entity.attributes.current_activity === variables.activity)\n\
+ \ return ``;\n\
+ ]]]"
+ androidtv_remote_sound_mode:
+ template: androidtv_button_status
+ variables:
+ - sound_mode
+ - badge_icon_color
+ tap_action:
+ action: call-service
+ service: media_player.select_sound_mode
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ data:
+ sound_mode: '[[[ return variables.sound_mode ]]]'
+ custom_fields:
+ status: "[[[\n if (entity.attributes.sound_mode === variables.sound_mode)\n\
+ \ return ``;\n\
+ ]]]"
computer_tile:
styles:
grid:
@@ -87,9 +230,7 @@ decluttering_templates:
- type: custom:bubble-card
card_type: media-player
entity: '[[media]]'
- show_state: false
- show_attribute: true
- attribute: source
+ cover_background: true
card_layout: large
hide:
volume_button: true
@@ -119,142 +260,120 @@ decluttering_templates:
type: custom:layout-card
layout_type: custom:grid-layout
layout:
- grid-template-columns: auto auto auto
+ grid-template-columns: 1fr 1fr 1fr
grid-gap: 4px
grid-row-gap: 2px
margin: 8px 0 0
padding: 0
cards:
- - type: custom:mushroom-template-card
+ - type: custom:button-card
entity: '[[remote]]'
- icon: mdi:{{ iif(is_state(entity, "on"), "power", "power-off")
- }}
- icon_color: '{{ iif(is_state(entity, "on"), "black", "white")
- }}'
- fill_container: true
- layout: vertical
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: remote.send_command
- target:
- entity_id: '[[remote]]'
- data:
- command: POWER
- card_mod:
- style:
- .: "ha-card {\n {%- if is_state(config.entity, \"on\") -%}\n\
- \ background: var(--red-color) !important;\n {%- endif\
- \ -%}\n min-height: 102px !important;\n max-height: 125px\
- \ !important;\n max-width: 130px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n background-color:\
- \ transparent !important;\n}\n"
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ template: androidtv_button_command
+ icon: '[[[ if(entity.state === "on") return "mdi:power"; else
+ return "mdi:power-off"; ]]]
+
+ '
variables:
- - icon: mdi:chevron-up
- - remote: '[[remote]]'
- - command: DPAD_UP
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: POWER
+ state:
+ - value: 'on'
+ styles:
+ card:
+ - background-color: var(--red-color)
+ icon:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:chevron-up
variables:
- - icon: mdi:home
- - icon_color: black
- - icon_size: 60
- - style: 'background: var(--blue-color) !important;'
- - remote: '[[remote]]'
- - command: HOME
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: DPAD_UP
+ styles:
+ icon:
+ - --mdc-icon-size: 60px
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:home
variables:
- - icon: mdi:chevron-left
- - remote: '[[remote]]'
- - command: DPAD_LEFT
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: HOME
+ styles:
+ card:
+ - background: var(--blue-color)
+ icon:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:chevron-left
variables:
- - icon: mdi:circle-slice-8
- - icon_size: 60
- - remote: '[[remote]]'
- - command: DPAD_CENTER
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: DPAD_LEFT
+ styles:
+ icon:
+ - --mdc-icon-size: 60px
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:circle-slice-8
variables:
- - icon: mdi:chevron-right
- - remote: '[[remote]]'
- - command: DPAD_RIGHT
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: DPAD_CENTER
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:chevron-right
variables:
- - icon: mdi:undo-variant
- - remote: '[[remote]]'
- - command: BACK
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: DPAD_RIGHT
+ styles:
+ icon:
+ - --mdc-icon-size: 60px
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:undo-variant
variables:
- - icon: mdi:chevron-down
- - remote: '[[remote]]'
- - command: DPAD_DOWN
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: BACK
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:chevron-down
variables:
- - icon: mdi:menu
- - icon_size: 60
- - remote: '[[remote]]'
- - command: MENU
- - type: custom:mushroom-template-card
+ command: DPAD_DOWN
+ styles:
+ icon:
+ - --mdc-icon-size: 60px
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:menu
+ variables:
+ command: MENU
+ - type: custom:button-card
+ template: androidtv_button_base
+ entity: '[[remote]]'
icon: mdi:volume-mute
- icon_color: white
- fill_container: true
- layout: vertical
tap_action:
action: call-service
service: media_player.volume_mute
target:
entity_id: '[[media]]'
- card_mod:
- style:
- .: "ha-card {\n min-height: 102px !important;\n max-height:\
- \ 125px !important;\n max-width: 130px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 70px !important;\n\
- \ --shape-color: none !important;\n background-color:\
- \ transparent !important;\n}\n"
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_base
+ entity: '[[media]]'
icon: mdi:volume-minus
- icon_color: white
- fill_container: true
- layout: vertical
tap_action:
action: call-service
service: media_player.volume_down
target:
entity_id: '[[media]]'
- card_mod:
- style:
- .: "ha-card {\n min-height: 102px !important;\n max-height:\
- \ 125px !important;\n max-width: 130px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 70px !important;\n\
- \ --shape-color: none !important;\n background-color:\
- \ transparent !important;\n}\n"
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_base
+ entity: '[[media]]'
icon: mdi:volume-plus
- icon_color: white
- fill_container: true
- layout: vertical
tap_action:
action: call-service
service: media_player.volume_up
target:
entity_id: '[[media]]'
- card_mod:
- style:
- .: "ha-card {\n min-height: 102px !important;\n max-height:\
- \ 125px !important;\n max-width: 130px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 70px !important;\n\
- \ --shape-color: none !important;\n background-color:\
- \ transparent !important;\n}\n"
- attributes:
icon: mdi:play-circle-outline
card:
@@ -267,65 +386,35 @@ decluttering_templates:
margin: 8px 0 0
padding: 0
cards:
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_media
+ entity: '[[media]]'
+ name: Volume Down
icon: mdi:volume-minus
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Volume Down
tap_action:
action: call-service
service: media_player.volume_down
target:
entity_id: '[[media]]'
- card_mod:
- style:
- .: "ha-card {\n max-height: 90px !important;\n max-width:\
- \ 140px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n margin-top: -10px;\n\
- \ left: -50%;\n justify-content: flex-start !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em !important;\n\
- \ text-align: start;\n margin-top: -20px;\n font-weight:\
- \ 500 !important;\n white-space: initial !important;\n\
- \ z-index: 1;\n}\n"
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_media
+ entity: '[[media]]'
+ name: Volume Up
icon: mdi:volume-plus
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Volume Up
tap_action:
action: call-service
service: media_player.volume_up
target:
entity_id: '[[media]]'
- card_mod:
- style:
- .: "ha-card {\n max-height: 90px !important;\n max-width:\
- \ 160px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n margin-top: -10px;\n\
- \ left: -65%;\n justify-content: flex-start !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em !important;\n\
- \ text-align: start;\n margin-top: -20px;\n font-weight:\
- \ 500 !important;\n white-space: initial !important;\n\
- \ z-index: 1;\n}\n"
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_media
entity: '[[media]]'
- icon: "{%- if is_state(entity, \"playing\") -%}\n mdi:pause\n\
- {%- elif is_state(entity, \"paused\") -%}\n mdi:play\n{%- else\
- \ -%}\n mdi:play-pause\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"playing\") -%}\n black\n\
- {%- elif is_state(entity, \"paused\") -%}\n black\n{%- else\
- \ -%}\n white\n{%- endif -%}"
- fill_container: true
- layout: vertical
- primary: "{%- if is_state(entity, \"playing\") -%}\n Pause\n\
- {%- elif is_state(entity, \"paused\") -%}\n Play\n{%- else\
- \ -%}\n Play/Pause\n{%- endif -%}"
+ name: "[[[\n if (entity.state === \"playing\")\n return \"\
+ Pause\";\n else if (entity.state === \"paused\")\n return\
+ \ \"Play\";\n else\n return \"Play/Pause\";\n]]]"
+ icon: "[[[\n if (entity.state === \"playing\")\n return \"\
+ mdi:pause\";\n else if (entity.state === \"paused\")\n return\
+ \ \"mdi:play\";\n else\n return \"mdi:play-pause\";\n]]]"
tap_action:
action: call-service
service: remote.send_command
@@ -333,29 +422,34 @@ decluttering_templates:
entity_id: '[[remote]]'
data:
command: MEDIA_PLAY_PAUSE
- card_mod:
- style:
- .: "ha-card {\n {%- if is_state(config.entity, \"playing\"\
- ) -%}\n background: var(--green-color) !important;\n\
- \ {%- elif is_state(config.entity, \"paused\") -%}\n \
- \ background: var(--yellow-color) !important;\n {%- endif\
- \ -%})\n max-height: 180px !important;\n max-width: 140px\
- \ !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n margin-top: -10px;\n\
- \ left: -50%;\n justify-content: flex-start !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em !important;\n\
- \ text-align: start;\n margin-top: -15px;\n white-space:\
- \ initial !important;\n z-index: 1;\n}\n"
+ styles:
+ card:
+ - height: 180px
+ - max-height: 180px
+ state:
+ - value: playing
+ styles:
+ card:
+ - background-color: var(--green-color)
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - value: paused
+ styles:
+ card:
+ - background-color: var(--yellow-color)
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
- type: vertical-stack
cards:
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_media
+ entity: '[[media]]'
+ name: Channel Up
icon: mdi:arrow-up-drop-circle-outline
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Channel Up
tap_action:
action: call-service
service: remote.send_command
@@ -363,24 +457,11 @@ decluttering_templates:
entity_id: '[[remote]]'
data:
command: CHANNEL_UP
- card_mod:
- style:
- .: "ha-card {\n max-height: 90px !important;\n max-width:\
- \ 160px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n margin-top: -10px;\n\
- \ left: -65%;\n justify-content: flex-start !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em\
- \ !important;\n text-align: start;\n margin-top: -15px;\n\
- \ font-weight: 500 !important;\n white-space: initial\
- \ !important;\n z-index: 1;\n}\n"
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_media
+ entity: '[[media]]'
+ name: Channel Down
icon: mdi:arrow-down-drop-circle-outline
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Channel Down
tap_action:
action: call-service
service: remote.send_command
@@ -388,24 +469,11 @@ decluttering_templates:
entity_id: '[[remote]]'
data:
command: CHANNEL_DOWN
- card_mod:
- style:
- .: "ha-card {\n max-height: 90px !important;\n max-width:\
- \ 160px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n margin-top: -10px;\n\
- \ left: -65%;\n justify-content: flex-start !important;\n\
- \ background-color:transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em\
- \ !important;\n text-align:start;\n margin-top: -15px;\n\
- \ font-weight: 500 !important;\n white-space: initial\
- \ !important;\n z-index:1;\n}\n"
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_media
+ entity: '[[media]]'
+ name: Previous
icon: mdi:skip-previous
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Previous
tap_action:
action: call-service
service: remote.send_command
@@ -421,24 +489,11 @@ decluttering_templates:
data:
num_repeats: 1
command: MEDIA_REWIND
- card_mod:
- style:
- .: "ha-card {\n max-height: 90px !important;\n max-width:\
- \ 140px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n margin-top:-10px;\n\
- \ left: -50%;\n justify-content: flex-start !important;\n\
- \ background-color:transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em !important;\n\
- \ text-align: start;\n margin-top: -15px;\n font-weight:\
- \ 500 !important;\n white-space: initial !important;\n\
- \ z-index:1;\n}\n"
- - type: custom:mushroom-template-card
+ - type: custom:button-card
+ template: androidtv_button_media
+ entity: '[[media]]'
+ name: Next
icon: mdi:skip-next
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Next
tap_action:
action: call-service
service: remote.send_command
@@ -454,103 +509,96 @@ decluttering_templates:
data:
num_repeats: 1
command: MEDIA_FAST_FORWARD
- card_mod:
- style:
- .: "ha-card {\n max-height: 90px !important;\n max-width:\
- \ 160px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 60px !important;\n\
- \ --shape-color: none !important;\n margin-top: -10px;\n\
- \ left: -70%;\n justify-content: flex-start !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em !important;\n\
- \ text-align: start;\n margin-top: -15px;\n font-weight:\
- \ 500 !important;\n white-space: initial !important;\n\
- \ z-index:1;\n}\n"
- attributes:
icon: mdi:dialpad
card:
type: custom:layout-card
layout_type: custom:grid-layout
layout:
- grid-template-columns: auto auto auto
+ grid-template-columns: 1fr 1fr 1fr
grid-gap: 4px
grid-row-gap: 2px
margin: 8px 0 0
padding: 0
cards:
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-1
variables:
- - icon: mdi:numeric-1
- - remote: '[[remote]]'
- - command: '1'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '1'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-2
variables:
- - icon: mdi:numeric-2
- - remote: '[[remote]]'
- - command: '2'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '2'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-3
variables:
- - icon: mdi:numeric-3
- - remote: '[[remote]]'
- - command: '3'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '3'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-4
variables:
- - icon: mdi:numeric-4
- - remote: '[[remote]]'
- - command: '4'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '4'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-5
variables:
- - icon: mdi:numeric-5
- - remote: '[[remote]]'
- - command: '5'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '5'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-6
variables:
- - icon: mdi:numeric-6
- - remote: '[[remote]]'
- - command: '6'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '6'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-7
variables:
- - icon: mdi:numeric-7
- - remote: '[[remote]]'
- - command: '7'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '7'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-8
variables:
- - icon: mdi:numeric-8
- - remote: '[[remote]]'
- - command: '8'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '8'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-9
variables:
- - icon: mdi:numeric-9
- - remote: '[[remote]]'
- - command: '9'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '9'
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:information-slab-symbol
variables:
- - icon: mdi:information-slab-symbol
- - remote: '[[remote]]'
- - command: INFO
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: INFO
+ styles:
+ icon:
+ - --mdc-icon-size: 60px
+ - type: custom:button-card
+ template: androidtv_button_command
+ entity: '[[remote]]'
+ icon: mdi:numeric-0
variables:
- - icon: mdi:numeric-0
- - remote: '[[remote]]'
- - command: '0'
- - type: custom:decluttering-card
- template: androidtv_remote_button
+ command: '0'
+ - type: custom:button-card
+ template: androidtv_button_command
+ icon: mdi:keyboard-return
+ entity: '[[remote]]'
variables:
- - icon: mdi:keyboard-return
- - icon_size: 60
- - remote: '[[remote]]'
- - command: ENTER
+ command: ENTER
+ styles:
+ icon:
+ - --mdc-icon-size: 40px
- attributes:
icon: mdi:star
card:
@@ -559,7 +607,7 @@ decluttering_templates:
- type: custom:layout-card
layout_type: custom:grid-layout
layout:
- grid-template-columns: auto auto auto
+ grid-template-columns: 1fr 1fr 1fr
grid-gap: 4px
grid-row-gap: 2px
margin: 8px 0 2px 0
@@ -568,19 +616,19 @@ decluttering_templates:
- type: custom:layout-card
layout_type: custom:grid-layout
layout:
- grid-template-columns: auto auto auto
+ grid-template-columns: 1fr 1fr 1fr
grid-gap: 4px
grid-row-gap: 2px
margin: 8px 0 2px 0
padding: 0
cards: '[[sources]]'
- - type: custom:decluttering-card
+ - type: custom:button-card
template: androidtv_remote_source
+ entity: '[[media]]'
+ name: Home
+ icon: mdi:apps
variables:
- - icon: mdi:apps
- - media: '[[media]]'
- - name: Home
- - source: Home
+ source: Home
- attributes:
icon: mdi:volume-high
card:
@@ -589,175 +637,12 @@ decluttering_templates:
- type: custom:layout-card
layout_type: custom:grid-layout
layout:
- grid-template-columns: auto auto auto
+ grid-template-columns: 1fr 1fr 1fr
grid-gap: 4px
grid-row-gap: 2px
margin: 8px 0 2px 0
padding: 0
cards: '[[sound_buttons]]'
- androidtv_remote_button:
- default:
- - icon: mdi:remote
- - icon_color: white
- - icon_size: 70
- - style: ''
- card:
- type: custom:mushroom-template-card
- icon: '[[icon]]'
- icon_color: '[[icon_color]]'
- fill_container: true
- layout: vertical
- tap_action:
- action: call-service
- service: remote.send_command
- target:
- entity_id: '[[remote]]'
- data:
- command: '[[command]]'
- card_mod:
- style:
- .: "ha-card {\n [[style]]\n min-height: 102px !important;\n max-height:\
- \ 125px !important;\n max-width: 130px !important;\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: [[icon_size]]px !important;\n\
- \ --shape-color: none !important;\n background-color: transparent !important;\n\
- }\n"
- androidtv_remote_sound_mode:
- default:
- - icon: mdi:volume-high
- - icon_color: white
- - icon_size: 100
- - badge_icon_color: cyan
- - style: ''
- card:
- type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-template-card
- icon: '[[icon]]'
- icon_color: '[[icon_color]]'
- fill_container: true
- layout: vertical
- primary: '[[name]]'
- tap_action:
- service: media_player.select_sound_mode
- target:
- entity_id: '[[media]]'
- data:
- sound_mode: '[[sound_mode]]'
- card_mod:
- style:
- .: "ha-card {\n transition: all 0s;\n min-height: 145px !important;\n\
- \ max-height: 145px !important;\n [[style]]\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: [[icon_size]]px !important;\n\
- \ --shape-color: none !important;\n background-color: transparent\
- \ !important;\n}\n"
- mushroom-state-info$: ".primary {\n color: [[icon_color]] !important;\n\
- \ font-size: 1.04em !important;\n text-align: start;\n margin-top:\
- \ -20px;\n font-weight: 400 !important;\n white-space: initial !important;\n\
- }\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
- - type: template
- entity: '[[media]]'
- icon: "{% if is_state_attr(\"[[media]]\", \"sound_mode\", \"[[sound_mode]]\"\
- ) %}\n mdi:checkbox-blank-circle\n{% endif %}"
- icon_color: '[[badge_icon_color]]'
- card_mod:
- style: "ha-card {\n position: absolute;\n top: 0px;\n right: 0px;\n\
- \ --chip-box-shadow: none;\n --chip-background: none;\n --chip-border-width:\
- \ 0;\n}\n"
- androidtv_remote_source:
- default:
- - icon: mdi:remote
- - icon_color: white
- - icon_size: 100
- - badge_icon_color: white
- - style: ''
- card:
- type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-template-card
- icon: '[[icon]]'
- icon_color: '[[icon_color]]'
- fill_container: true
- layout: vertical
- primary: '[[name]]'
- tap_action:
- service: media_player.select_source
- target:
- entity_id: '[[media]]'
- data:
- source: '[[source]]'
- card_mod:
- style:
- .: "ha-card {\n transition: all 0s;\n min-height: 145px !important;\n\
- \ max-height: 145px !important;\n [[style]]\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: [[icon_size]]px !important;\n\
- \ --shape-color: none !important;\n background-color: transparent\
- \ !important;\n}\n"
- mushroom-state-info$: ".primary {\n color: [[icon_color]] !important;\n\
- \ font-size: 1.04em !important;\n text-align: start;\n margin-top:\
- \ -20px;\n font-weight: 400 !important;\n white-space: initial !important;\n\
- }\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
- - type: template
- entity: '[[media]]'
- icon: "{% if is_state_attr(\"[[media]]\", \"source\", \"[[source]]\"\
- ) %}\n mdi:checkbox-blank-circle\n{% endif %}"
- icon_color: '[[badge_icon_color]]'
- card_mod:
- style: "ha-card {\n position: absolute;\n top: 0px;\n right: 0px;\n\
- \ --chip-box-shadow: none;\n --chip-background: none;\n --chip-border-width:\
- \ 0;\n}\n"
- androidtv_harmony_source:
- default:
- - icon: mdi:remote
- - icon_color: white
- - icon_size: 100
- - badge_icon_color: cyan
- - style: ''
- card:
- type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-template-card
- primary: '[[name]]'
- icon: '[[icon]]'
- icon_color: '[[icon_color]]'
- fill_container: true
- layout: vertical
- tap_action:
- action: call-service
- service: remote.turn_on
- data:
- activity: '[[activity]]'
- target:
- entity_id: '[[remote]]'
- card_mod:
- style:
- .: "ha-card {\n transition: all 0s;\n min-height: 145px !important;\n\
- \ max-height: 145px !important;\n [[style]]\n}\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 100px !important;\n\
- \ --shape-color: none !important;\n background-color: transparent\
- \ !important;\n}\n"
- mushroom-state-info$: ".primary {\n color: [[icon_color]] !important;\n\
- \ font-size: 1.04em !important;\n text-align: start;\n margin-top:\
- \ -20px;\n font-weight: 400 !important;\n white-space: initial !important;\n\
- }\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
- - type: template
- entity: '[[remote]]'
- icon: "{%- if has_value(\"[[remote]]\") and is_state_attr(\"[[remote]]\"\
- , \"current_activity\", \"[[activity]]\") -%}\n mdi:checkbox-blank-circle\n\
- {%- endif -%}"
- icon_color: '[[badge_icon_color]]'
- card_mod:
- style: "ha-card {\n position: absolute;\n top: 0px;\n right: 0px;\n\
- \ --chip-box-shadow: none;\n --chip-background: none;\n --chip-border-width:\
- \ 0;\n}\n"
camera_popup:
card:
type: custom:frigate-card
@@ -811,75 +696,6 @@ decluttering_templates:
aspect_ratio_mode: dynamic
performance:
profile: high
- chip_header:
- default:
- - primary: Title
- - secondary: null
- - icon: mdi:select-place
- - back_path: main
- - chips: []
- card:
- type: custom:mod-card
- card_mod:
- style: "ha-card {\n background: var(--ha-card-background, var(--card-background-color,\
- \ #fff));\n box-shadow: var(--ha-card-box-shadow, none);\n box-sizing:\
- \ border-box;\n border-radius: var(--ha-card-border-radius, 12px);\n border-width:\
- \ var(--ha-card-border-width, 1px);\n border-style: solid;\n border-color:\
- \ var(--ha-card-border-color, var(--divider-color, #e0e0e0));\n color:\
- \ var(--primary-text-color);\n display: block;\n transition: all 0.3s\
- \ ease-out 0s;\n position: relative;\n}\n"
- card:
- type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: 55px auto
- grid-template-rows: auto
- grid-template-areas: '"nav chips" "header header"'
- reflow: true
- margin: 0
- padding: 5px
- cards:
- - type: custom:mushroom-chips-card
- view_layout:
- grid-area: nav
- card_mod:
- style: "ha-card {\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
- chips:
- - type: template
- icon: mdi:chevron-left
- tap_action:
- action: navigate
- navigation_path: '[[back_path]]'
- - type: custom:mushroom-chips-card
- view_layout:
- grid-area: chips
- card_mod:
- style: "ha-card {\n transition: all 0s;\n background-color: var(--primary-background-color)\
- \ !important;\n border-radius: var(--ha-card-border-radius, 12px)\
- \ !important;\n --chip-box-shadow: none;\n --chip-background: none;\n\
- \ --chip-border-width: 0;\n --chip-spacing: 0;\n --chip-icon-size:\
- \ 0.65em;\n}\n"
- chips: '[[chips]]'
- - type: custom:mushroom-template-card
- view_layout:
- grid-area: header
- primary: '[[primary]]'
- secondary: '[[secondary]]'
- icon: '[[icon]]'
- icon_color: '[[icon_color]]'
- fill_container: true
- tap_action:
- action: none
- hold_action:
- action: none
- card_mod:
- style: ":host {\n --mush-card-primary-line-height: 1.4em;\n --mush-icon-size:\
- \ 60px;\n --mush-card-primary-font-size: 3rem;\n margin-left: -10px\
- \ !important;\n}\nha-card {\n transition: all 0s;\n background:\
- \ none;\n box-shadow: none;\n border: none;\n padding: 0px 16px\
- \ 8px !important;\n\n /* Make card non-responsive to select and pointer\
- \ */\n user-select: none;\n pointer-events: none;\n}\n"
computer_apps:
card:
type: custom:vertical-stack-in-card
@@ -1425,12 +1241,12 @@ decluttering_templates:
}\n"
card_mod:
style:
- .: "ha-card {\n background: none;\n --ha-card-border-width: 0;\n transform:\
- \ translate3d(0,0,0);\n -webkit-transform: translate3d(0,0,0);\n}\nha-card:before\
- \ {\n transform: translate3d(0,0,0);\n -webkit-transform: translate3d(0,0,0);\n\
- \ content: \"\";\n position: absolute;\n height: 100%;\n width: 100%;\n\
- \n animation: gradient 40s ease infinite;\n\n {%- if not states(\"[[entity]]\"\
- ) in [\"off\", \"unknown\", \"unavailable\", \"idle\"] and state_attr(\"\
+ .: "ha-card {\n background: none;\n transform: translate3d(0,0,0);\n \
+ \ -webkit-transform: translate3d(0,0,0);\n}\nha-card:before {\n transform:\
+ \ translate3d(0,0,0);\n -webkit-transform: translate3d(0,0,0);\n content:\
+ \ \"\";\n position: absolute;\n height: 100%;\n width: 100%;\n\n animation:\
+ \ gradient 40s ease infinite;\n\n {%- if not states(\"[[entity]]\") in\
+ \ [\"off\", \"unknown\", \"unavailable\", \"idle\"] and state_attr(\"\
[[entity]]\", \"entity_picture\") -%}\n background: url( '{{ state_attr('[[entity]]',\
\ \"entity_picture\") }}') center no-repeat;\n background-size: 500%\
\ 500%;\n filter: blur(100px) saturate(200%);\n {%- elif not states('[[entity]]')\
@@ -1441,8 +1257,8 @@ decluttering_templates:
\ gradient {\n 0% { background-position: 0% 50%; }\n 25% { background-position:\
\ 50% 0%; }\n 50% { background-position: 100% 50%; }\n 75% { background-position:\
\ 50% 100%; }\n 100% { background-position: 0% 50%; }\n"
- expander-card$: "/*.header-overlay {\n right: initial;\n left: 0;\n}*/\n\
- .ripple {\n border-radius: var(--ha-dialog-border-radius);\n}\n"
+ expander-card$: "ha-card {\n --ha-card-border-width: 0;\n}\n.ripple {\n\
+ \ border-radius: var(--ha-dialog-border-radius);\n}\n"
motion_card:
card:
type: custom:mushroom-template-card
@@ -1459,62 +1275,45 @@ decluttering_templates:
action: more-info
package_delivery:
card:
- type: conditional
- conditions:
- - condition: numeric_state
- entity: '[[entity]]'
- above: 0
- - entity: '[[entity]]'
- state_not: unavailable
- - entity: '[[entity]]'
- state_not: unknown
- card:
- type: custom:mushroom-template-card
- layout: vertical
- entity: '[[entity]]'
- icon: '[[icon]]'
- icon_color: '[[icon_color]]'
- badge_icon: "{% if int(states(entity), 0) > 9 %}\n mdi:numeric-9-plus\n{%\
- \ elif int(states(entity), 0) > 0 %}\n mdi:numeric-{{ states(entity) }}\n\
- {% else %}\n mdi:numeric-0\n{% endif %}"
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: '[[name]] Tracking'
- content:
- type: custom:vertical-stack-in-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- cards:
- - type: custom:mushroom-template-card
- entity: '[[entity]]'
- primary: '[[name]]'
- secondary: '{{ states(entity) }} {{ iif(int(states(entity), 0)
- == 1, "package", "packages") }}'
- icon: '[[icon]]'
- icon_color: '[[icon_color]]'
- tap_action:
- action: more-info
- - type: custom:mushroom-title-card
- subtitle: Tracking Numbers
- - type: markdown
- content: "{%- set orders = state_attr(\"[[entity]]\", \"tracking_#\"\
- ) -%} {%- if state_attr(\"[[entity]]\", \"order\") -%}\n {%-\
- \ set orders = state_attr(\"[[entity]]\", \"order\") -%}\n{%-\
- \ endif -%} {% for number in orders -%}\n [{{ number }}]({{ \"\
- [[url]]\" | replace(\"##TRACK_ID##\", number) }})\n{% endfor\
- \ %}"
- card_mod:
- style: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width: 0;\n\
- \ --icon-size: 48px;\n}\nmushroom-badge-icon {\n --icon-color: rgb(var(--rgb-[[icon_color]]));\n\
- \ --main-color: none;\n --badge-icon-size: 2em;\n}\n"
- person_card:
- default:
+ type: custom:mushroom-template-badge
+ entity: '[[entity]]'
+ label: '[[name]]'
+ content: '{{ states(entity) }} {{ iif(int(states(entity), 0) == 1, "package",
+ "packages") }}'
+ icon: '[[icon]]'
+ color: '[[icon_color]]'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: '[[name]] Tracking'
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:mushroom-template-card
+ entity: '[[entity]]'
+ primary: '[[name]]'
+ secondary: '{{ states(entity) }} {{ iif(int(states(entity), 0) ==
+ 1, "package", "packages") }}'
+ icon: '[[icon]]'
+ icon_color: '[[icon_color]]'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-title-card
+ subtitle: Tracking Numbers
+ - type: markdown
+ content: "{%- set orders = state_attr(\"[[entity]]\", \"tracking_#\"\
+ ) -%} {%- if state_attr(\"[[entity]]\", \"order\") -%}\n {%-\
+ \ set orders = state_attr(\"[[entity]]\", \"order\") -%}\n{%-\
+ \ endif -%} {% for number in orders -%}\n [{{ number }}]({{ \"[[url]]\" | replace(\"##TRACK_ID##\"\
+ , number) }})\n{% endfor %}"
+ person_card:
+ default:
- phone_base: pixel_8
- watch_base: pixel_watch
card:
@@ -1531,8 +1330,17 @@ decluttering_templates:
name: '[[name]]'
icon_type: entity-picture
tap_action:
- action: navigate
- navigation_path: '#person-[[person]]'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: '[[name]]'
+ content:
+ type: custom:decluttering-card
+ template: person_popup
+ variables:
+ - person: '[[person]]'
+ - name: '[[name]]'
card_mod:
style:
.: "{% set state = states(config.entity) %}\n:host {\n transition:\
@@ -1544,8 +1352,8 @@ decluttering_templates:
\ %}\n rgba(33, 150, 243, 0.05)\n {% endif %};\n {% endif\
\ %}\n}\nha-card {\n transition: all 0s;\n padding-bottom: 0 !important;\n\
}\nmushroom-state-info {\n z-index: 1;\n}\nmushroom-shape-avatar\
- \ {\n position: absolute;\n top: -30px;\n left: -10px;\n}\nmushroom-state-info\
- \ {\n padding-left: 50px;\n z-index: 1;\n}\n"
+ \ {\n position: absolute;\n top: -30px;\n left: -15px;\n}\nmushroom-state-info\
+ \ {\n padding-left: 34px;\n z-index: 1;\n}\n"
- type: custom:mushroom-chips-card
alignment: end
chips:
@@ -1638,8 +1446,17 @@ decluttering_templates:
, \"on\"] %}\n blue-grey\n{% else %}\n disabled\n{% endif %}"
icon: mdi:spotify
tap_action:
- action: navigate
- navigation_path: '#person-spotify-[[person]]'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Spotify ([[name]])
+ content:
+ type: custom:decluttering-card
+ template: media_card
+ variables:
+ - entity: media_player.spotify_[[person]]
+ - buttons: []
person_popup:
default:
- phone_base: pixel_8
@@ -2043,8 +1860,8 @@ decluttering_templates:
entity: '[[entity]]'
primary: '[[primary]]'
secondary: "{%- if has_value(\"[[temperature]]\") -%}\n {{ states(\"[[temperature]]\"\
- , rounded=True, with_unit=True) }}\n{%- else -%}\n {{ \"-\" }}\n{%- endif\
- \ -%}\n"
+ ) | round(0) }} {{ state_attr(\"[[temperature]]\", \"unit_of_measurement\"\
+ ) }}\n{%- else -%}\n {{ \"-\" }}\n{%- endif -%}\n"
icon: '[[icon]]'
icon_color: '[[icon_color]]'
fill_container: true
@@ -2076,42 +1893,6 @@ decluttering_templates:
style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: rgba(var(--rgb-disabled),\
\ 0.1);\n --chip-border-width: 0;\n --chip-spacing: 1px;\n margin-right:\
\ calc(var(--ha-card-border-radius, 12px) / 2);\n}\n"
- title_chips:
- default:
- - title: Title
- - subtitle: ''
- - chips: []
- card:
- type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: auto max-content
- grid-template-areas: '"title chips"
-
- "subtitle subtitle"
-
- '
- margin: -4px 0 -4px 0
- cards:
- - type: custom:mushroom-title-card
- title: '[[title]]'
- view_layout:
- grid-area: title
- - type: custom:mushroom-title-card
- subtitle: '[[subtitle]]'
- view_layout:
- grid-area: subtitle
- card_mod:
- style:
- .: "h2 {\n transition: all 0s;\n padding: 0 16px 12px;\n}\n.header\
- \ {\n transition: all 0s;\n --title-padding: 0;\n}\n"
- - type: custom:mushroom-chips-card
- view_layout:
- grid-area: chips
- alignment: end
- card_mod:
- style: ":host {\n align-self: center;\n}\n"
- chips: '[[chips]]'
uptime_card:
default:
- name: Uptime
@@ -2167,6 +1948,61 @@ decluttering_templates:
tooltip:
animation: true
hour24: false
+ vehicle_card:
+ default:
+ - chips: []
+ card:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "{% set state = states(\"[[location]]\") %}\n{% if state != \"home\"\
+ \ %}\nha-card {\n {% if state == \"not_home\" %}\n background: rgba(244,\
+ \ 67, 54, 0.2)\n {% elif state in [\"unknown\", \"unavailable\"] %}\n \
+ \ background: rgba(189, 189, 189, 0.2)\n {% else %}\n background:\
+ \ rgba(33, 150, 243, 0.2)\n {% endif %};\n}\n{% endif %}\n"
+ cards:
+ - type: custom:mushroom-template-card
+ entity: '[[location]]'
+ primary: '[[name]]'
+ secondary: '{{ states("[[odometer]]", with_unit=true) }}'
+ picture: '{{ state_attr(entity, "entity_picture") }}'
+ fill_container: true
+ tap_action:
+ action: navigate
+ navigation_path: '[[path]]'
+ badge_icon: "{% if is_state(\"[[problems]]\", \"on\") %}\n mdi:alert\n\
+ {% endif %}"
+ badge_color: red
+ card_mod:
+ style:
+ .: "{% set state = states(config.entity) %}\n:host {\n transition:\
+ \ all 0s;\n --mush-card-primary-font-size: 16px;\n --mush-card-secondary-font-size:\
+ \ 13px;\n --mush-icon-size: 4.84em;\n {% if not is_state(config.entity,\
+ \ \"home\") %}\n --ha-card-background:\n {% if is_state(config.entity,\
+ \ \"not_home\") %}\n rgba(244, 67, 54, 0.05)\n {% elif state\
+ \ in [\"unknown\", \"unavailable\"] %}\n rgba(189, 189, 189,\
+ \ 0.05)\n {% else %}\n rgba(33, 150, 243, 0.05)\n {% endif\
+ \ %};\n {% endif %}\n}\nha-card {\n transition: all 0s;\n padding-bottom:\
+ \ 0 !important;\n}\nmushroom-state-info {\n z-index: 1;\n}\nmushroom-shape-avatar\
+ \ {\n position: absolute;\n top: -30px;\n left: -10px;\n}\nmushroom-state-info\
+ \ {\n padding-left: 50px;\n z-index: 1;\n}\nmushroom-badge-icon\
+ \ {\n margin-right: -55px;\n margin-top: -20px;\n}\n"
+ mushroom-shape-avatar$: "{% set timer = \"[[timer]]\" %}\n{% if state_attr(timer,\
+ \ \"finishes_at\") %}\n.picture {\n {% set remaining = (as_datetime(state_attr(timer,\
+ \ \"finishes_at\")) - now()).total_seconds() | int %}\n {% set duration\
+ \ =\n (state_attr(timer, \"duration\").split(\":\")[0] | int *\
+ \ 60 * 60)\n + (state_attr(timer, \"duration\").split(\":\")[1]\
+ \ | int * 60)\n + (state_attr(timer, \"duration\").split(\":\"\
+ )[2] | int)\n %}\n background:\n radial-gradient(var(--card-background-color)\
+ \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--accent-color)\
+ \ {{ (remaining / duration * 100) | round() }}% 0%, var(--card-background-color)\
+ \ 0% 100%);\n}\n{% endif %}\n"
+ - type: custom:mushroom-chips-card
+ alignment: end
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: rgba(var(--rgb-disabled),\
+ \ 0.1);\n --chip-border-width: 0;\n --chip-spacing: 1px;\n margin-right:\
+ \ calc(var(--ha-card-border-radius, 12px) / 2);\n}\n"
+ chips: '[[chips]]'
windows_updates_list:
card:
type: markdown
@@ -2189,336 +2025,721 @@ views:
sections:
- type: grid
cards:
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: 55px auto
- grid-template-rows: auto
- margin: 0
- padding: 5px
- cards:
- - type: custom:mushroom-chips-card
- card_mod:
- style: "ha-card {\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n --chip-icon-size: 1em;\n\
- }\n"
- chips:
- - type: menu
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-chips-card
- alignment: justify
- card_mod:
- style: "ha-card {\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing:\
- \ 0;\n --chip-icon-size: 0.65em;\n transition: margin\
- \ 0s;\n margin: auto calc(var(--ha-card-border-radius,\
- \ 12px) / 4);\n}\n"
- chips:
- - type: template
- entity: lock.front_door
- content: '{% from "util.jinja" import security_count %}
- {{ iif(security_count() | int == 0, "Secure", "Not Secure")
- }}'
- icon: '{% from "util.jinja" import security_count %} {{
- iif(security_count() | int == 0, "mdi:shield-check",
- "mdi:shield-alert") }}'
- icon_color: '{% from "util.jinja" import security_count
- %} {{ iif(security_count() | int == 0, "green", "red")
- }}'
- tap_action:
- action: navigate
- navigation_path: security
- - type: template
- entity: binary_sensor.all_doors
- card_mod:
- style:
- .: "{% if is_state(config.entity, \"on\") %}\nha-card:after\
- \ {\n content: \"{{ expand(config.entity) | selectattr('state',\
- \ '==', 'on') | list | count }}\";\n position:\
- \ absolute;\n color: var(--cyan-color);\n font-weight:\
- \ bolder;\n top: -2px;\n right: 2px;\n font-size:\
- \ 12px;\n}\n{% endif %}\n"
- icon_color: '{{ iif(is_state(entity, "on"), "cyan", "disabled")
- }}'
- icon: '{{ iif(is_state(entity, "on"), "mdi:door-open",
- "mdi:door") }}'
- tap_action:
- action: navigate
- navigation_path: '#all-doors'
- - type: template
- card_mod:
- style:
- .: "{% if is_state(config.entity, \"on\") %}\nha-card:after\
- \ {\n content: \"{{ expand(config.entity) | selectattr('state',\
- \ '==', 'on') | list | count }}\";\n position:\
- \ absolute;\n color: var(--amber-color);\n font-weight:\
- \ bolder;\n top: -2px;\n right: 2px;\n font-size:\
- \ 12px;\n}\n{% endif %}\n"
- entity: light.all_lights
- icon: '{{ iif(is_state(entity, "on"), "mdi:lightbulb-group",
- "mdi:lightbulb-group-off") }}'
- icon_color: '{{ iif(is_state(entity, "on"), "amber", "disabled")
- }}'
- tap_action:
- action: navigate
- navigation_path: lights
- hold_action:
- action: call-service
- service: light.turn_off
- target:
- entity_id: light.all_lights
- - type: template
- entity: sensor.emporiavue_main_total_power
- content: "{% if has_value(entity) %}\n {% set power =\
- \ int(states(entity), 0) | abs %}\n {% if power > 1000\
- \ %}\n {{ (power | float * 0.001) | round(2) }} kWh\n\
- \ {% else %}\n {{ power }} W\n {% endif %}\n{%\
- \ endif %}"
- icon: "{% if has_value(entity) %}\n {% if int(states(entity),\
- \ 0) < 0 %}\n mdi:transmission-tower-export\n {%\
- \ else %}\n mdi:transmission-tower-import\n {% endif\
- \ %}\n{% else %}\n mdi:transmission-tower-off\n{% endif\
- \ %}"
- icon_color: "{% if has_value(entity) %}\n {% if int(states(entity),\
- \ 0) < 0 %}\n lime\n {% else %}\n deep-orange\n\
- \ {% endif %}\n{% else %}\n disabled\n{% endif %}"
- tap_action:
- action: navigate
- navigation_path: power
- - type: custom:mushroom-chips-card
- alignment: justify
- card_mod:
- style: "ha-card {\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing:\
- \ 0;\n --chip-icon-size: 0.65em;\n transition: margin\
- \ 0s;\n margin: auto calc(var(--ha-card-border-radius,\
- \ 12px) / 4);\n}\n"
- chips:
- - type: template
- entity: binary_sensor.computers
- icon: mdi:desktop-tower
- icon_color: '{{ "teal" if is_state(entity, "on") else
- "disabled" }}'
- tap_action:
- action: navigate
- navigation_path: computer
- card_mod:
- style:
- .: "{% if is_state(config.entity, \"on\") %}\nha-card:after\
- \ {\n content: \"{{ expand(config.entity) | selectattr(\"\
- state\", \"==\", \"on\") | list | count }}\";\n\
- \ position: absolute;\n color: var(--teal-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right:\
- \ 2px;\n font-size: 12px;\n}\n{% endif %}\n"
- - type: template
- entity: sensor.bambu_p1s_print_status
- icon: mdi:printer-3d
- icon_color: "{% if is_state(\"sensor.bambu_p1s_current_stage\"\
- , \"idle\") %}\n disabled\n{% elif is_state(entity,\
- \ \"running\") %}\n green\n{% elif is_state(entity,\
- \ \"finish\") %}\n orange\n{% elif states(entity) in\
- \ [\"idle\", \"pause\"] %}\n yellow\n{% elif states(entity)\
- \ in [\"init\", \"prepare\", \"slicing\"] %}\n light-blue\n\
- {% elif is_state(entity, \"failed\") %}\n red\n{% else\
- \ %}\n disabled\n{% endif %}"
- content: "{% if is_state(entity, \"running\") and has_value(\"\
- sensor.bambu_p1s_current_layer\") %}\n {{ states('sensor.bambu_p1s_current_layer')\
- \ }} / {{\n states('sensor.bambu_p1s_total_layer_count')\
- \ }}\n{% endif %}"
- hold_action:
- action: none
- tap_action:
- action: navigate
- navigation_path: bambu
- - type: template
- entity: sensor.meater_probe_cook_state
- icon: mdi:food-drumstick
- icon_color: '{{ has_value(entity) | iif("brown", "disabled")
- }}'
- content: "{% if has_value(entity) %}\n {{ states(\"sensor.meater_probe_internal\"\
- ) }} °F\n {% if has_value(\"sensor.meater_probe_cook_time_remaining\"\
- ) %}\n {% set t = (states(\"sensor.meater_probe_cook_time_remaining\"\
- ) | as_datetime - now()).total_seconds() %}\n | {{\
- \ t | timestamp_custom('%-H hr %-M min' if t > 3600\
- \ else '%-M min', false) }}\n {% endif %}\n{% endif\
- \ %}"
- tap_action:
- action: navigate
- navigation_path: '#meater'
- - type: conditional
- conditions:
- - condition: state
- entity: binary_sensor.cat_feeder_error
- state: 'on'
- chip:
- type: template
- entity: binary_sensor.cat_feeder_error
- icon_color: red
- icon: mdi:cat
+ - type: custom:mod-card
+ style:
+ hui-horizontal-stack-card$: "#root { \n flex-wrap: wrap;\n align-items:\
+ \ flex-start;\n flex-wrap: wrap;\n justify-content: space-around;\n\
+ \ gap: 8px;\n margin: 0px;\n text-align: center;\n}\nmushroom-template-badge,\
+ \ hui-conditional-card {\n flex: 0 0 auto !important;\n}\n"
+ card:
+ type: horizontal-stack
+ cards:
+ - type: custom:mushroom-template-badge
+ entity: weather.owm_daily
+ icon: '{% if is_state(entity,"clear-day") %} mdi:weather-sunny {%
+ elif is_state(entity,"sunny") %} mdi:weather-sunny {% elif is_state(entity,"clear")
+ %} mdi:weather-sunny {% elif is_state(entity,"clear-night") %}
+ mdi:weather-night {% elif is_state(entity,"rainy") %} mdi:weather-rainy
+ {% elif is_state(entity,"pouring") %} mdi:weather-pouring {% elif
+ is_state(entity,"snow") %} mdi:weather-snowy {% elif is_state(entity,"fog")
+ %} mdi:weather-fog {% elif is_state(entity,"sleet") %} mdi:weather-partly-snowy-rainy
+ {% elif is_state(entity,"wind") %} mdi:weather-windy {% elif is_state(entity,"cloudy")
+ %} mdi:weather-cloudy {% elif is_state(entity,"partlycloudy")
+ %} mdi:weather-partly-cloudy {% elif is_state(entity,"partly-cloudy-night")
+ %} mdi:weather-night-partly-cloudy {% elif is_state(entity,"hail")
+ %} mdi:weather-hail {% elif is_state(entity,"lightning") %} mdi:weather-lightning
+ {% elif is_state(entity,"tstorm") %} mdi:weather-lightning-rainy
+ {% endif %}'
+ content: '{{ state_translated(entity) }} / {{ states("sensor.ecowitt_outdoor_temperature")
+ | round() }} {{ state_attr("sensor.ecowitt_outdoor_temperature",
+ "unit_of_measurement") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Weather
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - card_config_version: 8
+ daily_forecast_days: 6
+ entity_apparent_temp: sensor.ecowitt_feels_like_temperature
+ entity_extended: sensor.forecast
+ entity_forecast_icon: weather.owm_daily
+ entity_forecast_icon_1: weather.owm_daily
+ entity_forecast_max: weather.owm_daily
+ entity_forecast_max_1: weather.owm_daily
+ entity_forecast_min: weather.owm_daily
+ entity_forecast_min_1: weather.owm_daily
+ entity_humidity: sensor.ecowitt_humidity
+ entity_pop: weather.owm_daily
+ entity_pop_1: weather.owm_daily
+ entity_pos: weather.owm_daily
+ entity_pos_1: weather.owm_daily
+ entity_pressure: sensor.ecowitt_relative_pressure
+ entity_summary: weather.owm_daily
+ entity_summary_1: weather.owm_daily
+ entity_sun: sun.sun
+ entity_temperature: sensor.ecowitt_outdoor_temperature
+ entity_uv_alert_summary: sensor.owm_daily_uv_index
+ entity_visibility: sensor.owm_daily_visibility
+ entity_wind_bearing: sensor.ecowitt_wind_direction
+ entity_wind_gust: sensor.ecowitt_wind_gust
+ entity_wind_speed: sensor.ecowitt_wind_speed
+ extended_name_attr: precipitation_unit
+ extended_use_attr: false
+ forecast_type: daily
+ option_color_fire_danger: false
+ option_show_overview_separator: false
+ option_static_icons: false
+ option_tooltips: false
+ section_order:
+ - overview
+ - extended
+ - slots
+ - daily_forecast
+ show_section_daily_forecast: true
+ show_section_slots: true
+ slot_l1: forecast_max
+ slot_l2: forecast_min
+ slot_l3: wind
+ slot_l4: pressure
+ slot_l5: sun_next
+ slot_l6: remove
+ slot_l7: remove
+ slot_l8: remove
+ slot_r1: popforecast
+ slot_r2: humidity
+ slot_r3: uv_summary
+ slot_r4: visibility
+ slot_r5: sun_following
+ slot_r6: remove
+ slot_r7: remove
+ slot_r8: remove
+ type: custom:platinum-weather-card
+ weather_entity: weather.owm_daily
+ - type: custom:layout-card
+ layout_type: custom:grid-layout
+ layout:
+ grid-template-columns: 66px auto
+ margin: -4px -4px -12px -4px;
+ cards:
+ - type: custom:mushroom-entity-card
+ entity: weather.owm_daily
+ icon_color: blue
+ card_mod:
+ style: "ha-card {\n background: none;\n --ha-card-box-shadow:\
+ \ 0px;\n}\n"
+ - type: custom:hourly-weather
+ entity: weather.owm_daily
+ icons: true
+ label_spacing: '2'
+ num_segments: '12'
+ name: ' '
+ card_mod:
+ style:
+ .: "ha-card {\n background: none;\n --ha-card-box-shadow:\
+ \ 0px;\n margin: -8px -4px -4px -16px;\n\
+ }\n"
+ weather-bar$: ".main {\n --mush-rgb-red: 244,\
+ \ 67, 54;\n --mush-rgb-pink: 233, 30, 99;\n\
+ \ --mush-rgb-purple: 156, 39, 176;\n --mush-rgb-deep-purple:\
+ \ 103, 58, 183;\n --mush-rgb-indigo: 63,\
+ \ 81, 181;\n --mush-rgb-blue: 33, 150, 243;\n\
+ \ --mush-rgb-light-blue: 3, 169, 244;\n \
+ \ --mush-rgb-cyan: 0, 188, 212;\n --mush-rgb-teal:\
+ \ 0, 150, 136;\n --mush-rgb-green: 76, 175,\
+ \ 80;\n --mush-rgb-light-green: 139, 195,\
+ \ 74;\n --mush-rgb-lime: 205, 220, 57;\n\
+ \ --mush-rgb-yellow: 255, 235, 59;\n --mush-rgb-amber:\
+ \ 255, 193, 7;\n --mush-rgb-orange: 255,\
+ \ 152, 0;\n --mush-rgb-deep-orange: 255,\
+ \ 87, 34;\n --mush-rgb-brown: 121, 85, 72;\n\
+ \ --mush-rgb-grey: 158, 158, 158;\n --mush-rgb-blue-grey:\
+ \ 96, 125, 139;\n --mush-rgb-black: 0, 0,\
+ \ 0;\n --mush-rgb-white: 255, 255, 255;\n\
+ \n --color-clear-night: rgba(var(--mush-rgb-black),\
+ \ 0.2) !important;\n --color-cloudy: rgba(var(--mush-rgb-grey),\
+ \ 0.2) !important;\n --color-fog: var(--color-cloudy);\n\
+ \ --color-hail: rgba(var(--mush-rgb-indigo),\
+ \ 0.2) !important;\n --color-lightning: var(--color-rainy);\n\
+ \ --color-lightning-rainy: var(--color-rainy);\n\
+ \ --color-partlycloudy: rgba(var(--mush-rgb-blue),\
+ \ 0.2) !important;\n --color-pouring: var(--color-rainy);\n\
+ \ --color-rainy: rgba(var(--mush-rgb-indigo),\
+ \ 0.2) !important;\n --color-snowy: rgba(var(--mush-rgb-white),\
+ \ 0.2) !important;\n --color-snowy-rainy:\
+ \ var(--color-partlycloudy);\n --color-sunny:\
+ \ rgba(var(--mush-rgb-yellow), 0.2) !important;\n\
+ \ --color-windy: var(--color-sunny);\n --color-windy-variant:\
+ \ var(--color-sunny);\n --color-exceptional:\
+ \ rgba(var(--mush-rgb-amber), 0.2) !important;\n\
+ }\n.bar > div {\n height: 42px !important;\n\
+ }\n.bar > div:first-child {\n border-top-left-radius:\
+ \ var(--ha-card-border-radius) !important;\n\
+ \ border-bottom-left-radius: var(--ha-card-border-radius)\
+ \ !important;\n}\n.bar > div:last-child {\n\
+ \ border-top-right-radius: var(--ha-card-border-radius)\
+ \ !important;\n border-bottom-right-radius:\
+ \ var(--ha-card-border-radius) !important;\n\
+ }\n.bar > div > span {\n text-shadow: none\
+ \ !important;\n color: rgb(var(--primary-text-color));\n\
+ \ font-size: 14px;\n font-weight: bold;\n\
+ }\n.axes > div > .bar-block-bottom > .hour\
+ \ {\n font-size: 12px;\n font-weight: bolder;\n\
+ }\n.axes > div > .bar-block-bottom > .temperature\
+ \ {\n font-size: 12px;\n font-weight: bolder;\n\
+ }\n.axes {\n margin-top: 10px !important;\n\
+ }\n"
+ - type: iframe
+ url: https://embed.windy.com/embed.html?type=map&location=coordinates&metricRain=in&metricTemp=°F&metricWind=mph&zoom=7&overlay=wind&product=ecmwf&level=surface&lat=42.926&lon=-112.462&message=true
+ - type: custom:horizon-card
+ label: Weather
+ - type: custom:mushroom-template-badge
+ entity: sensor.ecobee_mode
+ label: Climate
+ content: '{{ states("sensor.ecobee_current_temperature") | round(0)
+ }} {{ state_attr("sensor.ecobee_current_temperature", "unit_of_measurement")
+ }}'
+ icon: mdi:thermostat
+ color: "{% if is_state(entity, \"Heating\") %}\n red\n{% elif is_state(entity,\
+ \ \"Cooling\") %}\n light-blue\n{% elif is_state(entity, \"Fan\"\
+ ) %}\n amber\n{% elif is_state(entity, \"Off\") %}\n grey\n\
+ {% else %}\n blue-grey\n{% endif %}"
+ tap_action:
+ action: navigate
+ navigation_path: climate
+ - type: custom:mushroom-template-badge
+ entity: sensor.airgradient_kitchen_pm_2_5_aqi
+ label: AQI
+ content: '{{ states(entity) | int(default="?") }} / {{ states("sensor.airnow_air_quality_index")
+ | int(default="?") }}'
+ icon: '{{ iif(has_value(entity), "mdi:blur", "mdi:blur-off") }}'
+ color: "{% if has_value(entity) %}\n {% set level = states(entity)\
+ \ | float(default=0) %}\n {% if level >= 300 %}\n red\n {%\
+ \ elif level >= 200 %}\n purple\n {% elif level >= 150 %}\n\
+ \ pink\n {% elif level >= 100 %}\n orange\n {% elif level\
+ \ >= 50 %}\n yellow\n {% elif level >= 0 %}\n green\n \
+ \ {% endif %}\n{% else %}\n grey\n{% endif %}"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Air Quality
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: vertical-stack
+ cards:
+ - type: custom:mushroom-title-card
+ title: Inside
+ - type: custom:bar-card
+ card_mod:
+ style: "bar-card-name,\nbar-card-value {\n font-weight:\
+ \ 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\n"
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ entities:
+ - entity: sensor.airgradient_kitchen_pm_2_5_aqi
+ name: AQI
+ min: 0
+ max: 400
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '50'
+ - color: var(--yellow-color)
+ from: '50'
+ to: '100'
+ - color: var(--orange-color)
+ from: '100'
+ to: '150'
+ - color: var(--red-color)
+ from: '150'
+ to: '200'
+ - color: var(--purple-color)
+ from: '200'
+ to: '300'
+ - color: var(--pink-color)
+ from: '300'
+ to: '400'
+ - entity: sensor.airgradient_kitchen_pm_2_5
+ name: PM 2.5
+ min: 0
+ max: 100
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '12'
+ - color: var(--yellow-color)
+ from: '12'
+ to: '35'
+ - color: var(--orange-color)
+ from: '35'
+ to: '50'
+ - color: var(--red-color)
+ from: '50'
+ to: '100'
+ - entity: sensor.airgradient_kitchen_pm_10_0
+ name: PM 10
+ min: 0
+ max: 100
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '12'
+ - color: var(--yellow-color)
+ from: '12'
+ to: '35'
+ - color: var(--orange-color)
+ from: '35'
+ to: '50'
+ - color: var(--red-color)
+ from: '50'
+ to: '100'
+ - entity: sensor.airgradient_kitchen_voc_index
+ name: VOC
+ min: 0
+ max: 500
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '150'
+ - color: var(--yellow-color)
+ from: '150'
+ to: '250'
+ - color: var(--orange-color)
+ from: '250'
+ to: '400'
+ - color: var(--red-color)
+ from: '400'
+ to: '500'
+ - entity: sensor.airgradient_kitchen_nox_index
+ name: NOx
+ min: 0
+ max: 500
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '30'
+ - color: var(--yellow-color)
+ from: '30'
+ to: '150'
+ - color: var(--orange-color)
+ from: '150'
+ to: '300'
+ - color: var(--red-color)
+ from: '300'
+ to: '500'
+ - type: vertical-stack
+ cards:
+ - type: custom:mushroom-title-card
+ title: Outside
+ - type: custom:mushroom-template-card
+ entity: sensor.airnow_air_quality_index
+ primary: 'AQI: {{ state_attr(entity, "description")
+ }}'
+ multiline_secondary: true
+ fill_container: false
+ tap_action:
+ action: none
+ hold_action:
+ action: none
+ double_tap_action:
+ action: none
+ - type: custom:bar-card
+ card_mod:
+ style: "bar-card-name,\nbar-card-value {\n font-weight:\
+ \ 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\n"
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ entities:
+ - entity: sensor.airnow_air_quality_index
+ name: AQI
+ min: 0
+ max: 400
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '50'
+ - color: var(--yellow-color)
+ from: '50'
+ to: '100'
+ - color: var(--orange-color)
+ from: '100'
+ to: '150'
+ - color: var(--red-color)
+ from: '150'
+ to: '200'
+ - color: var(--purple-color)
+ from: '200'
+ to: '300'
+ - color: var(--pink-color)
+ from: '300'
+ to: '400'
+ - entity: sensor.airnow_pm2_5
+ name: PM 2.5
+ min: 0
+ max: 100
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '12'
+ - color: var(--yellow-color)
+ from: '12'
+ to: '35'
+ - color: var(--orange-color)
+ from: '35'
+ to: '50'
+ - color: var(--red-color)
+ from: '50'
+ to: '100'
+ - type: custom:mini-graph-card
+ name: CO2 Levels
+ icon: mdi:molecule-co2
+ show:
+ labels: false
+ entities:
+ - entity: sensor.airgradient_kitchen_co2
+ name: Kitchen
+ color: var(--amber-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.apollo_msr_1_office_co2
+ name: Office
+ color: var(--blue-color)
+ show_state: true
+ show_points: false
+ line_width: 3
+ font_size: 75
+ hours_to_show: 30
+ points_per_hour: 12
+ update_interval: 300
+ animate: true
+ - type: custom:mushroom-template-badge
+ entity: sensor.allergy_index_today
+ content: '{{ states(entity) | float(default=0) }}'
+ icon: mdi:flower-pollen
+ color: "{% set level = states(entity) | float(default=0) %}\n{%\
+ \ if level >= 9.7 %}\n red\n{% elif level >= 7.3 %}\n orange\n\
+ {% elif level >= 4.9 %}\n yellow\n{% elif level >= 2.5 %}\n \
+ \ lime\n{% else %}\n green\n{% endif %}"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Allergy
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:mushroom-title-card
+ title: Allergens
+ - type: custom:mushroom-template-card
+ entity: sensor.allergy_index_today
+ secondary: "{%- set ns = namespace(allergens=[]) -%}\
+ \ {%- for id in range(1, 4) -%}\n {%- set attr =\
+ \ \"allergen_name_\" ~ id -%}\n {%- if not state_attr(entity,\
+ \ attr) in [\"unknown\", \"unavailable\", None] -%}\n\
+ \ {%- set ns.allergens = ns.allergens + [ state_attr(entity,\
+ \ attr) ] -%}\n {%- endif -%}\n{%- endfor -%} {{\
+ \ ns.allergens | join(\", \") }}\n{{ state_attr(\"\
+ sensor.allergy_index_forecasted_average\", \"outlook\"\
+ ) | default(\"\", true) }}"
+ multiline_secondary: true
tap_action:
- action: navigate
- navigation_path: kitchen
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.offline_devices
- above: 0
- chip:
- type: template
- entity: sensor.offline_devices
- icon_color: blue-grey
- icon: mdi:network-off
+ action: none
+ hold_action:
+ action: none
+ double_tap_action:
+ action: none
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\n\
- ha-card:after {\n content: \"{{ states(config.entity)\
- \ }}\";\n position: absolute;\n color: var(--blue-grey-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right:\
- \ 2px;\n font-size: 12px;\n}\n{% endif %}\n"
- tap_action:
- action: navigate
- navigation_path: '#offline-devices'
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.low_battery_devices
- above: 0
- chip:
- type: template
- entity: sensor.low_battery_devices
- icon_color: red
- icon: mdi:battery-alert
+ style: "ha-card {\n /* Make card non-responsive to\
+ \ select and pointer */\n user-select: none;\n\
+ \ pointer-events: none;\n}\n"
+ - type: custom:mushroom-title-card
+ title: Forecast
+ subtitle: Allergy
+ - type: custom:bar-card
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\n\
- ha-card:after {\n content: \"{{ states(config.entity)\
- \ }}\";\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right:\
- \ 2px;\n font-size: 12px;\n}\n{% endif %}\n"
- tap_action:
- action: navigate
- navigation_path: '#low-battery'
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.water_softener_salt_monitor_salt_level
- below: 10
- chip:
- type: template
- entity: sensor.water_softener_salt_monitor_salt_level
- icon_color: cyan
- icon: mdi:arrow-expand-vertical
+ style: "bar-card-name,\nbar-card-value {\n font-weight:\
+ \ 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\n"
+ entities:
+ - entity: sensor.allergy_index_today
+ - entity: sensor.allergy_index_tomorrow
+ - entity: sensor.allergy_index_forecasted_average
+ min: 0
+ max: 12
+ decimal: 1
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '2.5'
+ - color: var(--light-green-color)
+ from: '2.5'
+ to: '4.9'
+ - color: var(--amber-color)
+ from: '4.9'
+ to: '7.3'
+ - color: var(--orange-color)
+ from: '7.3'
+ to: '9.7'
+ - color: var(--red-color)
+ from: '9.7'
+ to: '12'
+ - type: custom:mushroom-title-card
+ subtitle: Asthma
+ - type: custom:bar-card
card_mod:
- style:
- .: "ha-card:after {\n content: \"{{ states(config.entity)\
- \ | round(0) }}\";\n position: absolute;\n color:\
- \ var(--red-color);\n font-weight: bolder;\n\
- \ top: -2px;\n right: 2px;\n font-size: 12px;\n\
- }\n"
- tap_action:
- action: navigate
- navigation_path: utility
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.updates
- above: 0
- - condition: user
- users:
- - f615672fc2554783beab56221097564e
- chip:
- type: template
- entity: sensor.updates
- icon_color: red
- icon: mdi:package-up
+ style: "bar-card-name,\nbar-card-value {\n font-weight:\
+ \ 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\n"
+ entities:
+ - entity: sensor.asthma_index_today
+ - entity: sensor.asthma_index_tomorrow
+ - entity: sensor.asthma_index_forecasted_average
+ min: 0
+ max: 12
+ decimal: 1
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '2.5'
+ - color: var(--light-green-color)
+ from: '2.5'
+ to: '4.9'
+ - color: var(--amber-color)
+ from: '4.9'
+ to: '7.3'
+ - color: var(--orange-color)
+ from: '7.3'
+ to: '9.7'
+ - color: var(--red-color)
+ from: '9.7'
+ to: '12'
+ - type: custom:mushroom-title-card
+ subtitle: Cold
+ - type: custom:bar-card
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\n\
- ha-card:after {\n content: \"{{ states(config.entity)\
- \ }}\";\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right:\
- \ 2px;\n font-size: 12px;\n}\n{% endif %}\n"
- tap_action:
- action: navigate
- navigation_path: /config/updates
- card_mod:
- style: "ha-card {\n background-color: var(--primary-background-color);\n\
- \ border-radius: var(--ha-card-border-radius, 12px);\n /*box-shadow:\
- \ var(--ha-card-box-shadow, none);*/\n border-width: 0;\n\
- }\n"
- - type: custom:mushroom-chips-card
- alignment: justify
- chips:
- - type: template
- entity: weather.owm_daily
- icon: '{% if is_state(entity,"clear-day") %} mdi:weather-sunny
- {% elif is_state(entity,"sunny") %} mdi:weather-sunny {% elif
- is_state(entity,"clear") %} mdi:weather-sunny {% elif is_state(entity,"clear-night")
- %} mdi:weather-night {% elif is_state(entity,"rainy") %} mdi:weather-rainy
- {% elif is_state(entity,"pouring") %} mdi:weather-pouring {%
- elif is_state(entity,"snow") %} mdi:weather-snowy {% elif is_state(entity,"fog")
- %} mdi:weather-fog {% elif is_state(entity,"sleet") %} mdi:weather-partly-snowy-rainy
- {% elif is_state(entity,"wind") %} mdi:weather-windy {% elif
- is_state(entity,"cloudy") %} mdi:weather-cloudy {% elif is_state(entity,"partlycloudy")
- %} mdi:weather-partly-cloudy {% elif is_state(entity,"partly-cloudy-night")
- %} mdi:weather-night-partly-cloudy {% elif is_state(entity,"hail")
- %} mdi:weather-hail {% elif is_state(entity,"lightning") %}
- mdi:weather-lightning {% elif is_state(entity,"tstorm") %} mdi:weather-lightning-rainy
- {% endif %}'
- content: '{{ state_translated(entity) }} / {{ states("sensor.ecowitt_outdoor_temperature")
- | round() }} {{ state_attr("sensor.ecowitt_outdoor_temperature",
- "unit_of_measurement") }}'
+ style: "bar-card-name,\nbar-card-value {\n font-weight:\
+ \ 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\n"
+ entities:
+ - entity: sensor.cold_flu_index_today
+ - entity: sensor.cold_flu_forecasted_average
+ min: 0
+ max: 12
+ decimal: 1
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ severity:
+ - color: var(--green-color)
+ from: '0'
+ to: '2.5'
+ - color: var(--light-green-color)
+ from: '2.5'
+ to: '4.9'
+ - color: var(--amber-color)
+ from: '4.9'
+ to: '7.3'
+ - color: var(--orange-color)
+ from: '7.3'
+ to: '9.7'
+ - color: var(--red-color)
+ from: '9.7'
+ to: '12'
+ label: Allergy
+ - type: grid
+ cards:
+ - type: custom:mod-card
+ style:
+ hui-horizontal-stack-card$: "#root { \n flex-wrap: wrap;\n align-items:\
+ \ flex-start;\n flex-wrap: wrap;\n justify-content: space-around;\n\
+ \ gap: 8px;\n margin: 0px;\n text-align: center;\n}\nmushroom-template-badge,\
+ \ hui-conditional-card {\n flex: 0 0 auto !important;\n}\n"
+ card:
+ type: horizontal-stack
+ cards:
+ - type: custom:mushroom-template-badge
+ entity: sensor.garbage_collection
+ label: Garbage
+ content: "{% if is_state(\"input_boolean.garbage_collection\", \"\
+ on\") %}\n At Curb\n{% elif is_state(entity, \"0\") %}\n Today\n\
+ {% elif is_state(entity, \"1\") %}\n Tomorrow\n{% else %}\n \
+ \ {{ state_attr(entity, \"days\") }} days\n{% endif %}"
+ icon: mdi:trash-can
+ color: "{% if is_state(\"input_boolean.garbage_collection\", \"\
+ on\") %}\n green\n{% elif is_state(entity, \"0\") %}\n red\n\
+ {% elif is_state(entity, \"1\") %}\n yellow\n{% else %}\n grey\n\
+ {% endif %}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: perform-action
+ perform_action: script.collection_at_curb
+ target: {}
+ - type: custom:mushroom-template-badge
+ entity: sensor.recycle_collection
+ label: Recycling
+ content: "{% if is_state(\"input_boolean.recycle_collection\", \"\
+ on\") %}\n At Curb\n{% elif is_state(entity, \"0\") %}\n Today\n\
+ {% elif is_state(entity, \"1\") %}\n Tomorrow\n{% else %}\n \
+ \ {{ state_attr(entity, \"days\") }} days\n{% endif %}"
+ icon: mdi:recycle
+ color: "{% if is_state(\"input_boolean.recycle_collection\", \"\
+ on\") %}\n green\n{% elif is_state(entity, \"0\") %}\n red\n\
+ {% elif is_state(entity, \"1\") %}\n yellow\n{% else %}\n grey\n\
+ {% endif %}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: perform-action
+ perform_action: script.collection_at_curb
+ target: {}
+ - type: custom:mushroom-template-badge
+ entity: vacuum.r2dee2
+ label: R2Dee2
+ content: '{{ iif(is_state(entity, ''return''), ''Docking'', state_translated(entity))
+ }}'
+ icon: "{% if not has_value(entity) %}\n mdi:robot-vacuum-alert\n\
+ {% else %}\n mdi:robot-vacuum\n{% endif %}"
+ color: "{% if not has_value(entity) %}\n red\n{% elif is_state(entity,\
+ \ \"cleaning\") %}\n cyan\n{% elif is_state(entity, \"charging\"\
+ ) %}\n orange\n{% elif is_state(entity, \"paused\") %}\n yellow\n\
+ {% elif is_state(entity, \"return\") %}\n purple\n{% else %}\n\
+ \ grey\n{% endif %}"
+ tap_action:
+ action: navigate
+ navigation_path: '#r2dee2'
+ - type: custom:mushroom-template-badge
+ entity: vacuum.dustin_mopman
+ label: D. Mopman
+ content: '{{ iif(is_state(entity, ''return''), ''Docking'', state_translated(entity))
+ }}'
+ icon: "{% if not has_value(entity) %}\n mdi:robot-vacuum-alert\n\
+ {% else %}\n mdi:robot-vacuum\n{% endif %}"
+ color: "{% if not has_value(entity) %}\n red\n{% elif is_state(entity,\
+ \ \"cleaning\") %}\n cyan\n{% elif is_state(entity, \"charging\"\
+ ) %}\n orange\n{% elif is_state(entity, \"paused\") %}\n yellow\n\
+ {% elif is_state(entity, \"return\") %}\n purple\n{% else %}\n\
+ \ grey\n{% endif %}"
+ tap_action:
+ action: navigate
+ navigation_path: '#dustin-mopman'
+ - type: custom:mod-card
+ style:
+ hui-horizontal-stack-card$: "#root { \n flex-wrap: wrap;\n align-items:\
+ \ flex-start;\n flex-wrap: wrap;\n justify-content: space-around;\n\
+ \ gap: 8px;\n margin: 0px;\n text-align: center;\n}\nmushroom-template-badge,\
+ \ hui-conditional-card {\n flex: 0 0 auto !important;\n}\n"
+ card:
+ type: horizontal-stack
+ cards:
+ - type: conditional
+ conditions:
+ - entity: input_boolean.washer_status
+ state: 'on'
+ card:
+ type: custom:mushroom-template-badge
+ entity: input_boolean.washer_status
+ label: Washer
+ content: '{{ state_translated(entity) }}'
+ icon: mdi:washing-machine
+ color: blue
tap_action:
- action: navigate
- navigation_path: '#weather'
- - type: template
- entity: sensor.ecobee_mode
- content: '{{ states("sensor.ecobee_current_temperature", with_unit=True)
- }}'
- icon: mdi:thermostat
- icon_color: "{% if is_state(entity, \"Heating\") %}\n red\n{%\
- \ elif is_state(entity, \"Cooling\") %}\n light-blue\n{% elif\
- \ is_state(entity, \"Fan\") %}\n amber\n{% elif is_state(entity,\
- \ \"Off\") %}\n grey\n{% else %}\n blue-grey\n{% endif %}"
+ action: more-info
+ - type: conditional
+ conditions:
+ - entity: input_boolean.dryer_status
+ state: 'on'
+ card:
+ type: custom:mushroom-template-badge
+ entity: input_boolean.dryer_status
+ label: Dryer
+ content: '{{ state_translated(entity) }}'
+ icon: mdi:washing-machine
+ color: orange
tap_action:
- action: navigate
- navigation_path: climate
- - type: template
- entity: sensor.airgradient_kitchen_pm_2_5_aqi
- content: '{{ states(entity) | int(default="?") }} / {{ states("sensor.airnow_air_quality_index")
- | int(default="?") }}'
- icon: '{{ iif(has_value(entity), "mdi:blur", "mdi:blur-off") }}'
- icon_color: "{% if has_value(entity) %}\n {% set level = states(entity)\
- \ | float(default=0) %}\n {% if level >= 300 %}\n red\n\
- \ {% elif level >= 200 %}\n purple\n {% elif level >= 150\
- \ %}\n pink\n {% elif level >= 100 %}\n orange\n {%\
- \ elif level >= 50 %}\n yellow\n {% elif level >= 0 %}\n\
- \ green\n {% endif %}\n{% else %}\n disabled\n{% endif\
- \ %}"
+ action: more-info
+ - type: conditional
+ conditions:
+ - condition: or
+ conditions:
+ - condition: state
+ entity: sensor.ge_dishwasher_operating_mode
+ state: Cycle Active
+ - condition: state
+ entity: binary_sensor.ge_dishwasher_is_clean
+ state: 'on'
+ card:
+ type: custom:mushroom-template-badge
+ entity: sensor.ge_dishwasher_cycle_state
+ label: Dishwasher
+ content: "{%- if is_state(\"binary_sensor.ge_dishwasher_is_clean\"\
+ , \"on\") -%}\n Clean\n{%- else -%}\n {{ state_translated(entity)\
+ \ }}\n{%- endif -%}\n"
+ icon: mdi:dishwasher
+ color: "{%- if is_state(entity, \"Pre Wash\") -%}\n purple\n\
+ {%- elif is_state(entity, \"Main Wash\") -%}\n cyan\n{%- elif\
+ \ is_state(entity, \"Rinsing\") -%}\n blue\n{%- elif is_state(entity,\
+ \ \"Sanitizing\") -%}\n light-blue\n{%- elif is_state(entity,\
+ \ \"Drying\") -%}\n orange\n{%- elif is_state(\"binary_sensor.ge_dishwasher_is_clean\"\
+ , \"on\") -%}\n green\n{%- else -%}\n grey\n{%- endif -%}"
tap_action:
- action: navigate
- navigation_path: '#air-quality'
- - type: template
- entity: sensor.allergy_index_today
- content: '{{ states(entity) | float(default=0) }}'
- icon: mdi:flower-pollen
- icon_color: "{% set level = states(entity) | float(default=0)\
- \ %}\n{% if level >= 9.7 %}\n red\n{% elif level >= 7.3 %}\n\
- \ orange\n{% elif level >= 4.9 %}\n yellow\n{% elif level\
- \ >= 2.5 %}\n lime\n{% else %}\n green\n{% endif %}"
+ action: more-info
+ - type: conditional
+ conditions:
+ - condition: or
+ conditions:
+ - condition: state
+ entity: sensor.ge_oven_current_state
+ state_not: 'Off'
+ - condition: state
+ entity: sensor.ge_oven_kitchen_timer
+ state_not: 'Off'
+ card:
+ type: custom:mushroom-template-badge
+ entity: sensor.ge_oven_current_state
+ label: Oven
+ content: '{{ state_translated(entity) }}
+
+ '
+ icon: mdi:stove
+ color: "{%- if is_state(entity, \"Preheat\") -%}\n yellow\n{%-\
+ \ elif is_state(entity, \"Bake\") -%}\n red\n{%- elif is_state(entity,\
+ \ \"Air Fry\") -%}\n orange\n{%- elif is_state(entity, \"Convection\"\
+ ) -%}\n amber\n{%- elif not is_state(\"sensor.ge_oven_kitchen_timer\"\
+ , \"Off\") -%}\n purple\n{%- else -%}\n grey\n{%- endif -%}"
tap_action:
- action: navigate
- navigation_path: '#allergy'
- card_mod:
- style: "ha-card {\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing: 0;\n --chip-icon-size:\
- \ 0.65em;\n transition: margin 0s;\n margin: auto calc(var(--ha-card-border-radius,\
- \ 12px) / 4);\n}\n"
- layout_options:
- grid_columns: full
+ action: more-info
- type: grid
cards:
- type: custom:decluttering-card
@@ -2527,7 +2748,7 @@ views:
template: person_card
variables:
- person: joshua
- - name: Josh
+ - name: Joshua
- type: custom:decluttering-card
layout_options:
grid_columns: 2
@@ -2535,362 +2756,6 @@ views:
variables:
- person: amy
- name: Amy
- - type: grid
- cards:
- - type: horizontal-stack
- cards:
- - type: custom:mushroom-template-card
- entity: sensor.garbage_collection
- layout: vertical
- icon: mdi:trash-can
- icon_color: "{% if is_state(\"input_boolean.garbage_collection\",\
- \ \"on\") %}\n green\n{% elif is_state(entity, \"0\") %}\n red\n\
- {% elif is_state(entity, \"1\") %}\n yellow\n{% else %}\n disabled\n\
- {% endif %}"
- badge_icon: "{% if is_state(\"input_boolean.garbage_collection\",\
- \ \"on\") %}\n mdi:alpha-c\n{% elif is_state(entity, \"0\") %}\n\
- \ mdi:alert\n{% elif state_attr(entity, \"days\") | int > 9 %}\n\
- \ mdi:numeric-9-plus\n{% else %}\n mdi:numeric-{{ state_attr(entity,\
- \ \"days\") }}\n{% endif %}"
- tap_action:
- action: more-info
- hold_action:
- action: perform-action
- perform_action: script.collection_at_curb
- card_mod:
- style:
- .: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\n{% set icon_size = \"2em\" %}\n\
- {%- if is_state(\"input_boolean.garbage_collection\", \"on\"\
- ) -%}\n {% set icon_color = \"rgb-green-color\" %}\n{%- elif\
- \ is_state(config.entity, \"0\") -%}\n {% set icon_color =\
- \ \"rgb-red-color\" %}\n {% set icon_size = \"1.2em\" %}\n\
- {%- elif is_state(config.entity, \"1\") -%}\n {% set icon_color\
- \ = \"rgb-yellow-color\" %}\n{%- else -%}\n {% set icon_color\
- \ = \"primary-text-color\" %}\n{%- endif -%}\nmushroom-badge-icon\
- \ {\n --icon-color: rgb(var(--{{ icon_color }}));\n --main-color:\
- \ none;\n --badge-icon-size: {{ icon_size }};\n}\n"
- mushroom-shape-icon$: ".shape {\n {%- if is_state(\"input_boolean.garbage_collection\"\
- , \"off\") and is_state(config.entity, \"0\") -%}\n --shape-animation:\
- \ ping 2s infinite;\n {%- endif -%}\n}\n@keyframes ping {\n\
- \ 0% { box-shadow: 0 0 1px 1px rgba(var(--rgb-red), 0.7); }\n\
- \ 100% { box-shadow: 0 0 5px 15px transparent; }\n}\n"
- - type: custom:mushroom-template-card
- entity: sensor.recycle_collection
- layout: vertical
- icon: mdi:recycle
- icon_color: "{% if is_state(\"input_boolean.recycle_collection\",\
- \ \"on\") %}\n green\n{% elif is_state(entity, \"0\") %}\n red\n\
- {% elif is_state(entity, \"1\") %}\n yellow\n{% else %}\n disabled\n\
- {% endif %}"
- badge_icon: "{% if is_state(\"input_boolean.recycle_collection\",\
- \ \"on\") %}\n mdi:alpha-c\n{% elif is_state(entity, \"0\") %}\n\
- \ mdi:alert\n{% elif state_attr(entity, \"days\") | int > 9 %}\n\
- \ mdi:numeric-9-plus\n{% else %}\n mdi:numeric-{{ state_attr(entity,\
- \ \"days\") }}\n{% endif %}"
- tap_action:
- action: more-info
- hold_action:
- action: call-service
- service: script.collection_at_curb
- data:
- entity: sensor.recycle_collection
- target: {}
- card_mod:
- style:
- .: "{% set icon_size = \"2em\" %}\n{%- if is_state(\"input_boolean.recycle_collection\"\
- , \"on\") -%}\n {% set icon_color = \"rgb-green-color\" %}\n\
- {%- elif is_state(config.entity, \"0\") -%}\n {% set icon_color\
- \ = \"rgb-red-color\" %}\n {% set icon_size = \"1.2em\" %}\n\
- {%- elif is_state(config.entity, \"1\") -%}\n {% set icon_color\
- \ = \"rgb-yellow-color\" %}\n{%- else -%}\n {% set icon_color\
- \ = \"primary-text-color\" %}\n{%- endif -%}\nha-card {\n /*\
- \ Remove default card styling */\n --ha-card-background: none;\n\
- \ --ha-card-box-shadow: none;\n --ha-card-border-width: 0;\n\
- \ --icon-size: 48px;\n}\nmushroom-badge-icon {\n --icon-color:\
- \ rgb(var(--{{ icon_color }}));\n --main-color: none;\n --badge-icon-size:\
- \ {{ icon_size }};\n}\n"
- mushroom-shape-icon$: ".shape {\n {%- if is_state(\"input_boolean.recycle_collection\"\
- , \"off\") and is_state(config.entity, \"0\") -%}\n --shape-animation:\
- \ ping 2s infinite;\n {%- endif -%}\n}\n@keyframes ping {\n\
- \ 0% { box-shadow: 0 0 1px 1px rgba(var(--rgb-red), 0.7); }\n\
- \ 100% { box-shadow: 0 0 5px 15px transparent; }\n}\n"
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.mail_usps_mail
- above: 0
- card:
- type: custom:mushroom-template-card
- layout: vertical
- entity: sensor.mail_usps_mail
- icon: mdi:mail
- icon_color: blue
- badge_icon: "{% if int(states(entity), 0) > 0 %}\n mdi:numeric-{{\
- \ states(entity) }}\n{% elif int(states(entity), 0) > 9 %}\n \
- \ mdi:numeric-9-plus\n{% endif %}"
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Mail
- size: fullscreen
- content:
- type: picture-entity
- entity: camera.mail_usps_camera
- camera_image: camera.mail_usps_camera
- show_name: false
- show_state: false
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n}\n"
- card_mod:
- style: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\nmushroom-badge-icon {\n --icon-color:\
- \ var(--{{ config.icon_color }});\n --main-color: none;\n \
- \ --badge-icon-size: 2em;\n}\n"
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.mail_packages_delivered
- above: 0
- card:
- type: custom:mushroom-template-card
- layout: vertical
- entity: sensor.mail_packages_delivered
- icon: mdi:package-variant
- icon_color: orange
- badge_icon: "{% if int(states(entity), 0) > 0 %}\n mdi:numeric-{{\
- \ states(entity) }}\n{% elif int(states(entity), 0) > 9 %}\n \
- \ mdi:numeric-9-plus\n{% endif %}"
- tap_action:
- action: none
- card_mod:
- style:
- .: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\nmushroom-badge-icon {\n --icon-color:\
- \ var(--{{ config.icon_color }}-color);\n --main-color: none;\n\
- \ --badge-icon-size: 2em;\n}\n"
- mushroom-shape-icon$: ".shape {\n {%- if int(states(config.entity),\
- \ 0) > 0 -%}\n --shape-animation: ping 2s infinite;\n {%-\
- \ endif -%}\n}\n@keyframes ping {\n 0% { box-shadow: 0 0\
- \ 1px 1px rgba(var(--rgb-{{ config.icon_color }}), 0.7); }\n\
- \ 100% { box-shadow: 0 0 5px 15px transparent; }\n}\n"
- - type: custom:decluttering-card
- template: package_delivery
- variables:
- - entity: sensor.mail_usps_delivering
- - name: USPS
- - icon: fab:usps
- - icon_color: blue
- - url: https://tools.usps.com/go/TrackConfirmAction?tLabels=##TRACK_ID##
- - type: custom:decluttering-card
- template: package_delivery
- variables:
- - entity: sensor.mail_ups_delivering
- - name: UPS
- - icon: fab:ups
- - icon_color: brown
- - url: https://www.ups.com/track?loc=en_US&tracknum=##TRACK_ID##
- - type: custom:decluttering-card
- template: package_delivery
- variables:
- - entity: sensor.mail_fedex_delivering
- - name: FedEx
- - icon: fab:fedex
- - icon_color: purple
- - url: https://www.fedex.com/fedextrack/?trknbr=##TRACK_ID##
- - type: custom:decluttering-card
- template: package_delivery
- variables:
- - entity: sensor.mail_amazon_packages
- - name: Amazon
- - icon: fab:amazon
- - icon_color: yellow
- - url: https://www.amazon.com/gp/your-account/order-details?orderID=##TRACK_ID##
- - type: custom:mushroom-template-card
- entity: sensor.dustin_mopman_status
- layout: vertical
- icon: "{% if not has_value(entity) %}\n mdi:robot-vacuum-alert\n\
- {% else %}\n mdi:robot-vacuum\n{% endif %}"
- icon_color: "{% if not has_value(entity) %}\n disabled\n{% elif(is_state(entity,\
- \ \"cleaning\")) %}\n cyan\n{% elif(is_state(entity, \"charging\"\
- )) %}\n orange\n{% elif(is_state(entity, \"return\")) %}\n purple\n\
- {% else %}\n disabled\n{% endif %}"
- tap_action:
- action: navigate
- navigation_path: '#dustin-mopman'
- card_mod:
- style: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\nha-state-icon {\n {% if is_state(config.entity,\
- \ \"cleaning\") %}\n animation: wobbling 0.7s linear infinite\
- \ alternate;\n {% endif %}\n}\n@keyframes wobbling {\n 0% {transform:\
- \ rotate(-80deg);}\n 100% {transform: rotate(40deg);}\n}\n"
- - type: conditional
- conditions:
- - entity: input_boolean.washer_status
- state: 'on'
- card:
- type: custom:mushroom-template-card
- entity: input_boolean.washer_status
- layout: vertical
- icon: "{%- if is_state(entity, \"on\") -%}\n mdi:washing-machine\n\
- {%- else -%}\n mdi:washing-machine-off\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"on\") -%}\n blue\n{%- else\
- \ -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- card_mod:
- style: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\nha-state-icon {\n {%- if is_state(config.entity,\
- \ \"on\") -%}\n animation: shake 400ms ease-in-out infinite,\
- \ drum 2s ease infinite;\n transform-origin: 50% 110%;\n {%\
- \ endif %}\n}\n@keyframes shake {\n 0%, 100% { transform: translate(0,\
- \ 0) rotate(0); }\n 20% { transform: translate(0.4px, -0.4px)\
- \ rotate(-4deg); }\n 40% { transform: translate(-0.4px, 0.4px)\
- \ rotate(4deg); }\n 60% { transform: translate(0.4px, 0.4px)\
- \ rotate(-4deg); }\n 80% { transform: translate(-0.4px, -0.4px)\
- \ rotate(4deg); }\n}\n@keyframes drum {\n 50% { clip-path:\
- \ polygon(0 0, 0 100%, 35% 100%, 34% 68%, 60% 41%, 71% 56%,\
- \ 65% 74%, 47% 79%, 34% 68%, 35% 100%, 100% 100%, 100% 0); }\n\
- }\n"
- - type: conditional
- conditions:
- - entity: input_boolean.dryer_status
- state: 'on'
- card:
- type: custom:mushroom-template-card
- entity: input_boolean.dryer_status
- layout: vertical
- icon: "{%- if is_state(entity, \"on\") -%}\n mdi:tumble-dryer\n\
- {%- else -%}\n mdi:tumble-dryer-off\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"on\") -%}\n orange\n{%-\
- \ else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- card_mod:
- style: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\nha-state-icon {\n {%- if is_state(config.entity,\
- \ \"on\") -%}\n animation: shake 400ms ease-in-out infinite,\
- \ drum 1s infinite;\n transform-origin: 50% 65%;\n {% endif\
- \ %}\n}\n@keyframes shake {\n 0%, 100% { transform: rotate(4deg);\
- \ }\n 50% { transform: rotate(-4deg); }\n}\n@keyframes drum\
- \ {\n 50% { clip-path: polygon(0 0, 0 100%, 35% 100%, 36%\
- \ 74%, 31% 43%, 61% 40%, 71% 69%, 62% 78%, 36% 73%, 35% 100%,\
- \ 100% 100%, 100% 0); }\n}\n"
- - type: conditional
- conditions:
- - condition: or
- conditions:
- - condition: state
- entity: sensor.ge_dishwasher_operating_mode
- state: Cycle Active
- - condition: state
- entity: binary_sensor.ge_dishwasher_is_clean
- state: 'on'
- card:
- type: custom:mushroom-template-card
- entity: sensor.ge_dishwasher_cycle_state
- layout: vertical
- icon: mdi:dishwasher
- icon_color: "{%- if is_state(entity, \"Pre Wash\") -%}\n purple\n\
- {%- elif is_state(entity, \"Main Wash\") -%}\n cyan\n{%- elif\
- \ is_state(entity, \"Rinsing\") -%}\n blue\n{%- elif is_state(entity,\
- \ \"Sanitizing\") -%}\n light-blue\n{%- elif is_state(entity,\
- \ \"Drying\") -%}\n orange\n{%- elif is_state(\"binary_sensor.ge_dishwasher_is_clean\"\
- , \"on\") -%}\n green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- card_mod:
- style:
- .: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\nha-state-icon {\n {%- if not\
- \ is_state(config.entity, \"N/A\") -%}\n animation: bounce\
- \ 1.5s ease-in-out infinite, wash 1s ease-in-out infinite;\n\
- \ transform-origin: 50% 75%;\n {% endif %}\n}\n@keyframes\
- \ bounce {\n 0%, 20%, 50%, 80%, 100% {transform: translateY(0);\
- \ }\n 40% { transform: translateY(-1.2px) rotate(5deg); }\n\
- \ 60% { transform: translateY(-1.1px) rotate(-4deg); }\n\
- }\n@keyframes wash {\n 50% { clip-path: polygon(0 0, 0 100%,\
- \ 35% 100%, 36% 74%, 31% 43%, 61% 40%, 71% 69%, 62% 78%, 36%\
- \ 73%, 35% 100%, 100% 100%, 100% 0); }\n}\n"
- mushroom-shape-icon$: "{%- if not is_state(config.entity, \"\
- Off\")\n and has_value(\"sensor.ge_dishwasher_time_remaining\"\
- )\n and has_value(\"sensor.ge_dishwasher_duration\")\n and\
- \ not is_state(\"sensor.ge_dishwasher_duration\", \"Off\"\
- )\n-%} {%- set entity_remain = states(\"sensor.ge_dishwasher_time_remaining\"\
- ) -%} {%- set entity_duration = states(\"sensor.ge_dishwasher_duration\"\
- ) -%} {%- set remaining =\n (int(entity_remain.split(\":\"\
- )[0], 0) * 60)\n + (int(entity_remain.split(\":\")[1],\
- \ 0))\n-%} {%- set duration =\n (int(entity_duration.split(\"\
- :\")[0], 0) * 60)\n + (int(entity_duration.split(\":\"\
- )[1], 0))\n-%} .shape {\n /* Radial progress bar */\n background:\n\
- \ radial-gradient(var(--card-background-color) 60%, transparent\
- \ calc(60% + 1px)),\n conic-gradient(var(--icon-color)\
- \ {{ ((duration - remaining) / duration * 100) | round() }}%\
- \ 0%, var(--card-background-color) 0% 100%);\n} .shape:after\
- \ {\n /* Add back icon shape */\n content: \"\";\n height:\
- \ 100%;\n width: 100%;\n position: absolute;\n border-radius:\
- \ var(--icon-border-radius);\n background: var(--shape-color);\n\
- } {%- endif -%}\n"
- - type: conditional
- conditions:
- - condition: or
- conditions:
- - condition: state
- entity: sensor.ge_oven_current_state
- state_not: 'Off'
- - condition: state
- entity: sensor.ge_oven_kitchen_timer
- state_not: 'Off'
- card:
- type: custom:mushroom-template-card
- entity: sensor.ge_oven_current_state
- layout: vertical
- icon: mdi:stove
- icon_color: "{%- if is_state(entity, \"Preheat\") -%}\n yellow\n\
- {%- elif is_state(entity, \"Bake\") -%}\n red\n{%- elif is_state(entity,\
- \ \"Air Fry\") -%}\n orange\n{%- elif is_state(entity, \"Convection\"\
- ) -%}\n amber\n{%- elif not is_state(\"sensor.ge_oven_kitchen_timer\"\
- , \"Off\") -%}\n purple\n{%- else -%}\n disabled\n{%- endif\
- \ -%}"
- tap_action:
- action: navigate
- navigation_path: kitchen
- card_mod:
- style:
- .: "ha-card {\n /* Remove default card styling */\n --ha-card-background:\
- \ none;\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n --icon-size: 48px;\n}\n"
- mushroom-shape-icon$: "{%- if has_value(\"sensor.ge_oven_kitchen_timer\"\
- )\n and has_value(\"sensor.ge_oven_timer_duration\")\n and\
- \ not is_state(\"sensor.ge_oven_timer_duration\", \"Off\"\
- )\n-%} {%- set entity_remain = states(\"sensor.ge_oven_kitchen_timer\"\
- ) -%} {%- set entity_duration = states(\"sensor.ge_oven_timer_duration\"\
- ) -%} {%- set remaining =\n (int(entity_remain.split(\":\"\
- )[0], 0) * 60)\n + (int(entity_remain.split(\":\")[1], 0))\
- \ -%}\n{%- set duration =\n (int(entity_duration.split(\"\
- :\")[0], 0) * 60)\n + (int(entity_duration.split(\":\"\
- )[1], 0))\n-%} .shape {\n /* Radial progress bar */\n background:\n\
- \ radial-gradient(var(--card-background-color) 60%, transparent\
- \ calc(60% + 1px)),\n conic-gradient(var(--cyan-color)\
- \ {{ ((duration - remaining) / duration * 100) | round() }}%\
- \ 0%, var(--card-background-color) 0% 100%);\n} .shape:after\
- \ {\n /* Add back icon shape */\n content: \"\";\n height:\
- \ 100%;\n width: 100%;\n position: absolute;\n border-radius:\
- \ var(--icon-border-radius);\n background: var(--shape-color);\n\
- } {%- endif -%}\n"
- layout_options:
- grid_columns: full
- - type: grid
- cards:
- type: custom:decluttering-card
layout_options:
grid_columns: 2
@@ -2904,12 +2769,27 @@ views:
- path: living
- chips_top:
- type: template
- entity: camera.living_room
+ entity: camera.livingroom
icon: mdi:cctv
icon_color: '{{ iif(has_value(entity), "cyan", "red") }}'
tap_action:
- action: navigate
- navigation_path: '#camera-living-room'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Living Room
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n \
+ \ --ha-card-border-width: 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.livingroom
+ - stream: livingroom
- chips:
- type: template
entity: media_player.universal_living_room
@@ -2921,8 +2801,172 @@ views:
icon: '{% from "util.jinja" import media_icon %} {{ media_icon(entity)
}}'
tap_action:
- action: navigate
- navigation_path: '#media-living-room'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Living Room Media
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n \
+ \ --ha-card-border-width: 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_living_room
+ - media: media_player.universal_living_room
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Cartoon Network
+ icon: fapro:cartoon-network
+ variables:
+ source: Cartoon Network
+ styles:
+ card:
+ - background: '#000000'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: YouTube Kids
+ icon: fapro:youtube-kids
+ variables:
+ source: YouTube Kids
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: PBS Kids
+ icon: fapro:pbs-kids
+ variables:
+ source: PBS Kids
+ styles:
+ card:
+ - background: '#2838c2'
+ - sound_buttons:
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Surround
+ icon: mdi:surround-sound
+ variables:
+ sound_mode: Surround
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Gaming
+ icon: mdi:gamepad-variant
+ variables:
+ sound_mode: Gaming
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Adaptive
+ icon: mdi:home-sound-in-outline
+ variables:
+ sound_mode: Adaptive Sound
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Standard
+ icon: mdi:soundbar
+ variables:
+ sound_mode: Standard
+ - type: custom:button-card
+ template: androidtv_button_status
+ entity: input_boolean.samsung_soundbar_night_mode
+ name: Night Mode
+ icon: mdi:weather-night
+ custom_fields:
+ status: "[[[\n if (entity.state === \"\
+ on\")\n return ``;\n]]]"
+ tap_action:
+ action: call-service
+ service: input_boolean.toggle
+ target:
+ entity_id: '[[[ return entity.entity_id
+ ]]]'
+ - type: custom:button-card
+ template: androidtv_button_status
+ entity: input_boolean.samsung_soundbar_voice_enhancer
+ name: Voice Enhancer
+ icon: mdi:account-voice
+ custom_fields:
+ status: "[[[\n if (entity.state === \"\
+ on\")\n return ``;\n]]]"
+ tap_action:
+ action: call-service
+ service: input_boolean.toggle
+ target:
+ entity_id: '[[[ return entity.entity_id
+ ]]]'
- type: template
entity: fan.living_room_ceiling
icon: mdi:fan
@@ -3056,8 +3100,23 @@ views:
icon: mdi:cctv
icon_color: '{{ iif(has_value(entity), "cyan", "red") }}'
tap_action:
- action: navigate
- navigation_path: '#camera-family-room'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Family Room
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n \
+ \ --ha-card-border-width: 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.family_room
+ - stream: familyroom
- chips:
- type: conditional
conditions:
@@ -3104,8 +3163,174 @@ views:
icon: '{% from "util.jinja" import media_icon %} {{ media_icon(entity)
}}'
tap_action:
- action: navigate
- navigation_path: '#media-family-room'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Family Room Media
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n \
+ \ --ha-card-border-width: 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_family_room
+ - media: media_player.universal_family_room
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Cartoon Network
+ icon: fapro:cartoon-network
+ variables:
+ source: Cartoon Network
+ styles:
+ card:
+ - background: '#000000'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: YouTube Kids
+ icon: fapro:youtube-kids
+ variables:
+ source: YouTube Kids
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: PBS Kids
+ icon: fapro:pbs-kids
+ variables:
+ source: PBS Kids
+ styles:
+ card:
+ - background: '#2838c2'
+ - harmony_sources:
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: Shield
+ icon: mdi:motion-play-outline
+ variables:
+ activity: Shield TV
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PC
+ icon: mdi:desktop-tower
+ variables:
+ activity: Computer
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PS4
+ icon: fapro:ps4
+ variables:
+ activity: PS4
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PS3
+ icon: fapro:ps3
+ variables:
+ activity: PS3
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: XBox
+ icon: mdi:microsoft-xbox
+ variables:
+ activity: XBox
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: Switch
+ icon: mdi:nintendo-switch
+ variables:
+ activity: Switch
+ - sound_buttons:
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Direct
+ icon: mdi:surround-sound-5-1
+ variables:
+ sound_mode: Direct
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Surround
+ icon: mdi:surround-sound-2-1
+ variables:
+ sound_mode: Dolby Digital
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Multi-Channel
+ icon: mdi:surround-sound
+ variables:
+ sound_mode: All Zone Stereo
- type: template
entity: light.family_room_lights
icon: '{{ iif(is_state(entity, "on"), "mdi:lightbulb-on", "mdi:lightbulb")
@@ -3432,8 +3657,79 @@ views:
icon: '{% from "util.jinja" import media_icon %} {{ media_icon(entity)
}}'
tap_action:
- action: navigate
- navigation_path: '#media-main-bedroom'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Main Bedroom Media
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n \
+ \ --ha-card-border-width: 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_main_bedroom
+ - media: media_player.universal_main_bedroom
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
- type: template
entity: fan.main_bedroom_ceiling
icon: mdi:fan
@@ -3496,10 +3792,53 @@ views:
variables:
- primary: Utility
- entity: ''
- - temperature: sensor.water_main_valve_air_temperature
+ - temperature: none
- icon: mdi:progress-wrench
- icon_color: 121, 85, 72
- path: utility
+ - chips_top:
+ - type: template
+ entity: vacuum.r2dee2
+ icon_color: "{% if not has_value(entity) %}\n red\n{% elif is_state(entity,\
+ \ \"cleaning\") %}\n cyan\n{% elif is_state(entity, \"charging\"\
+ ) %}\n orange\n{% elif is_state(entity, \"paused\") %}\n \
+ \ yellow\n{% elif is_state(entity, \"return\") %}\n purple\n\
+ {% else %}\n disabled\n{% endif %}"
+ icon: "{% if not has_value(entity) %}\n mdi:robot-vacuum-alert\n\
+ {% else %}\n mdi:robot-vacuum\n{% endif %}"
+ tap_action:
+ action: navigate
+ navigation_path: '#r2dee2'
+ card_mod:
+ style:
+ .: "@keyframes wobbling {\n 0% {transform: rotate(-80deg);}\n\
+ \ 100% {transform: rotate(40deg);}\n}\n{% if is_state(config.entity,\
+ \ \"cleaning\") %}\n.content {\n animation: wobbling 0.7s\
+ \ linear infinite alternate;\n}\n{% endif %}\nha-card:after\
+ \ {\n content: \"R\";\n position: absolute;\n color:\
+ \ var(--grey-color);\n font-weight: bolder;\n top: -2px;\n\
+ \ right: 2px;\n font-size: 12px;\n}\n"
+ - type: template
+ entity: vacuum.dustin_mopman
+ icon_color: "{% if not has_value(entity) %}\n red\n{% elif is_state(entity,\
+ \ \"cleaning\") %}\n cyan\n{% elif is_state(entity, \"charging\"\
+ ) %}\n orange\n{% elif is_state(entity, \"paused\") %}\n \
+ \ yellow\n{% elif is_state(entity, \"return\") %}\n purple\n\
+ {% else %}\n disabled\n{% endif %}"
+ icon: "{% if not has_value(entity) %}\n mdi:robot-vacuum-alert\n\
+ {% else %}\n mdi:robot-vacuum\n{% endif %}"
+ tap_action:
+ action: navigate
+ navigation_path: '#dustin-mopman'
+ card_mod:
+ style:
+ .: "@keyframes wobbling {\n 0% {transform: rotate(-80deg);}\n\
+ \ 100% {transform: rotate(40deg);}\n}\n{% if is_state(config.entity,\
+ \ \"cleaning\") %}\n.content {\n animation: wobbling 0.7s\
+ \ linear infinite alternate;\n}\n{% endif %}\nha-card:after\
+ \ {\n content: \"D\";\n position: absolute;\n color:\
+ \ var(--grey-color);\n font-weight: bolder;\n top: -2px;\n\
+ \ right: 2px;\n font-size: 12px;\n}\n"
- chips:
- type: conditional
conditions:
@@ -3517,22 +3856,6 @@ views:
style: "@keyframes phase {\n 50% {opacity: 0;}\n}\n{% if\
\ is_state(config.entity, \"on\") %}\n.content {\n animation:\
\ phase 1.5s ease-out infinite;\n}\n{% endif %}\n"
- - type: template
- entity: sensor.dustin_mopman_status
- icon_color: "{% if not has_value(entity) %}\n disabled\n{% elif(is_state(entity,\
- \ \"cleaning\")) %}\n green\n{% elif(is_state(entity, \"charging\"\
- )) %}\n orange\n{% elif(is_state(entity, \"return\")) %}\n\
- \ purple\n{% else %}\n disabled\n{% endif %}"
- icon: "{% if not has_value(entity) %}\n mdi:robot-vacuum-alert\n\
- {% else %}\n mdi:robot-vacuum\n{% endif %}"
- tap_action:
- action: navigate
- navigation_path: '#dustin-mopman'
- card_mod:
- style: "@keyframes wobbling {\n 0% {transform: rotate(-80deg);}\n\
- \ 100% {transform: rotate(40deg);}\n}\n{% if is_state(config.entity,\
- \ \"cleaning\") %}\n.content {\n animation: wobbling 0.7s\
- \ linear infinite alternate;\n}\n{% endif %}\n"
- type: template
entity: light.utility_lights
icon: '{{ iif(is_state(entity, "on"), "mdi:lightbulb-on", "mdi:lightbulb")
@@ -3588,8 +3911,23 @@ views:
icon: mdi:doorbell-video
icon_color: '{{ iif(has_value(entity), "cyan", "red") }}'
tap_action:
- action: navigate
- navigation_path: '#camera-doorbell'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Doorbell
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n \
+ \ --ha-card-border-width: 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.doorbell
+ - stream: doorbell
- chips:
- type: template
entity: light.outside_lights
@@ -3667,8 +4005,23 @@ views:
icon: mdi:cctv
icon_color: '{{ iif(has_value(entity), "cyan", "red") }}'
tap_action:
- action: navigate
- navigation_path: '#camera-garage'
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Garage
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n \
+ \ --ha-card-border-width: 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.garage
+ - stream: garage
- chips:
- type: conditional
conditions:
@@ -3725,51 +4078,18 @@ views:
}}'
tap_action:
action: more-info
- - type: custom:vertical-stack-in-card
+ - type: custom:decluttering-card
layout_options:
grid_columns: 2
- cards:
- - type: custom:mushroom-template-card
- entity: device_tracker.ascent
- primary: Ascent
- secondary: '{{ states("sensor.ascent_odometer", with_unit=true) }}'
- picture: '{{ state_attr(entity, "entity_picture") }}'
- fill_container: true
- tap_action:
- action: navigate
- navigation_path: '#ascent'
- badge_icon: "{% if is_state(\"binary_sensor.ascent_trouble\", \"on\"\
- ) %}\n mdi:alert\n{% endif %}"
- badge_color: red
- card_mod:
- style:
- .: "{% set state = states(config.entity) %}\n:host {\n transition:\
- \ all 0s;\n --mush-card-primary-font-size: 16px;\n --mush-card-secondary-font-size:\
- \ 13px;\n --mush-icon-size: 4.84em;\n {% if not is_state(config.entity,\
- \ \"home\") %}\n --ha-card-background:\n {% if is_state(config.entity,\
- \ \"not_home\") %}\n rgba(244, 67, 54, 0.05)\n {% elif\
- \ state in [\"unknown\", \"unavailable\"] %}\n rgba(189,\
- \ 189, 189, 0.05)\n {% else %}\n rgba(33, 150, 243,\
- \ 0.05)\n {% endif %};\n {% endif %}\n}\nha-card {\n transition:\
- \ all 0s;\n padding-bottom: 0 !important;\n}\nmushroom-state-info\
- \ {\n z-index: 1;\n}\nmushroom-shape-avatar {\n position:\
- \ absolute;\n top: -30px;\n left: -10px;\n}\nmushroom-state-info\
- \ {\n padding-left: 50px;\n z-index: 1;\n}\nmushroom-badge-icon\
- \ {\n margin-right: -55px;\n margin-top: -20px;\n}\n"
- mushroom-shape-avatar$: "{% set timer = \"timer.ascent_remote_start\"\
- \ %}\n{% if state_attr(timer, \"finishes_at\") %}\n.picture\
- \ {\n {% set remaining = (as_datetime(state_attr(timer, \"\
- finishes_at\")) - now()).total_seconds() | int %}\n {% set\
- \ duration =\n (state_attr(timer, \"duration\").split(\"\
- :\")[0] | int * 60 * 60)\n + (state_attr(timer, \"duration\"\
- ).split(\":\")[1] | int * 60)\n + (state_attr(timer, \"duration\"\
- ).split(\":\")[2] | int)\n %}\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--accent-color)\
- \ {{ (remaining / duration * 100) | round() }}% 0%, var(--card-background-color)\
- \ 0% 100%);\n}\n{% endif %}\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
+ template: vehicle_card
+ variables:
+ - name: Ascent
+ - location: device_tracker.ascent
+ - odometer: sensor.ascent_odometer
+ - problems: binary_sensor.ascent_trouble
+ - timer: timer.ascent_remote_start
+ - path: '#ascent'
+ - chips:
- type: template
entity: sensor.ascent_fuel_level
content: "{% if has_value(entity) %}\n {{ states(entity) | round(0)\
@@ -3796,63 +4116,18 @@ views:
action: none
double_tap_action:
action: none
- card_mod:
- style: "ha-card {\n --chip-box-shadow: none;\n --chip-background:\
- \ rgba(var(--rgb-disabled), 0.1);\n --chip-border-width: 0;\n\
- \ --chip-spacing: 1px;\n margin-right: calc(var(--ha-card-border-radius,\
- \ 12px) / 2);\n}\n"
- card_mod:
- style: "{% set state = states(\"device_tracker.ascent\") %}\n{% if state\
- \ != \"home\" %}\nha-card {\n {% if state == \"not_home\" %}\n \
- \ background: rgba(244, 67, 54, 0.2)\n {% elif state in [\"unknown\"\
- , \"unavailable\"] %}\n background: rgba(189, 189, 189, 0.2)\n\
- \ {% else %}\n background: rgba(33, 150, 243, 0.2)\n {% endif\
- \ %};\n}\n{% endif %}\n"
- - type: custom:vertical-stack-in-card
+ - type: custom:decluttering-card
layout_options:
grid_columns: 2
- cards:
- - type: custom:mushroom-template-card
- entity: device_tracker.kona_location
- primary: Kona
- secondary: '{{ states("sensor.kona_odometer", with_unit=true) }}'
- picture: '{{ state_attr(entity, "entity_picture") }}'
- fill_container: true
- tap_action:
- action: navigate
- navigation_path: '#kona'
- badge_icon: "{% if is_state(\"binary_sensor.kona_problems\", \"on\"\
- ) %}\n mdi:alert\n{% endif %}"
- badge_color: red
- card_mod:
- style:
- .: "{% set state = states(config.entity) %}\n:host {\n transition:\
- \ all 0s;\n --mush-card-primary-font-size: 16px;\n --mush-card-secondary-font-size:\
- \ 13px;\n --mush-icon-size: 4.84em;\n {% if not is_state(config.entity,\
- \ \"home\") %}\n --ha-card-background:\n {% if is_state(config.entity,\
- \ \"not_home\") %}\n rgba(244, 67, 54, 0.05)\n {% elif\
- \ state in [\"unknown\", \"unavailable\"] %}\n rgba(189,\
- \ 189, 189, 0.05)\n {% else %}\n rgba(33, 150, 243,\
- \ 0.05)\n {% endif %};\n {% endif %}\n}\nha-card {\n transition:\
- \ all 0s;\n padding-bottom: 0 !important;\n}\nmushroom-state-info\
- \ {\n z-index: 1;\n}\nmushroom-shape-avatar {\n position:\
- \ absolute;\n top: -30px;\n left: -10px;\n}\nmushroom-state-info\
- \ {\n padding-left: 50px;\n z-index: 1;\n}\nmushroom-badge-icon\
- \ {\n margin-right: -55px;\n margin-top: -20px;\n}\n"
- mushroom-shape-avatar$: "{% set timer = \"timer.kona_remote_start\"\
- \ %}\n{% if state_attr(timer, \"finishes_at\") %}\n.picture\
- \ {\n {% set remaining = (as_datetime(state_attr(timer, \"\
- finishes_at\")) - now()).total_seconds() | int %}\n {% set\
- \ duration =\n (state_attr(timer, \"duration\").split(\"\
- :\")[0] | int * 60 * 60)\n + (state_attr(timer, \"duration\"\
- ).split(\":\")[1] | int * 60)\n + (state_attr(timer, \"duration\"\
- ).split(\":\")[2] | int)\n %}\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--accent-color)\
- \ {{ (remaining / duration * 100) | round() }}% 0%, var(--card-background-color)\
- \ 0% 100%);\n}\n{% endif %}\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
+ template: vehicle_card
+ variables:
+ - name: Kona
+ - location: device_tracker.kona_location
+ - odometer: sensor.kona_odometer
+ - problems: binary_sensor.kona_problems
+ - timer: timer.kona_remote_start
+ - path: '#kona'
+ - chips:
- type: template
entity: sensor.kona_fuel_level
content: "{% if has_value(entity) %}\n {{ states(entity) | round(0)\
@@ -3867,24 +4142,12 @@ views:
action: none
double_tap_action:
action: none
- card_mod:
- style: "ha-card {\n --chip-box-shadow: none;\n --chip-background:\
- \ rgba(var(--rgb-disabled), 0.1);\n --chip-border-width: 0;\n\
- \ --chip-spacing: 1px;\n margin-right: calc(var(--ha-card-border-radius,\
- \ 12px) / 2);\n}\n"
- card_mod:
- style: "{% set state = states(\"device_tracker.kona_location\") %}\n\
- {% if state != \"home\" %}\nha-card {\n {% if state == \"not_home\"\
- \ %}\n background: rgba(244, 67, 54, 0.2)\n {% elif state in [\"\
- unknown\", \"unavailable\"] %}\n background: rgba(189, 189, 189,\
- \ 0.2)\n {% else %}\n background: rgba(33, 150, 243, 0.2)\n {%\
- \ endif %};\n}\n{% endif %}\n"
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: XMas
- layout_options:
- grid_columns: full
+ - type: heading
+ icon: mdi:pine-tree
+ heading: XMas
+ heading_style: subtitle
- type: grid
columns: 3
square: false
@@ -3917,9469 +4180,5938 @@ views:
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#all-doors'
+ hash: '#r2dee2'
button_type: state
- entity: binary_sensor.all_doors
- show_icon: false
- show_state: false
- sub_button:
- - entity: binary_sensor.all_doors
- show_state: true
+ entity: vacuum.r2dee2
+ show_attribute: true
+ attribute: status
margin_top_mobile: -56px
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
bubble-card::after {\n display: none !important;\n}"
- - type: custom:vertical-stack-in-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- cards:
- - type: custom:auto-entities
- show_empty: false
- card:
- type: custom:layout-card
- cards: []
- layout_type: masonry
- sort:
- method: friendly_name
- filter:
- include:
- - group: binary_sensor.all_doors
- options:
- type: custom:mushroom-entity-card
- layout: horizontal
- secondary_info: last-changed
- tap_action:
- action: none
- hold_action:
- action: none
- card_mod:
- style: "ha-card {\n transition: all 0s;\n padding:\
- \ 4px 12px !important;\n border-width: 0;\n}\n"
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#meater'
- button_type: name
- name: Meater
- icon: mdi:food-drumstick
+ card_layout: large-2-rows
sub_button:
- - entity: sensor.meater_probe_cook_state
- show_icon: false
+ - entity: sensor.r2dee2_detergent_left
show_state: true
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:vertical-stack-in-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- cards:
- - type: custom:mushroom-entity-card
- entity: sensor.meater_probe_cook_name
- name: Cooking
- primary_info: state
- secondary_info: name
- icon: mdi:food-steak
- - square: false
- columns: 2
- type: grid
- cards:
- - type: custom:mushroom-entity-card
- entity: sensor.meater_probe_cook_time_elapsed
- name: Elapsed Time
- primary_info: state
- secondary_info: name
- - type: custom:mushroom-entity-card
- entity: sensor.meater_probe_cook_time_remaining
- name: Remaining Time
- primary_info: state
- secondary_info: name
- - type: custom:mushroom-title-card
- subtitle: Temperature
- - type: custom:apexcharts-card
- card_mod:
- style: "ha-card {\n padding: 0px;\n border: none;\n box-shadow:\
- \ none;\n margin-bottom: -15px;\n}\n.apexcharts-tooltip-series-group\
- \ {\n padding-top: 0px !important;\n padding-bottom: 0px\
- \ !important;\n margin-top: 0px !important;\n margin-bottom:\
- \ 0px !important;\n display: none;\n text-align: left;\n\
- \ justify-content: left;\n align-items: center;\n}\n"
- apex_config:
- chart:
- foreColor: '#7B7B7B'
- toolbar:
- show: false
- grid:
- borderColor: '#7B7B7B'
- xaxis:
- tooltip:
- enabled: false
- header:
- show: true
- show_states: true
- colorize_states: true
- experimental:
- brush: true
- all_series_config:
- extend_to: now
- float_precision: 2
- curve: stepline
- brush:
- selection_span: 1h
- apex_config:
- chart:
- foreColor: '#7B7B7B'
- toolbar:
- show: false
- grid:
- borderColor: '#7B7B7B'
- xaxis:
- tooltip:
- enabled: false
- series:
- - entity: sensor.meater_probe_internal
- name: Internal
- stroke_width: 4
- color: rgb(33,150,243)
- show:
- in_brush: true
- - entity: sensor.meater_probe_ambient
- name: Ambient
- stroke_width: 4
- color: rgb(139,195,74)
- - entity: sensor.meater_probe_cook_target_temp
- name: Target
- type: area
- opacity: 0.2
- stroke_width: 1
- color: rgb(233,30,99)
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#offline-devices'
- entity: sensor.offline_devices
- show_icon: false
- show_state: false
- button_type: state
- sub_button:
- - entity: sensor.offline_devices
+ - entity: sensor.r2dee2_filter_left
show_state: true
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:vertical-stack-in-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- cards:
- - type: custom:auto-entities
- filter:
- include:
- - group: sensor.offline_devices
- options:
- type: custom:mushroom-template-card
- primary: '{{ state_attr(entity, "friendly_name") | regex_replace(find="
- last seen", replace="", ignorecase = true) }}'
- secondary: "{%- if has_value(entity) -%}\n {{ as_datetime(states(entity)).strftime(\"\
- %Y-%m-%d %-I:%M %p\") }}\n{%- else -%}\n Unknown\n\
- {%- endif -%}"
- icon: mdi:network-off
- icon_color: yellow
- layout: horizontal
- tap_action:
- action: more-info
- card_mod:
- style: "ha-card {\n padding: 4px 12px !important;\n\
- }\n"
- exclude: []
- card:
- type: custom:layout-card
- cards: []
- layout_type: masonry
- sort:
- method: friendly_name
+ - entity: sensor.r2dee2_main_brush_left
+ show_state: true
+ - entity: sensor.r2dee2_mop_pad_left
+ show_state: true
+ - entity: sensor.r2dee2_sensor_dirty_left
+ show_state: true
+ - entity: sensor.r2dee2_side_brush_left
+ show_state: true
+ - type: custom:xiaomi-vacuum-map-card
+ map_source:
+ camera: camera.r2dee2_map
+ calibration_source:
+ camera: true
+ entity: vacuum.r2dee2
+ vacuum_platform: Tasshack/dreame-vacuum
+ map_modes:
+ - template: vacuum_clean_zone
+ - template: vacuum_clean_point
+ - template: vacuum_clean_segment
+ predefined_selections:
+ - id: '1'
+ icon:
+ name: mdi:home-outline
+ x: -900
+ y: 9200
+ label:
+ text: Main Bathroom
+ x: -900
+ y: 9200
+ offset_y: 35
+ outline:
+ - - -2200
+ - 8000
+ - - 400
+ - 8000
+ - - 400
+ - 9700
+ - - -2200
+ - 9700
+ - id: '2'
+ icon:
+ name: mdi:home-outline
+ x: -2650
+ y: 9100
+ label:
+ text: Main Closet
+ x: -2650
+ y: 9100
+ offset_y: 35
+ outline:
+ - - -3600
+ - 7950
+ - - -2200
+ - 7950
+ - - -2200
+ - 10800
+ - - -3600
+ - 10800
+ - id: '3'
+ icon:
+ name: mdi:home-outline
+ x: -6050
+ y: 9400
+ label:
+ text: Amy's Office
+ x: -6050
+ y: 9400
+ offset_y: 35
+ outline:
+ - - -7550
+ - 7750
+ - - -4200
+ - 7750
+ - - -4200
+ - 10800
+ - - -7550
+ - 10800
+ - id: '5'
+ icon:
+ name: mdi:foot-print
+ x: -2600
+ y: 7300
+ label:
+ text: Corridor
+ x: -2600
+ y: 7300
+ offset_y: 35
+ outline:
+ - - -4550
+ - 6700
+ - - -700
+ - 6700
+ - - -700
+ - 8250
+ - - -4550
+ - 8250
+ - id: '6'
+ icon:
+ name: mdi:toilet
+ x: -2650
+ y: 5950
+ label:
+ text: Bathroom
+ x: -2650
+ y: 5950
+ offset_y: 35
+ outline:
+ - - -3500
+ - 5200
+ - - -2150
+ - 5200
+ - - -2150
+ - 6700
+ - - -3500
+ - 6700
+ - id: '7'
+ icon:
+ name: mdi:home-outline
+ x: 2600
+ y: 7900
+ label:
+ text: Main Bedroom
+ x: 2600
+ y: 7900
+ offset_y: 35
+ outline:
+ - - -700
+ - 6850
+ - - 4750
+ - 6850
+ - - 4750
+ - 10850
+ - - -700
+ - 10850
+ - id: '8'
+ icon:
+ name: mdi:sofa-outline
+ x: -750
+ y: 4300
+ label:
+ text: Living Room
+ x: -750
+ y: 4300
+ offset_y: 35
+ outline:
+ - - 4100
+ - 1850
+ - - -4000
+ - 1850
+ - - -4000
+ - 4200
+ - - -2150
+ - 4200
+ - - -2150
+ - 6700
+ - - 4100
+ - 6700
+ - id: '9'
+ icon:
+ name: mdi:home-outline
+ x: -4800
+ y: 3250
+ label:
+ text: Entry
+ x: -4800
+ y: 3250
+ offset_y: 35
+ outline:
+ - - -5500
+ - 2300
+ - - -3950
+ - 2300
+ - - -3950
+ - 4100
+ - - -5500
+ - 4100
+ - id: '10'
+ icon:
+ name: mdi:home-outline
+ x: -1600
+ y: 800
+ label:
+ text: Mud Room
+ x: -1600
+ y: 800
+ offset_y: 35
+ outline:
+ - - -2400
+ - -200
+ - - -750
+ - -200
+ - - -750
+ - 1700
+ - - -2400
+ - 1700
+ - id: '11'
+ icon:
+ name: mdi:home-outline
+ x: -1800
+ y: -650
+ label:
+ text: Landry Room
+ x: -1800
+ y: -650
+ offset_y: 35
+ outline:
+ - - -2400
+ - -1100
+ - - -1050
+ - -1100
+ - - -1050
+ - -250
+ - - -2400
+ - -250
+ - id: '13'
+ icon:
+ name: mdi:room-service-outline
+ x: 1750
+ y: 650
+ label:
+ text: Dining Hall
+ x: 1750
+ y: 650
+ offset_y: 35
+ outline:
+ - - -750
+ - -700
+ - - 4300
+ - -700
+ - - 4300
+ - 1850
+ - - -750
+ - 1850
+ - id: '14'
+ icon:
+ name: mdi:chef-hat
+ x: 600
+ y: -1900
+ label:
+ text: Kitchen
+ x: 600
+ y: -1900
+ offset_y: 35
+ outline:
+ - - -150
+ - -3250
+ - - 4100
+ - -3250
+ - - 4100
+ - -650
+ - - -150
+ - -650
+ - id: '15'
+ icon:
+ name: mdi:home-outline
+ x: -6050
+ y: 6650
+ label:
+ text: Emma's Bedroom
+ x: -6050
+ y: 6650
+ offset_y: 35
+ outline:
+ - - -8200
+ - 4750
+ - - -3900
+ - 4750
+ - - -3900
+ - 7700
+ - - -8200
+ - 7700
+ layout_options:
+ grid_columns: full
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#low-battery'
+ hash: '#dustin-mopman'
button_type: state
- entity: sensor.low_battery_devices
- show_icon: false
- show_state: false
- sub_button:
- - entity: sensor.low_battery_devices
- show_state: true
+ entity: vacuum.dustin_mopman
+ show_attribute: true
+ attribute: status
margin_top_mobile: -56px
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
bubble-card::after {\n display: none !important;\n}"
- - type: custom:vertical-stack-in-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- cards:
- - type: custom:auto-entities
- filter:
- include:
- - group: sensor.low_battery_devices
- options:
- type: custom:mushroom-template-card
- primary: '{{ states(entity) }}%'
- secondary: '{{ state_attr(entity, "friendly_name") | title
- }}'
- icon: '{% from "util.jinja" import battery_icon %} {{
- battery_icon(entity) }}
-
- '
- icon_color: '{% from "util.jinja" import battery_color
- %} {{ battery_color(entity) }}'
- badge_color: red
- badge_icon: "{% if int(states(entity), 0) <= 15 %}\n \
- \ mdi:exclamation-thick\n{% endif %}"
- layout: horizontal
- tap_action:
- action: more-info
- card_mod:
- style: "ha-card {\n padding: 4px 12px !important;\n\
- }\n"
- exclude: []
- card:
- type: custom:layout-card
- cards: []
- layout_type: masonry
- sort:
- method: friendly_name
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#weather'
- button_type: state
- entity: sensor.owm_daily_temperature
- name: Weather
- show_attribute: false
- attribute: temperature
- show_icon: false
- show_state: false
+ card_layout: large-2-rows
sub_button:
- - entity: sensor.owm_daily_condition
+ - entity: sensor.dustin_mopman_detergent_left
show_state: true
- show_icon: false
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n${card.querySelector(\"\
- .bubble-sub-button-1\").innerText = hass.formatEntityState(hass.states['weather.owm_daily'])}"
- show_last_changed: false
- - type: custom:vertical-stack-in-card
- cards:
- - card_config_version: 8
- daily_forecast_days: 6
- entity_apparent_temp: sensor.ecowitt_feels_like_temperature
- entity_extended: sensor.forecast
- entity_forecast_icon: weather.owm_daily
- entity_forecast_icon_1: weather.owm_daily
- entity_forecast_max: weather.owm_daily
- entity_forecast_max_1: weather.owm_daily
- entity_forecast_min: weather.owm_daily
- entity_forecast_min_1: weather.owm_daily
- entity_humidity: sensor.ecowitt_humidity
- entity_pop: weather.owm_daily
- entity_pop_1: weather.owm_daily
- entity_pos: weather.owm_daily
- entity_pos_1: weather.owm_daily
- entity_pressure: sensor.ecowitt_relative_pressure
- entity_summary: weather.owm_daily
- entity_summary_1: weather.owm_daily
- entity_sun: sun.sun
- entity_temperature: sensor.ecowitt_outdoor_temperature
- entity_uv_alert_summary: sensor.owm_daily_uv_index
- entity_visibility: sensor.owm_daily_visibility
- entity_wind_bearing: sensor.ecowitt_wind_direction
- entity_wind_gust: sensor.ecowitt_wind_gust
- entity_wind_speed: sensor.ecowitt_wind_speed
- extended_name_attr: precipitation_unit
- extended_use_attr: false
- forecast_type: daily
- option_color_fire_danger: false
- option_show_overview_separator: false
- option_static_icons: false
- option_tooltips: false
- section_order:
- - overview
- - extended
- - slots
- - daily_forecast
- show_section_daily_forecast: true
- show_section_slots: true
- slot_l1: forecast_max
- slot_l2: forecast_min
- slot_l3: wind
- slot_l4: pressure
- slot_l5: sun_next
- slot_l6: remove
- slot_l7: remove
- slot_l8: remove
- slot_r1: popforecast
- slot_r2: humidity
- slot_r3: uv_summary
- slot_r4: visibility
- slot_r5: sun_following
- slot_r6: remove
- slot_r7: remove
- slot_r8: remove
- type: custom:platinum-weather-card
- weather_entity: weather.owm_daily
- - type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: 66px auto
- margin: -4px -4px -12px -4px;
- cards:
- - type: custom:mushroom-entity-card
- entity: weather.owm_daily
- icon_color: blue
- card_mod:
- style: "ha-card {\n background: none;\n --ha-card-box-shadow:\
- \ 0px;\n}\n"
- - type: custom:hourly-weather
- entity: weather.owm_daily
- icons: true
- label_spacing: '2'
- num_segments: '12'
- name: ' '
- card_mod:
- style:
- .: "ha-card {\n background: none;\n --ha-card-box-shadow:\
- \ 0px;\n margin: -8px -4px -4px -16px;\n}\n"
- weather-bar$: ".main {\n --mush-rgb-red: 244, 67, 54;\n\
- \ --mush-rgb-pink: 233, 30, 99;\n --mush-rgb-purple:\
- \ 156, 39, 176;\n --mush-rgb-deep-purple: 103, 58,\
- \ 183;\n --mush-rgb-indigo: 63, 81, 181;\n --mush-rgb-blue:\
- \ 33, 150, 243;\n --mush-rgb-light-blue: 3, 169, 244;\n\
- \ --mush-rgb-cyan: 0, 188, 212;\n --mush-rgb-teal:\
- \ 0, 150, 136;\n --mush-rgb-green: 76, 175, 80;\n \
- \ --mush-rgb-light-green: 139, 195, 74;\n --mush-rgb-lime:\
- \ 205, 220, 57;\n --mush-rgb-yellow: 255, 235, 59;\n\
- \ --mush-rgb-amber: 255, 193, 7;\n --mush-rgb-orange:\
- \ 255, 152, 0;\n --mush-rgb-deep-orange: 255, 87, 34;\n\
- \ --mush-rgb-brown: 121, 85, 72;\n --mush-rgb-grey:\
- \ 158, 158, 158;\n --mush-rgb-blue-grey: 96, 125, 139;\n\
- \ --mush-rgb-black: 0, 0, 0;\n --mush-rgb-white: 255,\
- \ 255, 255;\n\n --color-clear-night: rgba(var(--mush-rgb-black),\
- \ 0.2) !important;\n --color-cloudy: rgba(var(--mush-rgb-grey),\
- \ 0.2) !important;\n --color-fog: var(--color-cloudy);\n\
- \ --color-hail: rgba(var(--mush-rgb-indigo), 0.2) !important;\n\
- \ --color-lightning: var(--color-rainy);\n --color-lightning-rainy:\
- \ var(--color-rainy);\n --color-partlycloudy: rgba(var(--mush-rgb-blue),\
- \ 0.2) !important;\n --color-pouring: var(--color-rainy);\n\
- \ --color-rainy: rgba(var(--mush-rgb-indigo), 0.2)\
- \ !important;\n --color-snowy: rgba(var(--mush-rgb-white),\
- \ 0.2) !important;\n --color-snowy-rainy: var(--color-partlycloudy);\n\
- \ --color-sunny: rgba(var(--mush-rgb-yellow), 0.2)\
- \ !important;\n --color-windy: var(--color-sunny);\n\
- \ --color-windy-variant: var(--color-sunny);\n --color-exceptional:\
- \ rgba(var(--mush-rgb-amber), 0.2) !important;\n}\n\
- .bar > div {\n height: 42px !important;\n}\n.bar >\
- \ div:first-child {\n border-top-left-radius: var(--ha-card-border-radius)\
- \ !important;\n border-bottom-left-radius: var(--ha-card-border-radius)\
- \ !important;\n}\n.bar > div:last-child {\n border-top-right-radius:\
- \ var(--ha-card-border-radius) !important;\n border-bottom-right-radius:\
- \ var(--ha-card-border-radius) !important;\n}\n.bar\
- \ > div > span {\n text-shadow: none !important;\n\
- \ color: rgb(var(--primary-text-color));\n font-size:\
- \ 14px;\n font-weight: bold;\n}\n.axes > div > .bar-block-bottom\
- \ > .hour {\n font-size: 12px;\n font-weight: bolder;\n\
- }\n.axes > div > .bar-block-bottom > .temperature {\n\
- \ font-size: 12px;\n font-weight: bolder;\n}\n.axes\
- \ {\n margin-top: 10px !important;\n}\n"
- - type: iframe
- url: https://embed.windy.com/embed.html?type=map&location=coordinates&metricRain=in&metricTemp=°F&metricWind=mph&zoom=7&overlay=wind&product=ecmwf&level=surface&lat=42.926&lon=-112.462&message=true
- - type: custom:horizon-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
+ - entity: sensor.dustin_mopman_filter_left
+ show_state: true
+ - entity: sensor.dustin_mopman_main_brush_left
+ show_state: true
+ - entity: sensor.dustin_mopman_mop_pad_left
+ show_state: true
+ - entity: sensor.dustin_mopman_sensor_dirty_left
+ show_state: true
+ - entity: sensor.dustin_mopman_side_brush_left
+ show_state: true
+ - type: custom:xiaomi-vacuum-map-card
+ map_source:
+ camera: camera.dustin_mopman_map
+ calibration_source:
+ camera: true
+ entity: vacuum.dustin_mopman
+ vacuum_platform: Tasshack/dreame-vacuum
+ map_modes:
+ - template: vacuum_clean_zone
+ - template: vacuum_clean_point
+ - template: vacuum_clean_segment
+ predefined_selections:
+ - id: '1'
+ icon:
+ name: mdi:home-outline
+ x: 1300
+ y: -100
+ label:
+ text: Family Room
+ x: 1300
+ y: -100
+ offset_y: 35
+ outline:
+ - - -3000
+ - -3400
+ - - 5650
+ - -3400
+ - - 5650
+ - 2800
+ - - -3000
+ - 2800
+ - id: '2'
+ icon:
+ name: mdi:home-outline
+ x: -7200
+ y: -5450
+ label:
+ text: Josh Office
+ x: -7200
+ y: -5450
+ offset_y: 35
+ outline:
+ - - -8400
+ - -7650
+ - - -4800
+ - -7650
+ - - -4800
+ - -4000
+ - - -8400
+ - -4000
+ - id: '3'
+ icon:
+ name: mdi:home-outline
+ x: -2600
+ y: -2250
+ label:
+ text: Under Stairs
+ x: -2600
+ y: -2250
+ offset_y: 35
+ outline:
+ - - -3000
+ - -3850
+ - - -2100
+ - -3850
+ - - -2100
+ - -800
+ - - -3000
+ - -800
+ - id: '4'
+ icon:
+ name: mdi:foot-print
+ x: -2800
+ y: -4550
+ label:
+ text: Corridor
+ x: -2800
+ y: -4550
+ offset_y: 35
+ outline:
+ - - -4850
+ - -5250
+ - - -750
+ - -5250
+ - - -750
+ - -3400
+ - - -4850
+ - -3400
+ - id: '5'
+ icon:
+ name: mdi:home-outline
+ x: -400
+ y: -6800
+ label:
+ text: Ethan's Bedroom
+ x: -400
+ y: -6800
+ offset_y: 35
+ outline:
+ - - -2050
+ - -8350
+ - - 1800
+ - -8350
+ - - 1800
+ - -5250
+ - - -2050
+ - -5250
+ - id: '6'
+ icon:
+ name: mdi:toilet
+ x: -3500
+ y: -6400
+ label:
+ text: Bathroom
+ x: -3500
+ y: -6400
+ offset_y: 35
+ outline:
+ - - -4550
+ - -8300
+ - - -2200
+ - -8300
+ - - -2200
+ - -5250
+ - - -4550
+ - -5250
+ layout_options:
+ grid_columns: full
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#air-quality'
- button_type: state
- entity: sensor.airgradient_kitchen_pm_2_5_aqi
- name: Air Quality
- show_icon: false
+ hash: '#ascent'
+ button_type: name
+ name: Ascent
+ icon: fapro:subaru
show_state: false
- sub_button:
- - entity: sensor.airgradient_kitchen_pm_2_5_aqi
- show_state: true
+ width_desktop: 600px
margin_top_mobile: -56px
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:vertical-stack-in-card
+ bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
+ \ {\n display: ${hass.states['binary_sensor.ascent_trouble'].state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}"
+ sub_button:
+ - entity: binary_sensor.ascent_trouble
+ show_background: false
+ icon: mdi:alert
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Trouble Codes
+ content:
+ type: markdown
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none\n}\n"
+ content: "{%- set codes = {\n \"ABS_MIL\": \"Anti-lock\
+ \ Brake System\",\n \"AHBL_MIL\": \"Automatic Headlight\
+ \ Beam Leveller\",\n \"ATF_MIL\": \"ATF\",\n \"AWD_MIL\"\
+ : \"AWD\",\n \"BSDRCT_MIL\": \"Blind Spot Detection/Rear\
+ \ Cross Traffic Alert\",\n \"CEL_MIL\": \"Check Engine\
+ \ Light\",\n \"EBD_MIL\": \"Electronic Brake-force\
+ \ Distribution\",\n \"EOL_MIL\": \"EOL\",\n \"EPAS_MIL\"\
+ : \"Electric Power Assisted Steering\",\n \"EPB_MIL\"\
+ : \"Electronic Parking Brake\",\n \"ESS_MIL\": \"Engine\
+ \ Start-Stop\",\n \"HEVCM_MIL\": \"HEVCM\",\n \"HEV_MIL\"\
+ : \"HEV\",\n \"OPL_MIL\": \"OPL\",\n \"RAB_MIL\":\
+ \ \"Reverse Automatic Braking\",\n \"SRS_MIL\": \"\
+ Airbag System\",\n \"TEL_MIL\": \"Telematics\",\n \
+ \ \"TPMS_MIL\": \"Tire Preassure Monitoring\",\n \"\
+ VDC_MIL\": \"Multi-mode Vehicle Dynamics Control\",\n\
+ \ \"WASH_MIL\": \"Washer Fluid\"\n} -%}\n{%- set entity_id\
+ \ = \"binary_sensor.ascent_trouble\" -%}\n{%- for attribute,\
+ \ value in states[entity_id].attributes.items() -%}\n\
+ {%- if attribute in codes -%}\n- {{ codes[attribute]\
+ \ }} ({{ attribute }})\n{% endif -%}\n{%- endfor -%}"
+ - entity: sensor.ascent_avg_fuel_consumption
+ show_state: true
+ show_background: false
+ - type: custom:expander-card
+ gap: 0em
+ padding: 0em
+ child-padding: 0.5em
+ title-card-padding: 0em
+ title-card-button-overlay: true
+ overlay-margin: calc(var(--ha-card-border-radius, 12px) / 2) auto
+ title-card:
+ type: vertical-stack
+ cards:
+ - type: custom:mushroom-template-card
+ primary: Remote Start
+ secondary: "{%- if is_state(\"device_tracker.ascent\", \"home\"\
+ ) -%}\n Open the Garage and Start the Ascent\n{%- else -%}\n\
+ \ Start the Ascent\n{%- endif -%}"
+ icon: mdi:key-wireless
+ entity: script.ascent_remote_start
+ icon_color: amber
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: script.turn_on
+ target:
+ entity_id: script.ascent_remote_start
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: custom:timer-bar-card
+ filter: true
+ invert: true
+ state_color: true
+ bar_height: 12px
+ bar_radius: var(--ha-card-border-radius, 12px)
+ bar_direction: rtl
+ bar_foreground: var(--lime-color)
+ bar_background: var(--disabled-color)
+ compressed: true
+ modifications:
+ - remaining: 00:03:00
+ bar_foreground: var(--amber-color)
+ - remaining: 00:02:00
+ bar_foreground: var(--orange-color)
+ - remaining: 00:01:00
+ bar_foreground: var(--red-color)
+ entities:
+ - entity: timer.ascent_remote_start
+ name: Timer
cards:
- - type: vertical-stack
- cards:
- - type: custom:mushroom-title-card
- title: Inside
- - type: custom:bar-card
- card_mod:
- style: "bar-card-name,\nbar-card-value {\n font-weight:\
- \ 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
- }\n"
- animation:
- state: 'on'
- positions:
- indicator: inside
- entities:
- - entity: sensor.airgradient_kitchen_pm_2_5_aqi
- name: AQI
- min: 0
- max: 400
- severity:
- - color: var(--green-color)
- from: '0'
- to: '50'
- - color: var(--yellow-color)
- from: '50'
- to: '100'
- - color: var(--orange-color)
- from: '100'
- to: '150'
- - color: var(--red-color)
- from: '150'
- to: '200'
- - color: var(--purple-color)
- from: '200'
- to: '300'
- - color: var(--pink-color)
- from: '300'
- to: '400'
- - entity: sensor.airgradient_kitchen_pm_2_5
- name: PM 2.5
- min: 0
- max: 100
- severity:
- - color: var(--green-color)
- from: '0'
- to: '12'
- - color: var(--yellow-color)
- from: '12'
- to: '35'
- - color: var(--orange-color)
- from: '35'
- to: '50'
- - color: var(--red-color)
- from: '50'
- to: '100'
- - entity: sensor.airgradient_kitchen_pm_10_0
- name: PM 10
- min: 0
- max: 100
- severity:
- - color: var(--green-color)
- from: '0'
- to: '12'
- - color: var(--yellow-color)
- from: '12'
- to: '35'
- - color: var(--orange-color)
- from: '35'
- to: '50'
- - color: var(--red-color)
- from: '50'
- to: '100'
- - entity: sensor.airgradient_kitchen_voc_index
- name: VOC
- min: 0
- max: 500
- severity:
- - color: var(--green-color)
- from: '0'
- to: '150'
- - color: var(--yellow-color)
- from: '150'
- to: '250'
- - color: var(--orange-color)
- from: '250'
- to: '400'
- - color: var(--red-color)
- from: '400'
- to: '500'
- - entity: sensor.airgradient_kitchen_nox_index
- name: NOx
- min: 0
- max: 500
- severity:
- - color: var(--green-color)
- from: '0'
- to: '30'
- - color: var(--yellow-color)
- from: '30'
- to: '150'
- - color: var(--orange-color)
- from: '150'
- to: '300'
- - color: var(--red-color)
- from: '300'
- to: '500'
- - type: vertical-stack
- cards:
- - type: custom:mushroom-title-card
- title: Outside
- - type: custom:mushroom-template-card
- entity: sensor.airnow_air_quality_index
- primary: 'AQI: {{ state_attr(entity, "description") }}'
- multiline_secondary: true
- fill_container: false
+ - type: custom:mushroom-select-card
+ entity: select.ascent_climate_preset
+ layout: horizontal
+ name: Climate Preset
+ secondary_info: none
+ icon_color: pink
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
+ \ 1fr 1fr 1fr 1fr;\n}\n"
+ chips:
+ - type: entity
+ entity: lock.ascent_door_locks
+ name: Lock
+ icon: mdi:lock
+ content_info: name
tap_action:
action: none
hold_action:
- action: none
- double_tap_action:
- action: none
- - type: custom:bar-card
+ action: call-service
+ service: lock.lock
+ target:
+ entity_id: lock.ascent_door_locks
card_mod:
- style: "bar-card-name,\nbar-card-value {\n font-weight:\
- \ 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
}\n"
- animation:
- state: 'on'
- positions:
- indicator: inside
- entities:
- - entity: sensor.airnow_air_quality_index
- name: AQI
- min: 0
- max: 400
- severity:
- - color: var(--green-color)
- from: '0'
- to: '50'
- - color: var(--yellow-color)
- from: '50'
- to: '100'
- - color: var(--orange-color)
- from: '100'
- to: '150'
- - color: var(--red-color)
- from: '150'
- to: '200'
- - color: var(--purple-color)
- from: '200'
- to: '300'
- - color: var(--pink-color)
- from: '300'
- to: '400'
- - entity: sensor.airnow_pm2_5
- name: PM 2.5
- min: 0
- max: 100
- severity:
- - color: var(--green-color)
- from: '0'
- to: '12'
- - color: var(--yellow-color)
- from: '12'
- to: '35'
- - color: var(--orange-color)
- from: '35'
- to: '50'
- - color: var(--red-color)
- from: '50'
- to: '100'
- - type: vertical-stack
- cards:
- - type: custom:mushroom-title-card
- title: Environment
- - type: custom:apexcharts-card
- apex_config:
- chart:
- foreColor: '#7B7B7B'
- toolbar:
- show: false
- grid:
- borderColor: '#7B7B7B'
- xaxis:
- tooltip:
- enabled: false
- experimental:
- color_threshold: true
- header:
- show: true
- show_states: true
- colorize_states: true
- all_series_config:
- extend_to: now
- stroke_width: 2
- type: line
- group_by:
- func: max
- duration: 10min
- color_threshold:
- - value: 0
- color: '#4caf50'
- - value: 700
- color: '#ffeb3b'
- - value: 1333
- color: '#ff9800'
- - value: 1666
- color: '#f44336'
- span:
- end: minute
- graph_span: 1d
- yaxis:
- - decimals: 0
- min: ~400
- max: ~2100
- apex_config:
- title:
- text: ppm
- series:
- - entity: sensor.apollo_msr_1_office_co2
- name: Office CO2
- - entity: sensor.airgradient_kitchen_co2
- name: Kitchen CO2
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#allergy'
- button_type: state
- entity: sensor.allergy_index_today
- name: Allergy
- show_icon: false
- show_state: false
- sub_button:
- - entity: sensor.allergy_index_today
- show_state: true
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:vertical-stack-in-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- cards:
- - type: custom:mushroom-title-card
- title: Allergens
- - type: custom:mushroom-template-card
- entity: sensor.allergy_index_today
- secondary: "{%- set ns = namespace(allergens=[]) -%} {%- for id\
- \ in range(1, 4) -%}\n {%- set attr = \"allergen_name_\" ~\
- \ id -%}\n {%- if not state_attr(entity, attr) in [\"unknown\"\
- , \"unavailable\", None] -%}\n {%- set ns.allergens = ns.allergens\
- \ + [ state_attr(entity, attr) ] -%}\n {%- endif -%}\n{%- endfor\
- \ -%} {{ ns.allergens | join(\", \") }}\n{{ state_attr(\"sensor.allergy_index_forecasted_average\"\
- , \"outlook\") | default(\"\", true) }}"
- multiline_secondary: true
- tap_action:
- action: none
- hold_action:
- action: none
- double_tap_action:
- action: none
- card_mod:
- style: "ha-card {\n /* Make card non-responsive to select and\
- \ pointer */\n user-select: none;\n pointer-events: none;\n\
- }\n"
- - type: custom:mushroom-title-card
- title: Forecast
- subtitle: Allergy
- - type: custom:bar-card
- card_mod:
- style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n\
- \ text-shadow: 1px 1px var(--primary-background-color);\n\
- }\n"
- entities:
- - entity: sensor.allergy_index_today
- - entity: sensor.allergy_index_tomorrow
- - entity: sensor.allergy_index_forecasted_average
- min: 0
- max: 12
- decimal: 1
- animation:
- state: 'on'
- positions:
- indicator: inside
- severity:
- - color: var(--green-color)
- from: '0'
- to: '2.5'
- - color: var(--light-green-color)
- from: '2.5'
- to: '4.9'
- - color: var(--amber-color)
- from: '4.9'
- to: '7.3'
- - color: var(--orange-color)
- from: '7.3'
- to: '9.7'
- - color: var(--red-color)
- from: '9.7'
- to: '12'
- - type: custom:mushroom-title-card
- subtitle: Asthma
- - type: custom:bar-card
- card_mod:
- style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n\
- \ text-shadow: 1px 1px var(--primary-background-color);\n\
- }\n"
- entities:
- - entity: sensor.asthma_index_today
- - entity: sensor.asthma_index_tomorrow
- - entity: sensor.asthma_index_forecasted_average
- min: 0
- max: 12
- decimal: 1
- animation:
- state: 'on'
- positions:
- indicator: inside
- severity:
- - color: var(--green-color)
- from: '0'
- to: '2.5'
- - color: var(--light-green-color)
- from: '2.5'
- to: '4.9'
- - color: var(--amber-color)
- from: '4.9'
- to: '7.3'
- - color: var(--orange-color)
- from: '7.3'
- to: '9.7'
- - color: var(--red-color)
- from: '9.7'
- to: '12'
- - type: custom:mushroom-title-card
- subtitle: Cold
- - type: custom:bar-card
+ - type: entity
+ entity: button.ascent_remote_start
+ name: Remote Start
+ icon: mdi:key-wireless
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_remote_start
+ card_mod:
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: button.ascent_lights_start
+ name: Flash Lights
+ icon: mdi:lightbulb-on
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_lights_start
+ card_mod:
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: button.ascent_horn_start
+ name: Sound Horn
+ icon: mdi:volume-high
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_horn_start
+ card_mod:
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: lock.ascent_door_locks
+ name: Unlock
+ icon: mdi:lock-open
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: lock.unlock
+ target:
+ entity_id: lock.ascent_door_locks
+ card_mod:
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: button.ascent_remote_stop
+ name: Remote Stop
+ icon: mdi:stop-circle-outline
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_remote_stop
+ card_mod:
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: button.ascent_lights_stop
+ name: Stop Flash Lights
+ icon: mdi:lightbulb-off
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_lights_stop
+ card_mod:
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: button.ascent_horn_stop
+ name: Stop Horn
+ icon: mdi:volume-off
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_horn_stop
+ card_mod:
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: custom:mushroom-chips-card
card_mod:
- style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n\
- \ text-shadow: 1px 1px var(--primary-background-color);\n\
- }\n"
- entities:
- - entity: sensor.cold_flu_index_today
- - entity: sensor.cold_flu_forecasted_average
- min: 0
- max: 12
- decimal: 1
- animation:
- state: 'on'
- positions:
- indicator: inside
- severity:
- - color: var(--green-color)
- from: '0'
- to: '2.5'
- - color: var(--light-green-color)
- from: '2.5'
- to: '4.9'
- - color: var(--amber-color)
- from: '4.9'
- to: '7.3'
- - color: var(--orange-color)
- from: '7.3'
- to: '9.7'
- - color: var(--red-color)
- from: '9.7'
- to: '12'
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#person-joshua'
- button_type: name
- name: Joshua
- icon: mdi:account
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n"
- - type: custom:decluttering-card
- template: person_popup
- variables:
- - person: joshua
- - name: Joshua
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#person-spotify-joshua'
- button_type: name
- name: Spotify (Joshua)
- icon: mdi:spotify
- show_state: false
- width_desktop: 600px
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n"
- - type: custom:decluttering-card
- template: media_card
- variables:
- - entity: media_player.spotify_joshua
- - buttons: []
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#person-amy'
- button_type: name
- name: Amy
- icon: mdi:account
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n"
- - type: custom:decluttering-card
- template: person_popup
- variables:
- - person: amy
- - name: Amy
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#person-spotify-amy'
- button_type: name
- name: Spotify (Amy)
- icon: mdi:spotify
- show_state: false
- width_desktop: 600px
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n"
- - type: custom:decluttering-card
- template: media_card
- variables:
- - entity: media_player.spotify_amy
- - buttons: []
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#media-living-room'
- button_type: state
- entity: media_player.universal_living_room
- name: Living Room
- icon: mdi:motion-play-outline
- force_icon: true
- show_state: false
- margin_top_mobile: -56px
- width_desktop: ''
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: androidtv_remote
- variables:
- - remote: remote.androidtv_living_room
- - media: media_player.universal_living_room
- - sources:
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:plex
- - icon_color: black
- - badge_icon_color: black
- - media: media_player.universal_living_room
- - name: Plex
- - source: Plex
- - style: 'background: #d5a004 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:prime-video
- - media: media_player.universal_living_room
- - name: Prime Video
- - source: Prime Video
- - style: 'background: #202d3c !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:smarttube
- - media: media_player.universal_living_room
- - name: SmartTube
- - source: SmartTube
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:crunchyroll
- - media: media_player.universal_living_room
- - name: Crunchyroll
- - source: Crunchyroll
- - style: 'background: #f47521 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:spotify
- - media: media_player.universal_living_room
- - name: Spotify
- - source: Spotify
- - style: 'background: #1db954 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:cartoon-network
- - media: media_player.universal_living_room
- - name: Cartoon Network
- - source: Cartoon Network
- - style: 'background: #000000 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:youtube-kids
- - media: media_player.universal_living_room
- - name: YouTube Kids
- - source: YouTube Kids
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:pbs-kids
- - media: media_player.universal_living_room
- - name: PBS Kids
- - source: PBS Kids
- - style: 'background: #2838c2 !important;'
- - sound_buttons:
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound
- - media: media_player.universal_living_room
- - name: Surround
- - sound_mode: Surround
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:gamepad-variant
- - media: media_player.universal_living_room
- - name: Gaming
- - sound_mode: Gaming
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:home-sound-in-outline
- - media: media_player.universal_living_room
- - name: Adaptive
- - sound_mode: Adaptive Sound
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:soundbar
- - media: media_player.universal_living_room
- - name: Standard
- - sound_mode: Standard
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-template-card
- icon: mdi:weather-night
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Night Mode
- tap_action:
- action: call-service
- service: input_boolean.toggle
- target:
- entity_id: input_boolean.samsung_soundbar_night_mode
- card_mod:
- style:
- .: "ha-card {\n transition: all 0s;\n min-height:\
- \ 145px !important;\n max-height: 145px !important;\n\
- }\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 100px\
- \ !important;\n --shape-color: none !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em\
- \ !important;\n text-align: start;\n margin-top:\
- \ -20px;\n font-weight: 400 !important;\n white-space:\
- \ initial !important;\n}\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
- - type: template
- entity: input_boolean.samsung_soundbar_night_mode
- icon: "{% if is_state(entity, \"on\") %}\n mdi:checkbox-blank-circle\n\
- {% endif %}"
- icon_color: cyan
- card_mod:
- style: "ha-card {\n position: absolute;\n top: 0px;\n\
- \ right: 0px;\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n}\n"
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-template-card
- icon: mdi:account-voice
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Voice Enhancer
- tap_action:
- action: call-service
- service: input_boolean.toggle
- target:
- entity_id: input_boolean.samsung_soundbar_voice_enhancer
- card_mod:
- style:
- .: "ha-card {\n transition: all 0s;\n min-height:\
- \ 145px !important;\n max-height: 145px !important;\n\
- }\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 100px\
- \ !important;\n --shape-color: none !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em\
- \ !important;\n text-align: start;\n margin-top:\
- \ -20px;\n font-weight: 400 !important;\n white-space:\
- \ initial !important;\n}\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
- - type: template
- entity: input_boolean.samsung_soundbar_voice_enhancer
- icon: "{% if is_state(entity, \"on\") %}\n mdi:checkbox-blank-circle\n\
- {% endif %}"
- icon_color: cyan
- card_mod:
- style: "ha-card {\n position: absolute;\n top: 0px;\n\
- \ right: 0px;\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n}\n"
- layout_options:
- grid_columns: full
+ style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
+ \ max-content max-content;\n margin-top: 15px;\n place-content:\
+ \ space-around !important;\n}\n"
+ chips:
+ - type: entity
+ entity: button.ascent_refresh
+ name: Update from Server
+ icon: mdi:refresh
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_refresh
+ card_mod:
+ style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
+ \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: button.ascent_poll_vehicle
+ name: Update from Car
+ icon: mdi:car-connected
+ content_info: name
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.ascent_poll_vehicle
+ card_mod:
+ style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
+ \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - title: ''
+ image_url: /local/logos/ascent.png
+ charging_image_url: ''
+ image_url_type: image
+ charging_image_url_type: none
+ vehicle_type: Fuel
+ unit_type: mi
+ level_entity: ''
+ range_entity: ''
+ charging_status_entity: ''
+ location_entity: device_tracker.ascent
+ mileage_entity: sensor.ascent_odometer
+ show_level: true
+ show_range: true
+ show_location: true
+ show_mileage: true
+ show_car_state: false
+ show_charge_limit: true
+ icon_grid_entities:
+ - row-separator
+ - binary_sensor.ascent_trouble
+ - binary_sensor.ascent_doors
+ - binary_sensor.ascent_windows
+ custom_icons:
+ binary_sensor.ascent_trouble:
+ active: mdi:alert
+ inactive: no-icon
+ binary_sensor.ascent_doors:
+ active: mdi:car-door
+ inactive: mdi:car-door
+ binary_sensor.ascent_windows:
+ active: mdi:window-open
+ inactive: mdi:window-closed
+ device_tracker.ascent:
+ active: mdi:map
+ inactive: mdi:map
+ icon_interactions:
+ binary_sensor.ascent_trouble:
+ type: more-info
+ binary_sensor.ascent_doors:
+ type: more-info
+ binary_sensor.ascent_windows:
+ type: more-info
+ icon_styles: {}
+ icon_labels:
+ sensor.ascent_avg_fuel_consumption: right
+ hybrid_display_order: fuel_first
+ car_state_entity: ''
+ charge_limit_entity: ''
+ icon_size: 24
+ icon_gap: 12
+ showEntityInformation: true
+ carStateTextColor: var(--primary-text-color)
+ rangeTextColor: var(--primary-text-color)
+ percentageTextColor: var(--primary-text-color)
+ icon_sizes: {}
+ engine_on_entity: binary_sensor.ascent_ignition
+ row_separator_color: Default
+ row_separator_height: 1
+ row_separators:
+ '0':
+ color: transparent
+ height: 1
+ icon_gap: 20
+ horizontalAlignment: center
+ verticalAlignment: middle
+ '6':
+ color: transparent
+ height: 1
+ icon_gap: 20
+ horizontalAlignment: center
+ verticalAlignment: middle
+ iconActiveColor: var(--primary-color)
+ iconInactiveColor: var(--primary-text-color)
+ useFormattedEntities: true
+ mainImageHeight: 400px
+ chargingImageHeight: 140px
+ showTitle: false
+ layoutType: single
+ useBarGradient: true
+ barGradientStops:
+ - percentage: 0
+ color: '#ff0000'
+ - percentage: 100
+ color: '#00ff00'
+ cardTitleColor: var(--title-color)
+ cardBackgroundColor: var(--ha-card-background,var(--card-background-color,#fff))
+ barBackgroundColor: var(--primary-background-color)
+ barBorderColor: var(--primary-background-color)
+ barFillColor: var(--accent-color)
+ limitIndicatorColor: var(--primary-text-color)
+ infoTextColor: var(--secondary-text-color)
+ show_engine_animation: false
+ show_charging_animation: false
+ show_charging_status: true
+ show_engine_on: true
+ engine_on_image_url_type: none
+ type: custom:ultra-vehicle-card
+ battery_level_entity: ''
+ battery_range_entity: ''
+ fuel_level_entity: sensor.ascent_fuel_level
+ fuel_range_entity: sensor.ascent_range
+ show_battery: true
+ show_battery_range: true
+ show_fuel: true
+ show_fuel_range: true
+ engine_on_image_url: ''
+ engine_on_image_entity: ''
+ fuel_range_url: ''
+ engine_on_url: ''
+ location_url: ''
+ mileage_url: ''
+ fuel_level_url: ''
+ - type: map
+ entities:
+ - entity: device_tracker.ascent
+ aspect_ratio: '4:3'
+ hours_to_show: 24
+ default_zoom: 12
+ theme_mode: auto
+ card_mod:
+ style:
+ .: ":host {\n /* Define Person State colors. Can be added to\
+ \ theme */\n --state-person-home: var(--green-color);\n --state-person-not-home:\
+ \ var(--red-color);\n --state-person-zone: var(--blue-color);\n\
+ \ --state-person-unknown: var(--grey-color);\n\n /* Set person\
+ \ state color */\n --state-person:\n {% if is_state(config.entities[0].entity,\
+ \ ['home', 'not_home', 'unknown']) %}\n var(--state-person-{{\
+ \ states(config.entities[0].entity) | replace('_', '-') }})\n\
+ \ {% else %}\n var(--state-person-zone)\n {% endif %};\n\
+ }\nha-card {\n /* Remove default card styling without affecting\
+ \ child elements */\n box-shadow: none;\n border-width: 0;\n\
+ \ /*border-radius: 0px 0px var(--ha-card-border-radius, 12px)\
+ \ var(--ha-card-border-radius, 12px);*/\n transition: all 0s;\n\
+ }\nha-icon-button {\n /* Position center button */\n bottom:\
+ \ 12px;\n left: 12px !important;\n top: auto !important;\n\
+ \n /* Style center button to match Chip */\n color: var(--deep-orange-color)\
+ \ !important;\n background: color-mix(in srgb, var(--deep-orange-color)\
+ \ 20%, transparent);\n border-radius: var(--mush-chip-border-radius,\
+ \ 19px);\n border: var(--ha-card-border-width, 1px) solid var(--ha-card-border-color,\
+ \ var(--divider-color, #e0e0e0)) !important;\n}\n"
+ ha-map $ ha-entity-marker $: ".marker {\n /* Style person marker\
+ \ & adjust position to avoid blocking waypoints */\n border:\
+ \ 3px solid var(--state-person) !important;\n border-radius:\
+ \ 50% 50% 50% 0px !important;\n transform: rotate(-45deg) translate(50%,\
+ \ -50%);\n overflow: visible !important;\n background: var(--state-person)\
+ \ !important;\n}\n.entity-picture {\n /* Correct orientation\
+ \ of person avatar */\n transform: rotate(45deg);\n border-radius:\
+ \ 50%;\n}\n"
+ ha-map $: "path:first-child {\n /* Style accuracy radius */\n\
+ \ fill: color-mix(in srgb, var(--state-person) 50%, transparent);\n\
+ \ stroke-width: 0px;\n}\npath:nth-child(even) {\n /* Styling\
+ \ for waypoints */\n stroke: var(--primary-color);\n fill:\
+ \ var(--primary-color);\n stroke-width: 4px;\n}\npath:nth-child(odd):not(:first-child)\
+ \ {\n /* Styling for lines */\n stroke: var(--primary-color);\n\
+ \ stroke-width: 4px;\n}\n.leaflet-control-attribution {\n \
+ \ /* Style attribution text */\n background: rgba(var(--rgb-card-background-color),\
+ \ 0.2) !important;\n font-size: 8px;\n}\n.leaflet-container\
+ \ a {\n /* Set color of zoom icons & attribution text */\n\
+ \ color: var(--secondary-text-color);\n}\n.leaflet-control-zoom-in,\n\
+ .leaflet-control-zoom-out {\n /* Style zoom buttons like Chips\
+ \ */\n border-radius: var(--mush-chip-border-radius, 19px)\
+ \ !important;\n padding: 3px;\n background: rgb(var(--rgb-secondary-text-color),\
+ \ 0.2) !important;\n margin: 8px 12px 0px;\n border: var(--ha-card-border-width,\
+ \ 1px) solid var(--ha-card-border-color, var(--divider-color,\
+ \ #e0e0e0)) !important;\n}\n.leaflet-top {\n /* Move zoom buttons\
+ \ to bottom of map */\n bottom: 0px !important;\n}\n.leaflet-control-zoom\
+ \ {\n /* Allow buttons to be moved */\n position: absolute\
+ \ !important;\n\n /* Adjust spacing for border */\n bottom:\
+ \ calc(2 * var(--ha-card-border-width, 1px) + 56px);\n\n /*\
+ \ Remove extra margin */\n margin: 0px !important;\n\n /*\
+ \ Remove zoom control border */\n border: none !important;\n\
+ }\n"
+ ha-icon-button $ mwc-icon-button $: "button {\n /* Size center\
+ \ button to match Chip */\n height: var(--mush-chip-height,\
+ \ 36px) !important;\n width: var(--mush-chip-height, 36px)\
+ \ !important;\n --mdc-icon-size: 22px;\n}\n"
+ layout_options:
+ grid_columns: full
+ grid_rows: 7
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#media-family-room'
- button_type: state
- entity: media_player.universal_family_room
- name: Family Room
- icon: mdi:motion-play-outline
- force_icon: true
- show_state: false
- margin_top_mobile: -56px
- width_desktop: ''
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: androidtv_remote
- variables:
- - remote: remote.androidtv_family_room
- - media: media_player.universal_family_room
- - sources:
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:plex
- - icon_color: black
- - badge_icon_color: black
- - media: media_player.universal_family_room
- - name: Plex
- - source: Plex
- - style: 'background: #d5a004 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:prime-video
- - media: media_player.universal_family_room
- - name: Prime Video
- - source: Prime Video
- - style: 'background: #202d3c !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:smarttube
- - media: media_player.universal_family_room
- - name: SmartTube
- - source: SmartTube
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:crunchyroll
- - media: media_player.universal_family_room
- - name: Crunchyroll
- - source: Crunchyroll
- - style: 'background: #f47521 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:spotify
- - media: media_player.universal_family_room
- - name: Spotify
- - source: Spotify
- - style: 'background: #1db954 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:cartoon-network
- - media: media_player.universal_family_room
- - name: Cartoon Network
- - source: Cartoon Network
- - style: 'background: #000000 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:youtube-kids
- - media: media_player.universal_family_room
- - name: YouTube Kids
- - source: YouTube Kids
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:pbs-kids
- - media: media_player.universal_family_room
- - name: PBS Kids
- - source: PBS Kids
- - style: 'background: #2838c2 !important;'
- - harmony_sources:
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:motion-play-outline
- - remote: remote.harmony_family_room
- - name: Shield
- - activity: Shield TV
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:desktop-tower
- - remote: remote.harmony_family_room
- - name: PC
- - activity: Computer
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: fapro:ps4
- - remote: remote.harmony_family_room
- - name: PS4
- - activity: PS4
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: fapro:ps3
- - remote: remote.harmony_family_room
- - name: PS3
- - activity: PS3
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:microsoft-xbox
- - remote: remote.harmony_family_room
- - name: XBox
- - activity: XBox
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:nintendo-switch
- - remote: remote.harmony_family_room
- - name: Switch
- - activity: Switch
- - sound_buttons:
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound-5-1
- - media: media_player.universal_family_room
- - name: Direct
- - sound_mode: Direct
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound-2-1
- - media: media_player.universal_family_room
- - name: Surround
- - sound_mode: Dolby Digital
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound
- - media: media_player.universal_family_room
- - name: Multi-Channel
- - sound_mode: All Zone Stereo
- layout_options:
- grid_columns: full
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#media-main-bedroom'
- button_type: state
- entity: media_player.universal_main_bedroom
- name: Main Bedroom
- icon: mdi:motion-play-outline
- force_icon: true
- show_state: false
- margin_top_mobile: -56px
- width_desktop: ''
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: androidtv_remote
- variables:
- - remote: remote.androidtv_main_bedroom
- - media: media_player.universal_main_bedroom
- - sources:
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:plex
- - icon_color: black
- - badge_icon_color: black
- - media: media_player.universal_main_bedroom
- - name: Plex
- - source: Plex
- - style: 'background: #d5a004 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:prime-video
- - media: media_player.universal_main_bedroom
- - name: Prime Video
- - source: Prime Video
- - style: 'background: #202d3c !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:smarttube
- - media: media_player.universal_main_bedroom
- - name: SmartTube
- - source: SmartTube
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:crunchyroll
- - media: media_player.universal_main_bedroom
- - name: Crunchyroll
- - source: Crunchyroll
- - style: 'background: #f47521 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:spotify
- - media: media_player.universal_main_bedroom
- - name: Spotify
- - source: Spotify
- - style: 'background: #1db954 !important;'
- layout_options:
- grid_columns: full
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#dustin-mopman'
- button_type: state
- entity: vacuum.dustin_mopman
- name: ''
- icon: mdi:robot-vacuum
- force_icon: true
+ hash: '#kona'
+ button_type: name
+ name: Kona
+ icon: fapro:hyundai
show_state: false
+ width_desktop: 600px
margin_top_mobile: -56px
- width_desktop: ''
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- show_last_changed: false
- show_attribute: true
- attribute: status
- - type: custom:xiaomi-vacuum-map-card
- entity: vacuum.dustin_mopman
- map_source:
- camera: camera.dustin_mopman_map
- calibration_source:
- camera: true
- vacuum_platform: Tasshack/dreame-vacuum
- map_modes:
- - template: vacuum_clean_zone
- - template: vacuum_clean_point
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- layout_options:
- grid_columns: full
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#ascent'
- button_type: name
- name: Ascent
- icon: fapro:subaru
- show_state: false
- width_desktop: 600px
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
- \ {\n display: ${hass.states['binary_sensor.ascent_trouble'].state\
- \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
- \ ha-icon {\n color: var(--red-color) !important;\n}"
- sub_button:
- - entity: binary_sensor.ascent_trouble
- show_background: false
- icon: mdi:alert
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Trouble Codes
- content:
- type: markdown
- content: "{%- set codes = {\n \"ABS_MIL\": \"Anti-lock\
- \ Brake System\",\n \"AHBL_MIL\": \"Automatic Headlight\
- \ Beam Leveller\",\n \"ATF_MIL\": \"ATF\",\n \"AWD_MIL\"\
- : \"AWD\",\n \"BSDRCT_MIL\": \"Blind Spot Detection/Rear\
- \ Cross Traffic Alert\",\n \"CEL_MIL\": \"Check Engine\
- \ Light\",\n \"EBD_MIL\": \"Electronic Brake-force\
- \ Distribution\",\n \"EOL_MIL\": \"EOL\",\n \"EPAS_MIL\"\
- : \"Electric Power Assisted Steering\",\n \"EPB_MIL\"\
- : \"Electronic Parking Brake\",\n \"ESS_MIL\": \"Engine\
- \ Start-Stop\",\n \"HEVCM_MIL\": \"HEVCM\",\n \"HEV_MIL\"\
- : \"HEV\",\n \"OPL_MIL\": \"OPL\",\n \"RAB_MIL\":\
- \ \"Reverse Automatic Braking\",\n \"SRS_MIL\": \"\
- Airbag System\",\n \"TEL_MIL\": \"Telematics\",\n \
- \ \"TPMS_MIL\": \"Tire Preassure Monitoring\",\n \"\
- VDC_MIL\": \"Multi-mode Vehicle Dynamics Control\",\n\
- \ \"WASH_MIL\": \"Washer Fluid\"\n} -%}\n{%- set entity_id\
- \ = \"binary_sensor.ascent_trouble\" -%}\n{%- for attribute,\
- \ value in states[entity_id].attributes.items() -%}\n\
- {%- if attribute in codes -%}\n- {{ codes[attribute]\
- \ }} ({{ attribute }})\n{% endif -%}\n{%- endfor -%}"
- - entity: sensor.ascent_avg_fuel_consumption
- show_state: true
- show_background: false
- - type: custom:expander-card
- gap: 0em
- padding: 0em
- child-padding: 0.5em
- title-card-padding: 0em
- title-card-button-overlay: true
- overlay-margin: calc(var(--ha-card-border-radius, 12px) / 2) auto
- title-card:
- type: vertical-stack
- cards:
- - type: custom:mushroom-template-card
- primary: Remote Start
- secondary: "{%- if is_state(\"device_tracker.ascent\", \"home\"\
- ) -%}\n Open the Garage and Start the Ascent\n{%- else -%}\n\
- \ Start the Ascent\n{%- endif -%}"
- icon: mdi:key-wireless
- entity: script.ascent_remote_start
- icon_color: amber
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: script.turn_on
- target:
- entity_id: script.ascent_remote_start
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:timer-bar-card
- filter: true
- invert: true
- state_color: true
- bar_height: 12px
- bar_radius: var(--ha-card-border-radius, 12px)
- bar_direction: rtl
- bar_foreground: var(--lime-color)
- bar_background: var(--disabled-color)
- compressed: true
- modifications:
- - remaining: 00:03:00
- bar_foreground: var(--amber-color)
- - remaining: 00:02:00
- bar_foreground: var(--orange-color)
- - remaining: 00:01:00
- bar_foreground: var(--red-color)
- entities:
- - entity: timer.ascent_remote_start
- name: Timer
- cards:
- - type: custom:mushroom-select-card
- entity: select.ascent_climate_preset
- layout: horizontal
- name: Climate Preset
- secondary_info: none
- icon_color: pink
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:mushroom-chips-card
- card_mod:
- style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
- \ 1fr 1fr 1fr 1fr;\n}\n"
- chips:
- - type: entity
- entity: lock.ascent_door_locks
- name: Lock
- icon: mdi:lock
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: lock.lock
- target:
- entity_id: lock.ascent_door_locks
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: button.ascent_remote_start
- name: Remote Start
- icon: mdi:key-wireless
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_remote_start
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: button.ascent_lights_start
- name: Flash Lights
- icon: mdi:lightbulb-on
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_lights_start
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: button.ascent_horn_start
- name: Sound Horn
- icon: mdi:volume-high
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_horn_start
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: lock.ascent_door_locks
- name: Unlock
- icon: mdi:lock-open
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: lock.unlock
- target:
- entity_id: lock.ascent_door_locks
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: button.ascent_remote_stop
- name: Remote Stop
- icon: mdi:stop-circle-outline
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_remote_stop
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: button.ascent_lights_stop
- name: Stop Flash Lights
- icon: mdi:lightbulb-off
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_lights_stop
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: button.ascent_horn_stop
- name: Stop Horn
- icon: mdi:volume-off
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_horn_stop
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: custom:mushroom-chips-card
- card_mod:
- style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
- \ max-content max-content;\n margin-top: 15px;\n place-content:\
- \ space-around !important;\n}\n"
- chips:
- - type: entity
- entity: button.ascent_refresh
- name: Update from Server
- icon: mdi:refresh
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_refresh
- card_mod:
- style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
- \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: button.ascent_poll_vehicle
- name: Update from Car
- icon: mdi:car-connected
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.ascent_poll_vehicle
- card_mod:
- style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
- \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - title: ''
- image_url: /local/logos/ascent.png
- charging_image_url: ''
- image_url_type: image
- charging_image_url_type: none
- vehicle_type: Fuel
- unit_type: mi
- level_entity: ''
- range_entity: ''
- charging_status_entity: ''
- location_entity: device_tracker.ascent
- mileage_entity: sensor.ascent_odometer
- show_level: true
- show_range: true
- show_location: true
- show_mileage: true
- show_car_state: false
- show_charge_limit: true
- icon_grid_entities:
- - row-separator
- - binary_sensor.ascent_trouble
- - binary_sensor.ascent_doors
- - binary_sensor.ascent_windows
- custom_icons:
- binary_sensor.ascent_trouble:
- active: mdi:alert
- inactive: no-icon
- binary_sensor.ascent_doors:
- active: mdi:car-door
- inactive: mdi:car-door
- binary_sensor.ascent_windows:
- active: mdi:window-open
- inactive: mdi:window-closed
- device_tracker.ascent:
- active: mdi:map
- inactive: mdi:map
- icon_interactions:
- binary_sensor.ascent_trouble:
- type: more-info
- binary_sensor.ascent_doors:
- type: more-info
- binary_sensor.ascent_windows:
- type: more-info
- device_tracker.ascent:
- type: navigate
- path: '#location'
- icon_styles: {}
- icon_labels:
- sensor.ascent_avg_fuel_consumption: right
- hybrid_display_order: fuel_first
- car_state_entity: ''
- charge_limit_entity: ''
- icon_size: 24
- icon_gap: 12
- showEntityInformation: true
- carStateTextColor: var(--primary-text-color)
- rangeTextColor: var(--primary-text-color)
- percentageTextColor: var(--primary-text-color)
- icon_sizes: {}
- engine_on_entity: binary_sensor.ascent_ignition
- row_separator_color: Default
- row_separator_height: 1
- row_separators:
- '0':
- color: transparent
- height: 1
- icon_gap: 20
- horizontalAlignment: center
- verticalAlignment: middle
- '6':
- color: transparent
- height: 1
- icon_gap: 20
- horizontalAlignment: center
- verticalAlignment: middle
- iconActiveColor: var(--primary-color)
- iconInactiveColor: var(--primary-text-color)
- useFormattedEntities: true
- mainImageHeight: 400px
- chargingImageHeight: 140px
- showTitle: false
- layoutType: single
- useBarGradient: true
- barGradientStops:
- - percentage: 0
- color: '#ff0000'
- - percentage: 100
- color: '#00ff00'
- cardTitleColor: var(--title-color)
- cardBackgroundColor: var(--ha-card-background,var(--card-background-color,#fff))
- barBackgroundColor: var(--primary-background-color)
- barBorderColor: var(--primary-background-color)
- barFillColor: var(--accent-color)
- limitIndicatorColor: var(--primary-text-color)
- infoTextColor: var(--secondary-text-color)
- show_engine_animation: false
- show_charging_animation: false
- show_charging_status: true
- show_engine_on: true
- engine_on_image_url_type: none
- type: custom:ultra-vehicle-card
- battery_level_entity: ''
- battery_range_entity: ''
- fuel_level_entity: sensor.ascent_fuel_level
- fuel_range_entity: sensor.ascent_range
- show_battery: true
- show_battery_range: true
- show_fuel: true
- show_fuel_range: true
- engine_on_image_url: ''
- engine_on_image_entity: ''
- fuel_range_url: ''
- engine_on_url: ''
- location_url: ''
- mileage_url: ''
- fuel_level_url: ''
- - type: map
- entities:
- - entity: device_tracker.ascent
- aspect_ratio: '4:3'
- hours_to_show: 24
- default_zoom: 12
- theme_mode: auto
- card_mod:
- style:
- .: ":host {\n /* Define Person State colors. Can be added to\
- \ theme */\n --state-person-home: var(--green-color);\n --state-person-not-home:\
- \ var(--red-color);\n --state-person-zone: var(--blue-color);\n\
- \ --state-person-unknown: var(--grey-color);\n\n /* Set person\
- \ state color */\n --state-person:\n {% if is_state(config.entities[0].entity,\
- \ ['home', 'not_home', 'unknown']) %}\n var(--state-person-{{\
- \ states(config.entities[0].entity) | replace('_', '-') }})\n\
- \ {% else %}\n var(--state-person-zone)\n {% endif %};\n\
- }\nha-card {\n /* Remove default card styling without affecting\
- \ child elements */\n box-shadow: none;\n border-width: 0;\n\
- \ /*border-radius: 0px 0px var(--ha-card-border-radius, 12px)\
- \ var(--ha-card-border-radius, 12px);*/\n transition: all 0s;\n\
- }\nha-icon-button {\n /* Position center button */\n bottom:\
- \ 12px;\n left: 12px !important;\n top: auto !important;\n\
- \n /* Style center button to match Chip */\n color: var(--deep-orange-color)\
- \ !important;\n background: color-mix(in srgb, var(--deep-orange-color)\
- \ 20%, transparent);\n border-radius: var(--mush-chip-border-radius,\
- \ 19px);\n border: var(--ha-card-border-width, 1px) solid var(--ha-card-border-color,\
- \ var(--divider-color, #e0e0e0)) !important;\n}\n"
- ha-map $ ha-entity-marker $: ".marker {\n /* Style person marker\
- \ & adjust position to avoid blocking waypoints */\n border:\
- \ 3px solid var(--state-person) !important;\n border-radius:\
- \ 50% 50% 50% 0px !important;\n transform: rotate(-45deg) translate(50%,\
- \ -50%);\n overflow: visible !important;\n background: var(--state-person)\
- \ !important;\n}\n.entity-picture {\n /* Correct orientation\
- \ of person avatar */\n transform: rotate(45deg);\n border-radius:\
- \ 50%;\n}\n"
- ha-map $: "path:first-child {\n /* Style accuracy radius */\n\
- \ fill: color-mix(in srgb, var(--state-person) 50%, transparent);\n\
- \ stroke-width: 0px;\n}\npath:nth-child(even) {\n /* Styling\
- \ for waypoints */\n stroke: var(--primary-color);\n fill:\
- \ var(--primary-color);\n stroke-width: 4px;\n}\npath:nth-child(odd):not(:first-child)\
- \ {\n /* Styling for lines */\n stroke: var(--primary-color);\n\
- \ stroke-width: 4px;\n}\n.leaflet-control-attribution {\n \
- \ /* Style attribution text */\n background: rgba(var(--rgb-card-background-color),\
- \ 0.2) !important;\n font-size: 8px;\n}\n.leaflet-container\
- \ a {\n /* Set color of zoom icons & attribution text */\n\
- \ color: var(--secondary-text-color);\n}\n.leaflet-control-zoom-in,\n\
- .leaflet-control-zoom-out {\n /* Style zoom buttons like Chips\
- \ */\n border-radius: var(--mush-chip-border-radius, 19px)\
- \ !important;\n padding: 3px;\n background: rgb(var(--rgb-secondary-text-color),\
- \ 0.2) !important;\n margin: 8px 12px 0px;\n border: var(--ha-card-border-width,\
- \ 1px) solid var(--ha-card-border-color, var(--divider-color,\
- \ #e0e0e0)) !important;\n}\n.leaflet-top {\n /* Move zoom buttons\
- \ to bottom of map */\n bottom: 0px !important;\n}\n.leaflet-control-zoom\
- \ {\n /* Allow buttons to be moved */\n position: absolute\
- \ !important;\n\n /* Adjust spacing for border */\n bottom:\
- \ calc(2 * var(--ha-card-border-width, 1px) + 56px);\n\n /*\
- \ Remove extra margin */\n margin: 0px !important;\n\n /*\
- \ Remove zoom control border */\n border: none !important;\n\
- }\n"
- ha-icon-button $ mwc-icon-button $: "button {\n /* Size center\
- \ button to match Chip */\n height: var(--mush-chip-height,\
- \ 36px) !important;\n width: var(--mush-chip-height, 36px)\
- \ !important;\n --mdc-icon-size: 22px;\n}\n"
- layout_options:
- grid_columns: full
- grid_rows: 7
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#kona'
- button_type: name
- name: Kona
- icon: fapro:hyundai
- show_state: false
- width_desktop: 600px
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
- \ {\n display: ${hass.states['binary_sensor.kona_problems'].state\
- \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
- \ ha-icon {\n color: var(--red-color) !important;\n}"
- sub_button:
- - entity: binary_sensor.kona_problems
- show_background: false
- - entity: sensor.kona_lease_tracker
- show_state: true
- show_background: false
- - entity: sensor.kona_car_battery_level
- show_state: true
- show_background: false
- - type: custom:expander-card
- gap: 0em
- padding: 0em
- child-padding: 0.5em
- title-card-padding: 0em
- title-card-button-overlay: true
- overlay-margin: calc(var(--ha-card-border-radius, 12px) / 2) auto
- title-card:
- type: vertical-stack
- cards:
- - type: custom:mushroom-template-card
- primary: Remote Start
- secondary: "{%- if is_state(\"device_tracker.kona_location\"\
- , \"home\") -%}\n Open the Garage and Start the Kona\n{%-\
- \ else -%}\n Start the Kona\n{%- endif -%}"
- icon: mdi:key-wireless
- entity: script.kona_remote_start
- icon_color: amber
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: script.turn_on
- target:
- entity_id: script.kona_remote_start
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:timer-bar-card
- filter: true
- invert: true
- state_color: true
- bar_height: 12px
- bar_radius: var(--ha-card-border-radius, 12px)
- bar_direction: rtl
- bar_foreground: var(--lime-color)
- bar_background: var(--disabled-color)
- compressed: true
- modifications:
- - remaining: 00:03:00
- bar_foreground: var(--amber-color)
- - remaining: 00:02:00
- bar_foreground: var(--orange-color)
- - remaining: 00:01:00
- bar_foreground: var(--red-color)
- entities:
- - entity: timer.ascent_remote_start
- name: Timer
- cards:
- - type: custom:mushroom-chips-card
- card_mod:
- style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
- \ 1fr 1fr 1fr 1fr;\n}\n"
- chips:
- - type: entity
- entity: lock.kona_door_lock
- name: Lock
- icon: mdi:lock
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: lock.lock
- target:
- entity_id: lock.kona_door_lock
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: device_tracker.kona_location
- name: Remote Start
- icon: mdi:key-wireless
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: kia_uvo.start_climate
- device_id: f27d2038fd3fe30bc627505de54ddea8
- duration: 10
- climate: true
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: lock.kona_door_lock
- name: Unlock
- icon: mdi:lock-open
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: lock.unlock
- target:
- entity_id: lock.kona_door_lock
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: device_tracker.kona_location
- name: Remote Stop
- icon: mdi:stop-circle-outline
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: kia_uvo.stop_climate
- data:
- device_id: f27d2038fd3fe30bc627505de54ddea8
- card_mod:
- style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: custom:mushroom-chips-card
- card_mod:
- style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
- \ max-content max-content;\n margin-top: 15px;\n place-content:\
- \ space-around !important;\n}\n"
- chips:
- - type: entity
- entity: device_tracker.kona_location
- name: Update
- icon: mdi:refresh
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: kia_uvo.update
- data:
- device_id: f27d2038fd3fe30bc627505de54ddea8
- card_mod:
- style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
- \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - type: entity
- entity: device_tracker.kona_location
- name: Force Update
- icon: mdi:car-connected
- content_info: name
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: kia_uvo.force_update
- data:
- device_id: f27d2038fd3fe30bc627505de54ddea8
- card_mod:
- style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
- \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
- }\n"
- - title: ''
- image_url: /local/logos/kona.png
- charging_image_url: ''
- image_url_type: image
- charging_image_url_type: none
- vehicle_type: Fuel
- unit_type: mi
- level_entity: ''
- range_entity: ''
- charging_status_entity: ''
- location_entity: device_tracker.kona_location
- mileage_entity: sensor.kona_odometer
- show_level: true
- show_range: true
- show_location: true
- show_mileage: true
- show_car_state: false
- show_charge_limit: true
- icon_grid_entities:
- - row-separator
- - binary_sensor.kona_doors
- - binary_sensor.kona_windows
- - binary_sensor.kona_defrost
- - binary_sensor.kona_back_window_heater
- - binary_sensor.kona_air_conditioner
- custom_icons:
- binary_sensor.kona_doors:
- active: mdi:car-door
- inactive: mdi:car-door
- binary_sensor.kona_problems:
- active: mdi:alert
- inactive: no-icon
- binary_sensor.kona_windows:
- active: mdi:window-open
- inactive: mdi:window-closed
- device_tracker.kona_location:
- active: mdi:map
- inactive: mdi:map
- inactiveColor: '#e4e4e7'
- icon_interactions:
- binary_sensor.kona_doors:
- type: more-info
- sensor.kona_car_battery_level:
- type: more-info
- binary_sensor.kona_windows:
- type: more-info
- device_tracker.kona_location:
- type: navigate
- path: '#location'
- icon_styles:
- binary_sensor.kona_windows: icon
- icon_labels:
- sensor.kona_car_battery_level: right
- hybrid_display_order: fuel_first
- car_state_entity: ''
- charge_limit_entity: ''
- icon_size: 24
- icon_gap: 12
- showEntityInformation: true
- carStateTextColor: var(--primary-text-color)
- rangeTextColor: var(--primary-text-color)
- percentageTextColor: var(--primary-text-color)
- icon_sizes: {}
- engine_on_entity: binary_sensor.kona_engine
- row_separator_color: Default
- row_separator_height: 1
- row_separators:
- '0':
- color: transparent
- height: 1
- icon_gap: 20
- horizontalAlignment: center
- verticalAlignment: middle
- '7':
- color: transparent
- '8':
- color: transparent
- height: 1
- icon_gap: 20
- horizontalAlignment: center
- verticalAlignment: middle
- '9':
- color: transparent
- height: 1
- icon_gap: 20
- horizontalAlignment: center
- verticalAlignment: middle
- iconActiveColor: var(--primary-color)
- iconInactiveColor: var(--primary-text-color)
- useFormattedEntities: true
- mainImageHeight: 400px
- chargingImageHeight: 140px
- showTitle: false
- layoutType: single
- useBarGradient: true
- barGradientStops:
- - percentage: 0
- color: '#ff0000'
- - percentage: 100
- color: '#00ff00'
- cardTitleColor: var(--title-color)
- cardBackgroundColor: var(--ha-card-background,var(--card-background-color,#fff))
- barBackgroundColor: var(--primary-background-color)
- barBorderColor: var(--primary-background-color)
- barFillColor: '#c2e7fe'
- limitIndicatorColor: var(--primary-text-color)
- infoTextColor: var(--secondary-text-color)
- show_engine_animation: false
- show_charging_animation: false
- type: custom:ultra-vehicle-card
- battery_level_entity: ''
- battery_range_entity: ''
- fuel_level_entity: sensor.kona_fuel_level
- fuel_range_entity: sensor.kona_fuel_driving_range
- show_battery: true
- show_battery_range: true
- show_fuel: true
- show_fuel_range: true
- engine_on_image_url_type: none
- engine_on_image_url: ''
- engine_on_image_entity: ''
- image_entity: ''
- fuel_level_url: ''
- fuel_range_url: ''
- engine_on_url: ''
- location_url: ''
- mileage_url: ''
- - type: map
- entities:
- - entity: device_tracker.kona_location
- aspect_ratio: '4:3'
- hours_to_show: 24
- default_zoom: 12
- theme_mode: auto
- card_mod:
- style:
- .: ":host {\n /* Define Person State colors. Can be added to\
- \ theme */\n --state-person-home: var(--green-color);\n --state-person-not-home:\
- \ var(--red-color);\n --state-person-zone: var(--blue-color);\n\
- \ --state-person-unknown: var(--grey-color);\n\n /* Set person\
- \ state color */\n --state-person:\n {% if is_state(config.entities[0].entity,\
- \ ['home', 'not_home', 'unknown']) %}\n var(--state-person-{{\
- \ states(config.entities[0].entity) | replace('_', '-') }})\n\
- \ {% else %}\n var(--state-person-zone)\n {% endif %};\n\
- }\nha-card {\n /* Remove default card styling without affecting\
- \ child elements */\n box-shadow: none;\n border-width: 0;\n\
- \ /*border-radius: 0px 0px var(--ha-card-border-radius, 12px)\
- \ var(--ha-card-border-radius, 12px);*/\n transition: all 0s;\n\
- }\nha-icon-button {\n /* Position center button */\n bottom:\
- \ 12px;\n left: 12px !important;\n top: auto !important;\n\
- \n /* Style center button to match Chip */\n color: var(--deep-orange-color)\
- \ !important;\n background: color-mix(in srgb, var(--deep-orange-color)\
- \ 20%, transparent);\n border-radius: var(--mush-chip-border-radius,\
- \ 19px);\n border: var(--ha-card-border-width, 1px) solid var(--ha-card-border-color,\
- \ var(--divider-color, #e0e0e0)) !important;\n}\n"
- ha-map $ ha-entity-marker $: ".marker {\n /* Style person marker\
- \ & adjust position to avoid blocking waypoints */\n border:\
- \ 3px solid var(--state-person) !important;\n border-radius:\
- \ 50% 50% 50% 0px !important;\n transform: rotate(-45deg) translate(50%,\
- \ -50%);\n overflow: visible !important;\n background: var(--state-person)\
- \ !important;\n}\n.entity-picture {\n /* Correct orientation\
- \ of person avatar */\n transform: rotate(45deg);\n border-radius:\
- \ 50%;\n}\n"
- ha-map $: "path:first-child {\n /* Style accuracy radius */\n\
- \ fill: color-mix(in srgb, var(--state-person) 50%, transparent);\n\
- \ stroke-width: 0px;\n}\npath:nth-child(even) {\n /* Styling\
- \ for waypoints */\n stroke: var(--primary-color);\n fill:\
- \ var(--primary-color);\n stroke-width: 4px;\n}\npath:nth-child(odd):not(:first-child)\
- \ {\n /* Styling for lines */\n stroke: var(--primary-color);\n\
- \ stroke-width: 4px;\n}\n.leaflet-control-attribution {\n \
- \ /* Style attribution text */\n background: rgba(var(--rgb-card-background-color),\
- \ 0.2) !important;\n font-size: 8px;\n}\n.leaflet-container\
- \ a {\n /* Set color of zoom icons & attribution text */\n\
- \ color: var(--secondary-text-color);\n}\n.leaflet-control-zoom-in,\n\
- .leaflet-control-zoom-out {\n /* Style zoom buttons like Chips\
- \ */\n border-radius: var(--mush-chip-border-radius, 19px)\
- \ !important;\n padding: 3px;\n background: rgb(var(--rgb-secondary-text-color),\
- \ 0.2) !important;\n margin: 8px 12px 0px;\n border: var(--ha-card-border-width,\
- \ 1px) solid var(--ha-card-border-color, var(--divider-color,\
- \ #e0e0e0)) !important;\n}\n.leaflet-top {\n /* Move zoom buttons\
- \ to bottom of map */\n bottom: 0px !important;\n}\n.leaflet-control-zoom\
- \ {\n /* Allow buttons to be moved */\n position: absolute\
- \ !important;\n\n /* Adjust spacing for border */\n bottom:\
- \ calc(2 * var(--ha-card-border-width, 1px) + 56px);\n\n /*\
- \ Remove extra margin */\n margin: 0px !important;\n\n /*\
- \ Remove zoom control border */\n border: none !important;\n\
- }\n"
- ha-icon-button $ mwc-icon-button $: "button {\n /* Size center\
- \ button to match Chip */\n height: var(--mush-chip-height,\
- \ 36px) !important;\n width: var(--mush-chip-height, 36px)\
- \ !important;\n --mdc-icon-size: 22px;\n}\n"
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#camera-living-room'
- button_type: name
- name: Living Room
- icon: mdi:cctv
- width_desktop: 96%
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.living_room
- - stream: livingroom
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#camera-family-room'
- button_type: name
- name: Family Room
- icon: mdi:cctv
- width_desktop: 96%
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.family_room
- - stream: familyroom
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#camera-garage'
- button_type: name
- name: Garage
- icon: mdi:cctv
- width_desktop: 96%
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.garage
- - stream: garage
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#camera-doorbell'
- button_type: name
- name: Doorbell
- icon: mdi:cctv
- width_desktop: 96%
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.doorbell
- - stream: doorbell
- cards: []
- - title: Living Room
- path: living
- icon: mdi:sofa-single
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Living Room
- - icon: mdi:sofa-single
- - icon_color: orange
- - chips:
- - type: template
- entity: binary_sensor.ecobee_occupancy
- icon: "{%- if is_state(\"binary_sensor.ecobee_motion\", \"on\"\
- ) -%}\n mdi:motion-sensor\n{%- elif is_state(entity, \"on\"\
- ) -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n{%-\
- \ endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.ecobee_motion\",\
- \ \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.ecobee_current_temperature
- - type: entity
- entity: sensor.ecobee_current_humidity
- - type: template
- entity: camera.living_room
- icon: mdi:cctv
- icon_color: '{{ iif(has_value(entity), "cyan", "red") }}'
- tap_action:
- action: navigate
- navigation_path: '#camera-living-room'
- - type: template
- icon: mdi:remote-tv
- icon_color: orange
- tap_action:
- action: navigate
- navigation_path: '#remote'
- hold_action:
- action: perform-action
- perform_action: script.find_remote
- data:
- media_player: media_player.shield_living_room
- - type: template
- icon: mdi:dots-horizontal-circle
- icon_color: blue
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Send Message
- right_button: Send
- right_button_action:
- service: script.media_play
- data:
- media_player: media_player.cast_living_room_speaker
- volume: 80
- content:
- - name: message
- label: Message
- selector:
- select:
- custom_value: true
- options:
- - label: School
- value: Time to go to School!
- - label: Snack
- value: It's snack time!
- - label: Lunch
- value: Hey, come get some lunch.
- - label: Dinner
- value: Head up-stairs, it's time for dinner.
- - label: Breakfast
- value: It's time for breakfast.
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.living_room_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.living_room
- name: Main
- features:
- - type: light-brightness
- - type: tile
- entity: light.living_room_fan_light
- name: Fan Light
- features:
- - type: light-brightness
- - type: tile
- entity: light.living_room_lamp
- name: Lamp
- features:
- - type: light-brightness
- - type: tile
- entity: light.living_room_floor_lamp
- name: Floor Lamp
- features:
- - type: light-brightness
- - type: tile
- entity: light.front_entry
- name: Entry
- vertical: true
- - type: tile
- entity: light.hallway
- name: Hallway
- vertical: true
- - type: tile
- layout_options:
- grid_columns: full
- entity: fan.living_room_ceiling
- name: Fan
- hide_state: true
- features:
- - type: fan-speed
- card_mod:
- style:
- .: "ha-tile-icon {\n --tile-color:\n {% if is_state(config.entity,\
- \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
- \ | int(0) %}\n {% if perc == 33 %} var(--green-color)\n {%\
- \ elif perc == 66 %} var(--yellow-color)\n {% else %} var(--orange-color)\n\
- \ {% endif %}\n {% else %} var(--state-inactive-color)\n \
- \ {% endif %};\n}\nha-state-icon {\n animation:\n {% if is_state(config.entity,\
- \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
- \ | int %}\n {% set base = 'rotation infinite linear' %}\n\
- \ {% if perc == 33 %} 1s {{base}}\n {% elif perc == 66\
- \ %} 0.75s {{base}}\n {% else %} 0.66s {{base}}\n {%\
- \ endif %}\n {% else %} none\n {% endif %};\n}\n@keyframes\
- \ rotation {\n 0% {transform: rotate(0deg);}\n 100% {transform:\
- \ rotate(360deg);}\n}\n"
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Media
- - chips:
- - type: template
- icon: mdi:remote-tv
- icon_color: orange
- tap_action:
- action: navigate
- navigation_path: '#remote'
- hold_action:
- action: perform-action
- perform_action: script.find_remote
- data:
- media_player: media_player.shield_living_room
- - type: custom:decluttering-card
- template: media_card
- variables:
- - entity: media_player.universal_living_room
- visibility:
- - condition: state
- entity: media_player.universal_living_room
- state_not: unavailable
- - condition: state
- entity: media_player.universal_living_room
- state_not: unknown
- - type: custom:mini-media-player
- entity: media_player.cast_living_room_speaker
- name: Google Home
- icon: mdi:dots-horizontal-circle
- info: scroll
- hide:
- power: true
- column_span: 1
- - type: grid
- cards:
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#remote'
- button_type: state
- entity: media_player.universal_living_room
- name: Living Room
- icon: mdi:motion-play-outline
- force_icon: true
- show_state: false
- margin_top_mobile: -56px
- width_desktop: ''
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: androidtv_remote
- variables:
- - remote: remote.androidtv_living_room
- - media: media_player.universal_living_room
- - sources:
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:plex
- - icon_color: black
- - media: media_player.universal_living_room
- - name: Plex
- - source: Plex
- - style: 'background: #d5a004 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:prime-video
- - media: media_player.universal_living_room
- - name: Prime Video
- - source: Prime Video
- - style: 'background: #202d3c !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:smarttube
- - media: media_player.universal_living_room
- - name: SmartTube
- - source: SmartTube
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:crunchyroll
- - media: media_player.universal_living_room
- - name: Crunchyroll
- - source: Crunchyroll
- - style: 'background: #f47521 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:spotify
- - media: media_player.universal_living_room
- - name: Spotify
- - source: Spotify
- - style: 'background: #1db954 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:cartoon-network
- - media: media_player.universal_living_room
- - name: Cartoon Network
- - source: Cartoon Network
- - style: 'background: #000000 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:youtube-kids
- - media: media_player.universal_living_room
- - name: YouTube Kids
- - source: YouTube Kids
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:pbs-kids
- - media: media_player.universal_living_room
- - name: PBS Kids
- - source: PBS Kids
- - style: 'background: #2838c2 !important;'
- - sound_buttons:
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound
- - media: media_player.universal_living_room
- - name: Surround
- - sound_mode: Surround
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:gamepad-variant
- - media: media_player.universal_living_room
- - name: Gaming
- - sound_mode: Gaming
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:home-sound-in-outline
- - media: media_player.universal_living_room
- - name: Adaptive
- - sound_mode: Adaptive Sound
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:soundbar
- - media: media_player.universal_living_room
- - name: Standard
- - sound_mode: Standard
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-template-card
- icon: mdi:weather-night
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Night Mode
- tap_action:
- action: call-service
- service: input_boolean.toggle
- target:
- entity_id: input_boolean.samsung_soundbar_night_mode
- card_mod:
- style:
- .: "ha-card {\n transition: all 0s;\n min-height:\
- \ 145px !important;\n max-height: 145px !important;\n\
- }\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 100px\
- \ !important;\n --shape-color: none !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em\
- \ !important;\n text-align: start;\n margin-top:\
- \ -20px;\n font-weight: 400 !important;\n white-space:\
- \ initial !important;\n}\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
- - type: template
- entity: input_boolean.samsung_soundbar_night_mode
- icon: "{% if is_state(entity, \"on\") %}\n mdi:checkbox-blank-circle\n\
- {% endif %}"
- icon_color: cyan
- card_mod:
- style: "ha-card {\n position: absolute;\n top: 0px;\n\
- \ right: 0px;\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n}\n"
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:mushroom-template-card
- icon: mdi:account-voice
- icon_color: white
- fill_container: true
- layout: vertical
- primary: Voice Enhancer
- tap_action:
- action: call-service
- service: input_boolean.toggle
- target:
- entity_id: input_boolean.samsung_soundbar_voice_enhancer
- card_mod:
- style:
- .: "ha-card {\n transition: all 0s;\n min-height:\
- \ 145px !important;\n max-height: 145px !important;\n\
- }\n"
- mushroom-shape-icon$: ".shape {\n --icon-size: 100px\
- \ !important;\n --shape-color: none !important;\n\
- \ background-color: transparent !important;\n}\n"
- mushroom-state-info$: ".primary {\n font-size: 1.04em\
- \ !important;\n text-align: start;\n margin-top:\
- \ -20px;\n font-weight: 400 !important;\n white-space:\
- \ initial !important;\n}\n"
- - type: custom:mushroom-chips-card
- alignment: end
- chips:
- - type: template
- entity: input_boolean.samsung_soundbar_voice_enhancer
- icon: "{% if is_state(entity, \"on\") %}\n mdi:checkbox-blank-circle\n\
- {% endif %}"
- icon_color: cyan
- card_mod:
- style: "ha-card {\n position: absolute;\n top: 0px;\n\
- \ right: 0px;\n --chip-box-shadow: none;\n --chip-background:\
- \ none;\n --chip-border-width: 0;\n}\n"
- layout_options:
- grid_columns: full
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#camera-living-room'
- button_type: name
- name: Living Room
- icon: mdi:cctv
- width_desktop: 96%
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.living_room
- - stream: livingroom
- cards: []
- - title: Family Room
- path: family
- icon: mdi:gamepad-circle
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Family Room
- - icon: mdi:gamepad-circle
- - icon_color: yellow
- - chips:
- - type: template
- entity: binary_sensor.family_room_occupancy
- icon: "{%- if is_state(\"binary_sensor.family_room_motion\", \"\
- on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity, \"\
- on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.family_room_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.family_room_temperature
- - type: template
- entity: binary_sensor.quest_in_use
- icon: fapro:meta
- icon_color: '{{ iif(is_state(entity, "on"), "blue", "disabled")
- }}'
- tap_action:
- action: more-info
- - type: template
- entity: camera.family_room
- icon: mdi:cctv
- icon_color: '{{ iif(has_value(entity), "cyan", "red") }}'
- tap_action:
- action: navigate
- navigation_path: '#camera-family-room'
- - type: template
- icon: mdi:remote-tv
- icon_color: orange
- tap_action:
- action: navigate
- navigation_path: '#remote'
- - type: template
- icon: mdi:dots-horizontal-circle
- icon_color: blue
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Send Message
- right_button: Send
- right_button_action:
- service: script.media_play
- data:
- media_player: media_player.cast_family_room_speaker
- volume: 90
- content:
- - name: message
- label: Message
- selector:
- select:
- custom_value: true
- options:
- - label: School
- value: Time to go to School!
- - label: Snack
- value: It's snack time!
- - label: Lunch
- value: Hey, come get some lunch.
- - label: Dinner
- value: Head up-stairs, it's time for dinner.
- - label: Breakfast
- value: It's time for breakfast.
- - label: Ethan up-stairs
- value: Hey Ethan, come up-stairs please.
- - label: Emma up-stairs
- value: Hey Emma, come up-stairs please.
- - label: Kids up-stairs
- value: Hey kids, come up-stairs please.
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: script.family_room_game_light_mode
- icon: mdi:light-flood-up
- icon_color: pink
- tap_action:
- action: call-service
- service: script.family_room_game_light_mode
- - type: template
- entity: light.family_room_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.family_room
- name: Main
- features:
- - type: light-brightness
- - type: tile
- entity: light.family_room_lamp
- name: Lamp
- features:
- - type: light-brightness
- - type: tile
- entity: light.stairway
- name: Stairs
- vertical: true
- - type: tile
- entity: light.basement_hallway
- name: Hallway
- features:
- - type: light-brightness
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Media
- - chips:
- - type: template
- icon: mdi:remote-tv
- icon_color: orange
- tap_action:
- action: navigate
- navigation_path: '#remote'
- - type: custom:decluttering-card
- template: media_card
- variables:
- - entity: media_player.universal_family_room
- visibility:
- - condition: state
- entity: media_player.universal_family_room
- state_not: unavailable
- - condition: state
- entity: media_player.universal_family_room
- state_not: unknown
- - type: custom:mini-media-player
- entity: media_player.cast_family_room_speaker
- name: Google Home
- icon: mdi:dots-horizontal-circle
- info: scroll
- hide:
- power: true
- - type: grid
- cards:
- - type: custom:mushroom-title-card
- title: Dreamscreen
- - type: horizontal-stack
- cards:
- - type: custom:mushroom-template-card
- primary: Video
- entity: dreamscreen.family_room
- icon: mdi:television
- icon_color: "{%- if is_state_attr(entity, \"device_mode\", 1) -%}\n\
- \ purple\n{%- else -%}\n grey\n{%- endif -%}"
- tap_action:
- action: call-service
- service: dreamscreen.set_mode
- data:
- entity_id: dreamscreen.family_room
- mode: 1
- target:
- entity_id: dreamscreen.family_room
- - type: custom:mushroom-template-card
- primary: Music
- entity: dreamscreen.family_room
- icon: mdi:music-note
- icon_color: "{%- if is_state_attr(entity, \"device_mode\", 2) -%}\n\
- \ blue\n{%- else -%}\n grey\n{%- endif -%}"
- tap_action:
- action: call-service
- service: dreamscreen.set_mode
- data:
- entity_id: dreamscreen.family_room
- mode: 2
- target:
- entity_id: dreamscreen.family_room
- - type: custom:mushroom-template-card
- primary: Ambient
- entity: dreamscreen.family_room
- icon: mdi:lightbulb-on
- icon_color: "{%- if is_state_attr(entity, \"device_mode\", 3) -%}\n\
- \ amber\n{%- else -%}\n grey\n{%- endif -%}"
- tap_action:
- action: call-service
- service: dreamscreen.set_mode
- data:
- entity_id: dreamscreen.family_room
- mode: 3
- target:
- entity_id: dreamscreen.family_room
- - type: custom:mushroom-template-card
- primary: Power
- entity: dreamscreen.family_room
- icon: mdi:power
- icon_color: red
- tap_action:
- action: call-service
- service: dreamscreen.set_mode
- data:
- entity_id: dreamscreen.family_room
- mode: 0
- target:
- entity_id: dreamscreen.family_room
- visibility:
- - condition: state
- entity: dreamscreen.family_room
- state: 'on'
- layout_options:
- grid_columns: full
- - type: conditional
- conditions:
- - entity: sensor.dreamscreen_family_room_mode
- state: Ambient
- card:
- type: custom:mushroom-select-card
- entity: input_select.dreamscreen_family_room_scene
- name: Ambient Scene
- layout: horizontal
- secondary_info: none
- icon_color: amber
- - type: grid
- cards:
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#remote'
- button_type: state
- entity: media_player.universal_family_room
- name: Family Room
- icon: mdi:motion-play-outline
- force_icon: true
- show_state: false
- margin_top_mobile: -56px
- width_desktop: ''
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: androidtv_remote
- variables:
- - remote: remote.androidtv_family_room
- - media: media_player.universal_family_room
- - sources:
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:plex
- - icon_color: black
- - media: media_player.universal_family_room
- - name: Plex
- - source: Plex
- - style: 'background: #d5a004 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:prime-video
- - media: media_player.universal_family_room
- - name: Prime Video
- - source: Prime Video
- - style: 'background: #202d3c !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:smarttube
- - media: media_player.universal_family_room
- - name: SmartTube
- - source: SmartTube
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:crunchyroll
- - media: media_player.universal_family_room
- - name: Crunchyroll
- - source: Crunchyroll
- - style: 'background: #f47521 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:spotify
- - media: media_player.universal_family_room
- - name: Spotify
- - source: Spotify
- - style: 'background: #1db954 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:cartoon-network
- - media: media_player.universal_family_room
- - name: Cartoon Network
- - source: Cartoon Network
- - style: 'background: #000000 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:youtube-kids
- - media: media_player.universal_family_room
- - name: YouTube Kids
- - source: YouTube Kids
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:pbs-kids
- - media: media_player.universal_family_room
- - name: PBS Kids
- - source: PBS Kids
- - style: 'background: #2838c2 !important;'
- - harmony_sources:
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:motion-play-outline
- - remote: remote.harmony_family_room
- - name: Shield
- - activity: Shield TV
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:desktop-tower
- - remote: remote.harmony_family_room
- - name: PC
- - activity: Computer
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: fapro:ps4
- - remote: remote.harmony_family_room
- - name: PS4
- - activity: PS4
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: fapro:ps3
- - remote: remote.harmony_family_room
- - name: PS3
- - activity: PS3
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:microsoft-xbox
- - remote: remote.harmony_family_room
- - name: XBox
- - activity: XBox
- - type: custom:decluttering-card
- template: androidtv_harmony_source
- variables:
- - icon: mdi:nintendo-switch
- - remote: remote.harmony_family_room
- - name: Switch
- - activity: Switch
- - sound_buttons:
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound-5-1
- - media: media_player.universal_family_room
- - name: Direct
- - sound_mode: Direct
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound-2-1
- - media: media_player.universal_family_room
- - name: Surround
- - sound_mode: Dolby Digital
- - type: custom:decluttering-card
- template: androidtv_remote_sound_mode
- variables:
- - icon: mdi:surround-sound
- - media: media_player.universal_family_room
- - name: Multi-Channel
- - sound_mode: All Zone Stereo
- layout_options:
- grid_columns: full
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#camera-family-room'
- button_type: name
- name: Family Room
- icon: mdi:cctv
- width_desktop: 96%
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.family_room
- - stream: familyroom
- cards: []
- - title: Theater Room
- path: theater
- icon: mdi:projector
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Theater Room
- - icon: mdi:projector
- - icon_color: amber
- - chips:
- - type: template
- entity: binary_sensor.theater_room_occupancy
- icon: "{%- if is_state(\"binary_sensor.theater_room_motion\",\
- \ \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity,\
- \ \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.theater_room_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.theater_room_temperature
- layout_options:
- grid_columns: full
- column_span: 2
- cards: []
- - title: Josh's Office
- path: josh-office
- icon: mdi:chair-rolling
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Josh's Office
- - icon: mdi:chair-rolling
- - icon_color: blue
- - chips:
- - type: template
- entity: binary_sensor.apollo_msr_1_office_radar_target
- icon: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
- , \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity,\
- \ \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.joshua_office_temperature
- - type: entity
- entity: sensor.apollo_msr_1_office_co2
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: entity
- entity: switch.adaptive_lighting_adapt_brightness_office
- icon: mdi:brightness-auto
- icon_color: amber
- content_info: none
- tap_action:
- action: toggle
- - type: entity
- entity: switch.adaptive_lighting_adapt_color_office
- icon: mdi:palette
- icon_color: pink
- content_info: none
- tap_action:
- action: toggle
- - type: entity
- entity: switch.adaptive_lighting_sleep_mode_office
- icon: mdi:sleep
- icon_color: cyan
- content_info: none
- tap_action:
- action: toggle
- - type: entity
- entity: switch.adaptive_lighting_office
- icon_color: green
- content_info: none
- tap_action:
- action: toggle
- - type: template
- entity: light.joshua_office_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.joshua_office
- name: Main
- features:
- - type: light-brightness
- state_content:
- - brightness
- - color_temp_kelvin
- - type: tile
- entity: light.joshua_office_lamp
- name: Lamp
- features:
- - type: light-brightness
- state_content:
- - brightness
- - color_temp_kelvin
- - type: tile
- entity: light.wled_joshua_office_desk
- name: Desk
- features:
- - type: light-brightness
- state_content:
- - brightness
- - effect
- - type: tile
- entity: light.joshua_office_shelf_led
- name: Shelf
- vertical: true
- - type: custom:mini-media-player
- entity: media_player.cast_office_speaker
- name: Google Home
- icon: mdi:dots-horizontal-circle
- info: scroll
- hide:
- power: true
- cards: []
- - title: Kitchen
- path: kitchen
- icon: mdi:fridge-variant
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Kitchen
- - icon: mdi:fridge-variant
- - icon_color: cyan
- - chips:
- - type: template
- entity: binary_sensor.kitchen_occupancy
- icon: "{%- if is_state(\"binary_sensor.kitchen_motion\", \"on\"\
- ) -%}\n mdi:motion-sensor\n{%- elif is_state(entity, \"on\"\
- ) -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n{%-\
- \ endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.kitchen_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.kitchen_temperature
- - type: entity
- entity: sensor.airgradient_kitchen_co2
- - type: entity
- entity: sensor.airgradient_kitchen_pm_2_5_aqi
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.kitchen_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.kitchen
- name: Main
- features:
- - type: light-brightness
- layout_options:
- grid_columns: full
- - type: tile
- entity: light.kitchen_island
- name: Island
- features:
- - type: light-brightness
- - type: tile
- entity: light.dining_room
- name: Dining
- features:
- - type: light-brightness
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Oven
- - chips:
- - type: entity
- entity: switch.ge_oven_light
- - type: custom:expander-card
- title-card:
- type: custom:mushroom-template-card
- entity: water_heater.ge_oven
- multiline_secondary: false
- primary: "{% if is_state_attr(entity, 'operation_mode', 'Off') %}\n\
- \ Oven\n{% else %}\n {{ state_attr(entity, 'operation_mode') }}\
- \ ⸱ {{ float(state_attr('water_heater.ge_oven', 'temperature'), 0)\
- \ | round(0) }}°F\n{% endif %}"
- secondary: "{% if is_state_attr(entity,'operation_mode', 'Off') %}\n\
- \ Off\n{% else %}\n Current Temperature - {{ float(state_attr(entity,\
- \ 'current_temperature')) | round(0) }}°F\n{% endif %}"
- icon: mdi:stove
- icon_color: "{% if is_state_attr('water_heater.ge_oven', 'operation_mode',\
- \ 'Off') %}\n grey\n{% else %}\n red\n{% endif %}\n"
- tap_action:
- action: more-info
- card_mod:
- style:
- .: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- mushroom-shape-icon$: "{%- if has_value(\"sensor.ge_oven_kitchen_timer\"\
- )\n and has_value(\"sensor.ge_oven_timer_duration\")\n and not\
- \ is_state(\"sensor.ge_oven_timer_duration\", \"Off\")\n-%} {%-\
- \ set entity_remain = states(\"sensor.ge_oven_kitchen_timer\"\
- ) -%} {%- set entity_duration = states(\"sensor.ge_oven_timer_duration\"\
- ) -%} {%- set remaining =\n (int(entity_remain.split(\":\")[0],\
- \ 0) * 60)\n + (int(entity_remain.split(\":\")[1], 0)) -%}\n\
- {%- set duration =\n (int(entity_duration.split(\":\")[0], 0)\
- \ * 60)\n + (int(entity_duration.split(\":\")[1], 0))\n-%}\
- \ .shape {\n /* Radial progress bar */\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--purple-color)\
- \ {{ ((duration - remaining) / duration * 100) | round() }}% 0%,\
- \ var(--card-background-color) 0% 100%);\n} .shape:after {\n \
- \ /* Add back icon shape */\n content: \"\";\n height: 100%;\n\
- \ width: 100%;\n position: absolute;\n border-radius: var(--icon-border-radius);\n\
- \ background: var(--shape-color);\n} {%- endif -%}\n"
- padding: null
- cards:
- - type: grid
- columns: 6
- square: false
- cards:
- - type: custom:mushroom-template-card
- icon: mdi:power
- icon_color: "{% if is_state_attr('water_heater.ge_oven', 'operation_mode',\
- \ 'Off') %}\n grey\n{% else %}\n red\n{% endif %}\n"
- layout: vertical
- primary: 'Off'
- tap_action:
- action: call-service
- service: water_heater.set_operation_mode
- service_data:
- entity_id: water_heater.ge_oven
- operation_mode: 'Off'
- card_mod:
- style:
- mushroom-state-info$: ".primary {\n position: relative;\n\
- \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
- \ 12px;\n}\n"
- .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
- \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
- \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
- \ {\n --icon-symbol-size: 18px;\n}\n"
- - type: custom:mushroom-template-card
- icon: mdi:thermometer
- icon_color: "{% if not\n is_state_attr('water_heater.ge_oven',\
- \ 'operation_mode', 'Off') and\n is_state_attr('water_heater.ge_oven',\
- \ 'temperature', 250)\n%}\n red\n{% else %}\n grey\n{% endif\
- \ %}\n"
- layout: vertical
- primary: 250°F
- tap_action:
- action: call-service
- service: water_heater.set_temperature
- data:
- temperature: 250
- operation_mode: Bake
- target:
- entity_id: water_heater.ge_oven
- card_mod:
- style:
- mushroom-state-info$: ".primary {\n position: relative;\n\
- \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
- \ 12px;\n}\n"
- .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
- \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
- \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
- \ {\n --icon-symbol-size: 18px;\n}\n"
- - type: custom:mushroom-template-card
- icon: mdi:thermometer
- icon_color: "{% if not\n is_state_attr('water_heater.ge_oven','operation_mode','Off')\
- \ and\n is_state_attr('water_heater.ge_oven','temperature',\
- \ 350)\n%}\n red\n{% else %}\n grey\n{% endif %}\n"
- layout: vertical
- primary: 350°F
- tap_action:
- action: call-service
- service: water_heater.set_temperature
- data:
- temperature: 350
- operation_mode: Bake
- target:
- entity_id: water_heater.ge_oven
- card_mod:
- style:
- mushroom-state-info$: ".primary {\n position: relative;\n\
- \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
- \ 12px;\n}\n"
- .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
- \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
- \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
- \ {\n --icon-symbol-size: 18px;\n}\n"
- - type: custom:mushroom-template-card
- icon: mdi:thermometer
- icon_color: "{% if not is_state_attr('water_heater.ge_oven', 'operation_mode',\
- \ 'Off') and is_state_attr('water_heater.ge_oven', 'temperature',\
- \ 375) %}\n red\n{% else %}\n grey\n{% endif %}\n"
- layout: vertical
- primary: 375°F
- tap_action:
- action: call-service
- service: water_heater.set_temperature
- data:
- temperature: 375
- operation_mode: Bake
- target:
- entity_id: water_heater.ge_oven
- card_mod:
- style:
- mushroom-state-info$: ".primary {\n position: relative;\n\
- \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
- \ 12px;\n}\n"
- .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
- \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
- \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
- \ {\n --icon-symbol-size: 18px;\n}\n"
- - type: custom:mushroom-template-card
- icon: mdi:thermometer
- icon_color: "{% if not is_state_attr('water_heater.ge_oven','operation_mode','Off')\
- \ and is_state_attr('water_heater.ge_oven','temperature', 400)\
- \ %}\n red\n{% else %}\n grey\n{% endif %}\n"
- layout: vertical
- primary: 400°F
- tap_action:
- action: call-service
- service: water_heater.set_temperature
- data:
- temperature: 400
- operation_mode: Bake
- target:
- entity_id: water_heater.ge_oven
- card_mod:
- style:
- mushroom-state-info$: ".primary {\n position: relative;\n\
- \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
- \ 12px;\n}\n"
- .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
- \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
- \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
- \ {\n --icon-symbol-size: 18px;\n}\n"
- - type: custom:mushroom-template-card
- icon: mdi:thermometer
- icon_color: "{% if not is_state_attr('water_heater.ge_oven','operation_mode','Off')\
- \ and is_state_attr('water_heater.ge_oven','temperature', 425)\
- \ %}\n red\n{% else %}\n grey\n{% endif %}\n"
- layout: vertical
- primary: 425°F
- tap_action:
- action: call-service
- service: water_heater.set_temperature
- data:
- temperature: 425
- operation_mode: Bake
- target:
- entity_id: water_heater.ge_oven
- card_mod:
- style:
- mushroom-state-info$: ".primary {\n position: relative;\n\
- \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
- \ 12px;\n}\n"
- .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
- \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
- \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
- \ {\n --icon-symbol-size: 18px;\n}\n"
- - type: custom:mushroom-select-card
- entity: select.ge_oven_operation
- name: Mode
- icon: mdi:heating-coil
- secondary_info: none
- layout: horizontal
- tap_action:
- action: more-info
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: 33% 33% 33%
- grid-template-rows: auto
- grid-template-areas: '"left center right"'
- reflow: true
- margin: 0
- padding: 0
- cards:
- - type: custom:mushroom-template-card
- entity: binary_sensor.ge_oven_cooktop_status_left_rear_on
- secondary: Left Rear
- multiline_secondary: true
- icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
- {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
- \ -%}\n disabled\n{%- endif -%}"
- layout: vertical
- tap_action:
- action: more-info
- card_mod:
- style:
- .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
- \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
- \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_left_rear_power_pct\"\
- \ %}\n{% if has_value(power) and states(power) not in [\"\
- Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
- {{ states(power) }}%\";\n position: absolute;\n font-weight:\
- \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
- }\n{% endif %}\n"
- mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
- \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
- \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
- \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
- \ 0 0 1px 15px transparent; }\n}\n"
- - type: custom:mushroom-template-card
- entity: binary_sensor.ge_oven_cooktop_status_center_rear_on
- secondary: Warmer
- multiline_secondary: true
- icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
- {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
- \ -%}\n disabled\n{%- endif -%}"
- layout: vertical
- tap_action:
- action: more-info
- card_mod:
- style:
- .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
- \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
- \ margin-top: 10px;\n}\n"
- mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
- \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
- \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
- \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
- \ 0 0 1px 15px transparent; }\n}\n"
- - type: custom:mushroom-template-card
- entity: binary_sensor.ge_oven_cooktop_status_right_rear_on
- secondary: Right Rear
- multiline_secondary: true
- icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
- {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
- \ -%}\n disabled\n{%- endif -%}"
- layout: vertical
- tap_action:
- action: more-info
- card_mod:
- style:
- .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
- \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
- \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_right_rear_power_pct\"\
- \ %}\n{% if has_value(power) and states(power) not in [\"\
- Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
- {{ states(power) }}%\";\n position: absolute;\n font-weight:\
- \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
- }\n{% endif %}\n"
- mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
- \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
- \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
- \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
- \ 0 0 1px 15px transparent; }\n}\n"
- - type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: 33% 33% 33%
- grid-template-rows: auto
- grid-template-areas: '"left . right"'
- reflow: true
- margin: 0
- padding: 0
- cards:
- - type: custom:mushroom-template-card
- view_layout:
- grid-area: left
- entity: binary_sensor.ge_oven_cooktop_status_left_front_on
- secondary: Left Front
- multiline_secondary: true
- icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
- {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
- \ -%}\n disabled\n{%- endif -%}"
- layout: vertical
- tap_action:
- action: more-info
- card_mod:
- style:
- .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
- \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
- \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_left_front_power_pct\"\
- \ %}\n{% if has_value(power) and states(power) not in [\"\
- Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
- {{ states(power) }}%\";\n position: absolute;\n font-weight:\
- \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
- }\n{% endif %}\n"
- mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
- \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
- \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
- \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
- \ 0 0 1px 15px transparent; }\n}\n"
- - type: custom:mushroom-template-card
- view_layout:
- grid-area: right
- entity: binary_sensor.ge_oven_cooktop_status_right_front_on
- secondary: Right Front
- multiline_secondary: true
- icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
- {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
- \ -%}\n disabled\n{%- endif -%}"
- layout: vertical
- tap_action:
- action: more-info
- card_mod:
- style:
- .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
- \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
- \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_right_front_power_pct\"\
- \ %}\n{% if has_value(power) and states(power) not in [\"\
- Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
- {{ states(power) }}%\";\n position: absolute;\n font-weight:\
- \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
- }\n{% endif %}\n"
- mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
- \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
- \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
- \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
- \ 0 0 1px 15px transparent; }\n}\n"
- - type: grid
- cards:
- - type: custom:mushroom-title-card
- title: Luna
- - type: custom:expander-card
- gap: 0em
- padding: 0em
- child-padding: 0.5em
- title-card-padding: 0em
- title-card:
- type: custom:mushroom-template-card
- primary: Feed Luna
- secondary: Press and Hold to Dispense
- entity: script.feeder_start
- icon: mdi:cat
- icon_color: "{%- if is_state(entity, \"on\") -%}\n green\n{%- else\
- \ -%}\n grey\n{%- endif -%}"
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: script.feeder_start
- data:
- feeder: Cat Feeder
- card_mod:
- style:
- .: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- mushroom-shape-icon$: "{% set level = \"sensor.cat_feeder_food_level\"\
- \ %} {% from \"util.jinja\" import battery_color %} .shape {\n\
- \ /* Radial progress bar */\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--{{\
- \ battery_color(level) }}-color) {{ states(level) }}% 0%, var(--card-background-color)\
- \ 0% 100%\n );\n} .shape:after {\n /* Add back icon shape */\n\
- \ content: \"\";\n height: 100%;\n width: 100%;\n position:\
- \ absolute;\n border-radius: var(--icon-border-radius);\n background:\
- \ var(--shape-color);\n}"
- cards:
- - type: custom:mushroom-number-card
- entity: number.cat_feeder_serving_size
- name: Servings
- icon: mdi:location-enter
- secondary_info: none
- layout: horizontal
- display_mode: buttons
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:mushroom-lock-card
- entity: lock.cat_feeder_child_lock
- name: Local Control
- fill_container: false
- layout: horizontal
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: markdown
- title: Schedule
- content: "{%- if has_value(\"sensor.cat_feeder_schedule\") -%}\n{%-\
- \ set schedules = states(\"sensor.cat_feeder_schedule\") | replace(\"\
- '\", '\"') | from_json -%}\n{%- for schedule in schedules -%}\n\
- \ {{ schedule.size }} portions at {{ as_timestamp(today_at(schedule.hour\
- \ ~ \":\" ~ schedule.minute)) | timestamp_custom(\"%-I:%M %p\",\
- \ True) }}\n{% endfor -%}\n{%- endif -%}"
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:bar-card
- card_mod:
- style: "ha-card {\n background: none;\n border-width: 0;\n}\n\
- #states {\n padding: 8px 2px;\n}\nbar-card-name,\nbar-card-value\
- \ {\n font-weight: 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
- }\nbar-card-backgroundbar {\n background-color: var(--primary-background-color);\n\
- }\n"
- name: Food Level
- entities:
- - entity: sensor.cat_feeder_food_level
- animation:
- state: 'on'
- positions:
- indicator: inside
- icon: inside
- height: 24px
- min: 0
- max: 100
- decimal: 1
- severity:
- - color: var(--red-color)
- from: 0
- to: 10
- - color: var(--orange-color)
- from: 10
- to: 20
- - color: var(--amber-color)
- from: 20
- to: 40
- - color: var(--light-green-color)
- from: 40
- to: 70
- - color: var(--green-color)
- from: 70
- to: 100
- - type: custom:apexcharts-card
- apex_config:
- chart:
- foreColor: '#7B7B7B'
- toolbar:
- show: false
- grid:
- borderColor: '#7B7B7B'
- xaxis:
- tooltip:
- enabled: false
- experimental:
- color_threshold: true
- header:
- show: false
- all_series_config:
- extend_to: now
- stroke_width: 2
- type: line
- group_by:
- func: min
- duration: 1hour
- color_threshold:
- - value: 0
- color: '#f44336'
- - value: 10
- color: '#ff9800'
- - value: 20
- color: '#ffc107'
- - value: 40
- color: '#8bc34a'
- - value: 70
- color: '#4caf50'
- span:
- end: minute
- graph_span: 10d
- yaxis:
- - decimals: 0
- min: ~0
- max: ~100
- apex_config:
- tickAmount: 4
- title:
- text: '%'
- series:
- - entity: sensor.cat_feeder_food_level
- name: Food Level
- color: rgb(158,158,158)
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:mushroom-template-card
- entity: sensor.cat_feeder_total_weight
- secondary: Press and hold to reset
- primary: Reset Food Level
- icon: mdi:progress-upload
- icon_color: green
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: utility_meter.calibrate
- target:
- entity_id: sensor.cat_feeder_total_weight
- data:
- value: '0'
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- cards: []
- - title: Main Bedroom
- path: main-bed
- icon: mdi:bed-king
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Main Bedroom
- - icon: mdi:bed-king
- - icon_color: deep-purple
- - chips:
- - type: template
- entity: binary_sensor.main_bedroom_occupancy
- icon: "{%- if is_state(\"binary_sensor.main_bedroom_motion\",\
- \ \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity,\
- \ \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.main_bedroom_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.main_bedroom_temperature
- - type: entity
- entity: sensor.main_bathroom_sensor_temperature
- - type: template
- icon: mdi:remote-tv
- icon_color: orange
- tap_action:
- action: navigate
- navigation_path: '#remote'
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.main_bedroom_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.main_bedroom
- name: Main
- features:
- - type: light-brightness
- layout_options:
- grid_columns: full
- - features:
- - type: light-brightness
- type: tile
- entity: light.main_bedroom_fan_light
- name: Fan Light
- - type: tile
- entity: light.main_bedroom_floor_lamp
- name: Floor Lamp
- features:
- - type: light-brightness
- - features:
- - type: fan-speed
- type: tile
- entity: fan.main_bedroom_ceiling
- name: Fan
- hide_state: true
- card_mod:
- style:
- .: "ha-tile-icon {\n --tile-color:\n {% if is_state(config.entity,\
- \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
- \ | int(0) %}\n {% if perc == 33 %} var(--green-color)\n {%\
- \ elif perc == 66 %} var(--yellow-color)\n {% else %} var(--orange-color)\n\
- \ {% endif %}\n {% else %} var(--state-inactive-color)\n \
- \ {% endif %};\n}\nha-state-icon {\n animation:\n {% if is_state(config.entity,\
- \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
- \ | int %}\n {% set base = 'rotation infinite linear' %}\n\
- \ {% if perc == 33 %} 1s {{base}}\n {% elif perc == 66\
- \ %} 0.75s {{base}}\n {% else %} 0.66s {{base}}\n {%\
- \ endif %}\n {% else %} none\n {% endif %};\n}\n@keyframes\
- \ rotation {\n 0% {transform: rotate(0deg);}\n 100% {transform:\
- \ rotate(360deg);}\n}\n"
- layout_options:
- grid_columns: full
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Media
- - chips:
- - type: template
- icon: mdi:remote-tv
- icon_color: orange
- tap_action:
- action: navigate
- navigation_path: '#remote'
- - type: custom:decluttering-card
- template: media_card
- variables:
- - entity: media_player.universal_main_bedroom
- visibility:
- - condition: state
- entity: media_player.universal_main_bedroom
- state_not: unavailable
- - condition: state
- entity: media_player.universal_main_bedroom
- state_not: unknown
- - type: grid
- cards:
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#remote'
- button_type: state
- entity: media_player.universal_main_bedroom
- name: Main Bedroom
- icon: mdi:motion-play-outline
- force_icon: true
- show_state: false
- margin_top_mobile: -56px
- width_desktop: ''
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: androidtv_remote
- variables:
- - remote: remote.androidtv_main_bedroom
- - media: media_player.universal_main_bedroom
- - sources:
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:plex
- - icon_color: black
- - media: media_player.universal_main_bedroom
- - name: Plex
- - source: Plex
- - style: 'background: #d5a004 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:prime-video
- - media: media_player.universal_main_bedroom
- - name: Prime Video
- - source: Prime Video
- - style: 'background: #202d3c !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:smarttube
- - media: media_player.universal_main_bedroom
- - name: SmartTube
- - source: SmartTube
- - style: 'background: #bd2424 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: fapro:crunchyroll
- - media: media_player.universal_main_bedroom
- - name: Crunchyroll
- - source: Crunchyroll
- - style: 'background: #f47521 !important;'
- - type: custom:decluttering-card
- template: androidtv_remote_source
- variables:
- - icon: mdi:spotify
- - media: media_player.universal_main_bedroom
- - name: Spotify
- - source: Spotify
- - style: 'background: #1db954 !important;'
- layout_options:
- grid_columns: full
- cards: []
- - title: Ethan
- path: ethan
- icon: mdi:robot
- type: sections
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Ethan
- - icon: mdi:robot
- - icon_color: green
- - chips:
- - type: template
- entity: binary_sensor.ethan_bedroom_occupancy
- icon: "{%- if is_state(\"binary_sensor.ethan_bedroom_motion\"\
- , \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity,\
- \ \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.ethan_bedroom_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.ethan_bedroom_temperature
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.ethan_bedroom_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.ethan_bedroom
- name: Main
- features:
- - type: light-brightness
- layout_options:
- grid_columns: full
- - type: grid
- cards:
- - type: custom:mushroom-title-card
- title: Nebula Projector
- - type: tile
- entity: switch.nebula_projector_ethan_main_switch
- name: Main
- layout_options:
- grid_columns: full
- - type: vertical-stack
- cards:
- - type: tile
- entity: select.nebula_projector_ethan_scene
- name: Scene
- icon: mdi:play-box-outline
- hide_state: true
- features:
- - type: select-options
- - type: grid
- square: false
- columns: 3
- cards:
- - type: tile
- entity: light.nebula_projector_ethan_light
- icon: mdi:crystal-ball
- name: Light
- features:
- - type: light-brightness
- - type: tile
- entity: light.nebula_projector_ethan_laser
- name: Laser
- color: green
- features:
- - type: light-brightness
- - type: tile
- entity: fan.nebula_projector_ethan_motor
- name: Motor
- features:
- - type: fan-speed
- visibility:
- - condition: state
- entity: switch.nebula_projector_ethan_main_switch
- state: 'on'
- max_columns: 2
- cards: []
- - title: Emma
- path: emma
- icon: mdi:unicorn-variant
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Emma
- - icon: mdi:unicorn-variant
- - icon_color: purple
- - chips:
- - type: template
- entity: binary_sensor.emma_bedroom_occupancy
- icon: "{%- if is_state(\"binary_sensor.emma_bedroom_motion\",\
- \ \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity,\
- \ \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.emma_bedroom_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.emma_bedroom_temperature
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.emma_bedroom_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.emma_bedroom
- name: Main
- features:
- - type: light-brightness
- layout_options:
- grid_columns: full
- - type: grid
- cards:
- - type: custom:mushroom-title-card
- title: Nebula Projector
- - type: tile
- entity: switch.nebula_projector_emma_main_switch
- name: Main
- layout_options:
- grid_columns: full
- - type: vertical-stack
- cards:
- - type: tile
- entity: select.nebula_projector_emma_scene
- name: Scene
- icon: mdi:play-box-outline
- hide_state: true
- features:
- - type: select-options
- - type: grid
- square: false
- columns: 3
- cards:
- - type: tile
- entity: light.nebula_projector_emma_light
- icon: mdi:crystal-ball
- name: Light
- features:
- - type: light-brightness
- - type: tile
- entity: light.nebula_projector_emma_laser
- name: Laser
- color: green
- features:
- - type: light-brightness
- - type: tile
- entity: fan.nebula_projector_emma_motor
- name: Motor
- features:
- - type: fan-speed
- visibility:
- - condition: state
- entity: switch.nebula_projector_emma_main_switch
- state: 'on'
- cards: []
- - title: Amy's Office
- path: amy-office
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Amy's Office
- - icon: mdi:skull
- - icon_color: red
- - chips:
- - type: template
- entity: binary_sensor.amy_office_occupancy
- icon: "{%- if is_state(\"binary_sensor.amy_office_motion\", \"\
- on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity, \"\
- on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.amy_office_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: none
- - type: entity
- entity: sensor.amy_office_temperature
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: entity
- entity: switch.adaptive_lighting_adapt_brightness_amy_office
- icon: mdi:brightness-auto
- icon_color: amber
- content_info: none
- tap_action:
- action: toggle
- - type: entity
- entity: switch.adaptive_lighting_adapt_color_amy_office
- icon: mdi:palette
- icon_color: pink
- content_info: none
- tap_action:
- action: toggle
- - type: entity
- entity: switch.adaptive_lighting_sleep_mode_amy_office
- icon: mdi:sleep
- icon_color: cyan
- content_info: none
- tap_action:
- action: toggle
- - type: entity
- entity: switch.adaptive_lighting_amy_office
- icon_color: green
- content_info: none
- tap_action:
- action: toggle
- - type: template
- entity: light.amy_office_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.amy_office
- name: Main
- features:
- - type: light-brightness
- layout_options:
- grid_columns: full
- icon: mdi:skull
- cards: []
- - title: Garage
- path: garage
- icon: mdi:garage-variant
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Garage
- - icon: '{% if is_state(''cover.garage_door'', ''open'') %}mdi:garage-open-variant{%
- elif states(''cover.garage_door'') in [''opening'', ''closing'']
- %}mdi:garage-alert-variant{% else %}mdi:garage-variant{% endif %}'
- - icon_color: blue-grey
- - chips:
- - type: template
- entity: binary_sensor.garage_multisensor_motion_detection
- icon: '{{ iif(is_state(entity, "on"), "mdi:motion-sensor", "mdi:motion-sensor-off")
- }}'
- icon_color: '{{ iif(is_state(entity, "on"), "orange", "disabled")
- }}'
- tap_action:
- action: more-info
- - type: template
- entity: sensor.garage_multisensor_air_temperature
- content: '{{ int(states(entity), 0) }} °F'
- icon: mdi:thermometer
- tap_action:
- action: more-info
- - type: template
- entity: sensor.garage_multisensor_humidity
- content: '{{ int(states(entity), 0) }} %'
- icon: mdi:water-percent
- tap_action:
- action: more-info
- - type: template
- entity: sensor.garage_multisensor_illuminance
- content: '{{ int(states(entity), 0) }} lx'
- icon: mdi:brightness-6
- tap_action:
- action: more-info
- - type: template
- entity: camera.garage
- icon: mdi:cctv
- icon_color: '{{ iif(has_value(entity), "cyan", "red") }}'
- tap_action:
- action: navigate
- navigation_path: '#camera-garage'
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.garage_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.garage
- name: Main
- - type: tile
- entity: light.garage_door_light
- name: Opener
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Door
- - chips:
- - type: template
- entity: lock.garage_door_lock_remotes
- content: Remotes
- icon: mdi:{{ iif(is_state(entity, "locked"), "lock", "lock-open")
- }}
- icon_color: '{{ iif(is_state(entity, "locked"), "red", "green")
- }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: cover.garage_door
- color: green
- features:
- - type: cover-open-close
- - type: cover-position
- state_content:
- - state
- - last-changed
- layout_options:
- grid_columns: full
- - type: grid
- cards:
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#camera-garage'
- button_type: name
- name: Garage
- icon: mdi:cctv
- width_desktop: 96%
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.garage
- - stream: garage
- cards: []
- - title: Outside
- path: outside
- icon: mdi:spa
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Outside
- - icon: mdi:spa
- - icon_color: light-green
- - chips:
- - type: template
- entity: binary_sensor.doorbell_person_occupancy
- icon: "{%- if is_state(\"binary_sensor.doorbell_camera_motion\"\
- , \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity,\
- \ \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
- {%- endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.doorbell_camera_motion\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: more-info
- - type: template
- entity: sensor.ecowitt_outdoor_temperature
- icon: mdi:thermometer
- content: '{{ states(entity) | round }} {{ state_attr(entity, "unit_of_measurement")
- }}'
- tap_action:
- action: more-info
- hold_action:
- action: more-info
- - type: entity
- entity: sensor.ecowitt_humidity
- - type: entity
- entity: sensor.ecowitt_solar_lux
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.outside_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.outside_entry
- name: Front Entry
- features:
- - type: light-brightness
- - features:
- - type: light-brightness
- type: tile
- entity: light.outside_garage
- name: Garage Front
- - type: tile
- entity: light.outside_side
- name: Side
- - type: tile
- entity: light.outside_back
- name: Back
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Sprinklers
- - chips:
- - type: template
- entity: opensprinkler.stop
- icon: mdi:stop
- icon_color: "{% if is_state(\"binary_sensor.sprinkler_zones\"\
- , \"on\") %}\n red\n{% else %}\n disabled\n{% endif %}\n"
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: opensprinkler.stop
- - type: template
- entity: opensprinkler.pause_stations
- icon: mdi:pause
- icon_color: "{% if is_state(\"binary_sensor.sprinkler_zones\"\
- , \"on\") %}\n yellow\n{% elif is_state(\"binary_sensor.opensprinkler_paused\"\
- , \"on\") %}\n green\n{% else %}\n disabled\n{% endif %}\n"
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: opensprinkler.pause_stations
- - type: template
- entity: switch.opensprinkler_enabled
- icon: mdi:sprinkler
- icon_color: '{{ iif(is_state(entity, "on"), "green", "disabled")
- }}
-
- '
- tap_action:
- action: none
- hold_action:
- action: toggle
- - type: custom:opensprinkler-card
- device: c2a83f52c36a3795327fad03d6c568e1
- name: OpenSprinkler
- extra_entities:
- - binary_sensor.opensprinkler_rain_delay_active
- - sensor.opensprinkler_rain_delay_stop_time
- cards: []
- - title: Utility
- icon: mdi:progress-wrench
- path: utility
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Utility
- - icon: mdi:progress-wrench
- - icon_color: brown
- - chips:
- - type: entity
- entity: sensor.water_main_valve_air_temperature
- layout_options:
- grid_columns: full
- column_span: 2
- - type: grid
- cards:
- - type: custom:mushroom-title-card
- title: Dustin Mopman
- - type: custom:xiaomi-vacuum-map-card
- entity: vacuum.dustin_mopman
- map_source:
- camera: camera.dustin_mopman_map
- calibration_source:
- camera: true
- vacuum_platform: Tasshack/dreame-vacuum
- map_modes:
- - template: vacuum_clean_zone
- - template: vacuum_clean_point
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - template: vacuum_clean_segment
- predefined_selections:
- - id: '1'
- icon:
- name: mdi:home-outline
- x: 1300
- y: -100
- label:
- text: Family Room
- x: 1300
- y: -100
- offset_y: 35
- outline:
- - - -3000
- - -3400
- - - 5650
- - -3400
- - - 5650
- - 2800
- - - -3000
- - 2800
- - id: '3'
- icon:
- name: mdi:home-outline
- x: -2600
- y: -2250
- label:
- text: Under Stairs
- x: -2600
- y: -2250
- offset_y: 35
- outline:
- - - -3000
- - -3850
- - - -2100
- - -3850
- - - -2100
- - -750
- - - -3000
- - -750
- - id: '4'
- icon:
- name: mdi:foot-print
- x: -2800
- y: -4550
- label:
- text: Corridor
- x: -2800
- y: -4550
- offset_y: 35
- outline:
- - - -4800
- - -5250
- - - -800
- - -5250
- - - -800
- - -3400
- - - -4800
- - -3400
- - id: '5'
- icon:
- name: mdi:home-outline
- x: -400
- y: -6800
- label:
- text: Ethan's Bedroom
- x: -400
- y: -6800
- offset_y: 35
- outline:
- - - -2000
- - -8350
- - - 1800
- - -8350
- - - 1800
- - -5250
- - - -2000
- - -5250
- - id: '6'
- icon:
- name: mdi:toilet
- x: -3500
- y: -6400
- label:
- text: Bathroom
- x: -3500
- y: -6400
- offset_y: 35
- outline:
- - - -4550
- - -8300
- - - -2200
- - -8300
- - - -2200
- - -5200
- - - -4550
- - -5200
- - type: grid
- cards:
- - type: custom:mushroom-title-card
- title: Water
- - type: custom:auto-entities
- card:
- type: vertical-stack
- card_param: cards
- sort:
- method: state
- filter:
- include:
- - group: binary_sensor.water_leak_detected
- options:
- type: custom:mushroom-entity-card
- exclude:
- - entity_id: binary_sensor.water_leak_detected
- - state: 'off'
- - state: unavailable
- - state: unknown
- visibility:
- - condition: state
- entity: binary_sensor.water_leak_detected
- state: 'on'
- - type: custom:mushroom-template-card
- primary: Water Main Valve
- secondary: "{%- if is_state(entity, \"open\") -%}\n Press and hold to\
- \ close\n{%- elif is_state(entity, \"closed\") -%}\n Press and hold\
- \ to open\n{%- endif -%}"
- entity: valve.water_main_valve
- icon: "{%- if is_state(entity, \"open\") -%}\n mdi:valve-open\n{%- elif\
- \ is_state(entity, \"closed\") -%}\n mdi:valve-closed\n{%- else -%}\n\
- \ mdi:valve\n{%- endif -%}"
- icon_color: "{%- if is_state(entity, \"open\") -%}\n green\n{%- elif\
- \ is_state(entity, \"closed\") -%}\n red\n{%- else -%}\n grey\n{%-\
- \ endif -%}"
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- layout_options:
- grid_columns: full
- - type: custom:expander-card
- gap: 0em
- padding: 0em
- child-padding: 0.5em
- title-card-padding: 0em
- title-card:
- type: custom:bar-card
- card_mod:
- style: "ha-card {\n background: none;\n border-width: 0;\n}\n#states\
- \ {\n padding: 8px 2px;\n}\nbar-card-name,\nbar-card-value {\n\
- \ font-weight: 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
- }\nbar-card-backgroundbar {\n background-color: var(--primary-background-color);\n\
- }\n"
- name: Water Softener Salt Level
- entities:
- - entity: sensor.water_softener_salt_monitor_salt_level
- name: Water Softener Salt Level
- decimal: 1
- animation:
- state: 'on'
- positions:
- indicator: inside
- severity:
- - color: var(--red-color)
- from: 0
- to: 10
- - color: var(--orange-color)
- from: 10
- to: 20
- - color: var(--amber-color)
- from: 20
- to: 40
- - color: var(--light-green-color)
- from: 40
- to: 70
- - color: var(--green-color)
- from: 70
- to: 100
- cards:
- - type: custom:apexcharts-card
- apex_config:
- chart:
- foreColor: '#7B7B7B'
- toolbar:
- show: false
- grid:
- borderColor: '#7B7B7B'
- xaxis:
- tooltip:
- enabled: false
- experimental:
- color_threshold: true
- header:
- show: false
- all_series_config:
- extend_to: now
- stroke_width: 2
- type: line
- group_by:
- func: min
- duration: 1hour
- color_threshold:
- - value: 0
- color: '#f44336'
- - value: 10
- color: '#ff9800'
- - value: 20
- color: '#ffc107'
- - value: 40
- color: '#8bc34a'
- - value: 70
- color: '#4caf50'
- span:
- end: minute
- graph_span: 10d
- yaxis:
- - decimals: 0
- min: ~0
- max: ~100
- apex_config:
- tickAmount: 4
- title:
- text: '%'
- series:
- - entity: sensor.water_softener_salt_monitor_salt_level
- name: Salt Level
- color: rgb(158,158,158)
- card_mod:
- style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Lights
- - chips:
- - type: template
- entity: light.utility_lights
- content: '{{ expand(entity) | selectattr("state", "==", "on")
- | list | count }} / {{ expand(entity) | list | count }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: tile
- entity: light.cold_storage
- name: Cold Storage
- cards: []
- - title: Computer
- icon: mdi:desktop-tower
- path: computer
- type: sections
- max_columns: 1
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Computers
- - icon: mdi:desktop-tower
- - icon_color: grey
- - chips:
- - type: template
- entity: binary_sensor.computers
- icon: mdi:desktop-tower
- icon_color: '{{ "teal" if is_state(entity, "on") else "disabled"
- }}'
- tap_action:
- action: none
- card_mod:
- style:
- .: "{% if is_state(config.entity, \"on\") %}\nha-card:after\
- \ {\n content: \"{{ expand(config.entity) | selectattr(\"\
- state\", \"==\", \"on\") | list | count }}\";\n position:\
- \ absolute;\n color: var(--teal-color);\n font-weight:\
- \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
- }\n{% endif %}\n"
- - type: template
- entity: sensor.steam_zanix
- picture: '{{ state_attr(entity, "entity_picture") }}'
- content: '{{ states(config.entity) | title }}'
- card_mod:
- style: "ha-card {\n{% if is_state(config.entity, \"online\"\
- ) %}\n --chip-background: rgba(var(--rgb-green), 0.8);\n\
- {% endif %}\n --chip-height: 30px;\n margin-top: 3px;\n\
- \ margin-left: 10px;\n}\n{% if is_state(config.entity, \"\
- offline\") %}\n.avatar {\n filter: grayscale(100%);\n}\n\
- {% endif %}\n"
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Steam
- content:
- type: custom:kb-steam-card
- entity: sensor.steam_zanix
- game_background: true
- card_mod:
- style: "ha-card {\n background: none;\n}\n"
- - type: template
- entity: sensor.steam_starchild
- picture: '{{ state_attr(entity, "entity_picture") }}'
- content: '{{ states(config.entity) | title }}'
- card_mod:
- style: "ha-card {\n{% if is_state(config.entity, \"online\"\
- ) %}\n --chip-background: rgba(var(--rgb-green), 0.8);\n\
- {% endif %}\n --chip-height: 30px;\n margin-top: 3px;\n\
- \ margin-left: 10px;\n}\n{% if is_state(config.entity, \"\
- offline\") %}\n.avatar {\n filter: grayscale(100%);\n}\n\
- {% endif %}\n"
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Steam
- content:
- type: custom:kb-steam-card
- entity: sensor.steam_starchild
- game_background: true
- card_mod:
- style: "ha-card {\n background: none;\n}\n"
- layout_options:
- grid_columns: full
- - type: grid
- cards:
- - type: custom:button-card
- layout_options:
- grid_columns: 2
- template: computer_tile
- variables:
- connected: binary_sensor.erebus_connected
- media: media_player.erebus
- cpu: sensor.erebus_cpu_load
- ram: sensor.erebus_memory_usage
- gpu: sensor.erebus_gpu_load
- name: Erebus
- icon: mdi:desktop-tower
- entity: binary_sensor.erebus_connected
- show_state: true
- tap_action:
- action: navigate
- navigation_path: '#computer-erebus'
- custom_fields:
- stat1: "[[[\n return `\n\
- \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
- \ : '?'}`\n]]]"
- stat2: "[[[\n return `\n \
- \ CPU: ${states[variables.cpu].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
- \ 0) : '?'}`\n]]]"
- stat3: "[[[\n return `\n \
- \ RAM: ${states[variables.ram].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
- \ 0) : '?'}`\n]]]"
- stat4: "[[[\n return `\n\
- \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
- \ undefined, 0) : '?'}`\n]]]"
- info: "[[[\n return `
\n `\n]]]"
- chips:
- card:
- type: custom:mushroom-chips-card
- card_mod:
- style: "ha-card {\n transition: all 0s;\n --chip-background:\
- \ var(--primary-background-color) !important;\n --chip-box-shadow:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
- }\n"
- chips:
- - type: conditional
- conditions:
- - entity: binary_sensor.erebus_mic_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.erebus_mic_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - entity: binary_sensor.erebus_webcam_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.erebus_webcam_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.erebus_windows_updates_software_updates
- above: 0
- chip:
- type: template
- entity: sensor.erebus_windows_updates_software_updates
- icon: mdi:arrow-up-bold-circle
- icon_color: red
- card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: erebus
- - entity: sensor.erebus_windows_updates_software_updates
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.erebus_windows_updates_driver_updates
- above: 0
- chip:
- type: template
- entity: sensor.erebus_windows_updates_driver_updates
- icon: mdi:cog-refresh
- icon_color: red
- card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: erebus
- - entity: sensor.erebus_windows_updates_driver_updates
- - type: custom:button-card
- layout_options:
- grid_columns: 2
- template: computer_tile
- variables:
- connected: binary_sensor.nasya_connected
- media: media_player.nasya
- cpu: sensor.nasya_cpu_load
- ram: sensor.nasya_memory_usage
- gpu: sensor.nasya_gpu_load
- name: Nasya
- icon: mdi:laptop
- entity: binary_sensor.nasya_connected
- show_state: true
- tap_action:
- action: navigate
- navigation_path: '#computer-nasya'
- custom_fields:
- stat1: "[[[\n return `\n\
- \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
- \ : '?'}`\n]]]"
- stat2: "[[[\n return `\n \
- \ CPU: ${states[variables.cpu].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
- \ 0) : '?'}`\n]]]"
- stat3: "[[[\n return `\n \
- \ RAM: ${states[variables.ram].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
- \ 0) : '?'}`\n]]]"
- stat4: "[[[\n return `\n\
- \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
- \ undefined, 0) : '?'}`\n]]]"
- info: "[[[\n return `
\n `\n]]]"
- chips:
- card:
- type: custom:mushroom-chips-card
- card_mod:
- style: "ha-card {\n transition: all 0s;\n --chip-background:\
- \ var(--primary-background-color) !important;\n --chip-box-shadow:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
- }\n"
- chips:
- - type: conditional
- conditions:
- - entity: binary_sensor.nasya_mic_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.nasya_mic_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - entity: binary_sensor.nasya_webcam_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.nasya_webcam_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.nasya_windows_updates_software_updates
- above: 0
- chip:
- type: template
- entity: sensor.nasya_windows_updates_software_updates
- icon: mdi:arrow-up-bold-circle
- icon_color: red
- card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
+ bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
+ \ {\n display: ${hass.states['binary_sensor.kona_problems'].state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}"
+ sub_button:
+ - entity: binary_sensor.kona_problems
+ show_background: false
+ - entity: sensor.kona_lease_tracker
+ show_state: true
+ show_background: false
+ - entity: sensor.kona_car_battery_level
+ show_state: true
+ show_background: false
+ - type: custom:expander-card
+ gap: 0em
+ padding: 0em
+ child-padding: 0.5em
+ title-card-padding: 0em
+ title-card-button-overlay: true
+ overlay-margin: calc(var(--ha-card-border-radius, 12px) / 2) auto
+ title-card:
+ type: vertical-stack
+ cards:
+ - type: custom:mushroom-template-card
+ primary: Remote Start
+ secondary: "{%- if is_state(\"device_tracker.kona_location\"\
+ , \"home\") -%}\n Open the Garage and Start the Kona\n{%-\
+ \ else -%}\n Start the Kona\n{%- endif -%}"
+ icon: mdi:key-wireless
+ entity: script.kona_remote_start
+ icon_color: amber
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: script.turn_on
+ target:
+ entity_id: script.kona_remote_start
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: custom:timer-bar-card
+ filter: true
+ invert: true
+ state_color: true
+ bar_height: 12px
+ bar_radius: var(--ha-card-border-radius, 12px)
+ bar_direction: rtl
+ bar_foreground: var(--lime-color)
+ bar_background: var(--disabled-color)
+ compressed: true
+ modifications:
+ - remaining: 00:03:00
+ bar_foreground: var(--amber-color)
+ - remaining: 00:02:00
+ bar_foreground: var(--orange-color)
+ - remaining: 00:01:00
+ bar_foreground: var(--red-color)
+ entities:
+ - entity: timer.ascent_remote_start
+ name: Timer
+ cards:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
+ \ 1fr 1fr 1fr 1fr;\n}\n"
+ chips:
+ - type: entity
+ entity: lock.kona_door_lock
+ name: Lock
+ icon: mdi:lock
+ content_info: name
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: nasya
- - entity: sensor.nasya_windows_updates_software_updates
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.nasya_windows_updates_driver_updates
- above: 0
- chip:
- type: template
- entity: sensor.nasya_windows_updates_driver_updates
- icon: mdi:cog-refresh
- icon_color: red
+ action: none
+ hold_action:
+ action: call-service
+ service: lock.lock
+ target:
+ entity_id: lock.kona_door_lock
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: device_tracker.kona_location
+ name: Remote Start
+ icon: mdi:key-wireless
+ content_info: name
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: nasya
- - entity: sensor.nasya_windows_updates_driver_updates
- - type: custom:button-card
- layout_options:
- grid_columns: 2
- template: computer_tile
- variables:
- connected: binary_sensor.ardena_connected
- media: media_player.ardena
- cpu: sensor.ardena_cpu_load
- ram: sensor.ardena_memory_usage
- gpu: sensor.ardena_gpu_load
- name: Ardena
- icon: fab:steam-symbol
- entity: binary_sensor.ardena_connected
- show_state: true
- tap_action:
- action: navigate
- navigation_path: '#computer-ardena'
- custom_fields:
- stat1: "[[[\n return `\n\
- \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
- \ : '?'}`\n]]]"
- stat2: "[[[\n return `\n \
- \ CPU: ${states[variables.cpu].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
- \ 0) : '?'}`\n]]]"
- stat3: "[[[\n return `\n \
- \ RAM: ${states[variables.ram].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
- \ 0) : '?'}`\n]]]"
- stat4: "[[[\n return `\n\
- \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
- \ undefined, 0) : '?'}`\n]]]"
- info: "[[[\n return `
\n `\n]]]"
- chips:
- card:
- type: custom:mushroom-chips-card
- card_mod:
- style: "ha-card {\n transition: all 0s;\n --chip-background:\
- \ var(--primary-background-color) !important;\n --chip-box-shadow:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
- }\n"
- chips:
- - type: conditional
- conditions:
- - entity: fan.computer
- state_not: 'off'
- chip:
- type: template
- entity: fan.computer
- icon: mdi:fan
- icon_color: '{{ iif(is_state(entity, ''on''), "green", "disabled")
- }}'
- card_mod:
- style:
- .: "ha-card {\n {% if is_state(config.entity, 'on') %}\n\
- \ animation: rotation 1.5s linear infinite;\n \
- \ {% endif %}\n}\n@keyframes rotation {\n 100% {\n\
- \ transform: rotate(-360deg);\n }\n}\n"
- - type: conditional
- conditions:
- - entity: binary_sensor.ardena_mic_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.ardena_mic_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - entity: binary_sensor.ardena_webcam_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.ardena_webcam_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.ardena_windows_updates_software_updates
- above: 0
- chip:
- type: template
- entity: sensor.ardena_windows_updates_software_updates
- icon: mdi:arrow-up-bold-circle
- icon_color: red
+ action: none
+ hold_action:
+ action: call-service
+ service: kia_uvo.start_climate
+ device_id: f27d2038fd3fe30bc627505de54ddea8
+ duration: 10
+ climate: true
+ temperature: 70
+ heating: '0'
+ defrost: false
+ flseat: '0'
+ frseat: '0'
+ rlseat: '0'
+ rrseat: '0'
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: lock.kona_door_lock
+ name: Unlock
+ icon: mdi:lock-open
+ content_info: name
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: ardena
- - entity: sensor.ardena_windows_updates_software_updates
- - type: conditional
- conditions:
- - condition: numeric_state
- entity: sensor.ardena_windows_updates_driver_updates
- above: 0
- chip:
- type: template
- entity: sensor.ardena_windows_updates_driver_updates
- icon: mdi:cog-refresh
- icon_color: red
+ action: none
+ hold_action:
+ action: call-service
+ service: lock.unlock
+ target:
+ entity_id: lock.kona_door_lock
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: device_tracker.kona_location
+ name: Remote Stop
+ icon: mdi:stop-circle-outline
+ content_info: name
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: ardena
- - entity: sensor.ardena_windows_updates_driver_updates
- - type: custom:button-card
- layout_options:
- grid_columns: 2
- template: computer_tile
- variables:
- connected: binary_sensor.athos_connected
- media: media_player.athos
- cpu: sensor.athos_cpu_load
- ram: sensor.athos_memory_usage
- gpu: sensor.athos_gpu_load
- name: Athos
- icon: mdi:gamepad
- entity: binary_sensor.athos_connected
- show_state: true
- tap_action:
- action: navigate
- navigation_path: '#computer-athos'
- custom_fields:
- stat1: "[[[\n return `\n\
- \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
- \ : '?'}`\n]]]"
- stat2: "[[[\n return `\n \
- \ CPU: ${states[variables.cpu].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
- \ 0) : '?'}`\n]]]"
- stat3: "[[[\n return `\n \
- \ RAM: ${states[variables.ram].state\
- \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
- \ 0) : '?'}`\n]]]"
- stat4: "[[[\n return `\n\
- \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
- \ undefined, 0) : '?'}`\n]]]"
- info: "[[[\n return `
\n `\n]]]"
- chips:
- card:
- type: custom:mushroom-chips-card
- card_mod:
- style: "ha-card {\n transition: all 0s;\n --chip-background:\
- \ var(--primary-background-color) !important;\n --chip-box-shadow:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
- }\n"
- chips:
- - type: conditional
- conditions:
- - entity: binary_sensor.athos_mic_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.athos_mic_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - entity: binary_sensor.athos_webcam_active
- state: 'on'
- chip:
- type: entity
- entity: binary_sensor.athos_webcam_active
- icon_color: red
- content_info: none
- - type: conditional
- conditions:
- - entity: sensor.athos_windows_updates_software_updates
- state_not: '0'
- - entity: sensor.athos_windows_updates_software_updates
- state_not: unavailable
- - entity: sensor.athos_windows_updates_software_updates
- state_not: unknown
- chip:
- type: template
- entity: sensor.athos_windows_updates_software_updates
- icon: mdi:arrow-up-bold-circle
- icon_color: red
+ action: none
+ hold_action:
+ action: call-service
+ service: kia_uvo.stop_climate
+ data:
+ device_id: f27d2038fd3fe30bc627505de54ddea8
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
+ style: "ha-card:hover {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: ".chip-container {\n display: grid !important;\n grid-template-columns:\
+ \ max-content max-content;\n margin-top: 15px;\n place-content:\
+ \ space-around !important;\n}\n"
+ chips:
+ - type: entity
+ entity: device_tracker.kona_location
+ name: Update
+ icon: mdi:refresh
+ content_info: name
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: athos
- - entity: sensor.athos_windows_updates_software_updates
- - type: conditional
- conditions:
- - entity: sensor.athos_windows_updates_driver_updates
- state_not: '0'
- - entity: sensor.athos_windows_updates_driver_updates
- state_not: unavailable
- - entity: sensor.athos_windows_updates_driver_updates
- state_not: unknown
- chip:
- type: template
- entity: sensor.athos_windows_updates_driver_updates
- icon: mdi:cog-refresh
- icon_color: red
+ action: none
+ hold_action:
+ action: call-service
+ service: kia_uvo.update
+ data:
+ device_id: f27d2038fd3fe30bc627505de54ddea8
card_mod:
- style:
- .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
- \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
- ;\n position: absolute;\n color: var(--red-color);\n\
- \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
- \ font-size: 12px;\n}\n{% endif %}\n"
+ style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
+ \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - type: entity
+ entity: device_tracker.kona_location
+ name: Force Update
+ icon: mdi:car-connected
+ content_info: name
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: athos
- - entity: sensor.athos_windows_updates_driver_updates
- - type: custom:button-card
- layout_options:
- grid_columns: 2
- name: MagicMirror
- icon: mdi:apps
- entity: binary_sensor.magicmirror_connected
- show_state: true
- tap_action:
- action: navigate
- navigation_path: '#computer-magicmirror'
- custom_fields:
- stat1: "[[[\n var entity_id = 'sensor.magicmirror_cpu_usage';\n return\
- \ `\n CPU: ${states[entity_id].state !== 'unavailable'\
- \ ? helpers.localize(states[entity_id], undefined, 0) : '?'}`\n\
- ]]]"
- stat2: "[[[\n var entity_id = 'sensor.magicmirror_memory_usage';\n\
- \ return `\n RAM: ${states[entity_id].state\
- \ !== 'unavailable' ? helpers.localize(states[entity_id], undefined,\
- \ 0) : '?'}`\n]]]"
- stat3: "[[[\n var entity_id = 'sensor.magicmirror_cpu_thermal_1_temperature';\n\
- \ return `\n \
- \ Temp: ${states[entity_id].state\
- \ !== 'unavailable' ? helpers.localize(states[entity_id], undefined,\
- \ 0) : '?'}`\n]]]"
- info: "[[[\n return ``\n]]]"
- chips:
- card:
- type: custom:mushroom-chips-card
- card_mod:
- style: "ha-card {\n transition: all 0s;\n --chip-background:\
- \ var(--primary-background-color) !important;\n --chip-box-shadow:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
+ action: none
+ hold_action:
+ action: call-service
+ service: kia_uvo.force_update
+ data:
+ device_id: f27d2038fd3fe30bc627505de54ddea8
+ card_mod:
+ style: "ha-card {\n justify-content: center;\n}\nha-card:hover\
+ \ {\n --chip-background: rgb(var(--rgb-disabled));\n\
+ }\n"
+ - title: ''
+ image_url: /local/logos/kona.png
+ charging_image_url: ''
+ image_url_type: image
+ charging_image_url_type: none
+ vehicle_type: Fuel
+ unit_type: mi
+ level_entity: ''
+ range_entity: ''
+ charging_status_entity: ''
+ location_entity: device_tracker.kona_location
+ mileage_entity: sensor.kona_odometer
+ show_level: true
+ show_range: true
+ show_location: true
+ show_mileage: true
+ show_car_state: false
+ show_charge_limit: true
+ icon_grid_entities:
+ - row-separator
+ - binary_sensor.kona_doors
+ - binary_sensor.kona_windows
+ - binary_sensor.kona_defrost
+ - binary_sensor.kona_back_window_heater
+ - binary_sensor.kona_air_conditioner
+ custom_icons:
+ binary_sensor.kona_doors:
+ active: mdi:car-door
+ inactive: mdi:car-door
+ binary_sensor.kona_problems:
+ active: mdi:alert
+ inactive: no-icon
+ binary_sensor.kona_windows:
+ active: mdi:window-open
+ inactive: mdi:window-closed
+ device_tracker.kona_location:
+ active: mdi:map
+ inactive: mdi:map
+ inactiveColor: '#e4e4e7'
+ icon_interactions:
+ binary_sensor.kona_doors:
+ type: more-info
+ sensor.kona_car_battery_level:
+ type: more-info
+ binary_sensor.kona_windows:
+ type: more-info
+ icon_styles:
+ binary_sensor.kona_windows: icon
+ icon_labels:
+ sensor.kona_car_battery_level: right
+ hybrid_display_order: fuel_first
+ car_state_entity: ''
+ charge_limit_entity: ''
+ icon_size: 24
+ icon_gap: 12
+ showEntityInformation: true
+ carStateTextColor: var(--primary-text-color)
+ rangeTextColor: var(--primary-text-color)
+ percentageTextColor: var(--primary-text-color)
+ icon_sizes: {}
+ engine_on_entity: binary_sensor.kona_engine
+ row_separator_color: Default
+ row_separator_height: 1
+ row_separators:
+ '0':
+ color: transparent
+ height: 1
+ icon_gap: 20
+ horizontalAlignment: center
+ verticalAlignment: middle
+ '7':
+ color: transparent
+ '8':
+ color: transparent
+ height: 1
+ icon_gap: 20
+ horizontalAlignment: center
+ verticalAlignment: middle
+ '9':
+ color: transparent
+ height: 1
+ icon_gap: 20
+ horizontalAlignment: center
+ verticalAlignment: middle
+ iconActiveColor: var(--primary-color)
+ iconInactiveColor: var(--primary-text-color)
+ useFormattedEntities: true
+ mainImageHeight: 400px
+ chargingImageHeight: 140px
+ showTitle: false
+ layoutType: single
+ useBarGradient: true
+ barGradientStops:
+ - percentage: 0
+ color: '#ff0000'
+ - percentage: 100
+ color: '#00ff00'
+ cardTitleColor: var(--title-color)
+ cardBackgroundColor: var(--ha-card-background,var(--card-background-color,#fff))
+ barBackgroundColor: var(--primary-background-color)
+ barBorderColor: var(--primary-background-color)
+ barFillColor: '#c2e7fe'
+ limitIndicatorColor: var(--primary-text-color)
+ infoTextColor: var(--secondary-text-color)
+ show_engine_animation: false
+ show_charging_animation: false
+ type: custom:ultra-vehicle-card
+ battery_level_entity: ''
+ battery_range_entity: ''
+ fuel_level_entity: sensor.kona_fuel_level
+ fuel_range_entity: sensor.kona_fuel_driving_range
+ show_battery: true
+ show_battery_range: true
+ show_fuel: true
+ show_fuel_range: true
+ engine_on_image_url_type: none
+ engine_on_image_url: ''
+ engine_on_image_entity: ''
+ image_entity: ''
+ fuel_level_url: ''
+ fuel_range_url: ''
+ engine_on_url: ''
+ location_url: ''
+ mileage_url: ''
+ - type: map
+ entities:
+ - entity: device_tracker.kona_location
+ aspect_ratio: '4:3'
+ hours_to_show: 24
+ default_zoom: 12
+ theme_mode: auto
+ card_mod:
+ style:
+ .: ":host {\n /* Define Person State colors. Can be added to\
+ \ theme */\n --state-person-home: var(--green-color);\n --state-person-not-home:\
+ \ var(--red-color);\n --state-person-zone: var(--blue-color);\n\
+ \ --state-person-unknown: var(--grey-color);\n\n /* Set person\
+ \ state color */\n --state-person:\n {% if is_state(config.entities[0].entity,\
+ \ ['home', 'not_home', 'unknown']) %}\n var(--state-person-{{\
+ \ states(config.entities[0].entity) | replace('_', '-') }})\n\
+ \ {% else %}\n var(--state-person-zone)\n {% endif %};\n\
+ }\nha-card {\n /* Remove default card styling without affecting\
+ \ child elements */\n box-shadow: none;\n border-width: 0;\n\
+ \ /*border-radius: 0px 0px var(--ha-card-border-radius, 12px)\
+ \ var(--ha-card-border-radius, 12px);*/\n transition: all 0s;\n\
+ }\nha-icon-button {\n /* Position center button */\n bottom:\
+ \ 12px;\n left: 12px !important;\n top: auto !important;\n\
+ \n /* Style center button to match Chip */\n color: var(--deep-orange-color)\
+ \ !important;\n background: color-mix(in srgb, var(--deep-orange-color)\
+ \ 20%, transparent);\n border-radius: var(--mush-chip-border-radius,\
+ \ 19px);\n border: var(--ha-card-border-width, 1px) solid var(--ha-card-border-color,\
+ \ var(--divider-color, #e0e0e0)) !important;\n}\n"
+ ha-map $ ha-entity-marker $: ".marker {\n /* Style person marker\
+ \ & adjust position to avoid blocking waypoints */\n border:\
+ \ 3px solid var(--state-person) !important;\n border-radius:\
+ \ 50% 50% 50% 0px !important;\n transform: rotate(-45deg) translate(50%,\
+ \ -50%);\n overflow: visible !important;\n background: var(--state-person)\
+ \ !important;\n}\n.entity-picture {\n /* Correct orientation\
+ \ of person avatar */\n transform: rotate(45deg);\n border-radius:\
+ \ 50%;\n}\n"
+ ha-map $: "path:first-child {\n /* Style accuracy radius */\n\
+ \ fill: color-mix(in srgb, var(--state-person) 50%, transparent);\n\
+ \ stroke-width: 0px;\n}\npath:nth-child(even) {\n /* Styling\
+ \ for waypoints */\n stroke: var(--primary-color);\n fill:\
+ \ var(--primary-color);\n stroke-width: 4px;\n}\npath:nth-child(odd):not(:first-child)\
+ \ {\n /* Styling for lines */\n stroke: var(--primary-color);\n\
+ \ stroke-width: 4px;\n}\n.leaflet-control-attribution {\n \
+ \ /* Style attribution text */\n background: rgba(var(--rgb-card-background-color),\
+ \ 0.2) !important;\n font-size: 8px;\n}\n.leaflet-container\
+ \ a {\n /* Set color of zoom icons & attribution text */\n\
+ \ color: var(--secondary-text-color);\n}\n.leaflet-control-zoom-in,\n\
+ .leaflet-control-zoom-out {\n /* Style zoom buttons like Chips\
+ \ */\n border-radius: var(--mush-chip-border-radius, 19px)\
+ \ !important;\n padding: 3px;\n background: rgb(var(--rgb-secondary-text-color),\
+ \ 0.2) !important;\n margin: 8px 12px 0px;\n border: var(--ha-card-border-width,\
+ \ 1px) solid var(--ha-card-border-color, var(--divider-color,\
+ \ #e0e0e0)) !important;\n}\n.leaflet-top {\n /* Move zoom buttons\
+ \ to bottom of map */\n bottom: 0px !important;\n}\n.leaflet-control-zoom\
+ \ {\n /* Allow buttons to be moved */\n position: absolute\
+ \ !important;\n\n /* Adjust spacing for border */\n bottom:\
+ \ calc(2 * var(--ha-card-border-width, 1px) + 56px);\n\n /*\
+ \ Remove extra margin */\n margin: 0px !important;\n\n /*\
+ \ Remove zoom control border */\n border: none !important;\n\
}\n"
- chips: []
- styles:
- grid:
- - grid-template-columns: 1fr min-content
- - grid-template-rows: min-content min-content min-content min-content
- min-content min-content min-content;
- - grid-template-areas: '"n i" "s chips" "info chips" "stat1 chips"
- "stat2 chips" "stat3 chips" "stat4 chips"'
- card:
- - padding: 22px 8px 22px 22px
- img_cell:
- - justify-content: start
- - align-self: start
- - position: absolute
- - width: 100px
- - height: 100px
- - right: -20px
- - top: -20px
- - border-radius: 50%
- - background: '[[[ if (states["binary_sensor.magicmirror_connected"].state
- == "off") return "var(--red-color)"; else return "var(--green-color)"
- ]]]'
- icon:
- - width: 60px
- - color: rgba(0, 0, 0, 0.6)
- name:
- - justify-self: start
- - align-self: start
- - font-size: 20px
- - font-weight: 500
- - color: var(--white-color)
- state:
- - min-height: 30px
- - justify-self: start
- - align-self: start
- - font-size: 14px
- - opacity: '0.7'
- custom_fields:
- stat1:
- - padding-bottom: 2px
- - align-self: start
- - justify-self: start
- - font-size: 14px
- - --text-color-sensor: '[[[ if (states[''sensor.magicmirror_cpu_usage''].state
- > 80) return "var(--red-color)"; ]]]'
- stat2:
- - padding-bottom: 2px
- - align-self: start
- - justify-self: start
- - font-size: 14px
- - --text-color-sensor: '[[[ if (states[''sensor.magicmirror_memory_usage''].state
- > 80) return "var(--red-color)"; ]]]'
- stat3:
- - align-self: start
- - justify-self: start
- - font-size: 14px
- - --text-color-sensor: '[[[ if (states[''sensor.magicmirror_cpu_thermal_1_temperature''].state
- > 80) return "var(--red-color)"; ]]]'
- info:
- - align-self: end
- - justify-self: start
- - text-align: left
- chips:
- - margin-top: 15px
- - justify-content: end
- - align-self: start
- - type: custom:button-card
+ ha-icon-button $ mwc-icon-button $: "button {\n /* Size center\
+ \ button to match Chip */\n height: var(--mush-chip-height,\
+ \ 36px) !important;\n width: var(--mush-chip-height, 36px)\
+ \ !important;\n --mdc-icon-size: 22px;\n}\n"
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: menu
+ - type: custom:mushroom-template-badge
+ label: Security
+ content: '{% from "util.jinja" import security_count %}
+
+ {{ iif(security_count() | int == 0, "Secure", "Not Secure") }}'
+ icon: '{% from "util.jinja" import security_count %}
+
+ {{ iif(security_count() | int == 0, "mdi:shield-check",
+
+ "mdi:shield-alert") }}'
+ color: '{% from "util.jinja" import security_count %}
+
+ {{ iif(security_count() | int == 0, "green", "red") }}'
+ tap_action:
+ action: navigate
+ navigation_path: security
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.all_doors
+ label: Doors
+ content: '{{ expand(entity) | selectattr(''state'', ''=='', ''on'') | list
+ | count }}'
+ icon: '{{ iif(is_state(entity, "on"), "mdi:door-open", "mdi:door") }}'
+ color: '{{ iif(is_state(entity, "on"), "cyan", "grey") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: All Doors
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: heading
+ icon: mdi:door
+ heading: All Doors
+ heading_style: title
+ badges:
+ - type: entity
+ entity: binary_sensor.all_doors
+ color: red
+ - type: custom:auto-entities
+ show_empty: false
+ card:
+ type: custom:layout-card
+ cards: []
+ layout_type: masonry
+ sort:
+ method: friendly_name
+ filter:
+ include:
+ - group: binary_sensor.all_doors
+ options:
+ type: custom:mushroom-entity-card
+ layout: horizontal
+ secondary_info: last-changed
+ tap_action:
+ action: none
+ hold_action:
+ action: none
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n padding:\
+ \ 4px 12px !important;\n border-width: 0;\n}\n"
+ visibility:
+ - condition: state
+ entity: binary_sensor.all_doors
+ state: 'on'
+ - type: custom:mushroom-template-badge
+ entity: light.all_lights
+ content: '{{ expand(entity) | selectattr(''state'', ''=='', ''on'') | list
+ | count }}'
+ icon: '{{ iif(is_state(entity, "on"), "mdi:lightbulb-group", "mdi:lightbulb-group-off")
+ }}'
+ color: '{{ iif(is_state(entity, "on"), "amber", "grey") }}'
+ tap_action:
+ action: navigate
+ navigation_path: lights
+ hold_action:
+ action: call-service
+ service: light.turn_off
+ target:
+ entity_id: light.all_lights
+ - type: custom:mushroom-template-badge
+ entity: sensor.emporiavue_main_total_power
+ label: Power
+ content: "{% if has_value(entity) %}\n {% set power = int(states(entity),\
+ \ 0) | abs %}\n {% if power > 1000 %}\n {{ (power | float * 0.001) |\
+ \ round(2) }} kWh\n {% else %}\n {{ power }} W\n {% endif %}\n{% endif\
+ \ %}"
+ icon: "{% if has_value(entity) %}\n {% if int(states(entity), 0) < 0 %}\n\
+ \ mdi:transmission-tower-export\n {% else %}\n mdi:transmission-tower-import\n\
+ \ {% endif %}\n{% else %}\n mdi:transmission-tower-off\n{% endif %}"
+ color: "{% if has_value(entity) %}\n {% if int(states(entity), 0) < 0 %}\n\
+ \ lime\n {% else %}\n deep-orange\n {% endif %}\n{% else %}\n grey\n\
+ {% endif %}"
+ tap_action:
+ action: navigate
+ navigation_path: power
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.computers
+ content: '{{ expand(config.entity) | selectattr("state", "==", "on") | list
+ | count }}'
+ icon: mdi:desktop-tower
+ color: '{{ iif (is_state(entity, "on"), "teal", "grey") }}'
+ tap_action:
+ action: navigate
+ navigation_path: computer
+ - type: custom:mushroom-template-badge
+ entity: sensor.bambu_p1s_print_status
+ label: Bambu
+ content: "{% if is_state(entity, \"running\") and\nhas_value(\"sensor.bambu_p1s_current_layer\"\
+ ) %}\n {{ states('sensor.bambu_p1s_current_layer') }} / {{\n states('sensor.bambu_p1s_total_layer_count')\
+ \ }}\n{% endif %}"
+ icon: mdi:printer-3d
+ color: "{% if is_state(\"sensor.bambu_p1s_current_stage\", \"idle\") %}\n\
+ \ grey\n{% elif is_state(entity, \"running\") %}\n green\n{% elif is_state(entity,\
+ \ \"finish\") %}\n orange\n{% elif states(entity) in [\"idle\", \"pause\"\
+ ] %}\n yellow\n{% elif states(entity) in [\"init\", \"prepare\", \"slicing\"\
+ ] %}\n light-blue\n{% elif is_state(entity, \"failed\") %}\n red\n{% else\
+ \ %}\n grey\n{% endif %}"
+ tap_action:
+ action: navigate
+ navigation_path: bambu
+ - type: custom:mushroom-template-badge
+ entity: sensor.meater_probe_cook_state
+ label: Meater
+ content: "{% if has_value(entity) %}\n {{ states(\"sensor.meater_probe_internal\"\
+ ) }} °F\n {% if has_value(\"sensor.meater_probe_cook_time_remaining\")\
+ \ %}\n {% set t = (states(\"sensor.meater_probe_cook_time_remaining\"\
+ ) | as_datetime - now()).total_seconds() %}\n | {{ t | timestamp_custom('%-H\
+ \ hr %-M min' if t > 3600 else '%-M min', false) }}\n {% endif %}\n{% endif\
+ \ %}"
+ icon: mdi:food-drumstick
+ color: '{{ has_value(entity) | iif("brown", "grey") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Meater
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:mushroom-entity-card
+ entity: sensor.meater_probe_cook_name
+ name: Cooking
+ primary_info: state
+ secondary_info: name
+ icon: mdi:food-steak
+ - square: false
+ columns: 2
+ type: grid
+ cards:
+ - type: custom:mushroom-entity-card
+ entity: sensor.meater_probe_cook_time_elapsed
+ name: Elapsed Time
+ primary_info: state
+ secondary_info: name
+ - type: custom:mushroom-entity-card
+ entity: sensor.meater_probe_cook_time_remaining
+ name: Remaining Time
+ primary_info: state
+ secondary_info: name
+ - type: custom:mushroom-title-card
+ subtitle: Temperature
+ - type: custom:apexcharts-card
+ card_mod:
+ style: "ha-card {\n padding: 0px;\n border: none;\n box-shadow:\
+ \ none;\n margin-bottom: -15px;\n}\n.apexcharts-tooltip-series-group\
+ \ {\n padding-top: 0px !important;\n padding-bottom: 0px\
+ \ !important;\n margin-top: 0px !important;\n margin-bottom:\
+ \ 0px !important;\n display: none;\n text-align: left;\n\
+ \ justify-content: left;\n align-items: center;\n}\n"
+ apex_config:
+ chart:
+ foreColor: '#7B7B7B'
+ toolbar:
+ show: false
+ grid:
+ borderColor: '#7B7B7B'
+ xaxis:
+ tooltip:
+ enabled: false
+ header:
+ show: true
+ show_states: true
+ colorize_states: true
+ experimental:
+ brush: true
+ all_series_config:
+ extend_to: now
+ float_precision: 2
+ curve: stepline
+ brush:
+ selection_span: 1h
+ apex_config:
+ chart:
+ foreColor: '#7B7B7B'
+ toolbar:
+ show: false
+ grid:
+ borderColor: '#7B7B7B'
+ xaxis:
+ tooltip:
+ enabled: false
+ series:
+ - entity: sensor.meater_probe_internal
+ name: Internal
+ stroke_width: 4
+ color: rgb(33,150,243)
+ show:
+ in_brush: true
+ - entity: sensor.meater_probe_ambient
+ name: Ambient
+ stroke_width: 4
+ color: rgb(139,195,74)
+ - entity: sensor.meater_probe_cook_target_temp
+ name: Target
+ type: area
+ opacity: 0.2
+ stroke_width: 1
+ color: rgb(233,30,99)
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.cat_feeder_error
+ label: Feeder
+ content: Error
+ icon: mdi:cat
+ color: red
+ tap_action:
+ action: navigate
+ navigation_path: utility
+ visibility:
+ - condition: state
+ entity: binary_sensor.cat_feeder_error
+ state: 'on'
+ - type: custom:mushroom-template-badge
+ entity: sensor.cat_feeder_food_level
+ label: Feeder
+ content: '{{ states(entity) | round(0) }}%'
+ icon: mdi:cat
+ color: '{% from "util.jinja" import battery_color %}
+
+ {{ battery_color(entity) }}'
+ tap_action:
+ action: navigate
+ navigation_path: utility
+ visibility:
+ - condition: numeric_state
+ entity: sensor.cat_feeder_food_level
+ below: 20
+ - type: custom:mushroom-template-badge
+ entity: sensor.water_softener_salt_monitor_salt_level
+ label: Salt
+ content: '{{ states(entity) | round(0) }}%'
+ icon: mdi:arrow-expand-vertical
+ color: cyan
+ tap_action:
+ action: navigate
+ navigation_path: utility
+ visibility:
+ - condition: numeric_state
+ entity: sensor.water_softener_salt_monitor_salt_level
+ below: 10
+ - type: custom:mushroom-template-badge
+ entity: sensor.mail_usps_mail
+ label: Mail
+ content: '{{ states(entity) }} {{ iif(is_state(entity, "1"), "piece", "pieces")
+ }}'
+ icon: mdi:mail
+ color: blue
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Mail
+ size: fullscreen
+ content:
+ type: picture-entity
+ entity: camera.mail_usps_camera
+ camera_image: camera.mail_usps_camera
+ show_name: false
+ show_state: false
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n}\n"
+ visibility:
+ - condition: numeric_state
+ entity: sensor.mail_usps_mail
+ above: 0
+ - type: custom:mushroom-template-badge
+ entity: sensor.mail_packages_delivered
+ label: Delivered
+ content: '{{ states(entity) }} {{ iif(is_state(entity, "1"), "package", "packages")
+ }}
+
+ '
+ icon: mdi:package-variant
+ color: orange
+ visibility:
+ - condition: numeric_state
+ entity: sensor.mail_packages_delivered
+ above: 0
+ - type: custom:decluttering-card
+ template: package_delivery
+ variables:
+ - entity: sensor.mail_usps_delivering
+ - name: USPS
+ - icon: fab:usps
+ - icon_color: blue
+ - url: https://tools.usps.com/go/TrackConfirmAction?tLabels=##TRACK_ID##
+ visibility:
+ - condition: numeric_state
+ entity: sensor.mail_usps_delivering
+ above: 0
+ - condition: state
+ entity: sensor.mail_usps_delivering
+ state_not: unavailable
+ - condition: state
+ entity: sensor.mail_usps_delivering
+ state_not: unknown
+ - type: custom:decluttering-card
+ template: package_delivery
+ variables:
+ - entity: sensor.mail_ups_delivering
+ - name: UPS
+ - icon: fab:ups
+ - icon_color: brown
+ - url: https://www.ups.com/track?loc=en_US&tracknum=##TRACK_ID##
+ visibility:
+ - condition: numeric_state
+ entity: sensor.mail_ups_delivering
+ above: 0
+ - condition: state
+ entity: sensor.mail_ups_delivering
+ state_not: unavailable
+ - condition: state
+ entity: sensor.mail_ups_delivering
+ state_not: unknown
+ - type: custom:decluttering-card
+ template: package_delivery
+ variables:
+ - entity: sensor.mail_fedex_delivering
+ - name: FedEx
+ - icon: fab:fedex
+ - icon_color: purple
+ - url: https://www.fedex.com/fedextrack/?trknbr=##TRACK_ID##
+ visibility:
+ - condition: numeric_state
+ entity: sensor.mail_fedex_delivering
+ above: 0
+ - condition: state
+ entity: sensor.mail_fedex_delivering
+ state_not: unavailable
+ - condition: state
+ entity: sensor.mail_fedex_delivering
+ state_not: unknown
+ - type: custom:decluttering-card
+ template: package_delivery
+ variables:
+ - entity: sensor.mail_amazon_packages
+ - name: Amazon
+ - icon: fab:amazon
+ - icon_color: yellow
+ - url: https://www.amazon.com/gp/your-account/order-details?orderID=##TRACK_ID##
+ visibility:
+ - condition: numeric_state
+ entity: sensor.mail_amazon_packages
+ above: 0
+ - condition: state
+ entity: sensor.mail_amazon_packages
+ state_not: unavailable
+ - condition: state
+ entity: sensor.mail_amazon_packages
+ state_not: unknown
+ - type: custom:mushroom-template-badge
+ show_name: true
+ entity: sensor.low_battery_devices
+ label: Battery
+ content: '{{ states(entity) }}'
+ icon: mdi:battery-alert
+ color: red
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Low Battery Devices
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:auto-entities
+ filter:
+ include:
+ - group: sensor.low_battery_devices
+ options:
+ type: custom:mushroom-template-card
+ primary: '{{ states(entity) }}%'
+ secondary: "{{ state_attr(entity, \"friendly_name\")\n\
+ \ | regex_replace(find=\" battery level\", replace=\"\
+ \", ignorecase=true) }}"
+ icon: '{% from "util.jinja" import battery_icon %} {{
+ battery_icon(entity) }}
+
+ '
+ icon_color: '{% from "util.jinja" import battery_color
+ %} {{ battery_color(entity) }}'
+ badge_color: red
+ badge_icon: "{% if int(states(entity), 0) <= 15 %}\n \
+ \ mdi:exclamation-thick\n{% endif %}"
+ layout: horizontal
+ tap_action:
+ action: more-info
+ card_mod:
+ style: "ha-card {\n padding: 4px 12px !important;\n\
+ }\n"
+ exclude: []
+ card:
+ type: custom:layout-card
+ cards: []
+ layout_type: masonry
+ sort:
+ method: friendly_name
+ visibility:
+ - condition: numeric_state
+ entity: sensor.low_battery_devices
+ above: 0
+ - type: custom:mushroom-template-badge
+ show_name: true
+ entity: sensor.offline_devices
+ label: Offline
+ content: '{{ states(entity) }}'
+ icon: mdi:network-off
+ color: blue-grey
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Offline Devices
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:auto-entities
+ filter:
+ include:
+ - group: sensor.offline_devices
+ options:
+ type: custom:mushroom-template-card
+ primary: '{{ state_attr(entity, "friendly_name") | regex_replace(find="
+ last seen", replace="", ignorecase = true) }}'
+ secondary: "{%- if has_value(entity) -%}\n {{ as_datetime(states(entity)).strftime(\"\
+ %Y-%m-%d %-I:%M %p\") }}\n{%- else -%}\n Unknown\n\
+ {%- endif -%}"
+ icon: mdi:network-off
+ icon_color: yellow
+ layout: horizontal
+ tap_action:
+ action: more-info
+ card_mod:
+ style: "ha-card {\n padding: 4px 12px !important;\n\
+ }\n"
+ exclude: []
+ card:
+ type: custom:layout-card
+ cards: []
+ layout_type: masonry
+ sort:
+ method: friendly_name
+ visibility:
+ - condition: numeric_state
+ entity: sensor.offline_devices
+ above: 0
+ - condition: user
+ users:
+ - f615672fc2554783beab56221097564e
+ - type: custom:mushroom-template-badge
+ entity: sensor.updates
+ label: Updates
+ content: '{{ states(entity) }}'
+ icon: mdi:package-up
+ color: red
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Updates
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:auto-entities
+ filter:
+ include:
+ - group: sensor.updates
+ options:
+ type: tile
+ state_content:
+ - install_status
+ - installed_version
+ - latest_version
+ features:
+ - type: update-actions
+ backup: ask
+ exclude: []
+ card:
+ type: custom:layout-card
+ cards: []
+ layout_type: masonry
+ sort:
+ method: friendly_name
+ - type: custom:mushroom-chips-card
+ chips:
+ - type: template
+ tap_action:
+ action: navigate
+ navigation_path: /config/updates
+ content: Updates Page
+ visibility:
+ - condition: numeric_state
+ entity: sensor.updates
+ below: 10
+ - condition: user
+ users:
+ - f615672fc2554783beab56221097564e
+ cards: []
+ - title: Living Room
+ path: living
+ icon: mdi:sofa-single
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ heading_style: title
+ icon: mdi:sofa
+ heading: Living Room
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.living_room_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: light.living_room
+ name: Main
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.living_room_fan_light
+ name: Fan Light
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.living_room_lamp
+ name: Lamp
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.living_room_floor_lamp
+ name: Floor Lamp
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.front_entry
+ name: Entry
+ vertical: true
+ - type: tile
+ entity: light.hallway
+ name: Hallway
+ vertical: true
+ - type: tile
layout_options:
- grid_columns: 2
- name: Quest 2
- icon: fab:meta
- entity: binary_sensor.quest_interactive
- show_state: true
+ grid_columns: full
+ entity: fan.living_room_ceiling
+ name: Fan
+ hide_state: true
+ features:
+ - type: fan-speed
+ card_mod:
+ style:
+ .: "ha-tile-icon {\n --tile-color:\n {% if is_state(config.entity,\
+ \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
+ \ | int(0) %}\n {% if perc == 33 %} var(--green-color)\n {%\
+ \ elif perc == 66 %} var(--yellow-color)\n {% else %} var(--orange-color)\n\
+ \ {% endif %}\n {% else %} var(--state-inactive-color)\n \
+ \ {% endif %};\n}\nha-state-icon {\n animation:\n {% if is_state(config.entity,\
+ \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
+ \ | int %}\n {% set base = 'rotation infinite linear' %}\n\
+ \ {% if perc == 33 %} 1s {{base}}\n {% elif perc == 66\
+ \ %} 0.75s {{base}}\n {% else %} 0.66s {{base}}\n {%\
+ \ endif %}\n {% else %} none\n {% endif %};\n}\n@keyframes\
+ \ rotation {\n 0% {transform: rotate(0deg);}\n 100% {transform:\
+ \ rotate(360deg);}\n}\n"
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:play-speed
+ heading: Media
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ icon: mdi:remote-tv
+ color: orange
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Living Room Media
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_living_room
+ - media: media_player.universal_living_room
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Cartoon Network
+ icon: fapro:cartoon-network
+ variables:
+ source: Cartoon Network
+ styles:
+ card:
+ - background: '#000000'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: YouTube Kids
+ icon: fapro:youtube-kids
+ variables:
+ source: YouTube Kids
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: PBS Kids
+ icon: fapro:pbs-kids
+ variables:
+ source: PBS Kids
+ styles:
+ card:
+ - background: '#2838c2'
+ - sound_buttons:
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Surround
+ icon: mdi:surround-sound
+ variables:
+ sound_mode: Surround
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Gaming
+ icon: mdi:gamepad-variant
+ variables:
+ sound_mode: Gaming
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Adaptive
+ icon: mdi:home-sound-in-outline
+ variables:
+ sound_mode: Adaptive Sound
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Standard
+ icon: mdi:soundbar
+ variables:
+ sound_mode: Standard
+ - type: custom:button-card
+ template: androidtv_button_status
+ entity: input_boolean.samsung_soundbar_night_mode
+ name: Night Mode
+ icon: mdi:weather-night
+ custom_fields:
+ status: "[[[\n if (entity.state === \"on\"\
+ )\n return ``;\n]]]"
+ tap_action:
+ action: call-service
+ service: input_boolean.toggle
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ - type: custom:button-card
+ template: androidtv_button_status
+ entity: input_boolean.samsung_soundbar_voice_enhancer
+ name: Voice Enhancer
+ icon: mdi:account-voice
+ custom_fields:
+ status: "[[[\n if (entity.state === \"on\"\
+ )\n return ``;\n]]]"
+ tap_action:
+ action: call-service
+ service: input_boolean.toggle
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ hold_action:
+ action: perform-action
+ perform_action: script.find_remote
+ data:
+ media_player: media_player.shield_living_room
+ - type: custom:decluttering-card
+ template: media_card
+ variables:
+ - entity: media_player.universal_living_room
+ visibility:
+ - condition: state
+ entity: media_player.universal_living_room
+ state_not: unavailable
+ - condition: state
+ entity: media_player.universal_living_room
+ state_not: unknown
+ - type: custom:mini-media-player
+ entity: media_player.cast_living_room_speaker
+ name: Google Home
+ icon: mdi:dots-horizontal-circle
+ info: scroll
+ hide:
+ power: true
+ column_span: 1
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
tap_action:
action: navigate
- navigation_path: '#computer-quest'
- custom_fields:
- stat1: "[[[\n var entity_id = 'sensor.quest_battery_level';\n return\
- \ `\n CPU: ${states[entity_id].state !== 'unavailable'\
- \ ? helpers.localize(states[entity_id], undefined, 0) : '?'}`\n\
- ]]]"
- stat2: "[[[\n var entity_id = 'sensor.quest_wifi_link_speed';\n return\
- \ `\n WiFi: ${states[entity_id].state !== 'unavailable'\
- \ ? helpers.localize(states[entity_id], undefined, 0) : '?'}`\n\
- ]]]"
- stat3: "[[[\n var entity_id = 'sensor.quest_battery_temperature';\n\
- \ return `\n \
- \ Temp: ${states[entity_id].state\
- \ !== 'unavailable' ? helpers.localize(states[entity_id], undefined,\
- \ 0) : '?'}`\n]]]"
- info: "[[[\n return ``\n]]]"
- chips:
- card:
- type: custom:mushroom-chips-card
- card_mod:
- style: "ha-card {\n transition: all 0s;\n --chip-background:\
- \ var(--primary-background-color) !important;\n --chip-box-shadow:\
- \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
- }\n"
- chips: []
- styles:
- grid:
- - grid-template-columns: 1fr min-content
- - grid-template-rows: min-content min-content min-content min-content
- min-content min-content min-content;
- - grid-template-areas: '"n i" "s chips" "info chips" "stat1 chips"
- "stat2 chips" "stat3 chips" "stat4 chips"'
- card:
- - padding: 22px 8px 22px 22px
- img_cell:
- - justify-content: start
- - align-self: start
- - position: absolute
- - width: 100px
- - height: 100px
- - right: -20px
- - top: -20px
- - border-radius: 50%
- - background: '[[[ if (states["binary_sensor.quest_interactive"].state
- == "off") return "var(--red-color)"; else return "var(--green-color)"
- ]]]'
- icon:
- - width: 60px
- - color: rgba(0, 0, 0, 0.6)
- name:
- - justify-self: start
- - align-self: start
- - font-size: 20px
- - font-weight: 500
- - color: var(--white-color)
- state:
- - min-height: 30px
- - justify-self: start
- - align-self: start
- - font-size: 14px
- - opacity: '0.7'
- custom_fields:
- stat1:
- - padding-bottom: 2px
- - align-self: start
- - justify-self: start
- - font-size: 14px
- - --text-color-sensor: '[[[ if (states[''sensor.quest_battery_level''].state
- < 16) return "var(--red-color)"; ]]]'
- stat2:
- - padding-bottom: 2px
- - align-self: start
- - justify-self: start
- - font-size: 14px
- - --text-color-sensor: '[[[ if (states[''sensor.quest_wifi_link_speed''].state
- < 800) return "var(--red-color)"; ]]]'
- stat3:
- - align-self: start
- - justify-self: start
- - font-size: 14px
- - --text-color-sensor: '[[[ if (states[''sensor.quest_battery_temperature''].state
- > 80) return "var(--red-color)"; ]]]'
- info:
- - align-self: end
- - justify-self: start
- - text-align: left
- chips:
- - margin-top: 15px
- - justify-content: end
- - align-self: start
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.ecobee_occupancy
+ icon: "{%- if is_state(\"binary_sensor.ecobee_motion\", \"on\") -%}\n mdi:motion-sensor\n\
+ {%- elif is_state(entity, \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
+ {%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.ecobee_motion\", \"on\") -%}\n orange\n\
+ {%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else -%}\n grey\n\
+ {%- endif -%}"
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.ecobee_current_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.ecobee_current_humidity
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:water-percent
+ color: '{% from "util.jinja" import room_humidity %}
+
+ {{ room_humidity(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: camera.livingroom
+ icon: mdi:cctv
+ color: '{{ iif(has_value(entity), "cyan", "red") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Living Room
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.livingroom
+ - stream: livingroom
+ - type: custom:mushroom-template-badge
+ icon: mdi:remote-tv
+ color: orange
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Living Room Media
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_living_room
+ - media: media_player.universal_living_room
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: Cartoon Network
+ icon: fapro:cartoon-network
+ variables:
+ source: Cartoon Network
+ styles:
+ card:
+ - background: '#000000'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: YouTube Kids
+ icon: fapro:youtube-kids
+ variables:
+ source: YouTube Kids
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_living_room
+ name: PBS Kids
+ icon: fapro:pbs-kids
+ variables:
+ source: PBS Kids
+ styles:
+ card:
+ - background: '#2838c2'
+ - sound_buttons:
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Surround
+ icon: mdi:surround-sound
+ variables:
+ sound_mode: Surround
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Gaming
+ icon: mdi:gamepad-variant
+ variables:
+ sound_mode: Gaming
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Adaptive
+ icon: mdi:home-sound-in-outline
+ variables:
+ sound_mode: Adaptive Sound
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_living_room
+ name: Standard
+ icon: mdi:soundbar
+ variables:
+ sound_mode: Standard
+ - type: custom:button-card
+ template: androidtv_button_status
+ entity: input_boolean.samsung_soundbar_night_mode
+ name: Night Mode
+ icon: mdi:weather-night
+ custom_fields:
+ status: "[[[\n if (entity.state === \"on\")\n return\
+ \ ``;\n]]]"
+ tap_action:
+ action: call-service
+ service: input_boolean.toggle
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ - type: custom:button-card
+ template: androidtv_button_status
+ entity: input_boolean.samsung_soundbar_voice_enhancer
+ name: Voice Enhancer
+ icon: mdi:account-voice
+ custom_fields:
+ status: "[[[\n if (entity.state === \"on\")\n return\
+ \ ``;\n]]]"
+ tap_action:
+ action: call-service
+ service: input_boolean.toggle
+ target:
+ entity_id: '[[[ return entity.entity_id ]]]'
+ hold_action:
+ action: perform-action
+ perform_action: script.find_remote
+ data:
+ media_player: media_player.shield_living_room
+ - type: custom:mushroom-template-badge
+ icon: mdi:dots-horizontal-circle
+ color: blue
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Send Message
+ right_button: Send
+ right_button_action:
+ service: script.media_play
+ data:
+ media_player: media_player.cast_living_room_speaker
+ volume: 80
+ content:
+ - name: message
+ label: Message
+ selector:
+ select:
+ custom_value: true
+ options:
+ - label: School
+ value: Time to go to School!
+ - label: Snack
+ value: It's snack time!
+ - label: Lunch
+ value: Hey, come get some lunch.
+ - label: Dinner
+ value: Head up-stairs, it's time for dinner.
+ - label: Breakfast
+ value: It's time for breakfast.
+ cards: []
+ - title: Kitchen
+ path: kitchen
+ icon: mdi:fridge-variant
+ type: sections
+ max_columns: 2
+ sections:
- type: grid
cards:
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#computer-erebus'
- name: Erebus
- icon: mdi:desktop-tower
- button_type: name
+ - type: heading
+ icon: mdi:fridge-variant
+ heading: Kitchen
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.kitchen_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
tap_action:
- action: none
- double_tap_action:
- action: none
+ action: more-info
hold_action:
- action: call-service
- service: script.hass_publish_sensors
- data:
- entity: media_player.erebus
- target: {}
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
- \ {\n display: ${hass.states['binary_sensor.erebus_mic_active'].state\
- \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
- \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\
- \ {\n display: ${hass.states['binary_sensor.erebus_webcam_active'].state\
- \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-2 >\
- \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\
- \ {\n display: ${hass.states['sensor.erebus_windows_updates_software_updates'].state\
- \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-3 > ha-icon\
- \ {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\
- \ {\n display: ${hass.states['sensor.erebus_windows_updates_driver_updates'].state\
- \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-4 > ha-icon\
- \ {\n color: var(--red-color) !important;\n}"
- sub_button:
- - entity: binary_sensor.erebus_mic_active
- show_background: false
- - entity: binary_sensor.erebus_webcam_active
- show_background: false
- - entity: sensor.erebus_windows_updates_software_updates
- show_background: false
- show_state: true
- icon: mdi:arrow-up-bold-circle
+ action: toggle
+ - type: tile
+ entity: light.kitchen
+ name: Main
+ features:
+ - type: light-brightness
+ layout_options:
+ grid_columns: full
+ - features:
+ - type: light-brightness
+ type: tile
+ entity: light.kitchen_island
+ name: Island
+ state_content:
+ - brightness
+ - color_temp_kelvin
+ - type: tile
+ entity: light.dining_room
+ name: Dining
+ features:
+ - type: light-brightness
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Oven
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ show_state: true
+ show_icon: true
+ entity: switch.ge_oven_light
+ content: '{{ state_translated(entity)}}'
+ icon: '{{ iif(is_state(entity, "on"), "mdi:lightbulb", "mdi:lightbulb-off")
+ }}
+
+ '
+ color: '{{ iif(is_state(entity, "on"), "amber", "grey") }}
+
+ '
+ - type: custom:vertical-stack-in-card
+ cards:
+ - type: custom:mushroom-template-card
+ entity: water_heater.ge_oven
+ multiline_secondary: false
+ primary: "{% if is_state_attr(entity, 'operation_mode', 'Off') %}\n\
+ \ Oven\n{% else %}\n {{ state_attr(entity, 'operation_mode') }}\
+ \ ⸱ {{ float(state_attr('water_heater.ge_oven', 'temperature'),\
+ \ 0) | round(0) }}°F\n{% endif %}"
+ secondary: "{% if is_state_attr(entity,'operation_mode', 'Off') %}\n\
+ \ Off\n{% else %}\n Current Temperature - {{ float(state_attr(entity,\
+ \ 'current_temperature')) | round(0) }}°F\n{% endif %}"
+ icon: mdi:stove
+ icon_color: "{% if is_state_attr('water_heater.ge_oven', 'operation_mode',\
+ \ 'Off') %}\n grey\n{% else %}\n red\n{% endif %}\n"
+ tap_action:
+ action: more-info
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ mushroom-shape-icon$: "{%- if has_value(\"sensor.ge_oven_kitchen_timer\"\
+ )\n and has_value(\"sensor.ge_oven_timer_duration\")\n and\
+ \ not is_state(\"sensor.ge_oven_timer_duration\", \"Off\")\n\
+ -%} {%- set entity_remain = states(\"sensor.ge_oven_kitchen_timer\"\
+ ) -%} {%- set entity_duration = states(\"sensor.ge_oven_timer_duration\"\
+ ) -%} {%- set remaining =\n (int(entity_remain.split(\":\"\
+ )[0], 0) * 60)\n + (int(entity_remain.split(\":\")[1], 0))\
+ \ -%}\n{%- set duration =\n (int(entity_duration.split(\":\"\
+ )[0], 0) * 60)\n + (int(entity_duration.split(\":\")[1],\
+ \ 0))\n-%} .shape {\n /* Radial progress bar */\n background:\n\
+ \ radial-gradient(var(--card-background-color) 60%, transparent\
+ \ calc(60% + 1px)),\n conic-gradient(var(--purple-color)\
+ \ {{ ((duration - remaining) / duration * 100) | round() }}%\
+ \ 0%, var(--card-background-color) 0% 100%);\n} .shape:after\
+ \ {\n /* Add back icon shape */\n content: \"\";\n height:\
+ \ 100%;\n width: 100%;\n position: absolute;\n border-radius:\
+ \ var(--icon-border-radius);\n background: var(--shape-color);\n\
+ } {%- endif -%}\n"
+ - type: grid
+ columns: 6
+ square: false
+ cards:
+ - type: custom:mushroom-template-card
+ icon: mdi:power
+ icon_color: "{% if is_state_attr('water_heater.ge_oven', 'operation_mode',\
+ \ 'Off') %}\n grey\n{% else %}\n red\n{% endif %}\n"
+ layout: vertical
+ primary: 'Off'
+ tap_action:
+ action: call-service
+ service: water_heater.set_operation_mode
+ service_data:
+ entity_id: water_heater.ge_oven
+ operation_mode: 'Off'
+ card_mod:
+ style:
+ mushroom-state-info$: ".primary {\n position: relative;\n\
+ \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
+ \ 12px;\n}\n"
+ .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
+ \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
+ \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
+ \ {\n --icon-symbol-size: 18px;\n}\n"
+ - type: custom:mushroom-template-card
+ icon: mdi:thermometer
+ icon_color: "{% if not\n is_state_attr('water_heater.ge_oven',\
+ \ 'operation_mode', 'Off') and\n is_state_attr('water_heater.ge_oven',\
+ \ 'temperature', 250)\n%}\n red\n{% else %}\n grey\n{% endif\
+ \ %}\n"
+ layout: vertical
+ primary: 250°F
+ tap_action:
+ action: call-service
+ service: water_heater.set_temperature
+ data:
+ temperature: 250
+ operation_mode: Bake
+ target:
+ entity_id: water_heater.ge_oven
+ card_mod:
+ style:
+ mushroom-state-info$: ".primary {\n position: relative;\n\
+ \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
+ \ 12px;\n}\n"
+ .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
+ \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
+ \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
+ \ {\n --icon-symbol-size: 18px;\n}\n"
+ - type: custom:mushroom-template-card
+ icon: mdi:thermometer
+ icon_color: "{% if not\n is_state_attr('water_heater.ge_oven','operation_mode','Off')\
+ \ and\n is_state_attr('water_heater.ge_oven','temperature',\
+ \ 350)\n%}\n red\n{% else %}\n grey\n{% endif %}\n"
+ layout: vertical
+ primary: 350°F
+ tap_action:
+ action: call-service
+ service: water_heater.set_temperature
+ data:
+ temperature: 350
+ operation_mode: Bake
+ target:
+ entity_id: water_heater.ge_oven
+ card_mod:
+ style:
+ mushroom-state-info$: ".primary {\n position: relative;\n\
+ \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
+ \ 12px;\n}\n"
+ .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
+ \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
+ \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
+ \ {\n --icon-symbol-size: 18px;\n}\n"
+ - type: custom:mushroom-template-card
+ icon: mdi:thermometer
+ icon_color: "{% if not is_state_attr('water_heater.ge_oven', 'operation_mode',\
+ \ 'Off') and is_state_attr('water_heater.ge_oven', 'temperature',\
+ \ 375) %}\n red\n{% else %}\n grey\n{% endif %}\n"
+ layout: vertical
+ primary: 375°F
+ tap_action:
+ action: call-service
+ service: water_heater.set_temperature
+ data:
+ temperature: 375
+ operation_mode: Bake
+ target:
+ entity_id: water_heater.ge_oven
+ card_mod:
+ style:
+ mushroom-state-info$: ".primary {\n position: relative;\n\
+ \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
+ \ 12px;\n}\n"
+ .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
+ \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
+ \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
+ \ {\n --icon-symbol-size: 18px;\n}\n"
+ - type: custom:mushroom-template-card
+ icon: mdi:thermometer
+ icon_color: "{% if not is_state_attr('water_heater.ge_oven','operation_mode','Off')\
+ \ and is_state_attr('water_heater.ge_oven','temperature', 400)\
+ \ %}\n red\n{% else %}\n grey\n{% endif %}\n"
+ layout: vertical
+ primary: 400°F
+ tap_action:
+ action: call-service
+ service: water_heater.set_temperature
+ data:
+ temperature: 400
+ operation_mode: Bake
+ target:
+ entity_id: water_heater.ge_oven
+ card_mod:
+ style:
+ mushroom-state-info$: ".primary {\n position: relative;\n\
+ \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
+ \ 12px;\n}\n"
+ .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
+ \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
+ \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
+ \ {\n --icon-symbol-size: 18px;\n}\n"
+ - type: custom:mushroom-template-card
+ icon: mdi:thermometer
+ icon_color: "{% if not is_state_attr('water_heater.ge_oven','operation_mode','Off')\
+ \ and is_state_attr('water_heater.ge_oven','temperature', 425)\
+ \ %}\n red\n{% else %}\n grey\n{% endif %}\n"
+ layout: vertical
+ primary: 425°F
+ tap_action:
+ action: call-service
+ service: water_heater.set_temperature
+ data:
+ temperature: 425
+ operation_mode: Bake
+ target:
+ entity_id: water_heater.ge_oven
+ card_mod:
+ style:
+ mushroom-state-info$: ".primary {\n position: relative;\n\
+ \ bottom: 5px !important;\n}\n.container {\n --card-primary-font-size:\
+ \ 12px;\n}\n"
+ .: "ha-card {\n --ha-card-border-width: 0;\n padding-right:\
+ \ 0px !important;\n padding-left: 0px !important;\n padding-bottom:\
+ \ 3px !important;\n padding-top: 3px !important;\n}\nha-state-icon\
+ \ {\n --icon-symbol-size: 18px;\n}\n"
+ - type: custom:mushroom-select-card
+ entity: select.ge_oven_operation
+ name: Mode
+ icon: mdi:heating-coil
+ secondary_info: none
+ layout: horizontal
+ tap_action:
+ action: more-info
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: custom:layout-card
+ layout_type: custom:grid-layout
+ layout:
+ grid-template-columns: 33% 33% 33%
+ grid-template-rows: auto
+ grid-template-areas: '"left center right"'
+ reflow: true
+ margin: 0
+ padding: 0
+ cards:
+ - type: custom:mushroom-template-card
+ entity: binary_sensor.ge_oven_cooktop_status_left_rear_on
+ secondary: Left Rear
+ multiline_secondary: true
+ icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
+ {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
+ icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
+ \ -%}\n disabled\n{%- endif -%}"
+ layout: vertical
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: erebus
- - entity: sensor.erebus_windows_updates_software_updates
- - entity: sensor.erebus_windows_updates_driver_updates
- show_background: false
- show_state: true
- icon: mdi:cog-refresh
+ action: more-info
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
+ \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
+ \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_left_rear_power_pct\"\
+ \ %}\n{% if has_value(power) and states(power) not in [\"\
+ Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
+ {{ states(power) }}%\";\n position: absolute;\n font-weight:\
+ \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
+ }\n{% endif %}\n"
+ mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
+ \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
+ \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
+ \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
+ \ 0 0 1px 15px transparent; }\n}\n"
+ - type: custom:mushroom-template-card
+ entity: binary_sensor.ge_oven_cooktop_status_center_rear_on
+ secondary: Warmer
+ multiline_secondary: true
+ icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
+ {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
+ icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
+ \ -%}\n disabled\n{%- endif -%}"
+ layout: vertical
tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: erebus
- - entity: sensor.erebus_windows_updates_driver_updates
- - type: custom:vertical-stack-in-card
+ action: more-info
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
+ \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
+ \ margin-top: 10px;\n}\n"
+ mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
+ \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
+ \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
+ \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
+ \ 0 0 1px 15px transparent; }\n}\n"
+ - type: custom:mushroom-template-card
+ entity: binary_sensor.ge_oven_cooktop_status_right_rear_on
+ secondary: Right Rear
+ multiline_secondary: true
+ icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
+ {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
+ icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
+ \ -%}\n disabled\n{%- endif -%}"
+ layout: vertical
+ tap_action:
+ action: more-info
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
+ \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
+ \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_right_rear_power_pct\"\
+ \ %}\n{% if has_value(power) and states(power) not in [\"\
+ Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
+ {{ states(power) }}%\";\n position: absolute;\n font-weight:\
+ \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
+ }\n{% endif %}\n"
+ mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
+ \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
+ \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
+ \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
+ \ 0 0 1px 15px transparent; }\n}\n"
+ - type: custom:layout-card
+ layout_type: custom:grid-layout
+ layout:
+ grid-template-columns: 33% 33% 33%
+ grid-template-rows: auto
+ grid-template-areas: '"left . right"'
+ reflow: true
+ margin: 0
+ padding: 0
cards:
- - type: custom:decluttering-card
- template: computer_power
- variables:
- - computer: erebus
- - type: conditional
- conditions:
- - entity: binary_sensor.erebus_connected
- state_not: unavailable
- - entity: binary_sensor.erebus_connected
- state_not: unknown
- - entity: binary_sensor.erebus_connected
- state_not: 'off'
- card:
- type: custom:decluttering-card
- template: computer_apps
- variables:
- - computer: erebus
- - type: conditional
- conditions:
- - entity: media_player.erebus
- state_not: unavailable
- - entity: media_player.erebus
- state_not: unknown
- - entity: media_player.erebus
- state_not: 'off'
- card:
- type: custom:bubble-card
- card_type: media-player
- card_layout: large
- entity: media_player.erebus
- hide:
- power_button: true
- - type: custom:decluttering-card
- template: uptime_card
- variables:
- - entity: binary_sensor.erebus_connected
- - name: Erebus Up-Time
- - icon: mdi:connection
- - type: custom:decluttering-card
- template: four_graphs
- variables:
- - graph_1_name: CPU
- - graph_1_icon: mdi:cpu-64-bit
- - graph_1_entities:
- - entity: sensor.erebus_cpu_load
- name: Usage
- color: var(--amber-color)
- show_state: true
- show_points: false
- - entity: sensor.erebus_cpu_clock_speed
- name: Speed
- color: var(--lime-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_2_name: GPU
- - graph_2_icon: mdi:expansion-card
- - graph_2_entities:
- - entity: sensor.erebus_gpu_load
- name: Load
- color: var(--green-color)
- show_state: true
- show_points: false
- - entity: sensor.erebus_gpu_temperature
- name: Temperature
- color: var(--pink-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_3_name: Storage
- - graph_3_icon: mdi:harddisk
- - graph_3_entities:
- - entity: sensor.erebus_storage_c
- attribute: UsedSpacePercentage
- unit: '%'
- name: Win11
- color: var(--blue-color)
- show_state: true
- show_points: false
- - entity: sensor.erebus_storage_b
- attribute: UsedSpacePercentage
- unit: '%'
- name: Backup
- color: var(--indigo-color)
- show_state: true
- show_points: false
- - entity: sensor.erebus_storage_d
- attribute: UsedSpacePercentage
- unit: '%'
- name: Dev Drive
- color: var(--lime-color)
- show_state: true
- show_points: false
- - graph_4_name: RAM
- - graph_4_icon: mdi:memory
- - graph_4_entities:
- - entity: sensor.erebus_memory_usage
- name: Usage
- color: var(--purple-color)
- show_state: true
- show_points: false
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#computer-nasya'
- name: Nasya
- icon: mdi:laptop
- button_type: name
+ - type: custom:mushroom-template-card
+ view_layout:
+ grid-area: left
+ entity: binary_sensor.ge_oven_cooktop_status_left_front_on
+ secondary: Left Front
+ multiline_secondary: true
+ icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
+ {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
+ icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
+ \ -%}\n disabled\n{%- endif -%}"
+ layout: vertical
+ tap_action:
+ action: more-info
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
+ \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
+ \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_left_front_power_pct\"\
+ \ %}\n{% if has_value(power) and states(power) not in [\"\
+ Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
+ {{ states(power) }}%\";\n position: absolute;\n font-weight:\
+ \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
+ }\n{% endif %}\n"
+ mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
+ \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
+ \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
+ \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
+ \ 0 0 1px 15px transparent; }\n}\n"
+ - type: custom:mushroom-template-card
+ view_layout:
+ grid-area: right
+ entity: binary_sensor.ge_oven_cooktop_status_right_front_on
+ secondary: Right Front
+ multiline_secondary: true
+ icon: "{%- if is_state(entity, \"on\") -%}\n mdi:circle-slice-8\n\
+ {%- else -%}\n mdi:circle-outline\n{%- endif -%}"
+ icon_color: "{%- if is_state(entity, \"on\") -%}\n red\n{%- else\
+ \ -%}\n disabled\n{%- endif -%}"
+ layout: vertical
+ tap_action:
+ action: more-info
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-background: none;\n --ha-card-box-shadow:\
+ \ none;\n --ha-card-border-width: 0;\n --icon-size: 48px;\n\
+ \ margin-top: 10px;\n}\n{% set power = \"sensor.ge_oven_cooktop_status_right_front_power_pct\"\
+ \ %}\n{% if has_value(power) and states(power) not in [\"\
+ Empty\", \"unknown\"] %}\nha-card:after {\n content: \"\
+ {{ states(power) }}%\";\n position: absolute;\n font-weight:\
+ \ bolder;\n top: -2px;\n right: 2px;\n font-size: 12px;\n\
+ }\n{% endif %}\n"
+ mushroom-shape-icon$: ".shape {\n {% if is_state(config.entity,\
+ \ \"on\") %}\n --shape-animation: ping 2s infinite;\n \
+ \ {% endif %}\n}\n@keyframes ping {\n 0% { box-shadow:\
+ \ 0 0 1px 15px rgba(255,254,249, 0.25); }\n 100% { box-shadow:\
+ \ 0 0 1px 15px transparent; }\n}\n"
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.kitchen_occupancy
+ icon: "{%- if is_state(\"binary_sensor.kitchen_motion\", \"on\") -%}\n mdi:motion-sensor\n\
+ {%- elif is_state(entity, \"on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n\
+ {%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.kitchen_motion\", \"on\") -%}\n orange\n\
+ {%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else -%}\n grey\n\
+ {%- endif -%}"
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.kitchen_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - type: entity
+ show_name: false
+ show_state: true
+ show_icon: true
+ entity: sensor.airgradient_kitchen_co2
+ color: green
+ tap_action:
+ action: more-info
+ - type: entity
+ show_name: false
+ show_state: true
+ show_icon: true
+ entity: sensor.airgradient_kitchen_pm_2_5_aqi
+ - title: Family Room
+ path: family
+ icon: mdi:gamepad-circle
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:gamepad
+ heading: Family Room
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: script.family_room_game_light_mode
+ icon: mdi:light-flood-up
+ color: pink
tap_action:
- action: none
- double_tap_action:
- action: none
+ action: call-service
+ service: script.family_room_game_light_mode
+ - type: custom:mushroom-template-badge
+ entity: light.family_room_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
hold_action:
+ action: toggle
+ - type: tile
+ entity: light.family_room
+ name: Main
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.family_room_lamp
+ name: Lamp
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.stairway
+ name: Stairs
+ vertical: true
+ - type: tile
+ entity: light.basement_hallway
+ name: Hallway
+ features:
+ - type: light-brightness
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:play-speed
+ heading: Media
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ icon: mdi:remote-tv
+ color: orange
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Family Room Media
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_family_room
+ - media: media_player.universal_family_room
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Cartoon Network
+ icon: fapro:cartoon-network
+ variables:
+ source: Cartoon Network
+ styles:
+ card:
+ - background: '#000000'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: YouTube Kids
+ icon: fapro:youtube-kids
+ variables:
+ source: YouTube Kids
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: PBS Kids
+ icon: fapro:pbs-kids
+ variables:
+ source: PBS Kids
+ styles:
+ card:
+ - background: '#2838c2'
+ - harmony_sources:
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: Shield
+ icon: mdi:motion-play-outline
+ variables:
+ activity: Shield TV
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PC
+ icon: mdi:desktop-tower
+ variables:
+ activity: Computer
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PS4
+ icon: fapro:ps4
+ variables:
+ activity: PS4
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PS3
+ icon: fapro:ps3
+ variables:
+ activity: PS3
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: XBox
+ icon: mdi:microsoft-xbox
+ variables:
+ activity: XBox
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: Switch
+ icon: mdi:nintendo-switch
+ variables:
+ activity: Switch
+ - sound_buttons:
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Direct
+ icon: mdi:surround-sound-5-1
+ variables:
+ sound_mode: Direct
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Surround
+ icon: mdi:surround-sound-2-1
+ variables:
+ sound_mode: Dolby Digital
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Multi-Channel
+ icon: mdi:surround-sound
+ variables:
+ sound_mode: All Zone Stereo
+ - type: custom:decluttering-card
+ template: media_card
+ variables:
+ - entity: media_player.universal_family_room
+ visibility:
+ - condition: state
+ entity: media_player.universal_family_room
+ state_not: unavailable
+ - condition: state
+ entity: media_player.universal_family_room
+ state_not: unknown
+ - type: custom:mini-media-player
+ entity: media_player.cast_family_room_speaker
+ name: Google Home
+ icon: mdi:dots-horizontal-circle
+ info: scroll
+ hide:
+ power: true
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:spotlight
+ heading: Dreamscreen
+ heading_style: subtitle
+ - type: horizontal-stack
+ cards:
+ - type: custom:mushroom-template-card
+ primary: Video
+ entity: dreamscreen.family_room
+ icon: mdi:television
+ icon_color: "{%- if is_state_attr(entity, \"device_mode\", 1) -%}\n\
+ \ purple\n{%- else -%}\n grey\n{%- endif -%}"
+ tap_action:
action: call-service
- service: script.hass_publish_sensors
+ service: dreamscreen.set_mode
data:
- entity: media_player.nasya
- target: {}
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
- \ {\n display: ${hass.states['binary_sensor.nasya_mic_active'].state\
- \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
- \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\
- \ {\n display: ${hass.states['binary_sensor.nasya_webcam_active'].state\
- \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-2 >\
- \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\
- \ {\n display: ${hass.states['sensor.nasya_windows_updates_software_updates'].state\
- \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-3 > ha-icon\
- \ {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\
- \ {\n display: ${hass.states['sensor.nasya_windows_updates_driver_updates'].state\
- \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-4 > ha-icon\
- \ {\n color: var(--red-color) !important;\n}"
- sub_button:
- - entity: binary_sensor.nasya_mic_active
- show_background: false
- - entity: binary_sensor.nasya_webcam_active
- show_background: false
- - entity: sensor.nasya_windows_updates_software_updates
- show_background: false
- show_state: true
- icon: mdi:arrow-up-bold-circle
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: nasya
- - entity: sensor.nasya_windows_updates_software_updates
- - entity: sensor.nasya_windows_updates_driver_updates
- show_background: false
- show_state: true
- icon: mdi:cog-refresh
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: nasya
- - entity: sensor.nasya_windows_updates_driver_updates
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:decluttering-card
- template: computer_power
- variables:
- - computer: nasya
- - type: conditional
- conditions:
- - entity: binary_sensor.nasya_connected
- state_not: unavailable
- - entity: binary_sensor.nasya_connected
- state_not: unknown
- - entity: binary_sensor.nasya_connected
- state_not: 'off'
- card:
- type: custom:decluttering-card
- template: computer_apps
- variables:
- - computer: nasya
- - type: conditional
- conditions:
- - entity: media_player.nasya
- state_not: unavailable
- - entity: media_player.nasya
- state_not: unknown
- - entity: media_player.nasya
- state_not: 'off'
- card:
- type: custom:bubble-card
- card_type: media-player
- card_layout: large
- entity: media_player.nasya
- hide:
- power_button: true
- - type: custom:decluttering-card
- template: uptime_card
- variables:
- - entity: binary_sensor.nasya_connected
- - name: Nasya Up-Time
- - icon: mdi:connection
+ entity_id: dreamscreen.family_room
+ mode: 1
+ target:
+ entity_id: dreamscreen.family_room
+ - type: custom:mushroom-template-card
+ primary: Music
+ entity: dreamscreen.family_room
+ icon: mdi:music-note
+ icon_color: "{%- if is_state_attr(entity, \"device_mode\", 2) -%}\n\
+ \ blue\n{%- else -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: call-service
+ service: dreamscreen.set_mode
+ data:
+ entity_id: dreamscreen.family_room
+ mode: 2
+ target:
+ entity_id: dreamscreen.family_room
+ - type: custom:mushroom-template-card
+ primary: Ambient
+ entity: dreamscreen.family_room
+ icon: mdi:lightbulb-on
+ icon_color: "{%- if is_state_attr(entity, \"device_mode\", 3) -%}\n\
+ \ amber\n{%- else -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: call-service
+ service: dreamscreen.set_mode
+ data:
+ entity_id: dreamscreen.family_room
+ mode: 3
+ target:
+ entity_id: dreamscreen.family_room
+ - type: custom:mushroom-template-card
+ primary: Power
+ entity: dreamscreen.family_room
+ icon: mdi:power
+ icon_color: red
+ tap_action:
+ action: call-service
+ service: dreamscreen.set_mode
+ data:
+ entity_id: dreamscreen.family_room
+ mode: 0
+ target:
+ entity_id: dreamscreen.family_room
+ visibility:
+ - condition: state
+ entity: dreamscreen.family_room
+ state: 'on'
+ layout_options:
+ grid_columns: full
+ - type: conditional
+ conditions:
+ - entity: sensor.dreamscreen_family_room_mode
+ state: Ambient
+ card:
+ type: custom:mushroom-select-card
+ entity: input_select.dreamscreen_family_room_scene
+ name: Ambient Scene
+ layout: horizontal
+ secondary_info: none
+ icon_color: amber
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.family_room_occupancy
+ icon: "{%- if is_state(\"binary_sensor.family_room_motion\", \"on\") -%}\n\
+ \ mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n mdi:walk\n\
+ {%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.family_room_motion\", \"on\") -%}\n\
+ \ orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else\
+ \ -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.family_room_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.quest_in_use
+ icon: fapro:meta
+ color: '{{ iif(is_state(entity, "on"), "blue", "grey") }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: camera.family_room
+ icon: mdi:cctv
+ color: '{{ iif(has_value(entity), "cyan", "red") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Family Room
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
- type: custom:decluttering-card
- template: four_graphs
+ template: camera_popup
variables:
- - graph_1_name: CPU
- - graph_1_icon: mdi:cpu-64-bit
- - graph_1_entities:
- - entity: sensor.nasya_cpu_load
- name: Usage
- color: var(--amber-color)
- show_state: true
- show_points: false
- - entity: sensor.nasya_cpu_clock_speed
- name: Speed
- color: var(--lime-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_2_name: GPU
- - graph_2_icon: mdi:expansion-card
- - graph_2_entities:
- - entity: sensor.nasya_gpu_load
- name: Load
- color: var(--green-color)
- show_state: true
- show_points: false
- - entity: sensor.nasya_gpu_temperature
- name: Temperature
- color: var(--pink-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_3_name: Storage
- - graph_3_icon: mdi:harddisk
- - graph_3_entities:
- - entity: sensor.nasya_storage_c
- attribute: UsedSpacePercentage
- unit: '%'
- name: Win11
- color: var(--blue-color)
- show_state: true
- show_points: false
- - graph_4_name: RAM
- - graph_4_icon: mdi:memory
- - graph_4_entities:
- - entity: sensor.nasya_memory_usage
- name: Usage
- color: var(--purple-color)
- show_state: true
- show_points: false
+ - camera: camera.family_room
+ - stream: familyroom
+ - type: custom:mushroom-template-badge
+ icon: mdi:remote-tv
+ color: orange
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Family Room Media
+ content:
+ type: custom:vertical-stack-in-card
card_mod:
style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
\ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_family_room
+ - media: media_player.universal_family_room
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: Cartoon Network
+ icon: fapro:cartoon-network
+ variables:
+ source: Cartoon Network
+ styles:
+ card:
+ - background: '#000000'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: YouTube Kids
+ icon: fapro:youtube-kids
+ variables:
+ source: YouTube Kids
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_family_room
+ name: PBS Kids
+ icon: fapro:pbs-kids
+ variables:
+ source: PBS Kids
+ styles:
+ card:
+ - background: '#2838c2'
+ - harmony_sources:
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: Shield
+ icon: mdi:motion-play-outline
+ variables:
+ activity: Shield TV
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PC
+ icon: mdi:desktop-tower
+ variables:
+ activity: Computer
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PS4
+ icon: fapro:ps4
+ variables:
+ activity: PS4
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: PS3
+ icon: fapro:ps3
+ variables:
+ activity: PS3
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: XBox
+ icon: mdi:microsoft-xbox
+ variables:
+ activity: XBox
+ - type: custom:button-card
+ template: androidtv_harmony_source
+ entity: remote.harmony_family_room
+ name: Switch
+ icon: mdi:nintendo-switch
+ variables:
+ activity: Switch
+ - sound_buttons:
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Direct
+ icon: mdi:surround-sound-5-1
+ variables:
+ sound_mode: Direct
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Surround
+ icon: mdi:surround-sound-2-1
+ variables:
+ sound_mode: Dolby Digital
+ - type: custom:button-card
+ template: androidtv_remote_sound_mode
+ entity: media_player.universal_family_room
+ name: Multi-Channel
+ icon: mdi:surround-sound
+ variables:
+ sound_mode: All Zone Stereo
+ - type: custom:mushroom-template-badge
+ icon: mdi:dots-horizontal-circle
+ color: blue
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Send Message
+ right_button: Send
+ right_button_action:
+ service: script.media_play
+ data:
+ media_player: media_player.cast_family_room_speaker
+ volume: 90
+ content:
+ - name: message
+ label: Message
+ selector:
+ select:
+ custom_value: true
+ options:
+ - label: School
+ value: Time to go to School!
+ - label: Snack
+ value: It's snack time!
+ - label: Lunch
+ value: Hey, come get some lunch.
+ - label: Dinner
+ value: Head up-stairs, it's time for dinner.
+ - label: Breakfast
+ value: It's time for breakfast.
+ - label: Ethan up-stairs
+ value: Hey Ethan, come up-stairs please.
+ - label: Emma up-stairs
+ value: Hey Emma, come up-stairs please.
+ - label: Kids up-stairs
+ value: Hey kids, come up-stairs please.
+ cards: []
+ - title: Theater Room
+ path: theater
+ icon: mdi:projector
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:projector
+ heading: Theater Room
+ heading_style: title
+ column_span: 2
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.theater_room_occupancy
+ icon: "{%- if is_state(\"binary_sensor.theater_room_motion\", \"on\") -%}\n\
+ \ mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n mdi:walk\n\
+ {%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.theater_room_motion\", \"on\") -%}\n\
+ \ orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else\
+ \ -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.theater_room_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - title: Josh's Office
+ path: josh-office
+ icon: mdi:chair-rolling
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:chair-rolling
+ heading: Josh's Office
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_adapt_brightness_office
+ icon: mdi:brightness-auto
+ color: amber
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_adapt_color_office
+ icon: mdi:palette
+ color: pink
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_sleep_mode_office
+ icon: mdi:sleep
+ color: cyan
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_office
+ icon: mdi:theme-light-dark
+ color: green
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: light.joshua_office_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: light.joshua_office
+ name: Main
+ features:
+ - type: light-brightness
+ state_content:
+ - brightness
+ - color_temp_kelvin
+ - type: tile
+ entity: light.joshua_office_lamp
+ name: Lamp
+ features:
+ - type: light-brightness
+ state_content:
+ - brightness
+ - color_temp_kelvin
+ - type: tile
+ entity: light.wled_joshua_office_desk
+ name: Desk
+ features:
+ - type: light-brightness
+ state_content:
+ - brightness
+ - effect
+ - type: tile
+ entity: light.joshua_office_shelf_led
+ name: Shelf
+ vertical: true
+ - type: custom:mini-media-player
+ entity: media_player.cast_office_speaker
+ name: Google Home
+ icon: mdi:dots-horizontal-circle
+ info: scroll
+ hide:
+ power: true
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.apollo_msr_1_office_radar_target
+ icon: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
+ , \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n\
+ \ mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
+ , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n\
+ {%- else -%}\n disabled\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: none
+ - type: custom:mushroom-template-badge
+ entity: sensor.joshua_office_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - type: entity
+ show_name: false
+ show_state: true
+ show_icon: true
+ entity: sensor.apollo_msr_1_office_co2
+ color: green
+ tap_action:
+ action: more-info
+ - title: Amy's Office
+ path: amy-office
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:skull
+ heading: Amy's Office
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_adapt_brightness_amy_office
+ icon: mdi:brightness-auto
+ color: amber
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_adapt_color_amy_office
+ icon: mdi:palette
+ color: pink
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_sleep_mode_amy_office
+ icon: mdi:sleep
+ color: cyan
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: switch.adaptive_lighting_amy_office
+ icon: mdi:theme-light-dark
+ color: green
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: light.amy_office_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: light.amy_office
+ name: Main
+ features:
+ - type: light-brightness
+ layout_options:
+ grid_columns: full
+ icon: mdi:skull
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.amy_office_occupancy
+ icon: "{%- if is_state(\"binary_sensor.amy_office_motion\", \"on\") -%}\n\
+ \ mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n mdi:walk\n\
+ {%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.amy_office_motion\", \"on\") -%}\n\
+ \ orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else\
+ \ -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: none
+ - type: custom:mushroom-template-badge
+ entity: sensor.amy_office_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - title: Ethan
+ path: ethan
+ icon: mdi:robot
+ type: sections
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:robot
+ heading: Ethan
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.ethan_bedroom_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: light.ethan_bedroom
+ name: Main
+ features:
+ - type: light-brightness
+ layout_options:
+ grid_columns: full
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:light-flood-up
+ heading: Nebula Projector
+ heading_style: subtitle
+ - type: tile
+ entity: switch.nebula_projector_ethan_main_switch
+ name: Main
+ layout_options:
+ grid_columns: full
- type: vertical-stack
cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#computer-ardena'
- name: Ardena
- icon: mdi:steam
- button_type: name
+ - type: tile
+ entity: select.nebula_projector_ethan_scene
+ name: Scene
+ icon: mdi:play-box-outline
+ hide_state: true
+ features:
+ - type: select-options
+ - type: grid
+ square: false
+ columns: 3
+ cards:
+ - type: tile
+ entity: light.nebula_projector_ethan_light
+ icon: mdi:crystal-ball
+ name: Light
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.nebula_projector_ethan_laser
+ name: Laser
+ color: green
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: fan.nebula_projector_ethan_motor
+ name: Motor
+ features:
+ - type: fan-speed
+ visibility:
+ - condition: state
+ entity: switch.nebula_projector_ethan_main_switch
+ state: 'on'
+ max_columns: 2
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.ethan_bedroom_occupancy
+ icon: "{%- if is_state(\"binary_sensor.ethan_bedroom_motion\", \"on\") -%}\n\
+ \ mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n mdi:walk\n\
+ {%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.ethan_bedroom_motion\", \"on\") -%}\n\
+ \ orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else\
+ \ -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: none
+ - type: custom:mushroom-template-badge
+ entity: sensor.ethan_bedroom_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - title: Emma
+ path: emma
+ icon: mdi:unicorn-variant
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:unicorn-variant
+ heading: Emma
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.emma_bedroom_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
tap_action:
- action: none
- double_tap_action:
- action: none
+ action: more-info
hold_action:
- action: call-service
- service: script.hass_publish_sensors
- data:
- entity: media_player.ardena
- target: {}
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}"
- sub_button:
- - entity: fan.computer
- show_background: false
- - entity: binary_sensor.ardena_mic_active
- show_background: false
- - entity: binary_sensor.ardena_webcam_active
- show_background: false
- - entity: sensor.ardena_windows_updates_software_updates
- show_background: false
- show_state: true
- icon: mdi:arrow-up-bold-circle
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: ardena
- - entity: sensor.ardena_windows_updates_software_updates
- - entity: sensor.ardena_windows_updates_driver_updates
- show_background: false
- show_state: true
- icon: mdi:cog-refresh
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: ardena
- - entity: sensor.ardena_windows_updates_driver_updates
- - type: custom:vertical-stack-in-card
+ action: toggle
+ - type: tile
+ entity: light.emma_bedroom
+ name: Main
+ features:
+ - type: light-brightness
+ layout_options:
+ grid_columns: full
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:light-flood-up
+ heading: Nebula Projector
+ heading_style: subtitle
+ - type: tile
+ entity: switch.nebula_projector_emma_main_switch
+ name: Main
+ layout_options:
+ grid_columns: full
+ - type: vertical-stack
+ cards:
+ - type: tile
+ entity: select.nebula_projector_emma_scene
+ name: Scene
+ icon: mdi:play-box-outline
+ hide_state: true
+ features:
+ - type: select-options
+ - type: grid
+ square: false
+ columns: 3
cards:
- - type: custom:decluttering-card
- template: computer_power
- variables:
- - computer: ardena
- - type: conditional
- conditions:
- - entity: binary_sensor.ardena_connected
- state_not: unavailable
- - entity: binary_sensor.ardena_connected
- state_not: unknown
- - entity: binary_sensor.ardena_connected
- state_not: 'off'
- card:
- type: custom:decluttering-card
- template: computer_apps
- variables:
- - computer: ardena
- - type: conditional
- conditions:
- - entity: binary_sensor.ardena_connected
- state: 'on'
- card:
- type: custom:decluttering-card
- template: computer_apps
- variables:
- - computer: ardena
- - type: conditional
- conditions:
- - entity: media_player.ardena
- state_not: unavailable
- - entity: media_player.ardena
- state_not: unknown
- - entity: media_player.ardena
- state_not: 'off'
- card:
- type: custom:bubble-card
- card_type: media-player
- card_layout: large
- entity: media_player.ardena
- hide:
- power_button: true
- - type: custom:decluttering-card
- template: uptime_card
- variables:
- - entity: binary_sensor.ardena_connected
- - name: Ardena Up-Time
- - icon: mdi:connection
- - type: custom:decluttering-card
- template: four_graphs
- variables:
- - graph_1_name: CPU
- - graph_1_icon: mdi:cpu-64-bit
- - graph_1_entities:
- - entity: sensor.ardena_cpu_load
- name: Usage
- color: var(--amber-color)
- show_state: true
- show_points: false
- - entity: sensor.ardena_cpu_clock_speed
- name: Speed
- color: var(--lime-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_2_name: GPU
- - graph_2_icon: mdi:expansion-card
- - graph_2_entities:
- - entity: sensor.ardena_gpu_load
- name: Load
- color: var(--green-color)
- show_state: true
- show_points: false
- - entity: sensor.ardena_gpu_temperature
- name: Temperature
- color: var(--pink-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_3_name: Storage
- - graph_3_icon: mdi:harddisk
- - graph_3_entities:
- - entity: sensor.ardena_storage_c
- attribute: UsedSpacePercentage
- unit: '%'
- name: Win11
- color: var(--blue-color)
- show_state: true
- show_points: false
- - graph_4_name: RAM
- - graph_4_icon: mdi:memory
- - graph_4_entities:
- - entity: sensor.ardena_memory_usage
- name: Usage
- color: var(--purple-color)
- show_state: true
- show_points: false
+ - type: tile
+ entity: light.nebula_projector_emma_light
+ icon: mdi:crystal-ball
+ name: Light
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: light.nebula_projector_emma_laser
+ name: Laser
+ color: green
+ features:
+ - type: light-brightness
+ - type: tile
+ entity: fan.nebula_projector_emma_motor
+ name: Motor
+ features:
+ - type: fan-speed
+ visibility:
+ - condition: state
+ entity: switch.nebula_projector_emma_main_switch
+ state: 'on'
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.emma_bedroom_occupancy
+ icon: "{%- if is_state(\"binary_sensor.emma_bedroom_motion\", \"on\") -%}\n\
+ \ mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n mdi:walk\n\
+ {%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.emma_bedroom_motion\", \"on\") -%}\n\
+ \ orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else\
+ \ -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: none
+ - type: custom:mushroom-template-badge
+ entity: sensor.emma_bedroom_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - title: Main Bedroom
+ path: main-bed
+ icon: mdi:bed-king
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:bed-king
+ heading: Main Bedroom
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.main_bedroom_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: light.main_bedroom
+ name: Main
+ features:
+ - type: light-brightness
+ layout_options:
+ grid_columns: full
+ - features:
+ - type: light-brightness
+ type: tile
+ entity: light.main_bedroom_fan_light
+ name: Fan Light
+ - type: tile
+ entity: light.main_bedroom_floor_lamp
+ name: Floor Lamp
+ features:
+ - type: light-brightness
+ - features:
+ - type: fan-speed
+ type: tile
+ entity: fan.main_bedroom_ceiling
+ name: Fan
+ hide_state: true
+ card_mod:
+ style:
+ .: "ha-tile-icon {\n --tile-color:\n {% if is_state(config.entity,\
+ \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
+ \ | int(0) %}\n {% if perc == 33 %} var(--green-color)\n {%\
+ \ elif perc == 66 %} var(--yellow-color)\n {% else %} var(--orange-color)\n\
+ \ {% endif %}\n {% else %} var(--state-inactive-color)\n \
+ \ {% endif %};\n}\nha-state-icon {\n animation:\n {% if is_state(config.entity,\
+ \ 'on') %}\n {% set perc = state_attr(config.entity, 'percentage')\
+ \ | int %}\n {% set base = 'rotation infinite linear' %}\n\
+ \ {% if perc == 33 %} 1s {{base}}\n {% elif perc == 66\
+ \ %} 0.75s {{base}}\n {% else %} 0.66s {{base}}\n {%\
+ \ endif %}\n {% else %} none\n {% endif %};\n}\n@keyframes\
+ \ rotation {\n 0% {transform: rotate(0deg);}\n 100% {transform:\
+ \ rotate(360deg);}\n}\n"
+ layout_options:
+ grid_columns: full
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:play-speed
+ heading: Media
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ icon: mdi:remote-tv
+ color: orange
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Main Bedroom Media
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_main_bedroom
+ - media: media_player.universal_main_bedroom
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - type: custom:decluttering-card
+ template: media_card
+ variables:
+ - entity: media_player.universal_main_bedroom
+ visibility:
+ - condition: state
+ entity: media_player.universal_main_bedroom
+ state_not: unavailable
+ - condition: state
+ entity: media_player.universal_main_bedroom
+ state_not: unknown
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.main_bedroom_occupancy
+ icon: "{%- if is_state(\"binary_sensor.main_bedroom_motion\", \"on\") -%}\n\
+ \ mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n mdi:walk\n\
+ {%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.main_bedroom_motion\", \"on\") -%}\n\
+ \ orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n{%- else\
+ \ -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.main_bedroom_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ label: Main
+ - type: custom:mushroom-template-badge
+ entity: sensor.main_bathroom_sensor_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ label: Bath
+ - type: custom:mushroom-template-badge
+ entity: sensor.main_bathroom_sensor_humidity
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:water-percent
+ color: '{% from "util.jinja" import room_humidity %}
+
+ {{ room_humidity(entity) }}'
+ tap_action:
+ action: more-info
+ label: Bath
+ - type: custom:mushroom-template-badge
+ icon: mdi:remote-tv
+ color: orange
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Main Bedroom Media
+ content:
+ type: custom:vertical-stack-in-card
card_mod:
style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
\ 0;\n}\n"
- - type: vertical-stack
+ cards:
+ - type: custom:decluttering-card
+ template: androidtv_remote
+ variables:
+ - remote: remote.androidtv_main_bedroom
+ - media: media_player.universal_main_bedroom
+ - sources:
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Plex
+ icon: mdi:plex
+ variables:
+ source: Plex
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#d5a004'
+ icon:
+ - color: var(--black-color)
+ name:
+ - color: var(--black-color)
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Prime Video
+ icon: fapro:prime-video
+ variables:
+ source: Prime Video
+ styles:
+ card:
+ - background: '#202d3c'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: SmartTube
+ icon: fapro:smarttube
+ variables:
+ source: SmartTube
+ styles:
+ card:
+ - background: '#bd2424'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Crunchyroll
+ icon: fapro:crunchyroll
+ variables:
+ source: Crunchyroll
+ badge_icon_color: var(--black-color)
+ styles:
+ card:
+ - background: '#f47521'
+ - type: custom:button-card
+ template: androidtv_remote_source
+ entity: media_player.universal_main_bedroom
+ name: Spotify
+ icon: mdi:spotify
+ variables:
+ source: Spotify
+ styles:
+ card:
+ - background: '#1db954'
+ - title: Utility
+ icon: mdi:progress-wrench
+ path: utility
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:progress-wrench
+ heading: Utility
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:robot-vacuum
+ heading: Robovacs
+ heading_style: subtitle
+ - type: custom:tabbed-card
+ attributes:
+ minWidth: true
+ styles:
+ --mdc-theme-primary: var(--primary-color)
+ tabs:
+ - card:
+ type: custom:xiaomi-vacuum-map-card
+ map_source:
+ camera: camera.r2dee2_map
+ calibration_source:
+ camera: true
+ entity: vacuum.r2dee2
+ vacuum_platform: Tasshack/dreame-vacuum
+ map_modes:
+ - template: vacuum_clean_zone
+ - template: vacuum_clean_point
+ - template: vacuum_clean_segment
+ predefined_selections:
+ - id: '1'
+ icon:
+ name: mdi:home-outline
+ x: -900
+ y: 9200
+ label:
+ text: Main Bathroom
+ x: -900
+ y: 9200
+ offset_y: 35
+ outline:
+ - - -2200
+ - 8000
+ - - 400
+ - 8000
+ - - 400
+ - 9700
+ - - -2200
+ - 9700
+ - id: '2'
+ icon:
+ name: mdi:home-outline
+ x: -2650
+ y: 9100
+ label:
+ text: Main Closet
+ x: -2650
+ y: 9100
+ offset_y: 35
+ outline:
+ - - -3600
+ - 7950
+ - - -2200
+ - 7950
+ - - -2200
+ - 10800
+ - - -3600
+ - 10800
+ - id: '3'
+ icon:
+ name: mdi:home-outline
+ x: -6050
+ y: 9400
+ label:
+ text: Amy's Office
+ x: -6050
+ y: 9400
+ offset_y: 35
+ outline:
+ - - -7550
+ - 7750
+ - - -4200
+ - 7750
+ - - -4200
+ - 10800
+ - - -7550
+ - 10800
+ - id: '5'
+ icon:
+ name: mdi:foot-print
+ x: -2600
+ y: 7300
+ label:
+ text: Corridor
+ x: -2600
+ y: 7300
+ offset_y: 35
+ outline:
+ - - -4550
+ - 6700
+ - - -700
+ - 6700
+ - - -700
+ - 8250
+ - - -4550
+ - 8250
+ - id: '6'
+ icon:
+ name: mdi:toilet
+ x: -2650
+ y: 5950
+ label:
+ text: Bathroom
+ x: -2650
+ y: 5950
+ offset_y: 35
+ outline:
+ - - -3500
+ - 5200
+ - - -2150
+ - 5200
+ - - -2150
+ - 6700
+ - - -3500
+ - 6700
+ - id: '7'
+ icon:
+ name: mdi:home-outline
+ x: 2600
+ y: 7900
+ label:
+ text: Main Bedroom
+ x: 2600
+ y: 7900
+ offset_y: 35
+ outline:
+ - - -700
+ - 6850
+ - - 4750
+ - 6850
+ - - 4750
+ - 10850
+ - - -700
+ - 10850
+ - id: '8'
+ icon:
+ name: mdi:sofa-outline
+ x: -750
+ y: 4300
+ label:
+ text: Living Room
+ x: -750
+ y: 4300
+ offset_y: 35
+ outline:
+ - - 4100
+ - 1850
+ - - -4000
+ - 1850
+ - - -4000
+ - 4200
+ - - -2150
+ - 4200
+ - - -2150
+ - 6700
+ - - 4100
+ - 6700
+ - id: '9'
+ icon:
+ name: mdi:home-outline
+ x: -4800
+ y: 3250
+ label:
+ text: Entry
+ x: -4800
+ y: 3250
+ offset_y: 35
+ outline:
+ - - -5500
+ - 2300
+ - - -3950
+ - 2300
+ - - -3950
+ - 4100
+ - - -5500
+ - 4100
+ - id: '10'
+ icon:
+ name: mdi:home-outline
+ x: -1600
+ y: 800
+ label:
+ text: Mud Room
+ x: -1600
+ y: 800
+ offset_y: 35
+ outline:
+ - - -2400
+ - -200
+ - - -750
+ - -200
+ - - -750
+ - 1700
+ - - -2400
+ - 1700
+ - id: '11'
+ icon:
+ name: mdi:home-outline
+ x: -1800
+ y: -650
+ label:
+ text: Landry Room
+ x: -1800
+ y: -650
+ offset_y: 35
+ outline:
+ - - -2400
+ - -1100
+ - - -1050
+ - -1100
+ - - -1050
+ - -250
+ - - -2400
+ - -250
+ - id: '13'
+ icon:
+ name: mdi:room-service-outline
+ x: 1750
+ y: 650
+ label:
+ text: Dining Hall
+ x: 1750
+ y: 650
+ offset_y: 35
+ outline:
+ - - -750
+ - -700
+ - - 4300
+ - -700
+ - - 4300
+ - 1850
+ - - -750
+ - 1850
+ - id: '14'
+ icon:
+ name: mdi:chef-hat
+ x: 600
+ y: -1900
+ label:
+ text: Kitchen
+ x: 600
+ y: -1900
+ offset_y: 35
+ outline:
+ - - -150
+ - -3250
+ - - 4100
+ - -3250
+ - - 4100
+ - -650
+ - - -150
+ - -650
+ - id: '15'
+ icon:
+ name: mdi:home-outline
+ x: -6050
+ y: 6650
+ label:
+ text: Emma's Bedroom
+ x: -6050
+ y: 6650
+ offset_y: 35
+ outline:
+ - - -8200
+ - 4750
+ - - -3900
+ - 4750
+ - - -3900
+ - 7700
+ - - -8200
+ - 7700
+ attributes:
+ label: R2Dee2
+ - card:
+ type: custom:xiaomi-vacuum-map-card
+ map_source:
+ camera: camera.dustin_mopman_map
+ calibration_source:
+ camera: true
+ entity: vacuum.dustin_mopman
+ vacuum_platform: Tasshack/dreame-vacuum
+ map_modes:
+ - template: vacuum_clean_zone
+ - template: vacuum_clean_point
+ - template: vacuum_clean_segment
+ predefined_selections:
+ - id: '1'
+ icon:
+ name: mdi:home-outline
+ x: 1300
+ y: -100
+ label:
+ text: Family Room
+ x: 1300
+ y: -100
+ offset_y: 35
+ outline:
+ - - -3000
+ - -3400
+ - - 5650
+ - -3400
+ - - 5650
+ - 2800
+ - - -3000
+ - 2800
+ - id: '2'
+ icon:
+ name: mdi:home-outline
+ x: -7200
+ y: -5450
+ label:
+ text: Josh Office
+ x: -7200
+ y: -5450
+ offset_y: 35
+ outline:
+ - - -8400
+ - -7650
+ - - -4800
+ - -7650
+ - - -4800
+ - -4000
+ - - -8400
+ - -4000
+ - id: '3'
+ icon:
+ name: mdi:home-outline
+ x: -2600
+ y: -2250
+ label:
+ text: Under Stairs
+ x: -2600
+ y: -2250
+ offset_y: 35
+ outline:
+ - - -3000
+ - -3850
+ - - -2100
+ - -3850
+ - - -2100
+ - -800
+ - - -3000
+ - -800
+ - id: '4'
+ icon:
+ name: mdi:foot-print
+ x: -2800
+ y: -4550
+ label:
+ text: Corridor
+ x: -2800
+ y: -4550
+ offset_y: 35
+ outline:
+ - - -4850
+ - -5250
+ - - -750
+ - -5250
+ - - -750
+ - -3400
+ - - -4850
+ - -3400
+ - id: '5'
+ icon:
+ name: mdi:home-outline
+ x: -400
+ y: -6800
+ label:
+ text: Ethan's Bedroom
+ x: -400
+ y: -6800
+ offset_y: 35
+ outline:
+ - - -2050
+ - -8350
+ - - 1800
+ - -8350
+ - - 1800
+ - -5250
+ - - -2050
+ - -5250
+ - id: '6'
+ icon:
+ name: mdi:toilet
+ x: -3500
+ y: -6400
+ label:
+ text: Bathroom
+ x: -3500
+ y: -6400
+ offset_y: 35
+ outline:
+ - - -4550
+ - -8300
+ - - -2200
+ - -8300
+ - - -2200
+ - -5250
+ - - -4550
+ - -5250
+ attributes:
+ label: Dustin Mopman
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:water
+ heading: Water
+ heading_style: subtitle
+ - type: custom:auto-entities
+ card:
+ type: vertical-stack
+ card_param: cards
+ sort:
+ method: state
+ filter:
+ include:
+ - group: binary_sensor.water_leak_detected
+ options:
+ type: custom:mushroom-entity-card
+ exclude:
+ - entity_id: binary_sensor.water_leak_detected
+ - state: 'off'
+ - state: unavailable
+ - state: unknown
+ visibility:
+ - condition: state
+ entity: binary_sensor.water_leak_detected
+ state: 'on'
+ - type: custom:mushroom-template-card
+ primary: Water Main Valve
+ secondary: "{%- if is_state(entity, \"open\") -%}\n Press and hold to\
+ \ close\n{%- elif is_state(entity, \"closed\") -%}\n Press and hold\
+ \ to open\n{%- endif -%}"
+ entity: valve.water_main_valve
+ icon: "{%- if is_state(entity, \"open\") -%}\n mdi:valve-open\n{%- elif\
+ \ is_state(entity, \"closed\") -%}\n mdi:valve-closed\n{%- else -%}\n\
+ \ mdi:valve\n{%- endif -%}"
+ icon_color: "{%- if is_state(entity, \"open\") -%}\n green\n{%- elif\
+ \ is_state(entity, \"closed\") -%}\n red\n{%- else -%}\n grey\n{%-\
+ \ endif -%}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ layout_options:
+ grid_columns: full
+ - type: custom:expander-card
+ gap: 0em
+ padding: 0em
+ child-padding: 0.5em
+ title-card-padding: 0em
+ title-card:
+ type: custom:bar-card
+ card_mod:
+ style: "ha-card {\n background: none;\n border-width: 0;\n}\n#states\
+ \ {\n padding: 8px 2px;\n}\nbar-card-name,\nbar-card-value {\n\
+ \ font-weight: 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\nbar-card-backgroundbar {\n background-color: var(--primary-background-color);\n\
+ }\n"
+ name: Water Softener Salt Level
+ entities:
+ - entity: sensor.water_softener_salt_monitor_salt_level
+ name: Water Softener Salt Level
+ decimal: 1
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ severity:
+ - color: var(--red-color)
+ from: 0
+ to: 10
+ - color: var(--orange-color)
+ from: 10
+ to: 20
+ - color: var(--amber-color)
+ from: 20
+ to: 40
+ - color: var(--light-green-color)
+ from: 40
+ to: 70
+ - color: var(--green-color)
+ from: 70
+ to: 100
cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#computer-athos'
- name: Athos
- icon: mdi:gamepad
- button_type: name
+ - type: custom:apexcharts-card
+ apex_config:
+ chart:
+ foreColor: '#7B7B7B'
+ toolbar:
+ show: false
+ grid:
+ borderColor: '#7B7B7B'
+ xaxis:
+ tooltip:
+ enabled: false
+ experimental:
+ color_threshold: true
+ header:
+ show: false
+ all_series_config:
+ extend_to: now
+ stroke_width: 2
+ type: line
+ group_by:
+ func: min
+ duration: 1hour
+ color_threshold:
+ - value: 0
+ color: '#f44336'
+ - value: 10
+ color: '#ff9800'
+ - value: 20
+ color: '#ffc107'
+ - value: 40
+ color: '#8bc34a'
+ - value: 70
+ color: '#4caf50'
+ span:
+ end: minute
+ graph_span: 10d
+ yaxis:
+ - decimals: 0
+ min: ~0
+ max: ~100
+ apex_config:
+ tickAmount: 4
+ title:
+ text: '%'
+ series:
+ - entity: sensor.water_softener_salt_monitor_salt_level
+ name: Salt Level
+ color: rgb(158,158,158)
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.utility_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
tap_action:
- action: none
- double_tap_action:
- action: none
+ action: more-info
hold_action:
- action: call-service
- service: script.hass_publish_sensors
- data:
- entity: media_player.athos
- target: {}
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- sub_button:
- - entity: binary_sensor.athos_mic_active
- show_background: false
- - entity: binary_sensor.athos_webcam_active
- show_background: false
- - entity: sensor.athos_windows_updates_software_updates
- show_background: false
- show_state: true
- icon: mdi:arrow-up-bold-circle
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Software Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
- variables:
- - computer: athos
- - entity: sensor.athos_windows_updates_software_updates
- - entity: sensor.athos_windows_updates_driver_updates
- show_background: false
- show_state: true
- icon: mdi:cog-refresh
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Driver Updates
- content:
- type: custom:decluttering-card
- template: windows_updates_list
+ action: toggle
+ - type: tile
+ entity: light.mud_room
+ - type: tile
+ entity: light.cold_storage
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:cat
+ heading: Luna
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: camera.litterbox
+ icon: mdi:cctv
+ color: '{{ iif(has_value(entity), "cyan", "red") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Litterbox
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
variables:
- - computer: athos
- - entity: sensor.athos_windows_updates_driver_updates
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:decluttering-card
- template: computer_power
- variables:
- - computer: athos
- - type: conditional
- conditions:
- - entity: binary_sensor.athos_connected
- state_not: unavailable
- - entity: binary_sensor.athos_connected
- state_not: unknown
- - entity: binary_sensor.athos_connected
- state_not: 'off'
- card:
- type: custom:decluttering-card
- template: computer_apps
- variables:
- - computer: athos
- - type: conditional
- conditions:
- - entity: binary_sensor.athos_connected
- state: 'on'
- card:
- type: custom:decluttering-card
- template: computer_apps
- variables:
- - computer: athos
- - type: conditional
- conditions:
- - entity: media_player.athos
- state_not: unavailable
- - entity: media_player.athos
- state_not: unknown
- - entity: media_player.athos
- state_not: 'off'
- card:
- type: custom:bubble-card
- card_type: media-player
- card_layout: large
- entity: media_player.athos
- hide:
- power_button: true
- - type: custom:decluttering-card
- template: uptime_card
- variables:
- - entity: binary_sensor.athos_connected
- - name: Athos Up-Time
- - icon: mdi:connection
- - type: custom:decluttering-card
- template: four_graphs
- variables:
- - graph_1_name: CPU
- - graph_1_icon: mdi:cpu-64-bit
- - graph_1_entities:
- - entity: sensor.athos_cpu_load
- name: Usage
- color: var(--amber-color)
- show_state: true
- show_points: false
- - entity: sensor.athos_cpu_clock_speed
- name: Speed
- color: var(--lime-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_2_name: GPU
- - graph_2_icon: mdi:expansion-card
- - graph_2_entities:
- - entity: sensor.athos_gpu_load
- name: Load
- color: var(--green-color)
- show_state: true
- show_points: false
- - entity: sensor.athos_gpu_temperature
- name: Temperature
- color: var(--pink-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_3_name: Storage
- - graph_3_icon: mdi:harddisk
- - graph_3_entities:
- - entity: sensor.athos_storage_c
- attribute: UsedSpacePercentage
- unit: '%'
- name: Win11
- color: var(--blue-color)
- show_state: true
- show_points: false
- - graph_4_name: RAM
- - graph_4_icon: mdi:memory
- - graph_4_entities:
- - entity: sensor.athos_memory_usage
- name: Usage
- color: var(--purple-color)
- show_state: true
- show_points: false
+ - camera: camera.litterbox
+ - stream: litterbox
+ - type: custom:expander-card
+ gap: 0em
+ padding: 0em
+ child-padding: 0.5em
+ title-card-padding: 0em
+ title-card:
+ type: custom:mushroom-template-card
+ primary: Feed Luna
+ secondary: Press and Hold to Dispense
+ entity: script.feeder_start
+ icon: mdi:cat
+ icon_color: "{%- if is_state(entity, \"on\") -%}\n green\n{%- else\
+ \ -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: script.feeder_start
+ data:
+ feeder: Cat Feeder
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ mushroom-shape-icon$: "{% set level = \"sensor.cat_feeder_food_level\"\
+ \ %} {% from \"util.jinja\" import battery_color %} .shape {\n\
+ \ /* Radial progress bar */\n background:\n radial-gradient(var(--card-background-color)\
+ \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--{{\
+ \ battery_color(level) }}-color) {{ states(level) }}% 0%, var(--card-background-color)\
+ \ 0% 100%\n );\n} .shape:after {\n /* Add back icon shape */\n\
+ \ content: \"\";\n height: 100%;\n width: 100%;\n position:\
+ \ absolute;\n border-radius: var(--icon-border-radius);\n background:\
+ \ var(--shape-color);\n}"
+ cards:
+ - type: custom:mushroom-number-card
+ entity: number.cat_feeder_serving_size
+ name: Servings
+ icon: mdi:location-enter
+ secondary_info: none
+ layout: horizontal
+ display_mode: buttons
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: custom:mushroom-lock-card
+ entity: lock.cat_feeder_child_lock
+ name: Local Control
+ fill_container: false
+ layout: horizontal
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: markdown
+ title: Schedule
+ content: "{%- if has_value(\"sensor.cat_feeder_schedule\") -%}\n{%-\
+ \ set schedules = states(\"sensor.cat_feeder_schedule\") | replace(\"\
+ '\", '\"') | from_json -%}\n{%- for schedule in schedules -%}\n\
+ \ {{ schedule.size }} portions at {{ as_timestamp(today_at(schedule.hour\
+ \ ~ \":\" ~ schedule.minute)) | timestamp_custom(\"%-I:%M %p\",\
+ \ True) }}\n{% endfor -%}\n{%- endif -%}"
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: custom:bar-card
+ card_mod:
+ style: "ha-card {\n background: none;\n border-width: 0;\n}\n\
+ #states {\n padding: 8px 2px;\n}\nbar-card-name,\nbar-card-value\
+ \ {\n font-weight: 500;\n text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\nbar-card-backgroundbar {\n background-color: var(--primary-background-color);\n\
+ }\n"
+ name: Food Level
+ entities:
+ - entity: sensor.cat_feeder_food_level
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ icon: inside
+ height: 24px
+ min: 0
+ max: 100
+ decimal: 1
+ severity:
+ - color: var(--red-color)
+ from: 0
+ to: 10
+ - color: var(--orange-color)
+ from: 10
+ to: 20
+ - color: var(--amber-color)
+ from: 20
+ to: 40
+ - color: var(--light-green-color)
+ from: 40
+ to: 70
+ - color: var(--green-color)
+ from: 70
+ to: 100
+ - type: custom:apexcharts-card
+ apex_config:
+ chart:
+ foreColor: '#7B7B7B'
+ toolbar:
+ show: false
+ grid:
+ borderColor: '#7B7B7B'
+ xaxis:
+ tooltip:
+ enabled: false
+ experimental:
+ color_threshold: true
+ header:
+ show: false
+ all_series_config:
+ extend_to: now
+ stroke_width: 2
+ type: line
+ group_by:
+ func: min
+ duration: 1hour
+ color_threshold:
+ - value: 0
+ color: '#f44336'
+ - value: 10
+ color: '#ff9800'
+ - value: 20
+ color: '#ffc107'
+ - value: 40
+ color: '#8bc34a'
+ - value: 70
+ color: '#4caf50'
+ span:
+ end: minute
+ graph_span: 10d
+ yaxis:
+ - decimals: 0
+ min: ~0
+ max: ~100
+ apex_config:
+ tickAmount: 4
+ title:
+ text: '%'
+ series:
+ - entity: sensor.cat_feeder_food_level
+ name: Food Level
+ color: rgb(158,158,158)
card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#computer-magicmirror'
- name: MagicMirror
- icon: mdi:apps
- button_type: slider
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ - type: custom:mushroom-template-card
+ entity: sensor.cat_feeder_total_weight
+ secondary: Press and hold to reset
+ primary: Reset Food Level
+ icon: mdi:progress-upload
+ icon_color: green
tap_action:
- action: toggle
- double_tap_action:
action: none
hold_action:
- action: none
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- entity: light.magicmirror_monitor
- show_state: true
- show_attribute: true
- show_last_changed: false
- attribute: brightness
- - type: custom:vertical-stack-in-card
- cards:
- - type: custom:vertical-stack-in-card
- horizontal: true
- cards:
- - type: conditional
- conditions:
- - entity: binary_sensor.magicmirror_connected
- state: 'on'
- card:
- type: custom:mushroom-template-card
- entity: button.magicmirror_shutdown
- layout: vertical
- primary: Power
- icon: mdi:power
- icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
- }}'
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.magicmirror_shutdown
- card_mod:
- style: "ha-card {\n margin-left: auto;\n margin-right:\
- \ auto;\n}\n"
- - type: conditional
- conditions:
- - entity: binary_sensor.magicmirror_connected
- state: 'on'
- card:
- type: custom:mushroom-template-card
- entity: button.magicmirror_reboot
- layout: vertical
- primary: Reboot
- icon: mdi:refresh
- icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
- }}'
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.magicmirror_reboot
- card_mod:
- style: "ha-card {\n margin-left: auto;\n margin-right:\
- \ auto;\n}\n"
- - type: conditional
- conditions:
- - entity: binary_sensor.magicmirror_connected
- state: 'on'
- card:
- type: custom:mushroom-template-card
- entity: button.magicmirror_restart
- layout: vertical
- primary: Restart
- icon: mdi:table-refresh
- icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
- }}'
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.magicmirror_restart
- card_mod:
- style: "ha-card {\n margin-left: auto;\n margin-right:\
- \ auto;\n}\n"
- - type: conditional
- conditions:
- - entity: binary_sensor.magicmirror_connected
- state: 'on'
- card:
- type: custom:mushroom-template-card
- entity: button.magicmirror_refresh
- layout: vertical
- primary: Refresh
- icon: mdi:web-refresh
- icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
- }}'
- tap_action:
- action: none
- hold_action:
- action: call-service
- service: button.press
- target:
- entity_id: button.magicmirror_refresh
- card_mod:
- style: "ha-card {\n margin-left: auto;\n margin-right:\
- \ auto;\n}\n"
- - type: custom:decluttering-card
- template: uptime_card
- variables:
- - entity: binary_sensor.magicmirror_connected
- - name: MagicMirror Up-Time
- - icon: mdi:connection
- - type: custom:decluttering-card
- template: four_graphs
- variables:
- - graph_1_name: CPU
- - graph_1_icon: mdi:cpu-64-bit
- - graph_1_entities:
- - entity: sensor.magicmirror_cpu_usage
- name: Usage
- color: var(--amber-color)
- show_state: true
- show_points: false
- - graph_2_name: CPU Temp
- - graph_2_icon: mdi:thermometer-lines
- - graph_2_entities:
- - entity: sensor.magicmirror_cpu_thermal_1_temperature
- name: Temperature
- color: var(--pink-color)
- show_state: true
- show_points: false
- y_axis: secondary
- - graph_3_name: Storage
- - graph_3_icon: mdi:sd
- - graph_3_entities:
- - entity: sensor.magicmirror_disk_usage
- name: Storage
- color: var(--blue-color)
- show_state: true
- show_points: false
- - graph_4_name: RAM
- - graph_4_icon: mdi:memory
- - graph_4_entities:
- - entity: sensor.magicmirror_memory_usage
- name: Usage
- color: var(--purple-color)
- show_state: true
- show_points: false
+ action: call-service
+ service: utility_meter.calibrate
+ target:
+ entity_id: sensor.cat_feeder_total_weight
+ data:
+ value: '0'
+ card_mod:
+ style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: sensor.water_main_valve_air_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.cold_storage_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ label: Storage
+ - type: custom:mushroom-template-badge
+ entity: sensor.cold_storage_humidity
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:water-percent
+ color: '{% from "util.jinja" import room_humidity %}
+
+ {{ room_humidity(entity) }}'
+ tap_action:
+ action: more-info
+ label: Storage
+ - title: Garage
+ path: garage
+ icon: mdi:garage-variant
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:garage-variant
+ heading: Garage
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.garage_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: light.garage
+ name: Main
+ - type: tile
+ entity: light.garage_door_light
+ name: Opener
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:garage-variant
+ heading: Door
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: lock.garage_door_lock_remotes
+ label: Remotes
+ content: '{{ state_translated(entity) }}'
+ icon: mdi:{{ iif(is_state(entity, "locked"), "lock", "lock-open")
+ }}
+ color: '{{ iif(is_state(entity, "locked"), "red", "green") }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: cover.garage_door
+ color: green
+ features:
+ - type: cover-open-close
+ - type: cover-position
+ state_content:
+ - state
+ - last-changed
+ layout_options:
+ grid_columns: full
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.garage_multisensor_motion_detection
+ icon: '{{ iif(is_state(entity, "on"), "mdi:motion-sensor", "mdi:motion-sensor-off")
+ }}'
+ color: '{{ iif(is_state(entity, "on"), "orange", "grey") }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.garage_multisensor_air_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.garage_multisensor_humidity
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:water-percent
+ color: '{% from "util.jinja" import room_humidity %}
+
+ {{ room_humidity(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.garage_multisensor_illuminance
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:brightness-5
+ color: blue
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: camera.garage
+ icon: mdi:cctv
+ color: '{{ iif(has_value(entity), "cyan", "red") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Garage
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
card_mod:
style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
\ 0;\n}\n"
- - type: vertical-stack
- cards:
- - type: custom:bubble-card
- card_type: pop-up
- hash: '#computer-quest'
- name: Meta Quest 2
- icon: fab:meta
- button_type: state
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.garage
+ - stream: garage
+ - title: Outside
+ path: outside
+ icon: mdi:spa
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:spa
+ heading: Outside
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Lights
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: light.outside_lights
+ content: '{{ expand(entity) | selectattr("state", "==", "on") | list
+ | count }}/{{ expand(entity) | list | count }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: tile
+ entity: light.outside_entry
+ name: Front Entry
+ features:
+ - type: light-brightness
+ - features:
+ - type: light-brightness
+ type: tile
+ entity: light.outside_garage
+ name: Garage Front
+ state_content:
+ - brightness
+ - color_temp_kelvin
+ - rgb_color
+ - type: tile
+ entity: light.outside_side
+ name: Side
+ - type: tile
+ entity: light.outside_back
+ name: Back
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:sprinkler
+ heading: Sprinklers
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: opensprinkler.stop
+ icon: mdi:stop
+ color: "{% if is_state(\"binary_sensor.sprinkler_zones\", \"on\")\
+ \ %}\n red\n{% else %}\n grey\n{% endif %}\n"
tap_action:
action: none
- double_tap_action:
+ hold_action:
+ action: call-service
+ service: opensprinkler.stop
+ - type: custom:mushroom-template-badge
+ entity: opensprinkler.pause_stations
+ icon: mdi:pause
+ color: "{% if is_state(\"binary_sensor.sprinkler_zones\", \"on\")\
+ \ %}\n yellow\n{% elif is_state(\"binary_sensor.opensprinkler_paused\"\
+ , \"on\") %}\n green\n{% else %}\n grey\n{% endif %}\n"
+ tap_action:
action: none
hold_action:
+ action: call-service
+ service: opensprinkler.pause_stations
+ - type: custom:mushroom-template-badge
+ entity: switch.opensprinkler_enabled
+ content: '{{ state_translated(entity) }}'
+ label: System
+ icon: mdi:sprinkler
+ color: '{{ iif(is_state(entity, "on"), "green", "grey") }}
+
+ '
+ tap_action:
action: none
- margin_top_mobile: -56px
- styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
- #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- entity: binary_sensor.quest_interactive
- show_state: true
- - type: custom:vertical-stack-in-card
+ hold_action:
+ action: toggle
+ - type: custom:opensprinkler-card
+ device: c2a83f52c36a3795327fad03d6c568e1
+ name: OpenSprinkler
+ extra_entities:
+ - binary_sensor.opensprinkler_rain_delay_active
+ - sensor.opensprinkler_rain_delay_stop_time
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.doorbell_person_occupancy
+ icon: "{%- if is_state(\"binary_sensor.doorbell_camera_motion\", \"on\") -%}\n\
+ \ mdi:motion-sensor\n{%- elif is_state(entity, \"on\") -%}\n mdi:walk\n\
+ {%- else -%}\n mdi:motion-sensor-off\n{%- endif -%}"
+ color: "{%- if is_state(\"binary_sensor.doorbell_camera_motion\", \"on\")\
+ \ -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n light-green\n\
+ {%- else -%}\n grey\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.ecowitt_outdoor_temperature
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:thermometer
+ color: '{% from "util.jinja" import room_temp %}
+
+ {{ room_temp(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.ecowitt_humidity
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:water-percent
+ color: '{% from "util.jinja" import room_humidity %}
+
+ {{ room_humidity(entity) }}'
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.ecowitt_solar_lux
+ content: '{{ states(entity) | round(0) }}{{ state_attr(entity, "unit_of_measurement")
+ }}'
+ icon: mdi:brightness-5
+ color: blue
+ tap_action:
+ action: more-info
+ - title: Security
+ path: security
+ icon: mdi:shield
+ type: sections
+ max_columns: 2
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:shield
+ heading: Security
+ heading_style: title
+ column_span: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:door
+ heading: Doors
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: input_boolean.door_open_alerts
+ label: Door
+ content: '{{ state_translated(entity) }}'
+ icon: mdi:door
+ color: "{% if is_state(entity, \"off\") %}\n yellow\n{% else %}\n\
+ \ green\n{% endif %}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: input_boolean.garage_door_open_alerts
+ label: Garage
+ content: '{{ state_translated(entity) }}'
+ icon: mdi:garage-variant
+ color: "{% if is_state(entity, \"off\") %}\n yellow\n{% else %}\n\
+ \ green\n{% endif %}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: custom:vertical-stack-in-card
+ layout_options:
+ grid_columns: 2
+ cards:
+ - type: custom:mushroom-template-card
+ entity: binary_sensor.front_door_window_door_is_open
+ primary: Front Door
+ secondary: "{% from \"util.jinja\" import nominal_change_history %}\
+ \ {% if is_state(entity, \"on\") -%}\n Open\n{% endif -%} {% if\
+ \ is_state(\"lock.front_door\", \"unlocked\") -%}\n Unlocked\n\
+ {% else -%}\n Locked\n{% endif -%} ⸱ {{ nominal_change_history(entity)\
+ \ }}"
+ icon: "{% if is_state(entity, \"on\") %}\n mdi:door-open\n{% elif\
+ \ is_state(\"lock.front_door\", \"unlocked\") and is_state(entity,\
+ \ \"off\") %}\n mdi:door-closed\n{% elif is_state(\"lock.front_door\"\
+ , \"locked\") and is_state(entity, \"off\") %}\n mdi:door-closed-lock\n\
+ {% endif %}"
+ icon_color: "{% if is_state(entity, \"on\") %}\n red\n{% elif is_state(\"\
+ lock.front_door\", \"unlocked\") and is_state(entity, \"off\") %}\n\
+ \ yellow\n{% elif is_state(\"lock.front_door\", \"locked\") and\
+ \ is_state(entity, \"off\") %}\n green\n{% endif %}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: fire-dom-event
+ browser_mod:
+ data:
+ entity: sensor.front_door_battery_level
+ service: browser_mod.more_info
+ card_mod:
+ style:
+ mushroom-shape-icon$: "{% set battery_entity = \"sensor.front_door_battery_level\"\
+ \ %} {% if (states(battery_entity) | int) <= 60 %} {% from \"\
+ util.jinja\" import battery_color %} .shape {\n /* Radial progress\
+ \ bar */\n background:\n radial-gradient(var(--card-background-color)\
+ \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--{{\
+ \ battery_color(battery_entity) }}-color) {{ states(battery_entity)\
+ \ }}% 0%, var(--card-background-color) 0% 100%\n );\n} .shape:after\
+ \ {\n /* Add back icon shape */\n content: \"\";\n height:\
+ \ 100%;\n width: 100%;\n position: absolute;\n border-radius:\
+ \ var(--icon-border-radius);\n background: var(--shape-color);\n\
+ } {% endif %}"
+ - type: custom:layout-card
+ layout_type: custom:grid-layout
+ layout:
+ grid-template-columns: 65px auto
+ grid-template-rows: auto
+ margin: 0 -2px -10px -2px
+ padding: 0
+ cards:
+ - type: custom:mushroom-template-card
+ entity: sensor.front_door_battery_level
+ icon: mdi:lock-smart
+ icon_color: disabled
+ tap_action:
+ action: navigate
+ navigation_path: /lock-admin/front-door
+ hold_action:
+ action: fire-dom-event
+ browser_mod:
+ data:
+ entity: sensor.front_door_battery_level
+ service: browser_mod.more_info
+ card_mod:
+ style:
+ .: "ha-card {\n --icon-size: 42px;\n --ha-card-box-shadow:\
+ \ none;\n --ha-card-border-width: 0;\n}\n"
+ mushroom-shape-icon$: "{% set timer = \"timer.keymaster_front_door_autolock\"\
+ \ %} {% if state_attr(timer, \"finishes_at\") %} {% set\
+ \ remaining = (as_datetime(state_attr(timer, \"finishes_at\"\
+ )) - now()).total_seconds() | int %} {% set duration =\n\
+ \ (state_attr(timer, \"duration\").split(\":\")[0] | int\
+ \ * 60 * 60)\n + (state_attr(timer, \"duration\").split(\"\
+ :\")[1] | int * 60)\n + (state_attr(timer, \"duration\"\
+ ).split(\":\")[2] | int)\n%} .shape {\n /* Radial progress\
+ \ bar */\n background:\n radial-gradient(var(--card-background-color)\
+ \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--red-color)\
+ \ {{ (remaining / duration * 100) | round() }}% 0%, var(--card-background-color)\
+ \ 0% 100%);\n} .shape:after {\n /* Add back icon shape\
+ \ */\n content: \"\";\n height: 100%;\n width: 100%;\n\
+ \ position: absolute;\n border-radius: var(--icon-border-radius);\n\
+ \ background: var(--shape-color);\n} {%- endif -%}\n"
+ - type: custom:mushroom-lock-card
+ entity: lock.front_door
+ name: Front Door
+ primary_info: none
+ secondary_info: none
+ icon_type: none
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
+ \ 0;\n background: none;\n}\n"
+ mushroom-lock-buttons-control$:
+ mushroom-button:nth-child(1)$: ".button {\n --bg-color:\
+ \ rgba(var(--rgb-disabled), 0.2);\n}\n"
+ - type: custom:vertical-stack-in-card
+ layout_options:
+ grid_columns: 2
+ cards:
+ - type: custom:mushroom-template-card
+ entity: binary_sensor.garage_entry_window_door_is_open
+ primary: Garage Entry
+ secondary: "{% from \"util.jinja\" import nominal_change_history %}\
+ \ {% if is_state(entity, \"on\") -%}\n Open\n{% endif -%} {% if\
+ \ is_state(\"lock.garage_entry\", \"unlocked\") -%}\n Unlocked\n\
+ {% else -%}\n Locked\n{% endif -%} ⸱ {{ nominal_change_history(entity)\
+ \ }}"
+ icon: "{% if is_state(entity, \"on\") %}\n mdi:door-open\n{% elif\
+ \ is_state(\"lock.garage_entry\", \"unlocked\") and is_state(entity,\
+ \ \"off\") %}\n mdi:door-closed\n{% elif is_state(\"lock.garage_entry\"\
+ , \"locked\") and is_state(entity, \"off\") %}\n mdi:door-closed-lock\n\
+ {% endif %}"
+ icon_color: "{% if is_state(entity, \"on\") %}\n red\n{% elif is_state(\"\
+ lock.garage_entry\", \"unlocked\") and is_state(entity, \"off\"\
+ ) %}\n yellow\n{% elif is_state(\"lock.garage_entry\", \"locked\"\
+ ) and is_state(entity, \"off\") %}\n green\n{% endif %}"
+ tap_action:
+ action: more-info
+ hold_action:
+ action: fire-dom-event
+ browser_mod:
+ data:
+ entity: sensor.garage_entry_battery_level
+ service: browser_mod.more_info
+ card_mod:
+ style:
+ mushroom-shape-icon$: "{% set battery_entity = \"sensor.garage_entry_battery_level\"\
+ \ %} {% if (states(battery_entity) | int) <= 60 %} {% from \"\
+ util.jinja\" import battery_color %} .shape {\n /* Radial progress\
+ \ bar */\n background:\n radial-gradient(var(--card-background-color)\
+ \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--{{\
+ \ battery_color(battery_entity) }}-color) {{ states(battery_entity)\
+ \ }}% 0%, var(--card-background-color) 0% 100%\n );\n} .shape:after\
+ \ {\n /* Add back icon shape */\n content: \"\";\n height:\
+ \ 100%;\n width: 100%;\n position: absolute;\n border-radius:\
+ \ var(--icon-border-radius);\n background: var(--shape-color);\n\
+ } {% endif %}"
+ - type: custom:layout-card
+ layout_type: custom:grid-layout
+ layout:
+ grid-template-columns: 65px auto
+ grid-template-rows: auto
+ margin: 0 -2px -10px -2px
+ padding: 0
cards:
- - type: custom:bar-card
+ - type: custom:mushroom-template-card
+ entity: sensor.garage_entry_battery_level
+ icon: mdi:lock-smart
+ icon_color: disabled
+ tap_action:
+ action: navigate
+ navigation_path: /lock-admin/garage-entry
+ hold_action:
+ action: fire-dom-event
+ browser_mod:
+ data:
+ entity: sensor.garage_entry_battery_level
+ service: browser_mod.more_info
card_mod:
- style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n\
- \ text-shadow: 1px 1px var(--primary-background-color);\n\
- }\n"
- name: Quest 2 Battery Level
- entities:
- - entity: sensor.quest_battery_level
- animation:
- state: 'on'
- positions:
- indicator: inside
- decimal: 0
- severity:
- - color: var(--red-color)
- from: 0
- to: 10
- - color: var(--orange-color)
- from: 10
- to: 30
- - color: var(--amber-color)
- from: 30
- to: 50
- - color: var(--light-green-color)
- from: 50
- to: 80
- - color: var(--green-color)
- from: 80
- to: 100
- - type: custom:decluttering-card
- template: four_graphs
- variables:
- - graph_1_name: WiFi Speed
- - graph_1_icon: mdi:wifi-arrow-left-right
- - graph_1_entities:
- - entity: sensor.quest_wifi_link_speed
- color: var(--green-color)
- show_state: false
- show_points: false
- - graph_2_name: WiFi Signal
- - graph_2_icon: mdi:wifi
- - graph_2_entities:
- - entity: sensor.quest_wifi_signal_strength
- color: var(--yellow-color)
- show_state: false
- show_points: false
- - graph_3_name: Storage
- - graph_3_icon: mdi:sd
- - graph_3_entities:
- - entity: sensor.quest_internal_storage
- name: Storage
- color: var(--blue-color)
- show_state: true
- show_points: false
- - graph_4_name: Battery Temp
- - graph_4_icon: mdi:battery-alert
- - graph_4_entities:
- - entity: sensor.quest_battery_temperature
- name: Battery Temp
- color: var(--red-color)
- show_state: true
- show_points: false
+ style:
+ .: "ha-card {\n --icon-size: 42px;\n --ha-card-box-shadow:\
+ \ none;\n --ha-card-border-width: 0;\n}\n"
+ mushroom-shape-icon$: "{% set timer = \"timer.keymaster_garage_entry_autolock\"\
+ \ %} {% if state_attr(timer, \"finishes_at\") %} {% set\
+ \ remaining = (as_datetime(state_attr(timer, \"finishes_at\"\
+ )) - now()).total_seconds() | int %} {% set duration =\n\
+ \ (state_attr(timer, \"duration\").split(\":\")[0] | int\
+ \ * 60 * 60)\n + (state_attr(timer, \"duration\").split(\"\
+ :\")[1] | int * 60)\n + (state_attr(timer, \"duration\"\
+ ).split(\":\")[2] | int)\n%} .shape {\n /* Radial progress\
+ \ bar */\n background:\n radial-gradient(var(--card-background-color)\
+ \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--red-color)\
+ \ {{ (remaining / duration * 100) | round() }}% 0%, var(--card-background-color)\
+ \ 0% 100%);\n} .shape:after {\n /* Add back icon shape\
+ \ */\n content: \"\";\n height: 100%;\n width: 100%;\n\
+ \ position: absolute;\n border-radius: var(--icon-border-radius);\n\
+ \ background: var(--shape-color);\n} {%- endif -%}\n"
+ - type: custom:mushroom-lock-card
+ entity: lock.garage_entry
+ name: Garage Entry
+ primary_info: none
+ secondary_info: none
+ icon_type: none
+ card_mod:
+ style:
+ .: "ha-card {\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
+ \ 0;\n background: none;\n}\n"
+ mushroom-lock-buttons-control$:
+ mushroom-button:nth-child(1)$: ".button {\n --bg-color:\
+ \ rgba(var(--rgb-disabled), 0.2);\n}\n"
+ - type: custom:decluttering-card
+ layout_options:
+ grid_columns: 2
+ template: door_card
+ variables:
+ - name: Sliding Door
+ - entity: binary_sensor.sliding_door_contact
+ - battery_entity: sensor.sliding_door_battery
+ - icon: mdi:door-sliding
+ - type: custom:decluttering-card
+ layout_options:
+ grid_columns: 2
+ template: door_card
+ variables:
+ - name: Garage Side Door
+ - entity: binary_sensor.garage_side_door_contact
+ - battery_entity: sensor.garage_side_door_battery
+ - icon: mdi:door
+ - type: custom:vertical-stack-in-card
+ layout_options:
+ grid_columns: 2
+ cards:
+ - type: custom:mushroom-template-card
+ entity: cover.garage_door
+ primary: Garage Door
+ secondary: '{% from "util.jinja" import nominal_change_history %}
+ {{ state_translated(entity) }} ⸱ {{ nominal_change_history(entity)
+ }}'
+ icon: "{% if is_state(entity, \"open\") %}\n mdi:garage-open-variant\n\
+ {% elif states(entity) in [\"opening\", \"closing\"] %}\n mdi:garage-alert-variant\n\
+ {% elif is_state(entity, \"closed\") %}\n mdi:garage-variant\n\
+ {% else %}\n mdi:garage-alert-variant\n{% endif %}"
+ icon_color: "{% if is_state(entity, \"open\") %}\n red\n{% elif states(entity)\
+ \ in [\"opening\", \"closing\"] %}\n amber\n{% elif is_state(entity,\
+ \ \"closed\") %}\n green\n{% else %}\n red\n{% endif %}"
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-cover-card
+ entity: cover.garage_door
+ name: Garage Door
+ show_buttons_control: true
+ primary_info: none
+ secondary_info: none
+ icon_type: none
+ show_position_control: true
card_mod:
- style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
- \ 0;\n}\n"
+ style:
+ .: "ha-card {\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
+ \ 0;\n background: none;\n}\n"
+ mushroom-button$: ".button {\n --bg-color: rgba(var(--rgb-disabled),\
+ \ 0.2);\n}\n"
+ mushroom-cover-buttons-control$:
+ mushroom-button$: ".button {\n --bg-color: rgba(var(--rgb-disabled),\
+ \ 0.2);\n}\n"
+ - type: custom:decluttering-card
+ layout_options:
+ grid_columns: 2
+ template: door_card
+ variables:
+ - name: Cold Storage Door
+ - entity: binary_sensor.cold_storage_contact_contact
+ - battery_entity: sensor.cold_storage_contact_battery
+ - icon: mdi:door
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:cctv
+ heading: Cameras
+ heading_style: subtitle
+ - type: picture-elements
+ camera_image: camera.doorbell
+ elements:
+ - type: icon
+ icon: mdi:cctv
+ style:
+ right: 0px
+ top: 20px
+ transform: translate(-50%, -50%) scale(150%)
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Doorbell
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.doorbell
+ - stream: doorbell
+ - type: state-icon
+ entity: sensor.doorbell_person_count
+ icon: mdi:walk
+ state_color: true
+ style:
+ bottom: -20px
+ right: -20px
+ transform: translate(-50%, -50%)
+ tap_action:
+ action: more-info
+ - type: state-icon
+ entity: binary_sensor.doorbell_camera_motion
+ icon: mdi:motion-sensor
+ state_color: true
+ style:
+ bottom: -20px
+ right: 20px
+ transform: translate(-50%, -50%)
+ tap_action:
+ action: more-info
+ layout_options:
+ grid_columns: 2
+ - show_state: false
+ show_name: false
+ camera_view: auto
+ type: picture-entity
+ entity: camera.garage
+ aspect_ratio: '16:9'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Garage
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.garage
+ - stream: garage
+ layout_options:
+ grid_columns: 2
+ - show_state: false
+ show_name: false
+ camera_view: auto
+ type: picture-entity
+ entity: camera.family_room
+ aspect_ratio: '16:9'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Family Room
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.family_room
+ - stream: familyroom
+ layout_options:
+ grid_columns: 2
+ - show_state: false
+ show_name: false
+ camera_view: auto
+ type: picture-entity
+ entity: camera.livingroom
+ aspect_ratio: '16:9'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Living Room
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.livingroom
+ - stream: livingroom
+ layout_options:
+ grid_columns: 2
+ - show_state: false
+ show_name: false
+ camera_view: auto
+ type: picture-entity
+ entity: camera.litterbox
+ aspect_ratio: '16:9'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Litterbox
+ size: fullscreen
+ content:
+ type: custom:vertical-stack-in-card
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:decluttering-card
+ template: camera_popup
+ variables:
+ - camera: camera.litterbox
+ - stream: litterbox
+ layout_options:
+ grid_columns: 2
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:motion-sensor
+ heading: Occupancy
+ heading_style: subtitle
+ - type: grid
+ square: false
+ columns: 3
+ cards:
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Home
+ - entity: binary_sensor.ecobee_occupancy
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Kitchen
+ - entity: binary_sensor.kitchen_occupancy
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Family
+ - entity: binary_sensor.family_room_occupancy
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Main
+ - entity: binary_sensor.main_bedroom_occupancy
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Emma
+ - entity: binary_sensor.emma_bedroom_occupancy
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Ethan
+ - entity: binary_sensor.ethan_bedroom_occupancy
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Amy Office
+ - entity: binary_sensor.amy_office_occupancy
+ - type: custom:mushroom-template-card
+ entity: binary_sensor.apollo_msr_1_office_radar_target
+ primary: Office
+ secondary: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
+ , \"on\") -%}\n Motion\n{%- elif is_state(entity, \"on\") -%}\n\
+ \ Detected\n{%- else -%}\n Clear\n{%- endif -%}"
+ icon: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
+ , \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity, \"\
+ on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n{%-\
+ \ endif -%}"
+ icon_color: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
+ , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
+ \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
+ tap_action:
+ action: more-info
+ - type: custom:decluttering-card
+ template: motion_card
+ variables:
+ - name: Garage
+ - entity: binary_sensor.garage_multisensor_motion_detection
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ label: Security
+ content: '{% from "util.jinja" import security_count %}
+
+ {{ iif(security_count() | int == 0, "Secure", "Not Secure") }}'
+ icon: '{% from "util.jinja" import security_count %}
+
+ {{ iif(security_count() | int == 0, "mdi:shield-check",
+
+ "mdi:shield-alert") }}'
+ color: '{% from "util.jinja" import security_count %}
+
+ {{ iif(security_count() | int == 0, "green", "red") }}'
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.all_doors
+ label: Doors
+ content: '{{ expand(entity) | selectattr(''state'', ''=='', ''on'') | list
+ | count }}'
+ icon: '{{ iif(is_state(entity, "on"), "mdi:door-open", "mdi:door") }}'
+ color: '{{ iif(is_state(entity, "on"), "cyan", "grey") }}'
+ - type: custom:mushroom-template-badge
+ entity: input_boolean.guest_mode
+ label: Guest Mode
+ content: '{{ state_translated(entity) }}'
+ icon: '{{ iif(is_state(entity, "on"), "mdi:account-question", "mdi:account-question-outline")
+ }}'
+ color: '{{ iif(is_state(entity, "on"), "green", "grey") }}'
+ tap_action:
+ action: more-info
+ hold_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.doorbell_visitor
+ label: Last Ring
+ content: '{% from "util.jinja" import nominal_change_history %} {{ nominal_change_history(entity)
+ }}'
+ icon: mdi:bell-ring
+ color: grey
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ entity: sensor.doorbell_person_count
+ label: Last Person
+ content: '{% from "util.jinja" import nominal_change_history %} {{ nominal_change_history(entity)
+ }}'
+ icon: mdi:walk
+ color: grey
+ tap_action:
+ action: more-info
+ - type: custom:mushroom-template-badge
+ icon: mdi:chart-gantt
+ color: light-green
+ tap_action:
+ action: navigate
+ navigation_path: frigate
+ - title: Frigate
+ path: frigate
+ subview: true
+ icon: mdi:timeline
+ type: sections
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:timeline
+ heading: Frigate Timeline
+ heading_style: title
+ column_span: 4
+ - type: grid
+ cards:
+ - type: custom:frigate-card
+ cameras:
+ - camera_entity: camera.doorbell
+ - camera_entity: camera.livingroom
+ - camera_entity: camera.family_room
+ - camera_entity: camera.litterbox
+ view:
+ default: timeline
+ camera_select: current
+ menu:
+ style: outside
+ buttons:
+ recordings:
+ enabled: true
+ timeline:
+ style: ribbon
+ show_recordings: true
+ controls:
+ thumbnails:
+ mode: below
+ window_seconds: 21600
+ media: all
+ media_viewer:
+ auto_unmute: selected
+ transition_effect: slide
+ dimensions:
+ min_height: 500px
+ performance:
+ profile: high
+ layout_options:
+ grid_columns: full
+ column_span: 4
+ max_columns: 4
cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: security
- title: Climate
path: climate
icon: mdi:thermostat-box
@@ -13388,32 +10120,10 @@ views:
sections:
- type: grid
cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Climate
- - icon: mdi:thermostat-box
- - icon_color: indigo
- - chips:
- - type: template
- entity: sensor.ecobee_mode
- content: '{{ states(entity) }}'
- icon: mdi:thermostat
- icon_color: "{% if is_state(entity, \"Heating\") %}\n red\n{%\
- \ elif is_state(entity, \"Cooling\") %}\n light-blue\n{% elif\
- \ is_state(entity, \"Fan\") %}\n amber\n{% elif is_state(entity,\
- \ \"Off\") %}\n grey\n{% else %}\n blue-grey\n{% endif %}"
- tap_action:
- action: more-info
- - type: template
- entity: climate.ecobee_cloud
- icon: mdi:thermostat-cog
- content: '{{ (state_attr(entity, "preset_mode") | replace("_",
- " ") | title) | default("Home", true) }}'
- tap_action:
- action: more-info
- layout_options:
- grid_columns: full
+ - type: heading
+ icon: mdi:thermostat-box
+ heading: Climate
+ heading_style: title
column_span: 2
- type: grid
cards:
@@ -13487,8 +10197,10 @@ views:
- entity: sensor.ecobee_mode
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Thermostat
+ - type: heading
+ icon: mdi:chart-line
+ heading: Thermostat
+ heading_style: subtitle
- type: custom:apexcharts-card
apex_config:
chart:
@@ -13569,8 +10281,10 @@ views:
color: rgb(0,150,136)
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Temperatures
+ - type: heading
+ icon: mdi:thermometer-lines
+ heading: Temperatures
+ heading_style: subtitle
- type: custom:apexcharts-card
apex_config:
chart:
@@ -13630,9 +10344,6 @@ views:
- entity: sensor.amy_office_temperature
name: Amy's Office
color: rgb(0,188,212)
- - entity: sensor.water_main_valve_air_temperature
- name: Utility
- color: rgb(121,85,72)
- entity: sensor.main_bathroom_sensor_temperature
name: Main Bath
color: rgb(103,58,183)
@@ -13647,8 +10358,10 @@ views:
color: rgb(121,85,72)
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Humidity
+ - type: heading
+ icon: mdi:water-percent
+ heading: Humidity
+ heading_style: subtitle
- type: custom:apexcharts-card
apex_config:
chart:
@@ -13698,816 +10411,1954 @@ views:
name: Garage
color: rgb(121,85,72)
cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: sensor.ecobee_mode
+ content: '{{ states(entity) }}'
+ icon: mdi:thermostat
+ color: "{% if is_state(entity, \"Heating\") %}\n red\n{% elif is_state(entity,\
+ \ \"Cooling\") %}\n light-blue\n{% elif is_state(entity, \"Fan\") %}\n\
+ \ amber\n{% elif is_state(entity, \"Off\") %}\n grey\n{% else %}\n blue-grey\n\
+ {% endif %}"
+ tap_action:
+ action: more-info
+ label: Mode
+ - type: custom:mushroom-template-badge
+ entity: climate.ecobee_cloud
+ icon: mdi:thermostat-cog
+ content: '{{ (state_attr(entity, "preset_mode") | replace("_", " ") | title)
+ | default("Home", true) }}'
+ tap_action:
+ action: more-info
+ label: Preset
- title: Lights
path: lights
icon: mdi:lightbulb-group
type: sections
max_columns: 3
sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:lightbulb-group
+ heading: Light Control
+ heading_style: title
+ column_span: 3
- type: grid
cards:
- type: custom:decluttering-card
- template: chip_header
+ template: light_group_popup
variables:
- - primary: Light Control
- - icon: mdi:lightbulb-group
- - icon_color: amber
- - chips:
- - type: template
- entity: light.all_lights
- icon: '{{ iif(is_state(entity, "on"), "mdi:lightbulb-group", "mdi:lightbulb-group-off")
- }}'
- icon_color: '{{ iif(is_state(entity, "on"), "amber", "grey") }}'
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Lights
- content:
- type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.all_lights
- hold_action:
- action: call-service
- service: light.turn_off
- target:
- entity_id: light.all_lights
- card_mod:
- style:
- .: "{% if is_state(config.entity, \"on\") %}\nha-card:after\
- \ {\n content: \"{{ expand(config.entity) | selectattr('state',\
- \ '==', 'on') | list | count }}\";\n position: absolute;\n\
- \ color: var(--amber-color);\n font-weight: bolder;\n\
- \ top: -2px;\n right: 2px;\n font-size: 12px;\n}\n{%\
- \ endif %}\n"
- - type: template
- entity: fan.all_fans
- icon: '{{ iif(is_state(entity, "on"), "mdi:fan", "mdi:fan-off")
- }}'
- icon_color: '{{ iif(is_state(entity, "on"), "green", "grey") }}'
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: All Fans
- content:
- type: custom:vertical-stack-in-card
- card_mod:
- style: "ha-card {\n --ha-card-background: none;\n \
- \ --ha-card-border-width: 0;\n}\n"
- cards:
- - type: custom:auto-entities
- show_empty: false
- card:
- type: custom:layout-card
- cards: []
- layout_type: masonry
- sort:
- method: friendly_name
- filter:
- include:
- - group: fan.all_fans
- options:
- type: custom:mushroom-fan-card
- layout: horizontal
- icon_animation: true
- show_percentage_control: true
- card_mod:
- style: "ha-card {\n transition: all 0s;\n\
- \ padding: 4px 12px !important;\n border-width:\
- \ 0;\n}\n"
- hold_action:
- action: call-service
- service: fan.turn_off
- target:
- entity_id: fan.all_fans
+ - entity: light.living_room_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.family_room_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.joshua_office_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.kitchen_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.amy_office_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.ethan_bedroom_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.emma_bedroom_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.main_bedroom_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.garage_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.outside_lights
+ - style: ''
+ - type: grid
+ cards:
+ - type: custom:decluttering-card
+ template: light_group_popup
+ variables:
+ - entity: light.utility_lights
+ - style: ''
+ cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: light.all_lights
+ content: '{{ expand(entity) | selectattr(''state'', ''=='', ''on'') | list
+ | count }}'
+ icon: '{{ iif(is_state(entity, "on"), "mdi:lightbulb-group", "mdi:lightbulb-group-off")
+ }}'
+ color: '{{ iif(is_state(entity, "on"), "amber", "grey") }}'
+ hold_action:
+ action: call-service
+ service: light.turn_off
+ target:
+ entity_id: light.all_lights
+ - type: custom:mushroom-chips-card
+ chips:
+ - type: template
+ entity: fan.all_fans
+ icon: '{{ iif(is_state(entity, "on"), "mdi:fan", "mdi:fan-off") }}'
+ icon_color: '{{ iif(is_state(entity, "on"), "green", "grey") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: All Fans
+ content:
+ type: custom:vertical-stack-in-card
card_mod:
- style:
- .: "{% if is_state(config.entity, \"on\") %}\nha-card:after\
- \ {\n content: \"{{ expand(config.entity) | selectattr('state',\
- \ '==', 'on') | list | count }}\";\n position: absolute;\n\
- \ color: var(--green-color);\n font-weight: bolder;\n\
- \ top: -2px;\n right: 2px;\n font-size: 12px;\n}\n{%\
- \ endif %}\n.content {\n {% if is_state(config.entity,\
- \ 'on') %}\n animation: rotation linear infinite;\n \
- \ animation-duration: 1s;\n {% endif %}\n}\n@keyframes\
- \ rotation {\n 100% {\n transform: rotate(360deg);\n\
- \ }\n}\n"
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ cards:
+ - type: custom:auto-entities
+ show_empty: false
+ card:
+ type: custom:layout-card
+ cards: []
+ layout_type: masonry
+ sort:
+ method: friendly_name
+ filter:
+ include:
+ - group: fan.all_fans
+ options:
+ type: custom:mushroom-fan-card
+ layout: horizontal
+ icon_animation: true
+ show_percentage_control: true
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n padding:\
+ \ 4px 12px !important;\n border-width: 0;\n}\n"
+ hold_action:
+ action: call-service
+ service: fan.turn_off
+ target:
+ entity_id: fan.all_fans
+ card_mod:
+ style:
+ .: "{% if is_state(config.entity, \"on\") %}\nha-card:after {\n content:\
+ \ \"{{ expand(config.entity) | selectattr('state', '==', 'on') |\
+ \ list | count }}\";\n position: absolute;\n color: var(--green-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n font-size:\
+ \ 12px;\n}\n{% endif %}\n.content {\n {% if is_state(config.entity,\
+ \ 'on') %}\n animation: rotation linear infinite;\n animation-duration:\
+ \ 1s;\n {% endif %}\n}\n@keyframes rotation {\n 100% {\n transform:\
+ \ rotate(360deg);\n }\n}\n"
+ - title: Computer
+ icon: mdi:desktop-tower
+ path: computer
+ type: sections
+ max_columns: 1
+ sections:
+ - type: grid
+ cards:
+ - type: heading
+ icon: mdi:desktop-tower
+ heading: Computers
+ heading_style: title
+ - type: grid
+ cards:
+ - type: custom:button-card
+ layout_options:
+ grid_columns: 2
+ template: computer_tile
+ variables:
+ connected: binary_sensor.erebus_connected
+ media: media_player.erebus
+ cpu: sensor.erebus_cpu_load
+ ram: sensor.erebus_memory_usage
+ gpu: sensor.erebus_gpu_load
+ name: Erebus
+ icon: mdi:desktop-tower
+ entity: binary_sensor.erebus_connected
+ show_state: true
+ tap_action:
+ action: navigate
+ navigation_path: '#computer-erebus'
+ custom_fields:
+ stat1: "[[[\n return `\n\
+ \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
+ \ : '?'}`\n]]]"
+ stat2: "[[[\n return `\n \
+ \ CPU: ${states[variables.cpu].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat3: "[[[\n return `\n \
+ \ RAM: ${states[variables.ram].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat4: "[[[\n return `\n\
+ \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
+ \ undefined, 0) : '?'}`\n]]]"
+ info: "[[[\n return `
\n `\n]]]"
+ chips:
+ card:
+ type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n --chip-background:\
+ \ var(--primary-background-color) !important;\n --chip-box-shadow:\
+ \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
+ }\n"
+ chips:
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.erebus_mic_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.erebus_mic_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.erebus_webcam_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.erebus_webcam_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - condition: numeric_state
+ entity: sensor.erebus_windows_updates_software_updates
+ above: 0
+ chip:
+ type: template
+ entity: sensor.erebus_windows_updates_software_updates
+ icon: mdi:arrow-up-bold-circle
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: erebus
+ - entity: sensor.erebus_windows_updates_software_updates
+ - type: conditional
+ conditions:
+ - condition: numeric_state
+ entity: sensor.erebus_windows_updates_driver_updates
+ above: 0
+ chip:
+ type: template
+ entity: sensor.erebus_windows_updates_driver_updates
+ icon: mdi:cog-refresh
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: erebus
+ - entity: sensor.erebus_windows_updates_driver_updates
+ - type: custom:button-card
+ layout_options:
+ grid_columns: 2
+ template: computer_tile
+ variables:
+ connected: binary_sensor.nasya_connected
+ media: media_player.nasya
+ cpu: sensor.nasya_cpu_load
+ ram: sensor.nasya_memory_usage
+ gpu: sensor.nasya_gpu_load
+ name: Nasya
+ icon: mdi:laptop
+ entity: binary_sensor.nasya_connected
+ show_state: true
+ tap_action:
+ action: navigate
+ navigation_path: '#computer-nasya'
+ custom_fields:
+ stat1: "[[[\n return `\n\
+ \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
+ \ : '?'}`\n]]]"
+ stat2: "[[[\n return `\n \
+ \ CPU: ${states[variables.cpu].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat3: "[[[\n return `\n \
+ \ RAM: ${states[variables.ram].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat4: "[[[\n return `\n\
+ \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
+ \ undefined, 0) : '?'}`\n]]]"
+ info: "[[[\n return `
\n `\n]]]"
+ chips:
+ card:
+ type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n --chip-background:\
+ \ var(--primary-background-color) !important;\n --chip-box-shadow:\
+ \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
+ }\n"
+ chips:
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.nasya_mic_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.nasya_mic_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.nasya_webcam_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.nasya_webcam_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - condition: numeric_state
+ entity: sensor.nasya_windows_updates_software_updates
+ above: 0
+ chip:
+ type: template
+ entity: sensor.nasya_windows_updates_software_updates
+ icon: mdi:arrow-up-bold-circle
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: nasya
+ - entity: sensor.nasya_windows_updates_software_updates
+ - type: conditional
+ conditions:
+ - condition: numeric_state
+ entity: sensor.nasya_windows_updates_driver_updates
+ above: 0
+ chip:
+ type: template
+ entity: sensor.nasya_windows_updates_driver_updates
+ icon: mdi:cog-refresh
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: nasya
+ - entity: sensor.nasya_windows_updates_driver_updates
+ - type: custom:button-card
layout_options:
- grid_columns: full
- column_span: 3
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.living_room_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.family_room_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.joshua_office_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.kitchen_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.amy_office_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.ethan_bedroom_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.emma_bedroom_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.main_bedroom_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.garage_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
- variables:
- - entity: light.outside_lights
- - style: ''
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: light_group_popup
+ grid_columns: 2
+ template: computer_tile
variables:
- - entity: light.utility_lights
- - style: ''
- cards: []
- - icon: mdi:shield
- path: security
- title: Security
- type: sections
- max_columns: 2
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
+ connected: binary_sensor.ardena_connected
+ media: media_player.ardena
+ cpu: sensor.ardena_cpu_load
+ ram: sensor.ardena_memory_usage
+ gpu: sensor.ardena_gpu_load
+ name: Ardena
+ icon: fab:steam-symbol
+ entity: binary_sensor.ardena_connected
+ show_state: true
+ tap_action:
+ action: navigate
+ navigation_path: '#computer-ardena'
+ custom_fields:
+ stat1: "[[[\n return `\n\
+ \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
+ \ : '?'}`\n]]]"
+ stat2: "[[[\n return `\n \
+ \ CPU: ${states[variables.cpu].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat3: "[[[\n return `\n \
+ \ RAM: ${states[variables.ram].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat4: "[[[\n return `\n\
+ \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
+ \ undefined, 0) : '?'}`\n]]]"
+ info: "[[[\n return `
\n `\n]]]"
+ chips:
+ card:
+ type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n --chip-background:\
+ \ var(--primary-background-color) !important;\n --chip-box-shadow:\
+ \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
+ }\n"
+ chips:
+ - type: conditional
+ conditions:
+ - entity: fan.computer
+ state_not: 'off'
+ chip:
+ type: template
+ entity: fan.computer
+ icon: mdi:fan
+ icon_color: '{{ iif(is_state(entity, ''on''), "green", "disabled")
+ }}'
+ card_mod:
+ style:
+ .: "ha-card {\n {% if is_state(config.entity, 'on') %}\n\
+ \ animation: rotation 1.5s linear infinite;\n \
+ \ {% endif %}\n}\n@keyframes rotation {\n 100% {\n\
+ \ transform: rotate(-360deg);\n }\n}\n"
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.ardena_mic_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.ardena_mic_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.ardena_webcam_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.ardena_webcam_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - condition: numeric_state
+ entity: sensor.ardena_windows_updates_software_updates
+ above: 0
+ chip:
+ type: template
+ entity: sensor.ardena_windows_updates_software_updates
+ icon: mdi:arrow-up-bold-circle
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: ardena
+ - entity: sensor.ardena_windows_updates_software_updates
+ - type: conditional
+ conditions:
+ - condition: numeric_state
+ entity: sensor.ardena_windows_updates_driver_updates
+ above: 0
+ chip:
+ type: template
+ entity: sensor.ardena_windows_updates_driver_updates
+ icon: mdi:cog-refresh
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: ardena
+ - entity: sensor.ardena_windows_updates_driver_updates
+ - type: custom:button-card
+ layout_options:
+ grid_columns: 2
+ template: computer_tile
variables:
- - primary: Security
- - icon: mdi:shield
- - icon_color: green
- - chips:
- - type: template
- entity: lock.front_door
- content: '{% from "util.jinja" import security_count %} {{ iif(security_count()
- | int == 0, "Secure", "Not Secure") }}'
- icon: '{% from "util.jinja" import security_count %} {{ iif(security_count()
- | int == 0, "mdi:shield-check", "mdi:shield-alert") }}'
- icon_color: '{% from "util.jinja" import security_count %} {{
- iif(security_count() | int == 0, "green", "red") }}'
- tap_action:
- action: none
- hold_action:
- action: none
- - type: template
- entity: binary_sensor.all_doors
- card_mod:
- style:
- .: "{% if is_state(config.entity, \"on\") %}\nha-card:after\
- \ {\n content: \"{{ expand(config.entity) | selectattr('state',\
- \ '==', 'on') | list | count }}\";\n position: absolute;\n\
- \ color: var(--cyan-color);\n font-weight: bolder;\n \
- \ top: -2px;\n right: 2px;\n font-size: 12px;\n}\n{% endif\
- \ %}\n"
- icon_color: '{{ iif(is_state(entity, "on"), "cyan", "disabled")
- }}'
- icon: '{{ iif(is_state(entity, "on"), "mdi:door-open", "mdi:door")
- }}'
- tap_action:
- action: none
- - type: template
- entity: input_boolean.guest_mode
- icon: '{{ iif(is_state(entity, "on"), "mdi:account-question",
- "mdi:account-question-outline") }}'
- icon_color: '{{ iif(is_state(entity, "on"), "green", "disabled")
- }}'
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- - type: template
- icon: mdi:chart-gantt
- icon_color: light-green
- tap_action:
- action: navigate
- navigation_path: frigate
+ connected: binary_sensor.athos_connected
+ media: media_player.athos
+ cpu: sensor.athos_cpu_load
+ ram: sensor.athos_memory_usage
+ gpu: sensor.athos_gpu_load
+ name: Athos
+ icon: mdi:gamepad
+ entity: binary_sensor.athos_connected
+ show_state: true
+ tap_action:
+ action: navigate
+ navigation_path: '#computer-athos'
+ custom_fields:
+ stat1: "[[[\n return `\n\
+ \ Media: ${states[variables.media].state !== 'unavailable' ? helpers.localize(states[variables.media])\
+ \ : '?'}`\n]]]"
+ stat2: "[[[\n return `\n \
+ \ CPU: ${states[variables.cpu].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.cpu], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat3: "[[[\n return `\n \
+ \ RAM: ${states[variables.ram].state\
+ \ !== 'unavailable' ? helpers.localize(states[variables.ram], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat4: "[[[\n return `\n\
+ \ GPU: ${states[variables.gpu].state !== 'unavailable' ? helpers.localize(states[variables.gpu],\
+ \ undefined, 0) : '?'}`\n]]]"
+ info: "[[[\n return `
\n `\n]]]"
+ chips:
+ card:
+ type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n --chip-background:\
+ \ var(--primary-background-color) !important;\n --chip-box-shadow:\
+ \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
+ }\n"
+ chips:
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.athos_mic_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.athos_mic_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.athos_webcam_active
+ state: 'on'
+ chip:
+ type: entity
+ entity: binary_sensor.athos_webcam_active
+ icon_color: red
+ content_info: none
+ - type: conditional
+ conditions:
+ - entity: sensor.athos_windows_updates_software_updates
+ state_not: '0'
+ - entity: sensor.athos_windows_updates_software_updates
+ state_not: unavailable
+ - entity: sensor.athos_windows_updates_software_updates
+ state_not: unknown
+ chip:
+ type: template
+ entity: sensor.athos_windows_updates_software_updates
+ icon: mdi:arrow-up-bold-circle
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: athos
+ - entity: sensor.athos_windows_updates_software_updates
+ - type: conditional
+ conditions:
+ - entity: sensor.athos_windows_updates_driver_updates
+ state_not: '0'
+ - entity: sensor.athos_windows_updates_driver_updates
+ state_not: unavailable
+ - entity: sensor.athos_windows_updates_driver_updates
+ state_not: unknown
+ chip:
+ type: template
+ entity: sensor.athos_windows_updates_driver_updates
+ icon: mdi:cog-refresh
+ icon_color: red
+ card_mod:
+ style:
+ .: "{% if int(states(config.entity), 0) > 0 %}\nha-card:after\
+ \ {\n content: \"{{ int(states(config.entity), 0) }}\"\
+ ;\n position: absolute;\n color: var(--red-color);\n\
+ \ font-weight: bolder;\n top: -2px;\n right: 2px;\n\
+ \ font-size: 12px;\n}\n{% endif %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: athos
+ - entity: sensor.athos_windows_updates_driver_updates
+ - type: custom:button-card
+ layout_options:
+ grid_columns: 2
+ name: MagicMirror
+ icon: mdi:apps
+ entity: binary_sensor.magicmirror_connected
+ show_state: true
+ tap_action:
+ action: navigate
+ navigation_path: '#computer-magicmirror'
+ custom_fields:
+ stat1: "[[[\n var entity_id = 'sensor.magicmirror_cpu_usage';\n return\
+ \ `\n CPU: ${states[entity_id].state !== 'unavailable'\
+ \ ? helpers.localize(states[entity_id], undefined, 0) : '?'}`\n\
+ ]]]"
+ stat2: "[[[\n var entity_id = 'sensor.magicmirror_memory_usage';\n\
+ \ return `\n RAM: ${states[entity_id].state\
+ \ !== 'unavailable' ? helpers.localize(states[entity_id], undefined,\
+ \ 0) : '?'}`\n]]]"
+ stat3: "[[[\n var entity_id = 'sensor.magicmirror_cpu_thermal_1_temperature';\n\
+ \ return `\n \
+ \ Temp: ${states[entity_id].state\
+ \ !== 'unavailable' ? helpers.localize(states[entity_id], undefined,\
+ \ 0) : '?'}`\n]]]"
+ info: "[[[\n return ``\n]]]"
+ chips:
+ card:
+ type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n --chip-background:\
+ \ var(--primary-background-color) !important;\n --chip-box-shadow:\
+ \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
+ }\n"
+ chips: []
+ styles:
+ grid:
+ - grid-template-columns: 1fr min-content
+ - grid-template-rows: min-content min-content min-content min-content
+ min-content min-content min-content;
+ - grid-template-areas: '"n i" "s chips" "info chips" "stat1 chips"
+ "stat2 chips" "stat3 chips" "stat4 chips"'
+ card:
+ - padding: 22px 8px 22px 22px
+ img_cell:
+ - justify-content: start
+ - align-self: start
+ - position: absolute
+ - width: 100px
+ - height: 100px
+ - right: -20px
+ - top: -20px
+ - border-radius: 50%
+ - background: '[[[ if (states["binary_sensor.magicmirror_connected"].state
+ == "off") return "var(--red-color)"; else return "var(--green-color)"
+ ]]]'
+ icon:
+ - width: 60px
+ - color: rgba(0, 0, 0, 0.6)
+ name:
+ - justify-self: start
+ - align-self: start
+ - font-size: 20px
+ - font-weight: 500
+ - color: var(--white-color)
+ state:
+ - min-height: 30px
+ - justify-self: start
+ - align-self: start
+ - font-size: 14px
+ - opacity: '0.7'
+ custom_fields:
+ stat1:
+ - padding-bottom: 2px
+ - align-self: start
+ - justify-self: start
+ - font-size: 14px
+ - --text-color-sensor: '[[[ if (states[''sensor.magicmirror_cpu_usage''].state
+ > 80) return "var(--red-color)"; ]]]'
+ stat2:
+ - padding-bottom: 2px
+ - align-self: start
+ - justify-self: start
+ - font-size: 14px
+ - --text-color-sensor: '[[[ if (states[''sensor.magicmirror_memory_usage''].state
+ > 80) return "var(--red-color)"; ]]]'
+ stat3:
+ - align-self: start
+ - justify-self: start
+ - font-size: 14px
+ - --text-color-sensor: '[[[ if (states[''sensor.magicmirror_cpu_thermal_1_temperature''].state
+ > 80) return "var(--red-color)"; ]]]'
+ info:
+ - align-self: end
+ - justify-self: start
+ - text-align: left
+ chips:
+ - margin-top: 15px
+ - justify-content: end
+ - align-self: start
+ - type: custom:button-card
layout_options:
- grid_columns: full
- column_span: 2
+ grid_columns: 2
+ name: Quest 2
+ icon: fab:meta
+ entity: binary_sensor.quest_interactive
+ show_state: true
+ tap_action:
+ action: navigate
+ navigation_path: '#computer-quest'
+ custom_fields:
+ stat1: "[[[\n var entity_id = 'sensor.quest_battery_level';\n return\
+ \ `\n CPU: ${states[entity_id].state !== 'unavailable'\
+ \ ? helpers.localize(states[entity_id], undefined, 0) : '?'}`\n\
+ ]]]"
+ stat2: "[[[\n var entity_id = 'sensor.quest_wifi_link_speed';\n return\
+ \ `\n WiFi: ${states[entity_id].state !== 'unavailable'\
+ \ ? helpers.localize(states[entity_id], undefined, 0) : '?'}`\n\
+ ]]]"
+ stat3: "[[[\n var entity_id = 'sensor.quest_battery_temperature';\n\
+ \ return `\n \
+ \ Temp: ${states[entity_id].state\
+ \ !== 'unavailable' ? helpers.localize(states[entity_id], undefined,\
+ \ 0) : '?'}`\n]]]"
+ info: "[[[\n return ``\n]]]"
+ chips:
+ card:
+ type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n transition: all 0s;\n --chip-background:\
+ \ var(--primary-background-color) !important;\n --chip-box-shadow:\
+ \ none;\n --chip-border-width: 0;\n --chip-spacing: 0.1em;\n\
+ }\n"
+ chips: []
+ styles:
+ grid:
+ - grid-template-columns: 1fr min-content
+ - grid-template-rows: min-content min-content min-content min-content
+ min-content min-content min-content;
+ - grid-template-areas: '"n i" "s chips" "info chips" "stat1 chips"
+ "stat2 chips" "stat3 chips" "stat4 chips"'
+ card:
+ - padding: 22px 8px 22px 22px
+ img_cell:
+ - justify-content: start
+ - align-self: start
+ - position: absolute
+ - width: 100px
+ - height: 100px
+ - right: -20px
+ - top: -20px
+ - border-radius: 50%
+ - background: '[[[ if (states["binary_sensor.quest_interactive"].state
+ == "off") return "var(--red-color)"; else return "var(--green-color)"
+ ]]]'
+ icon:
+ - width: 60px
+ - color: rgba(0, 0, 0, 0.6)
+ name:
+ - justify-self: start
+ - align-self: start
+ - font-size: 20px
+ - font-weight: 500
+ - color: var(--white-color)
+ state:
+ - min-height: 30px
+ - justify-self: start
+ - align-self: start
+ - font-size: 14px
+ - opacity: '0.7'
+ custom_fields:
+ stat1:
+ - padding-bottom: 2px
+ - align-self: start
+ - justify-self: start
+ - font-size: 14px
+ - --text-color-sensor: '[[[ if (states[''sensor.quest_battery_level''].state
+ < 16) return "var(--red-color)"; ]]]'
+ stat2:
+ - padding-bottom: 2px
+ - align-self: start
+ - justify-self: start
+ - font-size: 14px
+ - --text-color-sensor: '[[[ if (states[''sensor.quest_wifi_link_speed''].state
+ < 800) return "var(--red-color)"; ]]]'
+ stat3:
+ - align-self: start
+ - justify-self: start
+ - font-size: 14px
+ - --text-color-sensor: '[[[ if (states[''sensor.quest_battery_temperature''].state
+ > 80) return "var(--red-color)"; ]]]'
+ info:
+ - align-self: end
+ - justify-self: start
+ - text-align: left
+ chips:
+ - margin-top: 15px
+ - justify-content: end
+ - align-self: start
- type: grid
cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Doors
- - chips:
- - type: template
- entity: input_boolean.door_open_alerts
- icon: mdi:door-open
- icon_color: "{% if is_state(entity, \"off\") %}\n yellow\n{%\
- \ else %}\n green\n{% endif %}"
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- card_mod:
- style: "ha-card {\n {%- if is_state(config.entity, \"off\"\
- ) -%}\n animation: ping 2s infinite;\n {%- endif -%}\n}\n\
- @keyframes ping {\n 0% { box-shadow: 0 0 1px 1px rgba(var(--rgb-yellow),\
- \ 0.7); }\n 100% { box-shadow: 0 0 5px 15px transparent;\
- \ }\n}\n"
- - type: template
- entity: input_boolean.garage_door_open_alerts
- icon: mdi:garage-variant
- icon_color: "{% if is_state(entity, \"off\") %}\n yellow\n{%\
- \ else %}\n green\n{% endif %}"
- tap_action:
- action: more-info
- hold_action:
- action: toggle
- card_mod:
- style: "ha-card {\n {%- if is_state(config.entity, \"off\"\
- ) -%}\n animation: ping 2s infinite;\n {%- endif -%}\n}\n\
- @keyframes ping {\n 0% { box-shadow: 0 0 1px 1px rgba(var(--rgb-yellow),\
- \ 0.7); }\n 100% { box-shadow: 0 0 5px 15px transparent;\
- \ }\n}\n"
- - type: custom:vertical-stack-in-card
- layout_options:
- grid_columns: 2
- cards:
- - type: custom:mushroom-template-card
- entity: binary_sensor.front_door_window_door_is_open
- primary: Front Door
- secondary: "{% from \"util.jinja\" import nominal_change_history %}\
- \ {% if is_state(entity, \"on\") -%}\n Open\n{% endif -%} {% if\
- \ is_state(\"lock.front_door\", \"unlocked\") -%}\n Unlocked\n\
- {% else -%}\n Locked\n{% endif -%} ⸱ {{ nominal_change_history(entity)\
- \ }}"
- icon: "{% if is_state(entity, \"on\") %}\n mdi:door-open\n{% elif\
- \ is_state(\"lock.front_door\", \"unlocked\") and is_state(entity,\
- \ \"off\") %}\n mdi:door-closed\n{% elif is_state(\"lock.front_door\"\
- , \"locked\") and is_state(entity, \"off\") %}\n mdi:door-closed-lock\n\
- {% endif %}"
- icon_color: "{% if is_state(entity, \"on\") %}\n red\n{% elif is_state(\"\
- lock.front_door\", \"unlocked\") and is_state(entity, \"off\") %}\n\
- \ yellow\n{% elif is_state(\"lock.front_door\", \"locked\") and\
- \ is_state(entity, \"off\") %}\n green\n{% endif %}"
- tap_action:
- action: more-info
- hold_action:
- action: fire-dom-event
- browser_mod:
- data:
- entity: sensor.front_door_battery_level
- service: browser_mod.more_info
- card_mod:
- style:
- mushroom-shape-icon$: "{% set battery_entity = \"sensor.front_door_battery_level\"\
- \ %} {% if (states(battery_entity) | int) <= 60 %} {% from \"\
- util.jinja\" import battery_color %} .shape {\n /* Radial progress\
- \ bar */\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--{{\
- \ battery_color(battery_entity) }}-color) {{ states(battery_entity)\
- \ }}% 0%, var(--card-background-color) 0% 100%\n );\n} .shape:after\
- \ {\n /* Add back icon shape */\n content: \"\";\n height:\
- \ 100%;\n width: 100%;\n position: absolute;\n border-radius:\
- \ var(--icon-border-radius);\n background: var(--shape-color);\n\
- } {% endif %}"
- - type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: 65px auto
- grid-template-rows: auto
- margin: 0 -2px -10px -2px
- padding: 0
- cards:
- - type: custom:mushroom-template-card
- entity: sensor.front_door_battery_level
- icon: mdi:lock-smart
- icon_color: disabled
- tap_action:
- action: navigate
- navigation_path: /lock-admin/front-door
- hold_action:
- action: fire-dom-event
- browser_mod:
- data:
- entity: sensor.front_door_battery_level
- service: browser_mod.more_info
- card_mod:
- style:
- .: "ha-card {\n --icon-size: 42px;\n --ha-card-box-shadow:\
- \ none;\n --ha-card-border-width: 0;\n}\n"
- mushroom-shape-icon$: "{% set timer = \"timer.keymaster_front_door_autolock\"\
- \ %} {% if state_attr(timer, \"finishes_at\") %} {% set\
- \ remaining = (as_datetime(state_attr(timer, \"finishes_at\"\
- )) - now()).total_seconds() | int %} {% set duration =\n\
- \ (state_attr(timer, \"duration\").split(\":\")[0] | int\
- \ * 60 * 60)\n + (state_attr(timer, \"duration\").split(\"\
- :\")[1] | int * 60)\n + (state_attr(timer, \"duration\"\
- ).split(\":\")[2] | int)\n%} .shape {\n /* Radial progress\
- \ bar */\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--red-color)\
- \ {{ (remaining / duration * 100) | round() }}% 0%, var(--card-background-color)\
- \ 0% 100%);\n} .shape:after {\n /* Add back icon shape\
- \ */\n content: \"\";\n height: 100%;\n width: 100%;\n\
- \ position: absolute;\n border-radius: var(--icon-border-radius);\n\
- \ background: var(--shape-color);\n} {%- endif -%}\n"
- - type: custom:mushroom-lock-card
- entity: lock.front_door
- name: Front Door
- primary_info: none
- secondary_info: none
- icon_type: none
- card_mod:
- style:
- .: "ha-card {\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n background: none;\n}\n"
- mushroom-lock-buttons-control$:
- mushroom-button:nth-child(1)$: ".button {\n --bg-color:\
- \ rgba(var(--rgb-disabled), 0.2);\n}\n"
- - type: custom:vertical-stack-in-card
- layout_options:
- grid_columns: 2
+ - type: vertical-stack
cards:
- - type: custom:mushroom-template-card
- entity: binary_sensor.garage_entry_window_door_is_open
- primary: Garage Entry
- secondary: "{% from \"util.jinja\" import nominal_change_history %}\
- \ {% if is_state(entity, \"on\") -%}\n Open\n{% endif -%} {% if\
- \ is_state(\"lock.garage_entry\", \"unlocked\") -%}\n Unlocked\n\
- {% else -%}\n Locked\n{% endif -%} ⸱ {{ nominal_change_history(entity)\
- \ }}"
- icon: "{% if is_state(entity, \"on\") %}\n mdi:door-open\n{% elif\
- \ is_state(\"lock.garage_entry\", \"unlocked\") and is_state(entity,\
- \ \"off\") %}\n mdi:door-closed\n{% elif is_state(\"lock.garage_entry\"\
- , \"locked\") and is_state(entity, \"off\") %}\n mdi:door-closed-lock\n\
- {% endif %}"
- icon_color: "{% if is_state(entity, \"on\") %}\n red\n{% elif is_state(\"\
- lock.garage_entry\", \"unlocked\") and is_state(entity, \"off\"\
- ) %}\n yellow\n{% elif is_state(\"lock.garage_entry\", \"locked\"\
- ) and is_state(entity, \"off\") %}\n green\n{% endif %}"
+ - type: custom:bubble-card
+ card_type: pop-up
+ hash: '#computer-erebus'
+ name: Erebus
+ icon: mdi:desktop-tower
+ button_type: name
tap_action:
- action: more-info
+ action: none
+ double_tap_action:
+ action: none
hold_action:
- action: fire-dom-event
- browser_mod:
- data:
- entity: sensor.garage_entry_battery_level
- service: browser_mod.more_info
- card_mod:
- style:
- mushroom-shape-icon$: "{% set battery_entity = \"sensor.garage_entry_battery_level\"\
- \ %} {% if (states(battery_entity) | int) <= 60 %} {% from \"\
- util.jinja\" import battery_color %} .shape {\n /* Radial progress\
- \ bar */\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--{{\
- \ battery_color(battery_entity) }}-color) {{ states(battery_entity)\
- \ }}% 0%, var(--card-background-color) 0% 100%\n );\n} .shape:after\
- \ {\n /* Add back icon shape */\n content: \"\";\n height:\
- \ 100%;\n width: 100%;\n position: absolute;\n border-radius:\
- \ var(--icon-border-radius);\n background: var(--shape-color);\n\
- } {% endif %}"
- - type: custom:layout-card
- layout_type: custom:grid-layout
- layout:
- grid-template-columns: 65px auto
- grid-template-rows: auto
- margin: 0 -2px -10px -2px
- padding: 0
- cards:
- - type: custom:mushroom-template-card
- entity: sensor.garage_entry_battery_level
- icon: mdi:lock-smart
- icon_color: disabled
+ action: call-service
+ service: script.hass_publish_sensors
+ data:
+ entity: media_player.erebus
+ target: {}
+ margin_top_mobile: -56px
+ styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
+ #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
+ bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
+ \ {\n display: ${hass.states['binary_sensor.erebus_mic_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\
+ \ {\n display: ${hass.states['binary_sensor.erebus_webcam_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-2 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\
+ \ {\n display: ${hass.states['sensor.erebus_windows_updates_software_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-3 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\
+ \ {\n display: ${hass.states['sensor.erebus_windows_updates_driver_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-4 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}"
+ sub_button:
+ - entity: binary_sensor.erebus_mic_active
+ show_background: false
+ - entity: binary_sensor.erebus_webcam_active
+ show_background: false
+ - entity: sensor.erebus_windows_updates_software_updates
+ show_background: false
+ show_state: true
+ icon: mdi:arrow-up-bold-circle
tap_action:
- action: navigate
- navigation_path: /lock-admin/garage-entry
- hold_action:
action: fire-dom-event
browser_mod:
+ service: browser_mod.popup
data:
- entity: sensor.garage_entry_battery_level
- service: browser_mod.more_info
- card_mod:
- style:
- .: "ha-card {\n --icon-size: 42px;\n --ha-card-box-shadow:\
- \ none;\n --ha-card-border-width: 0;\n}\n"
- mushroom-shape-icon$: "{% set timer = \"timer.keymaster_garage_entry_autolock\"\
- \ %} {% if state_attr(timer, \"finishes_at\") %} {% set\
- \ remaining = (as_datetime(state_attr(timer, \"finishes_at\"\
- )) - now()).total_seconds() | int %} {% set duration =\n\
- \ (state_attr(timer, \"duration\").split(\":\")[0] | int\
- \ * 60 * 60)\n + (state_attr(timer, \"duration\").split(\"\
- :\")[1] | int * 60)\n + (state_attr(timer, \"duration\"\
- ).split(\":\")[2] | int)\n%} .shape {\n /* Radial progress\
- \ bar */\n background:\n radial-gradient(var(--card-background-color)\
- \ 60%, transparent calc(60% + 1px)),\n conic-gradient(var(--red-color)\
- \ {{ (remaining / duration * 100) | round() }}% 0%, var(--card-background-color)\
- \ 0% 100%);\n} .shape:after {\n /* Add back icon shape\
- \ */\n content: \"\";\n height: 100%;\n width: 100%;\n\
- \ position: absolute;\n border-radius: var(--icon-border-radius);\n\
- \ background: var(--shape-color);\n} {%- endif -%}\n"
- - type: custom:mushroom-lock-card
- entity: lock.garage_entry
- name: Garage Entry
- primary_info: none
- secondary_info: none
- icon_type: none
- card_mod:
- style:
- .: "ha-card {\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n background: none;\n}\n"
- mushroom-lock-buttons-control$:
- mushroom-button:nth-child(1)$: ".button {\n --bg-color:\
- \ rgba(var(--rgb-disabled), 0.2);\n}\n"
- - type: custom:decluttering-card
- layout_options:
- grid_columns: 2
- template: door_card
- variables:
- - name: Sliding Door
- - entity: binary_sensor.sliding_door_contact
- - battery_entity: sensor.sliding_door_battery
- - icon: mdi:door-sliding
- - type: custom:decluttering-card
- layout_options:
- grid_columns: 2
- template: door_card
- variables:
- - name: Garage Side Door
- - entity: binary_sensor.garage_side_door_contact
- - battery_entity: sensor.garage_side_door_battery
- - icon: mdi:door
- - type: custom:vertical-stack-in-card
- layout_options:
- grid_columns: 2
- cards:
- - type: custom:mushroom-template-card
- entity: cover.garage_door
- primary: Garage Door
- secondary: '{% from "util.jinja" import nominal_change_history %}
- {{ state_translated(entity) }} ⸱ {{ nominal_change_history(entity)
- }}'
- icon: "{% if is_state(entity, \"open\") %}\n mdi:garage-open-variant\n\
- {% elif states(entity) in [\"opening\", \"closing\"] %}\n mdi:garage-alert-variant\n\
- {% elif is_state(entity, \"closed\") %}\n mdi:garage-variant\n\
- {% else %}\n mdi:garage-alert-variant\n{% endif %}"
- icon_color: "{% if is_state(entity, \"open\") %}\n red\n{% elif states(entity)\
- \ in [\"opening\", \"closing\"] %}\n amber\n{% elif is_state(entity,\
- \ \"closed\") %}\n green\n{% else %}\n red\n{% endif %}"
- tap_action:
- action: more-info
- - type: custom:mushroom-cover-card
- entity: cover.garage_door
- name: Garage Door
- show_buttons_control: true
- primary_info: none
- secondary_info: none
- icon_type: none
- show_position_control: true
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: erebus
+ - entity: sensor.erebus_windows_updates_software_updates
+ - entity: sensor.erebus_windows_updates_driver_updates
+ show_background: false
+ show_state: true
+ icon: mdi:cog-refresh
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: erebus
+ - entity: sensor.erebus_windows_updates_driver_updates
+ - type: custom:vertical-stack-in-card
+ cards:
+ - type: custom:decluttering-card
+ template: computer_power
+ variables:
+ - computer: erebus
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.erebus_connected
+ state_not: unavailable
+ - entity: binary_sensor.erebus_connected
+ state_not: unknown
+ - entity: binary_sensor.erebus_connected
+ state_not: 'off'
+ card:
+ type: custom:decluttering-card
+ template: computer_apps
+ variables:
+ - computer: erebus
+ - type: conditional
+ conditions:
+ - entity: media_player.erebus
+ state_not: unavailable
+ - entity: media_player.erebus
+ state_not: unknown
+ - entity: media_player.erebus
+ state_not: 'off'
+ card:
+ type: custom:bubble-card
+ card_type: media-player
+ card_layout: large
+ cover_background: true
+ entity: media_player.erebus
+ hide:
+ power_button: true
+ - type: custom:decluttering-card
+ template: uptime_card
+ variables:
+ - entity: binary_sensor.erebus_connected
+ - name: Erebus Up-Time
+ - icon: mdi:connection
+ - type: custom:decluttering-card
+ template: four_graphs
+ variables:
+ - graph_1_name: CPU
+ - graph_1_icon: mdi:cpu-64-bit
+ - graph_1_entities:
+ - entity: sensor.erebus_cpu_load
+ name: Usage
+ color: var(--amber-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.erebus_cpu_clock_speed
+ name: Speed
+ color: var(--lime-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_2_name: GPU
+ - graph_2_icon: mdi:expansion-card
+ - graph_2_entities:
+ - entity: sensor.erebus_gpu_load
+ name: Load
+ color: var(--green-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.erebus_gpu_temperature
+ name: Temperature
+ color: var(--pink-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_3_name: Storage
+ - graph_3_icon: mdi:harddisk
+ - graph_3_entities:
+ - entity: sensor.erebus_storage_c
+ attribute: UsedSpacePercentage
+ unit: '%'
+ name: Win11
+ color: var(--blue-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.erebus_storage_b
+ attribute: UsedSpacePercentage
+ unit: '%'
+ name: Backup
+ color: var(--indigo-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.erebus_storage_d
+ attribute: UsedSpacePercentage
+ unit: '%'
+ name: Dev Drive
+ color: var(--lime-color)
+ show_state: true
+ show_points: false
+ - graph_4_name: RAM
+ - graph_4_icon: mdi:memory
+ - graph_4_entities:
+ - entity: sensor.erebus_memory_usage
+ name: Usage
+ color: var(--purple-color)
+ show_state: true
+ show_points: false
card_mod:
- style:
- .: "ha-card {\n --ha-card-box-shadow: none;\n --ha-card-border-width:\
- \ 0;\n background: none;\n}\n"
- mushroom-button$: ".button {\n --bg-color: rgba(var(--rgb-disabled),\
- \ 0.2);\n}\n"
- mushroom-cover-buttons-control$:
- mushroom-button$: ".button {\n --bg-color: rgba(var(--rgb-disabled),\
- \ 0.2);\n}\n"
- - type: custom:decluttering-card
- layout_options:
- grid_columns: 2
- template: door_card
- variables:
- - name: Cold Storage Door
- - entity: binary_sensor.cold_storage_contact_contact
- - battery_entity: sensor.cold_storage_contact_battery
- - icon: mdi:door
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Cameras
- - chips:
- - type: template
- icon: mdi:chart-gantt
- tap_action:
- action: navigate
- navigation_path: frigate
- - type: picture-elements
- camera_image: camera.doorbell
- elements:
- - type: icon
- icon: mdi:cctv
- style:
- right: 0px
- top: 20px
- transform: translate(-50%, -50%) scale(150%)
- tap_action:
- action: navigate
- navigation_path: '#camera-doorbell'
- - type: state-icon
- entity: sensor.doorbell_person_count
- icon: mdi:walk
- state_color: true
- style:
- bottom: -20px
- right: -20px
- transform: translate(-50%, -50%)
- tap_action:
- action: more-info
- - type: state-icon
- entity: binary_sensor.doorbell_camera_motion
- icon: mdi:motion-sensor
- state_color: true
- style:
- bottom: -20px
- right: 20px
- transform: translate(-50%, -50%)
- tap_action:
- action: more-info
- layout_options:
- grid_columns: 2
- - type: picture-entity
- entity: camera.garage
- aspect_ratio: '16:9'
- show_state: false
- show_name: false
- tap_action:
- action: navigate
- navigation_path: '#camera-garage'
- layout_options:
- grid_columns: 2
- - type: picture-entity
- entity: camera.family_room
- aspect_ratio: '16:9'
- show_state: false
- show_name: false
- tap_action:
- action: navigate
- navigation_path: '#camera-family-room'
- layout_options:
- grid_columns: 2
- - type: picture-entity
- entity: camera.living_room
- aspect_ratio: '16:9'
- show_state: false
- show_name: false
- tap_action:
- action: navigate
- navigation_path: '#camera-living-room'
- layout_options:
- grid_columns: 2
- - type: custom:mushroom-template-card
- entity: binary_sensor.doorbell_visitor
- primary: Last Ring
- secondary: '{% from "util.jinja" import nominal_change_history %} {{ nominal_change_history(entity)
- }}'
- icon: mdi:bell-ring
- icon_color: disabled
- tap_action:
- action: more-info
- - type: custom:mushroom-template-card
- entity: sensor.doorbell_person_count
- primary: Last Person
- secondary: '{% from "util.jinja" import nominal_change_history %} {{ nominal_change_history(entity)
- }}'
- icon: mdi:walk
- icon_color: disabled
- tap_action:
- action: more-info
- - type: grid
- cards:
- - type: custom:mushroom-title-card
- title: Occupancy
- - type: grid
- square: false
- columns: 3
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
+ - type: vertical-stack
cards:
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Home
- - entity: binary_sensor.ecobee_occupancy
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Kitchen
- - entity: binary_sensor.kitchen_occupancy
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Family
- - entity: binary_sensor.family_room_occupancy
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Main
- - entity: binary_sensor.main_bedroom_occupancy
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Emma
- - entity: binary_sensor.emma_bedroom_occupancy
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Ethan
- - entity: binary_sensor.ethan_bedroom_occupancy
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Amy Office
- - entity: binary_sensor.amy_office_occupancy
- - type: custom:mushroom-template-card
- entity: binary_sensor.apollo_msr_1_office_radar_target
- primary: Office
- secondary: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
- , \"on\") -%}\n Motion\n{%- elif is_state(entity, \"on\") -%}\n\
- \ Detected\n{%- else -%}\n Clear\n{%- endif -%}"
- icon: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
- , \"on\") -%}\n mdi:motion-sensor\n{%- elif is_state(entity, \"\
- on\") -%}\n mdi:walk\n{%- else -%}\n mdi:motion-sensor-off\n{%-\
- \ endif -%}"
- icon_color: "{%- if is_state(\"binary_sensor.apollo_msr_1_office_radar_moving_target\"\
- , \"on\") -%}\n orange\n{%- elif is_state(entity, \"on\") -%}\n\
- \ light-green\n{%- else -%}\n disabled\n{%- endif -%}"
+ - type: custom:bubble-card
+ card_type: pop-up
+ hash: '#computer-nasya'
+ name: Nasya
+ icon: mdi:laptop
+ button_type: name
tap_action:
- action: more-info
- - type: custom:decluttering-card
- template: motion_card
- variables:
- - name: Garage
- - entity: binary_sensor.garage_multisensor_motion_detection
- - type: grid
- cards:
+ action: none
+ double_tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: script.hass_publish_sensors
+ data:
+ entity: media_player.nasya
+ target: {}
+ margin_top_mobile: -56px
+ styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
+ #header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
+ bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
+ \ {\n display: ${hass.states['binary_sensor.nasya_mic_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\
+ \ {\n display: ${hass.states['binary_sensor.nasya_webcam_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-2 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\
+ \ {\n display: ${hass.states['sensor.nasya_windows_updates_software_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-3 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\
+ \ {\n display: ${hass.states['sensor.nasya_windows_updates_driver_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-4 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}"
+ sub_button:
+ - entity: binary_sensor.nasya_mic_active
+ show_background: false
+ - entity: binary_sensor.nasya_webcam_active
+ show_background: false
+ - entity: sensor.nasya_windows_updates_software_updates
+ show_background: false
+ show_state: true
+ icon: mdi:arrow-up-bold-circle
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: nasya
+ - entity: sensor.nasya_windows_updates_software_updates
+ - entity: sensor.nasya_windows_updates_driver_updates
+ show_background: false
+ show_state: true
+ icon: mdi:cog-refresh
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: nasya
+ - entity: sensor.nasya_windows_updates_driver_updates
+ - type: custom:vertical-stack-in-card
+ cards:
+ - type: custom:decluttering-card
+ template: computer_power
+ variables:
+ - computer: nasya
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.nasya_connected
+ state_not: unavailable
+ - entity: binary_sensor.nasya_connected
+ state_not: unknown
+ - entity: binary_sensor.nasya_connected
+ state_not: 'off'
+ card:
+ type: custom:decluttering-card
+ template: computer_apps
+ variables:
+ - computer: nasya
+ - type: conditional
+ conditions:
+ - entity: media_player.nasya
+ state_not: unavailable
+ - entity: media_player.nasya
+ state_not: unknown
+ - entity: media_player.nasya
+ state_not: 'off'
+ card:
+ type: custom:bubble-card
+ card_type: media-player
+ card_layout: large
+ cover_background: true
+ entity: media_player.nasya
+ hide:
+ power_button: true
+ - type: custom:decluttering-card
+ template: uptime_card
+ variables:
+ - entity: binary_sensor.nasya_connected
+ - name: Nasya Up-Time
+ - icon: mdi:connection
+ - type: custom:decluttering-card
+ template: four_graphs
+ variables:
+ - graph_1_name: CPU
+ - graph_1_icon: mdi:cpu-64-bit
+ - graph_1_entities:
+ - entity: sensor.nasya_cpu_load
+ name: Usage
+ color: var(--amber-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.nasya_cpu_clock_speed
+ name: Speed
+ color: var(--lime-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_2_name: GPU
+ - graph_2_icon: mdi:expansion-card
+ - graph_2_entities:
+ - entity: sensor.nasya_gpu_load
+ name: Load
+ color: var(--green-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.nasya_gpu_temperature
+ name: Temperature
+ color: var(--pink-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_3_name: Storage
+ - graph_3_icon: mdi:harddisk
+ - graph_3_entities:
+ - entity: sensor.nasya_storage_c
+ attribute: UsedSpacePercentage
+ unit: '%'
+ name: Win11
+ color: var(--blue-color)
+ show_state: true
+ show_points: false
+ - graph_4_name: RAM
+ - graph_4_icon: mdi:memory
+ - graph_4_entities:
+ - entity: sensor.nasya_memory_usage
+ name: Usage
+ color: var(--purple-color)
+ show_state: true
+ show_points: false
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#camera-living-room'
+ hash: '#computer-ardena'
+ name: Ardena
+ icon: mdi:steam
button_type: name
- name: Living Room
- icon: mdi:cctv
- width_desktop: 96%
+ tap_action:
+ action: none
+ double_tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: script.hass_publish_sensors
+ data:
+ entity: media_player.ardena
+ target: {}
+ margin_top_mobile: -56px
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.living_room
- - stream: livingroom
+ bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-2\
+ \ {\n display: ${hass.states['binary_sensor.ardena_mic_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-2 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\
+ \ {\n display: ${hass.states['binary_sensor.ardena_webcam_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-3 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\
+ \ {\n display: ${hass.states['sensor.ardena_windows_updates_software_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-4 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-5\
+ \ {\n display: ${hass.states['sensor.ardena_windows_updates_driver_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-5 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}"
+ sub_button:
+ - entity: fan.computer
+ show_background: false
+ - entity: binary_sensor.ardena_mic_active
+ show_background: false
+ - entity: binary_sensor.ardena_webcam_active
+ show_background: false
+ - entity: sensor.ardena_windows_updates_software_updates
+ show_background: false
+ show_state: true
+ icon: mdi:arrow-up-bold-circle
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: ardena
+ - entity: sensor.ardena_windows_updates_software_updates
+ - entity: sensor.ardena_windows_updates_driver_updates
+ show_background: false
+ show_state: true
+ icon: mdi:cog-refresh
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: ardena
+ - entity: sensor.ardena_windows_updates_driver_updates
+ - type: custom:vertical-stack-in-card
+ cards:
+ - type: custom:decluttering-card
+ template: computer_power
+ variables:
+ - computer: ardena
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.ardena_connected
+ state_not: unavailable
+ - entity: binary_sensor.ardena_connected
+ state_not: unknown
+ - entity: binary_sensor.ardena_connected
+ state_not: 'off'
+ card:
+ type: custom:decluttering-card
+ template: computer_apps
+ variables:
+ - computer: ardena
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.ardena_connected
+ state: 'on'
+ card:
+ type: custom:decluttering-card
+ template: computer_apps
+ variables:
+ - computer: ardena
+ - type: conditional
+ conditions:
+ - entity: media_player.ardena
+ state_not: unavailable
+ - entity: media_player.ardena
+ state_not: unknown
+ - entity: media_player.ardena
+ state_not: 'off'
+ card:
+ type: custom:bubble-card
+ card_type: media-player
+ cover_background: true
+ card_layout: large
+ entity: media_player.ardena
+ hide:
+ power_button: true
+ - type: custom:decluttering-card
+ template: uptime_card
+ variables:
+ - entity: binary_sensor.ardena_connected
+ - name: Ardena Up-Time
+ - icon: mdi:connection
+ - type: custom:decluttering-card
+ template: four_graphs
+ variables:
+ - graph_1_name: CPU
+ - graph_1_icon: mdi:cpu-64-bit
+ - graph_1_entities:
+ - entity: sensor.ardena_cpu_load
+ name: Usage
+ color: var(--amber-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.ardena_cpu_clock_speed
+ name: Speed
+ color: var(--lime-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_2_name: GPU
+ - graph_2_icon: mdi:expansion-card
+ - graph_2_entities:
+ - entity: sensor.ardena_gpu_load
+ name: Load
+ color: var(--green-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.ardena_gpu_temperature
+ name: Temperature
+ color: var(--pink-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_3_name: Storage
+ - graph_3_icon: mdi:harddisk
+ - graph_3_entities:
+ - entity: sensor.ardena_storage_c
+ attribute: UsedSpacePercentage
+ unit: '%'
+ name: Win11
+ color: var(--blue-color)
+ show_state: true
+ show_points: false
+ - graph_4_name: RAM
+ - graph_4_icon: mdi:memory
+ - graph_4_entities:
+ - entity: sensor.ardena_memory_usage
+ name: Usage
+ color: var(--purple-color)
+ show_state: true
+ show_points: false
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#camera-family-room'
+ hash: '#computer-athos'
+ name: Athos
+ icon: mdi:gamepad
button_type: name
- name: Family Room
- icon: mdi:cctv
- width_desktop: 96%
+ tap_action:
+ action: none
+ double_tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: script.hass_publish_sensors
+ data:
+ entity: media_player.athos
+ target: {}
+ margin_top_mobile: -56px
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
- bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.family_room
- - stream: familyroom
+ bubble-card::after {\n display: none !important;\n}\n.bubble-sub-button-1\
+ \ {\n display: ${hass.states['binary_sensor.athos_mic_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-1 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\
+ \ {\n display: ${hass.states['binary_sensor.athos_webcam_active']?.state\
+ \ === 'on' ? '' : 'none'} !important;\n}\n.bubble-sub-button-2 >\
+ \ ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\
+ \ {\n display: ${hass.states['sensor.athos_windows_updates_software_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-3 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\
+ \ {\n display: ${hass.states['sensor.athos_windows_updates_driver_updates']?.state\
+ \ > 0 ? '' : 'none'} !important;\n}\n.bubble-sub-button-4 > ha-icon\
+ \ {\n color: var(--red-color) !important;\n}"
+ sub_button:
+ - entity: binary_sensor.athos_mic_active
+ show_background: false
+ - entity: binary_sensor.athos_webcam_active
+ show_background: false
+ - entity: sensor.athos_windows_updates_software_updates
+ show_background: false
+ show_state: true
+ icon: mdi:arrow-up-bold-circle
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Software Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: athos
+ - entity: sensor.athos_windows_updates_software_updates
+ - entity: sensor.athos_windows_updates_driver_updates
+ show_background: false
+ show_state: true
+ icon: mdi:cog-refresh
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Driver Updates
+ content:
+ type: custom:decluttering-card
+ template: windows_updates_list
+ variables:
+ - computer: athos
+ - entity: sensor.athos_windows_updates_driver_updates
+ - type: custom:vertical-stack-in-card
+ cards:
+ - type: custom:decluttering-card
+ template: computer_power
+ variables:
+ - computer: athos
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.athos_connected
+ state_not: unavailable
+ - entity: binary_sensor.athos_connected
+ state_not: unknown
+ - entity: binary_sensor.athos_connected
+ state_not: 'off'
+ card:
+ type: custom:decluttering-card
+ template: computer_apps
+ variables:
+ - computer: athos
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.athos_connected
+ state: 'on'
+ card:
+ type: custom:decluttering-card
+ template: computer_apps
+ variables:
+ - computer: athos
+ - type: conditional
+ conditions:
+ - entity: media_player.athos
+ state_not: unavailable
+ - entity: media_player.athos
+ state_not: unknown
+ - entity: media_player.athos
+ state_not: 'off'
+ card:
+ type: custom:bubble-card
+ card_type: media-player
+ cover_background: true
+ card_layout: large
+ entity: media_player.athos
+ hide:
+ power_button: true
+ - type: custom:decluttering-card
+ template: uptime_card
+ variables:
+ - entity: binary_sensor.athos_connected
+ - name: Athos Up-Time
+ - icon: mdi:connection
+ - type: custom:decluttering-card
+ template: four_graphs
+ variables:
+ - graph_1_name: CPU
+ - graph_1_icon: mdi:cpu-64-bit
+ - graph_1_entities:
+ - entity: sensor.athos_cpu_load
+ name: Usage
+ color: var(--amber-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.athos_cpu_clock_speed
+ name: Speed
+ color: var(--lime-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_2_name: GPU
+ - graph_2_icon: mdi:expansion-card
+ - graph_2_entities:
+ - entity: sensor.athos_gpu_load
+ name: Load
+ color: var(--green-color)
+ show_state: true
+ show_points: false
+ - entity: sensor.athos_gpu_temperature
+ name: Temperature
+ color: var(--pink-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_3_name: Storage
+ - graph_3_icon: mdi:harddisk
+ - graph_3_entities:
+ - entity: sensor.athos_storage_c
+ attribute: UsedSpacePercentage
+ unit: '%'
+ name: Win11
+ color: var(--blue-color)
+ show_state: true
+ show_points: false
+ - graph_4_name: RAM
+ - graph_4_icon: mdi:memory
+ - graph_4_entities:
+ - entity: sensor.athos_memory_usage
+ name: Usage
+ color: var(--purple-color)
+ show_state: true
+ show_points: false
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#camera-garage'
- button_type: name
- name: Garage
- icon: mdi:cctv
- width_desktop: 96%
+ hash: '#computer-magicmirror'
+ name: MagicMirror
+ icon: mdi:apps
+ button_type: slider
+ tap_action:
+ action: toggle
+ double_tap_action:
+ action: none
+ hold_action:
+ action: none
+ margin_top_mobile: -56px
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.garage
- - stream: garage
+ entity: light.magicmirror_monitor
+ show_state: true
+ show_attribute: true
+ show_last_changed: false
+ attribute: brightness
+ - type: custom:vertical-stack-in-card
+ cards:
+ - type: custom:vertical-stack-in-card
+ horizontal: true
+ cards:
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.magicmirror_connected
+ state: 'on'
+ card:
+ type: custom:mushroom-template-card
+ entity: button.magicmirror_shutdown
+ layout: vertical
+ primary: Power
+ icon: mdi:power
+ icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
+ }}'
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.magicmirror_shutdown
+ card_mod:
+ style: "ha-card {\n margin-left: auto;\n margin-right:\
+ \ auto;\n}\n"
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.magicmirror_connected
+ state: 'on'
+ card:
+ type: custom:mushroom-template-card
+ entity: button.magicmirror_reboot
+ layout: vertical
+ primary: Reboot
+ icon: mdi:refresh
+ icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
+ }}'
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.magicmirror_reboot
+ card_mod:
+ style: "ha-card {\n margin-left: auto;\n margin-right:\
+ \ auto;\n}\n"
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.magicmirror_connected
+ state: 'on'
+ card:
+ type: custom:mushroom-template-card
+ entity: button.magicmirror_restart
+ layout: vertical
+ primary: Restart
+ icon: mdi:table-refresh
+ icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
+ }}'
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.magicmirror_restart
+ card_mod:
+ style: "ha-card {\n margin-left: auto;\n margin-right:\
+ \ auto;\n}\n"
+ - type: conditional
+ conditions:
+ - entity: binary_sensor.magicmirror_connected
+ state: 'on'
+ card:
+ type: custom:mushroom-template-card
+ entity: button.magicmirror_refresh
+ layout: vertical
+ primary: Refresh
+ icon: mdi:web-refresh
+ icon_color: '{{ is_state(entity, "on") | iif("green", "grey")
+ }}'
+ tap_action:
+ action: none
+ hold_action:
+ action: call-service
+ service: button.press
+ target:
+ entity_id: button.magicmirror_refresh
+ card_mod:
+ style: "ha-card {\n margin-left: auto;\n margin-right:\
+ \ auto;\n}\n"
+ - type: custom:decluttering-card
+ template: uptime_card
+ variables:
+ - entity: binary_sensor.magicmirror_connected
+ - name: MagicMirror Up-Time
+ - icon: mdi:connection
+ - type: custom:decluttering-card
+ template: four_graphs
+ variables:
+ - graph_1_name: CPU
+ - graph_1_icon: mdi:cpu-64-bit
+ - graph_1_entities:
+ - entity: sensor.magicmirror_cpu_usage
+ name: Usage
+ color: var(--amber-color)
+ show_state: true
+ show_points: false
+ - graph_2_name: CPU Temp
+ - graph_2_icon: mdi:thermometer-lines
+ - graph_2_entities:
+ - entity: sensor.magicmirror_cpu_thermal_1_temperature
+ name: Temperature
+ color: var(--pink-color)
+ show_state: true
+ show_points: false
+ y_axis: secondary
+ - graph_3_name: Storage
+ - graph_3_icon: mdi:sd
+ - graph_3_entities:
+ - entity: sensor.magicmirror_disk_usage
+ name: Storage
+ color: var(--blue-color)
+ show_state: true
+ show_points: false
+ - graph_4_name: RAM
+ - graph_4_icon: mdi:memory
+ - graph_4_entities:
+ - entity: sensor.magicmirror_memory_usage
+ name: Usage
+ color: var(--purple-color)
+ show_state: true
+ show_points: false
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
- type: vertical-stack
cards:
- type: custom:bubble-card
card_type: pop-up
- hash: '#camera-doorbell'
- button_type: name
- name: Doorbell
- icon: mdi:cctv
- width_desktop: 96%
+ hash: '#computer-quest'
+ name: Meta Quest 2
+ icon: fab:meta
+ button_type: state
+ tap_action:
+ action: none
+ double_tap_action:
+ action: none
+ hold_action:
+ action: none
+ margin_top_mobile: -56px
styles: "#header-container {\n flex-direction: row-reverse;\n}\n\
#header-container > div {\n margin: 0 0 0 14px !important;\n}\n\
bubble-card::after {\n display: none !important;\n}"
- - type: custom:decluttering-card
- template: camera_popup
- variables:
- - camera: camera.doorbell
- - stream: doorbell
- cards: []
- - title: Frigate
- path: frigate
- subview: true
- icon: mdi:timeline
- type: sections
- sections:
- - type: grid
- cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Frigate Timeline
- - icon: mdi:timeline
- - icon_color: lime
- - back_path: security
- layout_options:
- grid_columns: full
- column_span: 4
- - type: grid
- cards:
- - type: custom:frigate-card
- cameras:
- - camera_entity: camera.doorbell
- view:
- default: timeline
- camera_select: current
- menu:
- style: outside
- buttons:
- recordings:
- enabled: true
- timeline:
- style: ribbon
- show_recordings: true
- controls:
- thumbnails:
- mode: below
- window_seconds: 21600
- media: all
- media_viewer:
- auto_unmute: selected
- transition_effect: slide
- dimensions:
- min_height: 500px
- performance:
- profile: high
- layout_options:
- grid_columns: full
- column_span: 4
- max_columns: 4
+ entity: binary_sensor.quest_interactive
+ show_state: true
+ - type: custom:vertical-stack-in-card
+ cards:
+ - type: custom:bar-card
+ card_mod:
+ style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n\
+ \ text-shadow: 1px 1px var(--primary-background-color);\n\
+ }\n"
+ name: Quest 2 Battery Level
+ entities:
+ - entity: sensor.quest_battery_level
+ animation:
+ state: 'on'
+ positions:
+ indicator: inside
+ decimal: 0
+ severity:
+ - color: var(--red-color)
+ from: 0
+ to: 10
+ - color: var(--orange-color)
+ from: 10
+ to: 30
+ - color: var(--amber-color)
+ from: 30
+ to: 50
+ - color: var(--light-green-color)
+ from: 50
+ to: 80
+ - color: var(--green-color)
+ from: 80
+ to: 100
+ - type: custom:decluttering-card
+ template: four_graphs
+ variables:
+ - graph_1_name: WiFi Speed
+ - graph_1_icon: mdi:wifi-arrow-left-right
+ - graph_1_entities:
+ - entity: sensor.quest_wifi_link_speed
+ color: var(--green-color)
+ show_state: false
+ show_points: false
+ - graph_2_name: WiFi Signal
+ - graph_2_icon: mdi:wifi
+ - graph_2_entities:
+ - entity: sensor.quest_wifi_signal_strength
+ color: var(--yellow-color)
+ show_state: false
+ show_points: false
+ - graph_3_name: Storage
+ - graph_3_icon: mdi:sd
+ - graph_3_entities:
+ - entity: sensor.quest_internal_storage
+ name: Storage
+ color: var(--blue-color)
+ show_state: true
+ show_points: false
+ - graph_4_name: Battery Temp
+ - graph_4_icon: mdi:battery-alert
+ - graph_4_entities:
+ - entity: sensor.quest_battery_temperature
+ name: Battery Temp
+ color: var(--red-color)
+ show_state: true
+ show_points: false
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\
+ \ 0;\n}\n"
cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.computers
+ icon: mdi:desktop-tower
+ color: '{{ "teal" if is_state(entity, "on") else "grey" }}'
+ content: '{{ expand(config.entity) | selectattr("state", "==", "on") | list
+ | count }}'
+ - type: custom:mushroom-chips-card
+ chips:
+ - type: template
+ entity: sensor.steam_zanix
+ picture: '{{ state_attr(entity, "entity_picture") }}'
+ content: '{{ states(config.entity) | title }}'
+ card_mod:
+ style: "ha-card {\n{% if is_state(config.entity, \"online\") %}\n --chip-background:\
+ \ rgba(var(--rgb-green), 0.8);\n{% endif %}\n}\n{% if is_state(config.entity,\
+ \ \"offline\") %}\n.avatar {\n filter: grayscale(100%);\n}\n{% endif\
+ \ %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Steam
+ content:
+ type: custom:kb-steam-card
+ entity: sensor.steam_zanix
+ game_background: true
+ card_mod:
+ style: "ha-card {\n background: none;\n}\n"
+ - type: template
+ entity: sensor.steam_starchild
+ picture: '{{ state_attr(entity, "entity_picture") }}'
+ content: '{{ states(config.entity) | title }}'
+ card_mod:
+ style: "ha-card {\n{% if is_state(config.entity, \"online\") %}\n --chip-background:\
+ \ rgba(var(--rgb-green), 0.8);\n{% endif %}\n}\n{% if is_state(config.entity,\
+ \ \"offline\") %}\n.avatar {\n filter: grayscale(100%);\n}\n{% endif\
+ \ %}\n"
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Steam
+ content:
+ type: custom:kb-steam-card
+ entity: sensor.steam_starchild
+ game_background: true
+ card_mod:
+ style: "ha-card {\n background: none;\n}\n"
- title: Bambu
path: bambu
icon: mdi:printer-3d
@@ -14516,67 +12367,10 @@ views:
sections:
- type: grid
cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Bambu Lab P1S
- - icon: fapro:bambu-lab
- - icon_color: lime
- - chips:
- - type: template
- entity: light.bambu_p1s_chamber_light
- icon: mdi:lightbulb
- icon_color: '{{ iif(is_state(entity, "on"), "amber", "disabled")
- }}'
- - type: template
- entity: sensor.bambu_p1s_print_status
- icon: mdi:file-tree
- content: "{% if is_state(\"sensor.bambu_p1s_current_stage\", \"\
- idle\") %}\n {{ state_translated(\"sensor.bambu_p1s_current_stage\"\
- ) }}\n{% else %}\n {{ state_translated(entity) }}\n{% endif\
- \ %}"
- tap_action:
- action: more-info
- - type: entity
- entity: sensor.bambu_p1s_wi_fi_signal
- - type: template
- entity: binary_sensor.bambu_p1s_hms_errors
- icon: mdi:{{ iif(is_state(entity, "on"), "alert-circle", "check-circle")
- }}
- icon_color: '{{ iif(is_state(entity, "on"), "red", "green") }}'
- tap_action:
- action: fire-dom-event
- browser_mod:
- service: browser_mod.popup
- data:
- title: Bambu P1S HMS Errors
- content:
- type: markdown
- card_mod:
- style: "ha-card {\n --ha-card-background: none\n}\n"
- content: "{%- set entity_id = \"binary_sensor.bambu_p1s_hms_errors\"\
- \ -%}\n{%- set errors = namespace(message=[],severity=[],url=[])\
- \ -%}\n{%- for attribute, value in states[entity_id].attributes.items()\
- \ -%}\n {%- if attribute.split('-') | count > 1 -%}\n\
- \ {%- set id, type = attribute.split('-') -%}\n \
- \ {%- if type | count > 1 -%}\n {%- if type ==\
- \ \"Error\" -%}\n {% set errors.message = dict(errors.message,\
- \ **{id: value}) %}\n {%- endif -%}\n {%-\
- \ if type == \"Severity\" -%}\n {% set errors.severity\
- \ = dict(errors.severity, **{id: value}) %}\n {%-\
- \ endif -%}\n {%- if type == \"Wiki\" -%}\n \
- \ {% set errors.url = dict(errors.url, **{id: value})\
- \ %}\n {%- endif -%}\n {%- endif -%}\n {%-\
- \ endif -%}\n{%- endfor -%}\n{%- set levels = {\n \"\
- fatal\": \"mdi:alert-decagram\",\n \"serious\": \"\
- mdi:alert-circle\",\n \"common\": \"mdi:minus-circle\"\
- ,\n \"info\": \"mdi:information\",\n \"unknown\":\
- \ \"mdi:help-circle\"\n} -%}\n{% for id in errors.message\
- \ %}\n {{ errors.message[id] }}\nSupport\n{% endfor %}"
- layout_options:
- grid_columns: full
+ - type: heading
+ icon: fapro:bambu-lab
+ heading: Bambu Lab P1S
+ heading_style: title
column_span: 2
- type: grid
cards:
@@ -14616,14 +12410,14 @@ views:
styles:
--mdc-theme-primary: var(--primary-color)
attributes:
- isMinWidthIndicator: true
+ minWidth: true
tabs:
- card:
show_state: false
show_name: false
camera_view: live
type: picture-entity
- entity: image.bambu_p1s_camera
+ entity: camera.bambu_p1s_camera
attributes:
icon: mdi:camera-document
label: Camera
@@ -14838,24 +12632,26 @@ views:
margin: 0
padding: 0
cards:
- - type: custom:mushroom-title-card
- title: EXT
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: AMS
- - chips:
- - type: template
- entity: sensor.bambu_p1s_ams_humidity_index
- content: '{{ states(entity) }}'
- icon: mdi:water-opacity
- icon_color: "{% if is_state(entity, \"1\") %}\n green\n{%\
- \ elif is_state(entity, \"2\") %}\n light-green\n{% elif\
- \ is_state(entity, \"3\") %}\n yellow\n{% elif is_state(entity,\
- \ \"4\") %}\n orange\n{% elif is_state(entity, \"5\") %}\n\
- \ red\n{% else %}\n grey\n{% endif %}"
- tap_action:
- action: more-info
+ - type: heading
+ heading: EXT
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ - type: heading
+ heading: AMS
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-template-badge
+ entity: sensor.bambu_p1s_ams_humidity_index
+ content: '{{ states(entity) }}'
+ icon: mdi:water-opacity
+ color: "{% if is_state(entity, \"1\") %}\n green\n{% elif is_state(entity,\
+ \ \"2\") %}\n light-green\n{% elif is_state(entity, \"3\")\
+ \ %}\n yellow\n{% elif is_state(entity, \"4\") %}\n orange\n\
+ {% elif is_state(entity, \"5\") %}\n red\n{% else %}\n grey\n\
+ {% endif %}"
+ tap_action:
+ action: more-info
- type: custom:vertical-stack-in-card
cards:
- type: custom:layout-card
@@ -15024,8 +12820,10 @@ views:
\ 0 0 1px 15px transparent; }\n}\n"
card_mod:
style: "ha-card {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:mushroom-title-card
- title: Temperature
+ - type: heading
+ icon: mdi:thermometer
+ heading: Temperature
+ heading_style: subtitle
- type: custom:expander-card
title-card-button-overlay: false
gap: 0em
@@ -15142,8 +12940,10 @@ views:
color: rgb(233,30,99)
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Status
+ - type: heading
+ icon: mdi:printer-3d
+ heading: Status
+ heading_style: subtitle
- type: custom:vertical-stack-in-card
cards:
- type: custom:mushroom-entity-card
@@ -15268,11 +13068,13 @@ views:
style: "ha-card {\n height: 238px;\n}\n"
card_mod:
style: "ha-card > div {\n --ha-card-border-width: 0;\n}\n"
- - type: custom:decluttering-card
- template: title_chips
- variables:
- - title: Fans
- - chips:
+ - type: heading
+ icon: mdi:fan
+ heading: Fans
+ heading_style: subtitle
+ badges:
+ - type: custom:mushroom-chips-card
+ chips:
- type: template
entity: sensor.bambu_p1s_heatbreak_fan_speed
icon: mdi:fan
@@ -15334,7 +13136,100 @@ views:
- condition: state
entity: sensor.bambu_p1s_cooling_fan
state_not: unknown
+ - type: grid
+ cards:
+ - type: custom:bubble-card
+ card_type: button
+ button_type: slider
+ entity: sensor.bambu_p1s_print_progress
+ icon: mdi:printer-3d
+ card_layout: large-2-rows
+ sub_button:
+ - entity: sensor.bambu_p1s_print_progress
+ show_state: true
+ icon: mdi:progress-clock
+ - entity: sensor.bambu_p1s_print_status
+ show_state: true
+ icon: mdi:printer-3d-nozzle
+ - entity: sensor.bambu_p1s_current_layer
+ show_state: true
+ icon: mdi:layers
+ - entity: sensor.bambu_p1s_end_time
+ show_state: true
+ icon: mdi:clock-end
+ styles: ${card.querySelector('.bubble-sub-button-3 .bubble-sub-button-name-container').innerText
+ = hass.states["sensor.bambu_p1s_current_layer"].state + " / " + hass.states["sensor.bambu_p1s_total_layer_count"].state}
cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: entity
+ show_name: true
+ show_state: true
+ show_icon: true
+ entity: light.bambu_p1s_chamber_light
+ color: amber
+ name: Light
+ tap_action:
+ action: toggle
+ - type: custom:mushroom-template-badge
+ entity: sensor.bambu_p1s_print_status
+ label: Stage
+ icon: mdi:file-tree
+ content: "{% if is_state(\"sensor.bambu_p1s_current_stage\", \"idle\") %}\n\
+ \ {{ state_translated(\"sensor.bambu_p1s_current_stage\") }}\n{% else %}\n\
+ \ {{ state_translated(entity) }}\n{% endif %}"
+ tap_action:
+ action: more-info
+ - type: entity
+ show_name: true
+ show_state: true
+ show_icon: true
+ entity: sensor.bambu_p1s_wi_fi_signal
+ color: ''
+ name: Wi-Fi
+ - type: custom:mushroom-template-badge
+ entity: binary_sensor.bambu_p1s_hms_errors
+ label: Errors
+ content: '{{ state_translated(entity) }}'
+ icon: mdi:{{ iif(is_state(entity, "on"), "alert-circle", "check-circle") }}
+ color: '{{ iif(is_state(entity, "on"), "red", "green") }}'
+ tap_action:
+ action: fire-dom-event
+ browser_mod:
+ service: browser_mod.popup
+ data:
+ title: Bambu P1S HMS Errors
+ content:
+ type: markdown
+ card_mod:
+ style: "ha-card {\n --ha-card-background: none\n}\n"
+ content: "{%- set entity_id = \"binary_sensor.bambu_p1s_hms_errors\"\
+ \ -%}\n{%- set errors = namespace(message=[],severity=[],url=[])\
+ \ -%}\n{%- for attribute, value in states[entity_id].attributes.items()\
+ \ -%}\n {%- if attribute.split('-') | count > 1 -%}\n {%- set\
+ \ id, type = attribute.split('-') -%}\n {%- if type | count >\
+ \ 1 -%}\n {%- if type == \"Error\" -%}\n {% set errors.message\
+ \ = dict(errors.message, **{id: value}) %}\n {%- endif -%}\n\
+ \ {%- if type == \"Severity\" -%}\n {% set errors.severity\
+ \ = dict(errors.severity, **{id: value}) %}\n {%- endif -%}\n\
+ \ {%- if type == \"Wiki\" -%}\n {% set errors.url =\
+ \ dict(errors.url, **{id: value}) %}\n {%- endif -%}\n {%-\
+ \ endif -%}\n {%- endif -%}\n{%- endfor -%}\n{%- set levels = {\n\
+ \ \"fatal\": \"mdi:alert-decagram\",\n \"serious\": \"mdi:alert-circle\"\
+ ,\n \"common\": \"mdi:minus-circle\",\n \"info\": \"mdi:information\"\
+ ,\n \"unknown\": \"mdi:help-circle\"\n} -%}\n{% for id in errors.message\
+ \ %}\n\
+ \ {{ errors.message[id] }}\nSupport\n\
+ {% endfor %}"
- title: Power
path: power
icon: mdi:power-plug
@@ -15343,26 +13238,17 @@ views:
sections:
- type: grid
cards:
- - type: custom:decluttering-card
- template: chip_header
- variables:
- - primary: Power
- - icon: mdi:power-plug
- - icon_color: red
- - chips:
- - type: template
- entity: sensor.emporiavue_main_total_monthly
- content: '{{ int(states(entity), 0) }} kWh'
- icon: mdi:power-plug
- tap_action:
- action: more-info
- layout_options:
- grid_columns: full
+ - type: heading
+ icon: mdi:power-plug
+ heading: Power
+ heading_style: title
column_span: 3
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Energy Distribution
+ - type: heading
+ icon: mdi:directions-fork
+ heading: Energy Distribution
+ heading_style: subtitle
- type: custom:power-flow-card-plus
entities:
grid:
@@ -15385,7 +13271,7 @@ views:
- entity: sensor.emporiavue_main_a_c_power
name: A/C
icon: mdi:air-conditioner
- display_zero_tolerance: 1
+ display_zero_tolerance: 10
secondary_info: {}
- entity: sensor.emporiavue_main_range_power
name: Range
@@ -15415,8 +13301,10 @@ views:
dashboard_link: /energy
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Cost
+ - type: heading
+ icon: mdi:currency-usd
+ heading: Cost
+ heading_style: subtitle
- type: grid
square: false
columns: 3
@@ -15481,11 +13369,13 @@ views:
column_span: 1
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Realtime Power
- subtitle: System
- layout_options:
- grid_columns: full
+ - type: heading
+ icon: mdi:flash
+ heading: Realtime Power
+ heading_style: title
+ - type: heading
+ heading: System
+ heading_style: subtitle
- type: custom:bar-card
card_mod:
style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n text-shadow:\
@@ -15627,8 +13517,9 @@ views:
to: 9600
- type: vertical-stack
cards:
- - type: custom:mushroom-title-card
- subtitle: Main
+ - type: heading
+ heading: Main
+ heading_style: subtitle
- type: custom:bar-card
card_mod:
style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n\
@@ -15816,8 +13707,9 @@ views:
icon: mdi:washing-machine
- type: vertical-stack
cards:
- - type: custom:mushroom-title-card
- subtitle: Sub
+ - type: heading
+ heading: Sub
+ heading_style: subtitle
- type: custom:bar-card
card_mod:
style: "bar-card-name,\nbar-card-value {\n font-weight: 500;\n\
@@ -15975,14 +13867,15 @@ views:
column_span: 2
- type: grid
cards:
- - type: custom:mushroom-title-card
- title: Measurements
- layout_options:
- grid_columns: full
+ - type: heading
+ heading: Measurements
+ heading_style: title
+ icon: mdi:chart-line-variant
- type: vertical-stack
cards:
- - type: custom:mushroom-title-card
- subtitle: Main
+ - type: heading
+ heading: Main
+ heading_style: subtitle
- type: grid
square: false
columns: 2
@@ -16019,8 +13912,9 @@ views:
name: Phase B phase
- type: vertical-stack
cards:
- - type: custom:mushroom-title-card
- subtitle: Sub
+ - type: heading
+ heading: Sub
+ heading_style: subtitle
- type: grid
square: false
columns: 2
@@ -16058,3 +13952,28 @@ views:
column_span: 2
dense_section_placement: true
cards: []
+ badges:
+ - type: custom:mushroom-chips-card
+ card_mod:
+ style: "ha-card {\n --chip-box-shadow: none;\n --chip-background: none;\n\
+ \ --chip-border-width: 0;\n --chip-icon-size: 1em;\n}\n"
+ chips:
+ - type: template
+ icon: mdi:chevron-left
+ tap_action:
+ action: navigate
+ navigation_path: main
+ - type: custom:mushroom-template-badge
+ entity: sensor.emporiavue_main_total_daily
+ content: '{{ int(states(entity), 0) }} kWh'
+ icon: mdi:calendar-today
+ tap_action:
+ action: more-info
+ label: Today
+ - type: custom:mushroom-template-badge
+ entity: sensor.emporiavue_main_total_monthly
+ content: '{{ int(states(entity), 0) }} kWh'
+ icon: mdi:calendar-month
+ tap_action:
+ action: more-info
+ label: This Month