diff --git a/ui-lovelace.yaml b/ui-lovelace.yaml index cf07ea97..54369e67 100644 --- a/ui-lovelace.yaml +++ b/ui-lovelace.yaml @@ -2463,7 +2463,7 @@ streamline_templates: - type: map entities: - entity: person.[[person]] - aspect_ratio: '4:3' + aspect_ratio: '16:9' hours_to_show: 1 auto_fit: true card_mod: @@ -2501,9 +2501,9 @@ streamline_templates: \ 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\ + \ text */\n display: none !important;\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),\ @@ -2738,6 +2738,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.dustin_mopman + data: + consumable: filter variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -2771,6 +2778,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.dustin_mopman + data: + consumable: main_brush variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -2804,6 +2818,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.dustin_mopman + data: + consumable: mop_pad variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -2837,6 +2858,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.dustin_mopman + data: + consumable: sensor variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -2870,6 +2898,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.dustin_mopman + data: + consumable: side_brush variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -3221,6 +3256,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.r2dee2 + data: + consumable: filter variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -3254,6 +3296,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.r2dee2 + data: + consumable: main_brush variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -3287,6 +3336,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.r2dee2 + data: + consumable: mop_pad variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -3320,6 +3376,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.r2dee2 + data: + consumable: sensor variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -3353,6 +3416,13 @@ streamline_templates: ' tap_action: action: more-info + hold_action: + action: perform-action + perform_action: dreame_vacuum.vacuum_reset_consumable + target: + entity_id: vacuum.r2dee2 + data: + consumable: side_brush variables: color: "[[[\n if (entity.state <= 10) return 'var(--red-color)';\n\ \ else return 'var(--grey-color)';\n]]]\n" @@ -4135,7 +4205,7 @@ views: \ helpers.localize(entity);\n }\n]]]\n" tap_action: action: navigate - navigation_path: kitchen + navigation_path: '#oven' variables: icon: "[[[\n if (states['sensor.ge_oven_cook_time_remaining'].state\ \ !== 'Off') return 'mdi:timer-play';\n else if (states['sensor.ge_oven_kitchen_timer'].state\ @@ -4511,7 +4581,7 @@ views: icon_color: 255, 235, 59 chips_top: - type: template - entity: camera.family_room + entity: camera.familyroom icon: mdi:cctv icon_color: '{{ iif(has_value(entity), "cyan", "red") }}' tap_action: @@ -5438,11 +5508,10 @@ views: 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}" + \ > ha-icon {\n color: var(--red-color) !important;\n}" sub_button: - entity: binary_sensor.ascent_trouble + name: Trouble show_background: false icon: mdi:alert tap_action: @@ -5475,7 +5544,12 @@ views: \ value in states[entity_id].attributes.items() -%}\n\ {%- if attribute in codes -%}\n- {{ codes[attribute]\ \ }} ({{ attribute }})\n{% endif -%}\n{%- endfor -%}" + visibility: + - condition: state + entity: binary_sensor.ascent_trouble + state: 'on' - entity: sensor.ascent_avg_fuel_consumption + name: Fuel Consumption show_state: true show_background: false - type: custom:expander-card @@ -5822,7 +5896,7 @@ views: - type: map entities: - entity: device_tracker.ascent - aspect_ratio: '4:3' + aspect_ratio: '16:9' hours_to_show: 24 default_zoom: 12 theme_mode: auto @@ -5862,13 +5936,13 @@ views: \ 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),\ + \ /* Style attribution text */\n display: none !important;\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\ @@ -5922,16 +5996,17 @@ views: 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}" + \ > ha-icon {\n color: var(--red-color) !important;\n}" sub_button: - entity: binary_sensor.kona_problems + name: Problems show_background: false + visibility: + - condition: state + entity: binary_sensor.kona_problems + state: 'on' - entity: sensor.kona_lease_tracker - show_state: true - show_background: false - - entity: sensor.kona_car_battery_level + name: Lease Tracker show_state: true show_background: false - type: custom:expander-card @@ -6240,7 +6315,7 @@ views: - type: map entities: - entity: device_tracker.kona_location - aspect_ratio: '4:3' + aspect_ratio: '16:9' hours_to_show: 24 default_zoom: 12 theme_mode: auto @@ -6280,13 +6355,13 @@ views: \ 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),\ + \ /* Style attribution text */\n display: none !important;\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\ @@ -6376,12 +6451,12 @@ views: card_type: pop-up hash: '#feeder-info' show_header: false - margin_top_desktop: 20vh - width_desktop: 50vw + margin_top_desktop: 30vh + width_desktop: 40vw margin_top_mobile: 10vh - type: custom:bubble-card card_type: separator - name: Feeder + name: Cat Feeder - type: custom:mushroom-chips-card alignment: center chips: @@ -6532,8 +6607,8 @@ views: card_type: pop-up hash: '#litter-info' show_header: false - margin_top_desktop: 20vh - width_desktop: 50vw + margin_top_desktop: 30vh + width_desktop: 40vw margin_top_mobile: 10vh - type: custom:bubble-card card_type: separator @@ -6905,174 +6980,611 @@ views: \ ha-card:hover {\n background: color-mix(in srgb,\ \ ${variables.color} 4%, var(--card-background-color) 100%)\ \ !important;\n }\n }\n `\n ]]]\n" - badges: - - 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: Broadcast - content: - type: vertical-stack + - type: vertical-stack + cards: + - type: custom:bubble-card + card_type: pop-up + hash: '#oven' + show_header: false + margin_top_desktop: 40vh + width_desktop: 40vw + margin_top_mobile: 10vh + - type: custom:bubble-card + card_type: separator + name: Oven + sub_button: + - entity: switch.ge_oven_light + show_state: true + tap_action: + action: toggle + hold_action: + action: more-info + - 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{% elif not is_state('sensor.ge_oven_cook_time_remaining',\ + \ 'Off') %}\n Cook Time\n{% elif not is_state('sensor.ge_oven_kitchen_timer',\ + \ 'Off') %}\n Timer\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 {{ float(state_attr(entity, 'current_temperature'))\ + \ | round(0) }}°F\n{% endif %}" + icon: '{% if not is_state(''sensor.ge_oven_cook_time_remaining'', + ''Off'') %}mdi:timer-play + + {% elif not is_state(''sensor.ge_oven_kitchen_timer'', ''Off'') + %}mdi:timer + + {% else %}mdi:stove + + {% endif %}' + icon_color: '{% if is_state_attr(entity, ''operation_mode'', ''Preheat'') + %}yellow + + {% elif is_state_attr(entity, ''operation_mode'', ''Bake'') %}red + + {% elif is_state_attr(entity, ''operation_mode'', ''Air Fry'') %}orange + + {% elif is_state_attr(entity, ''operation_mode'', ''Convection'') + %}amber + + {% elif not is_state(''sensor.ge_oven_cook_time_remaining'', ''Off'') + %}cyan + + {% elif not is_state(''sensor.ge_oven_kitchen_timer'', ''Off'') + %}purple + + {% else %}grey + + {% endif %}' + tap_action: + action: more-info + card_mod: + style: + .: "ha-card {\n --ha-card-border-width: 0;\n}\n" + mushroom-shape-icon$: "{%- set cook_time_remain = 'sensor.ge_oven_cook_time_remaining'\ + \ -%} {%- set cook_time_duration = 'sensor.ge_oven_cook_time_duration'\ + \ -%} {%- set timer_remain = 'sensor.ge_oven_kitchen_timer'\ + \ -%} {%- set timer_duration = 'sensor.ge_oven_kitchen_timer_duration'\ + \ -%}\n{%- if has_value(timer_remain)\n and has_value(timer_duration)\n\ + \ and not is_state(timer_duration, 'Off')\n-%}\n {%- set entity_remain\ + \ = states(timer_remain) -%}\n {%- set entity_duration = states(timer_duration)\ + \ -%}\n{%- elif has_value(cook_time_remain)\n and has_value(cook_time_duration)\n\ + \ and not is_state(cook_time_duration, 'Off')\n-%}\n {%- set\ + \ entity_remain = states(cook_time_remain) -%}\n {%- set entity_duration\ + \ = states(cook_time_duration) -%}\n{%- endif -%}\n{%- 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-%}\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\ + }\n" + - square: false + type: grid + columns: 4 cards: - - type: heading - icon: mdi:sofa-single - heading: Family Room - heading_style: title - - type: grid - columns: 2 - square: false - cards: - - type: custom:bubble-card - card_type: button - button_type: name - name: School - icon: mdi:chair-school - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: Time to go to School! - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Snack - icon: mdi:apple - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: It's snack time! - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Lunch - icon: mdi:food-fork-drink - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: Hey, come get some lunch. - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Dinner - icon: mdi:food - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: Head up-stairs, it's time for dinner. Don't forget - to wash your hands! - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Breakfast - icon: mdi:egg-fried - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: It's time for breakfast. Wash your hands! - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Bed Time - icon: mdi:cookie-edit - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: It's time for bed. - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Ethan up-stairs - icon: mdi:robot - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: Hey Ethan, come up-stairs please. - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Emma up-stairs - icon: mdi:unicorn-variant - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: Hey Emma, come up-stairs please. - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Kids up-stairs - icon: mdi:cookie-edit - tap_action: - action: call-service - data: - media_player: media_player.cast_family_room_speaker - volume: 80 - message: Hey kids, come up-stairs please. - target: {} - service: script.media_play - - type: heading - icon: mdi:sofa-single - heading: Living Room - heading_style: title - - type: grid - columns: 2 - square: false - cards: - - type: custom:bubble-card - card_type: button - button_type: name - name: School - icon: mdi:chair-school - tap_action: - action: call-service - data: - media_player: media_player.cast_living_room_speaker - volume: 90 - message: Time to go to School! - target: {} - service: script.media_play - - type: custom:bubble-card - card_type: button - button_type: name - name: Snack - icon: mdi:apple - tap_action: - action: call-service - data: + - 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 is_state_attr('water_heater.ge_oven', 'operation_mode',\ + \ 'Off') and is_state_attr('water_heater.ge_oven', 'temperature',\ + \ 300) %}\n red\n{% else %}\n grey\n{% endif %}\n" + layout: vertical + primary: 300°F + tap_action: + action: call-service + service: water_heater.set_temperature + data: + temperature: 300 + 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',\ + \ 350) %}\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-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',\ + \ 450) %}\n red\n{% else %}\n grey\n{% endif %}\n" + layout: vertical + primary: 450°F + tap_action: + action: call-service + service: water_heater.set_temperature + data: + temperature: 450 + 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',\ + \ 475) %}\n red\n{% else %}\n grey\n{% endif %}\n" + layout: vertical + primary: 475°F + tap_action: + action: call-service + service: water_heater.set_temperature + data: + temperature: 475 + 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:bubble-card + card_type: separator + name: Burners + - type: custom:layout-card + layout_type: custom:grid-layout + layout: + grid-template-columns: 33% 33% 33% + grid-template-rows: auto + grid-template-areas: '"rl rc rr" "fl . fr"' + margin: 0 + padding: 0 + cards: + - type: custom:mushroom-template-card + view_layout: + grid-area: rl + 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 + view_layout: + grid-area: rc + 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 + view_layout: + grid-area: rr + 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:mushroom-template-card + view_layout: + grid-area: fl + 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: fr + 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" + badges: + - 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: Broadcast + content: + type: vertical-stack + cards: + - type: heading + icon: mdi:sofa-single + heading: Family Room + heading_style: title + - type: grid + columns: 2 + square: false + cards: + - type: custom:bubble-card + card_type: button + button_type: name + name: School + icon: mdi:chair-school + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: Time to go to School! + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Snack + icon: mdi:apple + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: It's snack time! + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Lunch + icon: mdi:food-fork-drink + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: Hey, come get some lunch. + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Dinner + icon: mdi:food + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: Head up-stairs, it's time for dinner. Don't forget + to wash your hands! + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Breakfast + icon: mdi:egg-fried + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: It's time for breakfast. Wash your hands! + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Bed Time + icon: mdi:cookie-edit + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: It's time for bed. + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Ethan up-stairs + icon: mdi:robot + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: Hey Ethan, come up-stairs please. + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Emma up-stairs + icon: mdi:unicorn-variant + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: Hey Emma, come up-stairs please. + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Kids up-stairs + icon: mdi:cookie-edit + tap_action: + action: call-service + data: + media_player: media_player.cast_family_room_speaker + volume: 80 + message: Hey kids, come up-stairs please. + target: {} + service: script.media_play + - type: heading + icon: mdi:sofa-single + heading: Living Room + heading_style: title + - type: grid + columns: 2 + square: false + cards: + - type: custom:bubble-card + card_type: button + button_type: name + name: School + icon: mdi:chair-school + tap_action: + action: call-service + data: + media_player: media_player.cast_living_room_speaker + volume: 90 + message: Time to go to School! + target: {} + service: script.media_play + - type: custom:bubble-card + card_type: button + button_type: name + name: Snack + icon: mdi:apple + tap_action: + action: call-service + data: media_player: media_player.cast_living_room_speaker volume: 90 message: It's snack time! @@ -7400,12 +7912,15 @@ views: - type: custom:mushroom-template-badge entity: sensor.luna_box_cat_litter_level label: Litterbox - content: "{% if not is_state(\"sensor.luna_box_bin_state\", \"normal\") %}\n\ - \ Error\n{% else %}\n {{ states(entity) | round(0) }}%\n{% endif %}" + content: "{% if is_state(\"binary_sensor.luna_box_garbage_can_full\", \"on\"\ + ) %}\n Full\n{% elif not is_state(\"sensor.luna_box_bin_state\", \"normal\"\ + ) %}\n Error\n{% else %}\n {{ states(entity) | round(0) }}%\n{% endif\ + \ %}" icon: mdi:trash-can - color: "{% from \"util.jinja\" import battery_color %}\n{% if not is_state(\"\ - sensor.luna_box_bin_state\", \"normal\") %}\n red\n{% else %}\n {{ battery_color(entity)\ - \ }}\n{% endif %}" + color: "{% from \"util.jinja\" import battery_color %}\n{% if is_state(\"\ + binary_sensor.luna_box_garbage_can_full\", \"on\") %}\n orange\n{% elif\ + \ not is_state(\"sensor.luna_box_bin_state\", \"normal\") %}\n red\n{%\ + \ else %}\n {{ battery_color(entity) }}\n{% endif %}" tap_action: action: navigate navigation_path: '#litter-info' @@ -7426,7 +7941,9 @@ views: label: Salt content: '{{ states(entity) | round(0) }}%' icon: mdi:arrow-expand-vertical - color: cyan + color: '{% from "util.jinja" import battery_color %} + + {{ battery_color(entity) }}' tap_action: action: navigate navigation_path: utility @@ -7700,637 +8217,224 @@ views: 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: 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:streamline-card - template: remote_living - hold_action: - action: perform-action - perform_action: script.find_remote - data: - media_player: media_player.shield_living_room - - type: custom:streamline-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-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: navigate - navigation_path: security#camera-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:streamline-card - template: remote_living - 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: It's time for dinner. Wash your hands! - - label: Breakfast - value: It's time for breakfast. Wash your hands! - - label: Bedtime - value: It's time for bed. - - label: Ethan down-stairs - value: Hey Ethan, come down-stairs please. - - label: Emma down-stairs - value: Hey Emma, come down-stairs please. - - label: Kids down-stairs - value: Hey kids, come down-stairs please. - cards: [] - - title: Kitchen - path: kitchen - icon: mdi:fridge-variant - type: sections - max_columns: 2 - sections: - - type: grid - cards: - - 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: more-info - hold_action: - 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 + layout_options: + grid_columns: full + entity: fan.living_room_ceiling + name: Fan + hide_state: true features: - - type: light-brightness + - 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:lightbulb-group - heading: Oven + icon: mdi:play-speed + heading: Media heading_style: subtitle - badges: - - type: custom:mushroom-template-badge - 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") }} - - ' - tap_action: - action: perform-action - perform_action: switch.toggle - target: - entity_id: switch.ge_oven_light - - 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_kitchen_timer_duration\"\ - )\n and not is_state(\"sensor.ge_oven_kitchen_timer_duration\"\ - , \"Off\")\n-%} {%- set entity_remain = states(\"sensor.ge_oven_kitchen_timer\"\ - ) -%} {%- set entity_duration = states(\"sensor.ge_oven_kitchen_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" - - square: false - type: grid - columns: 4 - 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 is_state_attr('water_heater.ge_oven', 'operation_mode',\ - \ 'Off') and is_state_attr('water_heater.ge_oven', 'temperature',\ - \ 300) %}\n red\n{% else %}\n grey\n{% endif %}\n" - layout: vertical - primary: 300°F - tap_action: - action: call-service - service: water_heater.set_temperature - data: - temperature: 300 - 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',\ - \ 350) %}\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-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',\ - \ 450) %}\n red\n{% else %}\n grey\n{% endif %}\n" - layout: vertical - primary: 450°F - tap_action: - action: call-service - service: water_heater.set_temperature - data: - temperature: 450 - 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',\ - \ 475) %}\n red\n{% else %}\n grey\n{% endif %}\n" - layout: vertical - primary: 475°F - tap_action: - action: call-service - service: water_heater.set_temperature - data: - temperature: 475 - 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 + badges: + - type: custom:mushroom-template-badge + icon: mdi:remote-tv + color: orange tap_action: - action: more-info + 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:streamline-card + template: remote_living + hold_action: + action: perform-action + perform_action: script.find_remote + data: + media_player: media_player.shield_living_room + - type: custom:streamline-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 + badges: + - 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: navigate + navigation_path: security#camera-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-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 + style: "ha-card {\n --ha-card-background: none;\n --ha-card-border-width:\ + \ 0;\n}\n" 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: custom:streamline-card + template: remote_living + 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: It's time for dinner. Wash your hands! + - label: Breakfast + value: It's time for breakfast. Wash your hands! + - label: Bedtime + value: It's time for bed. + - label: Ethan down-stairs + value: Hey Ethan, come down-stairs please. + - label: Emma down-stairs + value: Hey Emma, come down-stairs please. + - label: Kids down-stairs + value: Hey kids, come down-stairs please. + cards: [] + - title: Kitchen + path: kitchen + icon: mdi:fridge-variant + type: sections + max_columns: 2 + sections: + - type: grid + cards: + - 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: more-info + hold_action: + 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 cards: [] badges: - type: custom:mushroom-template-badge @@ -8570,7 +8674,7 @@ views: tap_action: action: more-info - type: custom:mushroom-template-badge - entity: camera.family_room + entity: camera.familyroom icon: mdi:cctv color: '{{ iif(has_value(entity), "cyan", "red") }}' tap_action: @@ -9790,7 +9894,6 @@ views: name: OpenSprinkler extra_entities: - binary_sensor.opensprinkler_rain_delay_active - - sensor.opensprinkler_rain_delay_stop_time cards: [] badges: - type: custom:mushroom-template-badge @@ -10167,8 +10270,6 @@ views: 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 @@ -10182,7 +10283,7 @@ views: \ 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 %}" + {% else %}\n mdi:help-circle\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\ @@ -10261,9 +10362,10 @@ views: mushroom-lock-buttons-control$: mushroom-button:nth-child(1)$: ".button {\n --bg-color:\ \ rgba(var(--rgb-disabled), 0.2);\n}\n" + grid_options: + columns: 6 + rows: auto - 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 @@ -10277,7 +10379,7 @@ views: \ 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 %}" + {% else %}\n mdi:help-circle\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\"\ @@ -10356,6 +10458,9 @@ views: mushroom-lock-buttons-control$: mushroom-button:nth-child(1)$: ".button {\n --bg-color:\ \ rgba(var(--rgb-disabled), 0.2);\n}\n" + grid_options: + columns: 6 + rows: auto - type: custom:mushroom-template-card entity: binary_sensor.garage_side_door_contact primary: Garage Side Door @@ -10539,7 +10644,7 @@ views: show_name: false camera_view: auto type: picture-entity - entity: camera.family_room + entity: camera.familyroom aspect_ratio: '16:9' tap_action: action: navigate @@ -10789,7 +10894,7 @@ views: bubble-card::after {\n display: none !important;\n}" - type: custom:frigate-card cameras: - - camera_entity: camera.family_room + - camera_entity: camera.familyroom live_provider: go2rtc go2rtc: modes: @@ -11046,7 +11151,7 @@ views: - camera_entity: camera.doorbell - camera_entity: camera.garage - camera_entity: camera.livingroom - - camera_entity: camera.family_room + - camera_entity: camera.familyroom - camera_entity: camera.litterbox view: default: timeline @@ -11096,8 +11201,9 @@ views: entity: climate.ecobee show_state: true styles: "${card.querySelector('.bubble-name').innerText = [\n (hass.formatEntityState(hass.states[\"\ - sensor.ecobee_mode\"]) || \"\"),\n (hass.states[entity]?.attributes.current_temperature\ - \ + \"°F\" || \"\")\n ].filter(n => n).join(\" ⸱ \")\n}" + sensor.ecobee_mode\"]) || \"\"),\n (hass.formatEntityAttributeValue(hass.states[entity],\ + \ \"current_temperature\") || \"\")\n ].filter(n => n).join(\" ⸱ \"\ + )\n}" sub_button: - name: HVAC modes menu select_attribute: hvac_modes @@ -11296,6 +11402,19 @@ views: height: 30px name: Theater entity_row: true + - entity: sensor.cold_storage_temperature + height: 30px + min: 30 + name: Cold Storage + target: 72 + entity_row: true + - entity: sensor.garage_multisensor_air_temperature + height: 30px + min: 30 + max: 105 + name: Garage + target: 72 + entity_row: true - entity: sensor.ecowitt_outdoor_temperature height: 30px min: -10 @@ -12365,24 +12484,27 @@ views: 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}" + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\ + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\ + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\ + \ > ha-icon {\n color: var(--red-color) !important;\n}" sub_button: - entity: binary_sensor.erebus_mic_active + name: Mic Active show_background: false + visibility: + - condition: state + entity: binary_sensor.erebus_mic_active + state: 'on' - entity: binary_sensor.erebus_webcam_active + name: Webcam Active show_background: false + visibility: + - condition: state + entity: binary_sensor.erebus_webcam_active + state: 'on' - entity: sensor.erebus_windows_updates_software_updates + name: Software Updates show_background: false show_state: true icon: mdi:arrow-up-bold-circle @@ -12398,7 +12520,12 @@ views: variables: - computer: erebus - entity: sensor.erebus_windows_updates_software_updates + visibility: + - condition: numeric_state + entity: sensor.erebus_windows_updates_software_updates + above: 0 - entity: sensor.erebus_windows_updates_driver_updates + name: Driver Updates show_background: false show_state: true icon: mdi:cog-refresh @@ -12414,6 +12541,10 @@ views: variables: - computer: erebus - entity: sensor.erebus_windows_updates_driver_updates + visibility: + - condition: numeric_state + entity: sensor.erebus_windows_updates_driver_updates + above: 0 - type: custom:vertical-stack-in-card cards: - type: custom:streamline-card @@ -12543,24 +12674,27 @@ views: 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}" + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\ + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\ + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\ + \ > ha-icon {\n color: var(--red-color) !important;\n}" sub_button: - entity: binary_sensor.nasya_mic_active + name: Mic Active show_background: false + visibility: + - condition: state + entity: binary_sensor.nasya_mic_active + state: 'on' - entity: binary_sensor.nasya_webcam_active + name: Webcam Active show_background: false + visibility: + - condition: state + entity: binary_sensor.nasya_webcam_active + state: 'on' - entity: sensor.nasya_windows_updates_software_updates + name: Software Updates show_background: false show_state: true icon: mdi:arrow-up-bold-circle @@ -12576,7 +12710,12 @@ views: variables: - computer: nasya - entity: sensor.nasya_windows_updates_software_updates + visibility: + - condition: numeric_state + entity: sensor.nasya_windows_updates_software_updates + above: 0 - entity: sensor.nasya_windows_updates_driver_updates + name: Driver Updates show_background: false show_state: true icon: mdi:cog-refresh @@ -12592,6 +12731,10 @@ views: variables: - computer: nasya - entity: sensor.nasya_windows_updates_driver_updates + visibility: + - condition: numeric_state + entity: sensor.nasya_windows_updates_driver_updates + above: 0 - type: custom:vertical-stack-in-card cards: - type: custom:streamline-card @@ -12707,26 +12850,29 @@ views: 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-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}" + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\ + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\ + \ > ha-icon {\n color: var(--red-color) !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 + name: Mic Active show_background: false + visibility: + - condition: state + entity: binary_sensor.ardena_mic_active + state: 'on' - entity: binary_sensor.ardena_webcam_active + name: Webcam Active show_background: false + visibility: + - condition: state + entity: binary_sensor.ardena_webcam_active + state: 'on' - entity: sensor.ardena_windows_updates_software_updates + name: Software Updates show_background: false show_state: true icon: mdi:arrow-up-bold-circle @@ -12742,7 +12888,12 @@ views: variables: - computer: ardena - entity: sensor.ardena_windows_updates_software_updates + visibility: + - condition: numeric_state + entity: sensor.ardena_windows_updates_software_updates + above: 0 - entity: sensor.ardena_windows_updates_driver_updates + name: Driver Updates show_background: false show_state: true icon: mdi:cog-refresh @@ -12758,6 +12909,10 @@ views: variables: - computer: ardena - entity: sensor.ardena_windows_updates_driver_updates + visibility: + - condition: numeric_state + entity: sensor.ardena_windows_updates_driver_updates + above: 0 - type: custom:vertical-stack-in-card cards: - type: custom:streamline-card @@ -12873,24 +13028,27 @@ views: 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.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}" + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-2\ + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-3\ + \ > ha-icon {\n color: var(--red-color) !important;\n}\n.bubble-sub-button-4\ + \ > ha-icon {\n color: var(--red-color) !important;\n}" sub_button: - entity: binary_sensor.athos_mic_active + name: Mic Active show_background: false + visibility: + - condition: state + entity: binary_sensor.athos_mic_active + state: 'on' - entity: binary_sensor.athos_webcam_active + name: Webcam Active show_background: false + visibility: + - condition: state + entity: binary_sensor.athos_webcam_active + state: 'on' - entity: sensor.athos_windows_updates_software_updates + name: Software Updates show_background: false show_state: true icon: mdi:arrow-up-bold-circle @@ -12906,7 +13064,12 @@ views: variables: - computer: athos - entity: sensor.athos_windows_updates_software_updates + visibility: + - condition: numeric_state + entity: sensor.athos_windows_updates_software_updates + above: 0 - entity: sensor.athos_windows_updates_driver_updates + name: Driver Updates show_background: false show_state: true icon: mdi:cog-refresh @@ -12922,6 +13085,10 @@ views: variables: - computer: athos - entity: sensor.athos_windows_updates_driver_updates + visibility: + - condition: numeric_state + entity: sensor.athos_windows_updates_driver_updates + above: 0 - type: custom:vertical-stack-in-card cards: - type: custom:streamline-card @@ -13861,17 +14028,22 @@ views: action: none sub_button: - entity: sensor.bambu_p1s_print_progress + name: Print Progress icon: mdi:progress-clock show_background: false show_state: true - entity: sensor.bambu_p1s_current_stage + name: Current Stage show_background: false show_state: true + icon: mdi:printer-pos-wrench - entity: sensor.bambu_p1s_current_layer + name: Current Layer icon: mdi:layers show_state: true show_background: false - entity: sensor.bambu_p1s_remaining_time + name: Remaining Time icon: mdi:clock-end show_state: false show_background: false @@ -13880,6 +14052,10 @@ views: service: input_boolean.toggle target: entity_id: input_boolean.bambu_p1s_end_time_switch + visibility: + - condition: state + entity: sensor.bambu_p1s_current_stage + state_not: idle styles: "${card.querySelector('.bubble-name').innerText =\n hass.states['sensor.bambu_p1s_status']?.state\ \ !== 'offline'\n ? hass.states['sensor.bambu_p1s_task_name']?.state\ \ : 'Bambu P1S'}\n\n${card.querySelector('.bubble-state').innerText\ @@ -13888,8 +14064,7 @@ views: \ .bubble-sub-button-name-container').innerText =\n hass.states['sensor.bambu_p1s_status']?.state\ \ !== 'offline'\n ? hass.states['sensor.bambu_p1s_current_layer']?.state\ \ + \" / \"\n + hass.states['sensor.bambu_p1s_total_layer_count']?.state\ - \ :\n 'Off'}\n\n.bubble-sub-button-4 {\n display: ${hass.states['sensor.bambu_p1s_stage']?.state\ - \ === 'idle' ? 'none' : ''} !important;\n}\n" + \ :\n 'Off'}\n" card_mod: style: "{% set progress = states('sensor.bambu_p1s_print_progress')\ \ | float / 100 %}\n\n{% set pct_diff = 1.0 - progress %} {% set r\ @@ -13943,181 +14118,334 @@ views: - type: custom:layout-card layout_type: custom:grid-layout layout: - grid-template-columns: 20% 80% + grid-template-columns: repeat(5, 1fr) grid-template-rows: auto - grid-template-areas: '"ext ams"' + grid-template-areas: '"ext slot1 slot2 slot3 slot4" + + ' cards: - - type: horizontal-stack - cards: - - type: custom:mushroom-template-card - entity: sensor.bambu_p1s_external_spool_external_spool - secondary: "{%- if is_state(entity, \"unknown\") -%}\n -\n\ - {%- else -%}\n {{ state_translated(entity) }}\n{%- endif\ - \ -%}" - multiline_secondary: true - icon: "{%- if is_state(entity, \"unknown\") -%}\n mdi:help-circle\n\ - {%- elif is_state(entity, \"Empty\") -%}\n mdi:circle-outline\n\ - {%- else -%}\n mdi:circle-slice-8\n{%- endif -%}" - icon_color: "{%- if states(entity) in [\"Empty\", \"unknown\"\ - ] -%}\n disabled\n{%- else -%}\n {{ state_attr(entity,\ - \ \"color\") }}\n{%- endif -%}" - layout: vertical - tap_action: - action: navigate - navigation_path: '#filament-external' - 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_attr(config.entity,\ - \ \"active\", true) %}\n --shape-animation: ping 2s\ - \ infinite;\n {% elif states(config.entity) not in\ - \ [\"Empty\", \"unknown\"] %}\n box-shadow: 0 0 1px\ - \ 15px rgba(111,111,111, 0.2) !important;\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: horizontal-stack - cards: - - type: custom:mushroom-template-card - entity: sensor.bambu_p1s_ams_tray_1 - secondary: "{%- if is_state(entity, \"unknown\") -%}\n -\n\ - {%- else -%}\n {{ state_translated(entity) }}\n{%- endif\ - \ -%}" - multiline_secondary: true - icon: "{%- if is_state(entity, \"unknown\") -%}\n mdi:help-circle\n\ - {%- elif is_state(entity, \"Empty\") -%}\n mdi:circle-outline\n\ - {%- else -%}\n mdi:circle-slice-8\n{%- endif -%}" - icon_color: "{%- if states(entity) in [\"Empty\", \"unknown\"\ - ] -%}\n disabled\n{%- else -%}\n {{ state_attr(entity,\ - \ \"color\") }}\n{%- endif -%}" - layout: vertical - tap_action: - action: navigate - navigation_path: '#filament-ams-1-slot-1' - 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{% if has_value(config.entity)\ - \ and states(config.entity) not in [\"Empty\", \"unknown\"\ - ] %}\nha-card:after {\n content: \"{{ state_attr(config.entity,\ - \ \"remain\") }}%\";\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_attr(config.entity,\ - \ \"active\", true) %}\n --shape-animation: ping 2s\ - \ infinite;\n {% elif states(config.entity) not in\ - \ [\"Empty\", \"unknown\"] %}\n box-shadow: 0 0 1px\ - \ 15px rgba(111,111,111, 0.2) !important;\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: sensor.bambu_p1s_ams_tray_2 - secondary: "{%- if is_state(entity, \"unknown\") -%}\n -\n\ - {%- else -%}\n {{ state_translated(entity) }}\n{%- endif\ - \ -%}" - multiline_secondary: true - icon: "{%- if is_state(entity, \"unknown\") -%}\n mdi:help-circle\n\ - {%- elif is_state(entity, \"Empty\") -%}\n mdi:circle-outline\n\ - {%- else -%}\n mdi:circle-slice-8\n{%- endif -%}" - icon_color: "{%- if states(entity) in [\"Empty\", \"unknown\"\ - ] -%}\n disabled\n{%- else -%}\n {{ state_attr(entity,\ - \ \"color\") }}\n{%- endif -%}" - layout: vertical - tap_action: - action: navigate - navigation_path: '#filament-ams-1-slot-2' - 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{% if has_value(config.entity)\ - \ and states(config.entity) not in [\"Empty\", \"unknown\"\ - ] %}\nha-card:after {\n content: \"{{ state_attr(config.entity,\ - \ \"remain\") }}%\";\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_attr(config.entity,\ - \ \"active\", true) %}\n --shape-animation: ping 2s\ - \ infinite;\n {% elif states(config.entity) not in\ - \ [\"Empty\", \"unknown\"] %}\n box-shadow: 0 0 1px\ - \ 15px rgba(111,111,111, 0.2) !important;\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: sensor.bambu_p1s_ams_tray_3 - secondary: "{%- if is_state(entity, \"unknown\") -%}\n -\n\ - {%- else -%}\n {{ state_translated(entity) }}\n{%- endif\ - \ -%}" - multiline_secondary: true - icon: "{%- if is_state(entity, \"unknown\") -%}\n mdi:help-circle\n\ - {%- elif is_state(entity, \"Empty\") -%}\n mdi:circle-outline\n\ - {%- else -%}\n mdi:circle-slice-8\n{%- endif -%}" - icon_color: "{%- if states(entity) in [\"Empty\", \"unknown\"\ - ] -%}\n disabled\n{%- else -%}\n {{ state_attr(entity,\ - \ \"color\") }}\n{%- endif -%}" - layout: vertical - tap_action: - action: navigate - navigation_path: '#filament-ams-1-slot-3' - 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{% if has_value(config.entity)\ - \ and states(config.entity) not in [\"Empty\", \"unknown\"\ - ] %}\nha-card:after {\n content: \"{{ state_attr(config.entity,\ - \ \"remain\") }}%\";\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_attr(config.entity,\ - \ \"active\", true) %}\n --shape-animation: ping 2s\ - \ infinite;\n {% elif states(config.entity) not in\ - \ [\"Empty\", \"unknown\"] %}\n box-shadow: 0 0 1px\ - \ 15px rgba(111,111,111, 0.2) !important;\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: sensor.bambu_p1s_ams_tray_4 - secondary: "{%- if is_state(entity, \"unknown\") -%}\n -\n\ - {%- else -%}\n {{ state_translated(entity) }}\n{%- endif\ - \ -%}" - multiline_secondary: true - icon: "{%- if is_state(entity, \"unknown\") -%}\n mdi:help-circle\n\ - {%- elif is_state(entity, \"Empty\") -%}\n mdi:circle-outline\n\ - {%- else -%}\n mdi:circle-slice-8\n{%- endif -%}" - layout: vertical - tap_action: - action: navigate - navigation_path: '#filament-ams-1-slot-4' - icon_color: "{%- if states(entity) in [\"Empty\", \"unknown\"\ - ] -%}\n disabled\n{%- else -%}\n {{ state_attr(entity,\ - \ \"color\") }}\n{%- endif -%}" - 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{% if has_value(config.entity)\ - \ and states(config.entity) not in [\"Empty\", \"unknown\"\ - ] %}\nha-card:after {\n content: \"{{ state_attr(config.entity,\ - \ \"remain\") }}%\";\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_attr(config.entity,\ - \ \"active\", true) %}\n --shape-animation: ping 2s\ - \ infinite;\n {% elif states(config.entity) not in\ - \ [\"Empty\", \"unknown\"] %}\n box-shadow: 0 0 1px\ - \ 15px rgba(111,111,111, 0.2) !important;\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" - card_mod: - style: "ha-card {\n --ha-card-border-width: 0;\n}\n" + - type: custom:button-card + entity: sensor.bambu_p1s_external_spool_external_spool + view_layout: + grid-area: ext + tap_action: + action: navigate + navigation_path: '#filament-external' + show_icon: false + show_name: false + variables: + slotnum: '[[[ return entity.entity_id.split(''_'').pop() ]]]' + custom_fields: + type: "[[[\n return entity.attributes.type || ' '\n]]]\n" + sub_type: "[[[\n return entity.attributes.name !== 'unknown'\n\ + \ ? entity.attributes.name\n : ' ';\n]]]\n" + bar: "[[[\n let color = entity.attributes.type\n ? entity.attributes.color\n\ + \ : '';\n let remain = entity.attributes.remain;\n return\ + \ `\n
\n `;\n]]]\n" + value: "[[[\n if (entity.attributes.remain) {\n return entity.attributes.remain\ + \ + ' %';\n } else {\n return ' ';\n }\n]]]\n" + slotnum: "[[[\n return `\n