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