Skip to content

Instantly share code, notes, and snippets.

@eodabas
Last active January 21, 2026 21:36
Show Gist options
  • Select an option

  • Save eodabas/880612a39c4ff04e573dc921ff3aabdf to your computer and use it in GitHub Desktop.

Select an option

Save eodabas/880612a39c4ff04e573dc921ff3aabdf to your computer and use it in GitHub Desktop.
My Home Assistant Dashboard for my Bambulab P1S Printer
type: sections
max_columns: 3
title: P1S
path: p1s
sections:
- type: grid
cards:
- type: heading
heading_style: subtitle
badges:
- type: entity
show_state: false
show_icon: true
entity: sensor.p1s_current_stage
color: "#ff000000"
visibility:
- condition: screen
media_query: "(min-width: 1024px)"
- type: custom:mushroom-template-card
primary: "Printer State: {{ state_translated(\"binary_sensor.p1s_print_error\") }}"
secondary: >-
Error Code: {{ state_attr("binary_sensor.p1s_print_error",
"code")|replace("_", "-") }}
{% if state_attr("binary_sensor.p1s_print_error", "error") != None
and state_attr("binary_sensor.p1s_print_error", "error") != "" %}
({{ state_attr("binary_sensor.p1s_print_error", "error") }})
{% endif %}
icon: mdi:information-slab-circle
entity: binary_sensor.p1s_print_error
icon_color: red
fill_container: true
grid_options:
columns: full
visibility:
- condition: state
entity: binary_sensor.p1s_print_error
state_not: "off"
tap_action:
action: more-info
- type: custom:mushroom-template-card
primary: "HMS State: {{ state_translated(\"binary_sensor.p1s_hms_errors\") }}"
secondary: >-
Error Code: {{ state_attr("binary_sensor.p1s_hms_errors",
"1-Code")|replace("_", "-") }}
{% if state_attr("binary_sensor.p1s_hms_errors", "1-Error") != None
and state_attr("binary_sensor.p1s_hms_errors", "error") != ""
and state_attr("binary_sensor.p1s_hms_errors", "error") != "unknown" %}
({{ state_attr("binary_sensor.p1s_hms_errors", "error") }})
{% endif %}
icon: mdi:information-slab-circle
entity: binary_sensor.p1s_hms_errors
icon_color: red
fill_container: true
grid_options:
columns: full
visibility:
- condition: state
entity: binary_sensor.p1s_hms_errors
state_not: "off"
tap_action:
action: more-info
column_span: 3
- type: grid
cards:
- type: heading
icon: mdi:printer-3d
heading_style: subtitle
heading: Printer
badges:
- type: entity
show_state: true
show_icon: true
entity: light.p1s_chamber_light
tap_action:
action: toggle
name: Light
state_content:
- name
- state
color: state
- type: entity
show_state: true
show_icon: true
entity: sensor.p1s_current_stage
icon: mdi:printer-3d
color: state
- show_state: false
show_name: true
camera_view: auto
type: picture-entity
entity: image.p1s_camera
- type: picture
image_entity: image.p1s_cover_image
grid_options:
columns: 6
rows: 4
theme: macOS Theme
card_mod:
style: |
ha-card {
align-content: center;
background: linear-gradient(#999999, #111111);
//background: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>');
}
img {
filter: drop-shadow(0px 5px 2px #00000055);
}
- type: custom:stack-in-card
horizontal: true
cards:
- type: markdown
content: >
<div><font size="5">{{ states.sensor.p1s_task_name.state[:60]
}}</font></div>
<table width=100%><tr><td align=left>Printed layers<td
align=right><font color=#77fc54 ; size="4">{{
states.sensor.p1s_current_layer.state}}</font>/{{states.sensor.p1s_total_layer_count.state}}</td></tr></table>
<table width=100%><tr> <td align=left><font
size="5";color=#77fc54>{{
states.sensor.p1s_print_progress.state}}%<td align=right> {% if
(states.sensor.p1s_remaining_time.state | int) == 0 %}
Success
{% else %}
<font color=#959595>-{{(states.sensor.p1s_remaining_time.state | int/60) | int }}h{{ states.sensor.p1s_remaining_time.state| int % 60 }}m
{% endif %} </td> </tr></table>
card_mod:
style:
.: |
ha-card {
position: absolute;
top: 0px;
}
ha-markdown:
$: |
div {
height: 135px;
overflow: hidden;
word-break: break-words;
hyphens: auto!important;
hyphenate-character: " ";
}
grid_options:
columns: 6
rows: 3
- type: custom:entity-progress-card
entity: sensor.p1s_print_progress
unit: "%"
show_more_info: false
bar_size: small
bar_color: var(--green-color)
layout: horizontal
icon: none
hide:
- icon
- name
- secondary_info
grid_options:
columns: 6
rows: 1
card_mod:
style: |
ha-card {
height: 100%;
align-content: end;
}
grid_options:
columns: 6
rows: 4
- type: custom:ha-bambulab-print_control-card
printer: 27069188e8387ed3d25eae2602210d3b
grid_options:
columns: full
rows: auto
card_mod:
style: |
div.control-container {
width: 100%;
overflow: hidden;
}
div.buttons-container {
gap: 0px
}
- type: custom:mushroom-fan-card
entity: fan.teckin_plug_4_bentobox_external_socket_1
name: Bento Ext
grid_options:
columns: 4
rows: 1
tap_action:
action: more-info
icon_animation: true
- type: custom:mushroom-fan-card
entity: fan.teckin_plug_2_bentobox_internal_socket_1
name: Bento Int
grid_options:
columns: 4
rows: 1
tap_action:
action: more-info
icon_animation: true
- type: custom:mushroom-template-card
primary: Air Purifier
secondary: |
{% if states(config.entity) == "on" %}
{% if state_attr(config.entity, "mode") == "manual" %}
{{ state_attr(config.entity, "percentage") }}%
{% else %}
{{ state_attr(config.entity, "mode") | capitalize }}
{% endif %}
{% if state_attr(config.entity, "mode") in [ "manual", "auto"] %}
● {{ state_translated('sensor.levoit_131s_air_purifier_air_quality') | capitalize }}
{% endif %}
{% else %}
{{ state_translated(config.entity) }}
{% endif %}
icon: |
{% if is_state(config.entity, 'on') %}
mdi:fan
{% else %}
mdi:fan-off
{% endif %}
entity: fan.levoit_131s_air_purifier
tap_action:
action: more-info
grid_options:
columns: 4
rows: 1
badge_icon: |
{% if states(config.entity) == "on" %}
{% if state_attr(config.entity, "mode") == "sleep" %}
mdi:power-sleep
{% endif %}{% endif %}
badge_color: orange
card_mod:
style:
mushroom-shape-icon$: |
.shape {
{% if is_state(config.entity, 'on') %}
--icon-color: rgb(var(--rgb-state-fan));
--shape-color: rgba(var(--rgb-state-fan), 0.2);
{% endif %}
display: flex;
}
mushroom-shape-icon: |
ha-state-icon {
{% if is_state(config.entity, 'on') %}
{% if state_attr(config.entity, "mode") == "auto" %}
{% if is_state('sensor.levoit_131s_air_purifier_air_quality', 'excellent') %}
animation: spin 8s linear infinite;
{% elif is_state('sensor.levoit_131s_air_purifier_air_quality', 'good') %}
animation: spin {{ 1 / (1.5 * (33 / 100) ** 0.5) }}s linear infinite;
{% elif is_state('sensor.levoit_131s_air_purifier_air_quality', 'fine') %}
animation: spin {{ 1 / (1.5 * (66 / 100) ** 0.5) }}s linear infinite;
{% elif is_state('sensor.levoit_131s_air_purifier_air_quality', 'bad') %}
animation: spin {{ 1 / (1.5 * (100 / 100) ** 0.5) }}s linear infinite;
{% endif %}
{% elif state_attr(config.entity, "mode") == "manual" %}
animation: spin {{ 1 / (1.5 * (state_attr(config.entity, "percentage") / 100) ** 0.5) }}s linear infinite;
{% endif %}
{% else %}
--shape-animation: none;
{% endif %}
}
- type: custom:mushroom-fan-card
entity: fan.p1s_chamber_fan
name: Chamber
grid_options:
columns: 4
rows: 1
tap_action:
action: more-info
icon_animation: true
- type: custom:mushroom-fan-card
entity: fan.p1s_aux_fan
name: Aux
grid_options:
columns: 4
rows: 1
tap_action:
action: more-info
icon_animation: true
- type: custom:mushroom-fan-card
entity: fan.p1s_cooling_fan
name: Cooling
grid_options:
columns: 4
rows: 1
tap_action:
action: more-info
icon_animation: true
- type: grid
cards:
- type: heading
icon: mdi:camera-control
heading_style: subtitle
badges: []
heading: Status
- show_name: true
show_icon: true
show_state: true
type: glance
entities:
- entity: sensor.p1s_nozzle_temperature
icon: mdi:printer-3d-nozzle-heat
name: Nozzle
card_mod:
style: |
:host {
--paper-item-icon-color: white;
--icon-primary-color: white;
}
state-badge {
background-color: #D5AE43;
border-radius: 50%;
}
div {
white-space: unset !important;
text-wrap: balance !important;
}
- entity: sensor.p1s_bed_temperature
icon: mdi:train-car-flatbed
name: Print Bed
card_mod:
style: |
:host {
--paper-item-icon-color: white;
--icon-primary-color: white;
}
state-badge {
background-color: #4DAE51;
border-radius: 50%;
}
div {
white-space: unset !important;
text-wrap: balance !important;
}
- entity: sensor.p1s_chamber_multi_sensor_temperature
icon: mdi:printer-3d
name: Chamber
card_mod:
style: |
:host {
--paper-item-icon-color: white;
--icon-primary-color: white;
}
state-badge {
background-color: #6594E4;
border-radius: 50%;
}
div {
white-space: unset !important;
text-wrap: balance !important;
}
- entity: select.p1s_printing_speed
name: Speed
icon: mdi:window-close
card_mod:
style: |
{% set current_sensor = "select.p1s_printing_speed" %}
:host {
--paper-item-icon-color: white;
--icon-primary-color: white;
{% if is_state(current_sensor, "silent") %}
--card-mod-icon: mdi:speedometer-slow;
{% elif is_state(current_sensor, "standard") %}
--card-mod-icon: mdi:speedometer-medium;
{% elif is_state(current_sensor, "sport") %}
--card-mod-icon: mdi:speedometer;
{% elif is_state(current_sensor, "ludicrous") %}
--card-mod-icon: mdi:rocket-launch;
{% else %}
--card-mod-icon: mdi:window-close
{% endif %}
}
state-badge {
background-color: orange;
border-radius: 50%;
}
div {
white-space: unset !important;
text-wrap: balance !important;
}
state_color: false
card_mod:
style: |
ha-card {
font-size: 12px;
height: 100%
}
ha-card.type-glance .entities {
align-items: flex-start !important;
}
- type: heading
heading: Ext. Spool
heading_style: subtitle
grid_options:
columns: 3
icon: mdi:alpha-e-box
- type: heading
heading: AMS
heading_style: subtitle
grid_options:
columns: 9
badges:
- type: entity
show_state: true
show_icon: true
entity: sensor.p1s_ams_1_multi_sensor_temperature
tap_action:
action: more-info
- type: entity
show_state: true
show_icon: true
entity: sensor.p1s_ams_1_multi_sensor_humidity
tap_action:
action: more-info
- type: entity
show_state: true
show_icon: true
entity: sensor.p1s_ams_1_humidity_index
tap_action:
action: more-info
icon: mdi:alpha-a-box
tap_action:
action: perform-action
perform_action: input_boolean.toggle
target:
entity_id: input_boolean.enable_ha_bambulab_ams_spool_cards
- type: custom:ha-bambulab-spool-card
header: Header Text
subtitle: Subtitle Text
show_header: true
show_type: true
spool: 463cf2384c0f8deb41635045674cde41
card_mod:
style:
.: |
ha-card {
background: var(--ha-card-background, var(--card-background-color, #fff));
-webkit-backdrop-filter: var(--ha-card-backdrop-filter, none);
backdrop-filter: var(--ha-card-backdrop-filter, none);
box-shadow: var(--ha-card-box-shadow, none);
box-sizing: border-box;
border-radius: var(--ha-card-border-radius, 12px);
border-width: var(--ha-card-border-width, 1px);
border-style: solid;
border-color: var(--ha-card-border-color, var(--divider-color, #e0e0e0));
color: var(--primary-text-color);
display: block;
transition: all .3sease-out;
position: relative;
}
ha-bambulab-spool {
xbackground-color: red!important;
margin: 5px;
}
ha-bambulab-spool $ ams-popup: |
div.ha-bambulab-spool-card-container {
xbackground-color: cyan;
}
div.ha-bambulab-spool-card-holder {
border: 7px solid rgba(0,0,0,0) !important;
background: none !important;
}
div.ha-bambulab-spool-container {
border: 2px solid rgba(0,0,0,0);
}
div.ha-bambulab-spool-card-holder {
width: 62px;
margin-left: auto;
margin-right: auto;
}
div.ha-bambulab-spool-info {
background: none;
font-weight: 500;
font-size: 12px;
line-height: 16px;
color: var(--card-primary-color);
letter-spacing: 0.1px;
text-overflow: ellipsis;
overflow: hidden;
}
div.v-string-roll {
xbackground-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>') !important;
}
div.v-string-layer {
background-color: rgba(0, 0, 0, 0.1);
}
visibility:
- condition: state
entity: input_boolean.enable_ha_bambulab_ams_spool_cards
state: "on"
- type: horizontal-stack
cards:
- type: custom:ha-bambulab-ams-card
entity: ""
header: ""
subtitle: ""
style: vector
ams: 489dc2f60789a8ab9cacb6acadd201a4
show_type: true
show_info_bar: false
card_mod:
style:
.: |
ha-card {
background: var(--ha-card-background, var(--card-background-color, #fff));
-webkit-backdrop-filter: var(--ha-card-backdrop-filter, none);
backdrop-filter: var(--ha-card-backdrop-filter, none);
box-shadow: var(--ha-card-box-shadow, none);
box-sizing: border-box;
border-radius: var(--ha-card-border-radius, 12px);
border-width: var(--ha-card-border-width, 1px);
border-style: solid;
border-color: var(--ha-card-border-color, var(--divider-color, #e0e0e0));
color: var(--primary-text-color);
display: block;
transition: all .3sease-out;
position: relative;
}
ha-bambulab-spool {
padding: 0px 0px !important;
}
ha-bambulab-spool $:
ams-popup: |
div.ha-bambulab-spool-card-container {
xbackground-color: cyan;
}
div.ha-bambulab-spool-card-holder {
border: 7px solid rgba(0,0,0,0) !important;
background: none !important;
}
div.ha-bambulab-spool-container {
border: 2px solid rgba(0,0,0,0);
}
div.ha-bambulab-spool-card-holder {
width: 62px;
margin-left: auto;
margin-right: auto;
}
div.ha-bambulab-spool-info {
background: none;
font-weight: 500;
font-size: 12px;
line-height: 16px;
color: var(--card-primary-color);
letter-spacing: 0.1px;
text-overflow: ellipsis;
overflow: hidden;
}
div.v-string-roll {
xbackground-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>') !important;
}
div.v-string-layer {
background-color: rgba(0, 0, 0, 0.1);
}
grid_options:
columns: 9
rows: 3
visibility:
- condition: state
entity: input_boolean.enable_ha_bambulab_ams_spool_cards
state: "on"
- type: custom:stack-in-card
mode: horizontal
keep:
outer_padding: true;
cards:
- type: custom:mushroom-template-card
entity: sensor.p1s_externalspool_external_spool
primary: >
{% if states(config.entity) in [ "", "unknown" ] %}Unknown {{
state_attr(config.entity, 'type') }}{% else %}{{
state_translated(config.entity) }}{% endif %}
secondary: |
{% if state_attr(config.entity, 'remain') > -1 %}{{
state_attr(config.entity, 'remain') }}%{% endif %}
icon: >
{% if is_state_attr(config.entity, "active", true) %}
mdi:printer-3d-nozzle
{% elif is_state_attr(config.entity, 'empty', true) or
is_state_attr(config.entity, 'name', "") or
is_state_attr(config.entity, 'color', "#00000000") %}
mdi:help
{% else %}
mdi:
{% endif %}
layout: vertical
multiline_secondary: true
tap_action:
action: more-info
card_mod:
style:
.: |
ha-card { height: 140px !important; }
mushroom-card { }
mushroom-state-item$: |
div.container { justify-content: normal; }
mushroom-state-info$: |
.primary {
white-space: pre-wrap!important;
height: 60px;
font-size: var(--card-secondary-font-size)!important;
line-height: var(--card-secondary-line-height)!important;
}
mushroom-shape-icon$: |
.shape {
--filament-color: {{ state_attr(config.entity, 'color') }};
display: flex;
box-shadow: 0 0 0 5px var(--shape-color) !important;
{% if is_state_attr(config.entity, 'empty', true) or is_state_attr(config.entity, 'name', "") or is_state_attr(config.entity, 'color', "#00000000") %}
background: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>');
background-color: white!important;
--icon-color: white;
{% else %}
background-color: var(--filament-color)!important;
--icon-color: var(--filament-color);
{% endif %}
border-radius: 50% !important;
}
ha-state-icon$: |
@keyframes shake {
50% {
transform: translate3d(4px, 0, 0);
}
}
ha-icon {
{% if is_state_attr(config.entity, "active", true) %}
animation: shake 0.2s infinite linear;
{% endif %}
filter: invert(1) grayscale(1) brightness(500%) opacity(0.5);
}
grid_options:
columns: 3
rows: auto
visibility:
- condition: state
entity: input_boolean.enable_ha_bambulab_ams_spool_cards
state: "off"
- type: custom:stack-in-card
mode: horizontal
keep:
outer_padding: true;
cards:
- type: custom:mushroom-template-card
entity: sensor.p1s_ams_1_tray_1
primary: >
{{ state_translated(config.entity) }}{% if
is_state_attr(config.entity, "name", None) %} {{
state_attr(config.entity, 'type') }}{% endif %}
secondary: |
{% if state_attr(config.entity, 'remain') > -1 %}{{
state_attr(config.entity, 'remain') }}%{% endif %}
icon: |
{% if is_state_attr(config.entity, "active", true) %}
mdi:printer-3d-nozzle
{% elif is_state_attr(config.entity, 'empty', true) %}
mdi:slash-forward
{% elif is_state_attr(config.entity, 'color', "#00000000") %}
mdi:help
{% else %}
mdi:
{% endif %}
layout: vertical
multiline_secondary: true
tap_action:
action: more-info
card_mod:
style:
.: |
ha-card { height: 140px !important; }
mushroom-card { }
mushroom-state-item$: |
div.container { justify-content: normal; }
mushroom-state-info$: |
.primary {
white-space: pre-wrap!important;
height: 60px;
font-size: var(--card-secondary-font-size)!important;
line-height: var(--card-secondary-line-height)!important;
}
mushroom-shape-icon$: |
.shape {
--filament-color: {{ state_attr(config.entity, 'color') }};
display: flex;
box-shadow: 0 0 0 5px var(--shape-color) !important;
{% if is_state_attr(config.entity, 'empty', true) or is_state_attr(config.entity, 'color', "#00000000") %}
background: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>');
background-color: white!important;
--icon-color: white;
{% else %}
background-color: var(--filament-color)!important;
--icon-color: var(--filament-color);
{% endif %}
border-radius: 50% !important;
}
ha-state-icon$: |
@keyframes shake {
50% {
transform: translate3d(4px, 0, 0);
}
}
ha-icon {
{% if is_state_attr(config.entity, "active", true) %}
animation: shake 0.2s infinite linear;
{% endif %}
filter: invert(1) grayscale(1) brightness(500%) opacity(0.5);
}
- type: custom:mushroom-template-card
entity: sensor.p1s_ams_1_tray_2
primary: >
{{ state_translated(config.entity) }}{% if
is_state_attr(config.entity, "name", None) %} {{
state_attr(config.entity, 'type') }}{% endif %}
secondary: |
{% if state_attr(config.entity, 'remain') > -1 %}{{
state_attr(config.entity, 'remain') }}%{% endif %}
icon: |
{% if is_state_attr(config.entity, "active", true) %}
mdi:printer-3d-nozzle
{% elif is_state_attr(config.entity, 'empty', true) %}
mdi:slash-forward
{% elif is_state_attr(config.entity, 'color', "#00000000") %}
mdi:help
{% else %}
mdi:
{% endif %}
layout: vertical
multiline_secondary: true
tap_action:
action: more-info
card_mod:
style:
.: |
ha-card { height: 140px !important; }
mushroom-card { }
mushroom-state-item$: |
div.container { justify-content: normal; }
mushroom-state-info$: |
.primary {
white-space: pre-wrap!important;
height: 60px;
font-size: var(--card-secondary-font-size)!important;
line-height: var(--card-secondary-line-height)!important;
}
mushroom-shape-icon$: |
.shape {
--filament-color: {{ state_attr(config.entity, 'color') }};
display: flex;
box-shadow: 0 0 0 5px var(--shape-color) !important;
{% if is_state_attr(config.entity, 'empty', true) or is_state_attr(config.entity, 'color', "#00000000") %}
background: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>');
background-color: white!important;
--icon-color: white;
{% else %}
background-color: var(--filament-color)!important;
--icon-color: var(--filament-color);
{% endif %}
border-radius: 50% !important;
}
ha-state-icon$: |
@keyframes shake {
50% {
transform: translate3d(4px, 0, 0);
}
}
ha-icon {
{% if is_state_attr(config.entity, "active", true) %}
animation: shake 0.2s infinite linear;
{% endif %}
filter: invert(1) grayscale(1) brightness(500%) opacity(0.5);
}
- type: custom:mushroom-template-card
entity: sensor.p1s_ams_1_tray_3
primary: >
{{ state_translated(config.entity) }}{% if
is_state_attr(config.entity, "name", None) %} {{
state_attr(config.entity, 'type') }}{% endif %}
secondary: |
{% if state_attr(config.entity, 'remain') > -1 %}{{
state_attr(config.entity, 'remain') }}%{% endif %}
icon: |
{% if is_state_attr(config.entity, "active", true) %}
mdi:printer-3d-nozzle
{% elif is_state_attr(config.entity, 'empty', true) %}
mdi:slash-forward
{% elif is_state_attr(config.entity, 'color', "#00000000") %}
mdi:help
{% else %}
mdi:
{% endif %}
layout: vertical
multiline_secondary: true
tap_action:
action: more-info
card_mod:
style:
.: |
ha-card { height: 140px !important; }
mushroom-card { }
mushroom-state-item$: |
div.container { justify-content: normal; }
mushroom-state-info$: |
.primary {
white-space: pre-wrap!important;
height: 60px;
font-size: var(--card-secondary-font-size)!important;
line-height: var(--card-secondary-line-height)!important;
}
mushroom-shape-icon$: |
.shape {
--filament-color: {{ state_attr(config.entity, 'color') }};
display: flex;
box-shadow: 0 0 0 5px var(--shape-color) !important;
{% if is_state_attr(config.entity, 'empty', true) or is_state_attr(config.entity, 'color', "#00000000") %}
background: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>');
background-color: white!important;
--icon-color: white;
{% else %}
background-color: var(--filament-color)!important;
--icon-color: var(--filament-color);
{% endif %}
border-radius: 50% !important;
}
ha-state-icon$: |
@keyframes shake {
50% {
transform: translate3d(4px, 0, 0);
}
}
ha-icon {
{% if is_state_attr(config.entity, "active", true) %}
animation: shake 0.2s infinite linear;
{% endif %}
filter: invert(1) grayscale(1) brightness(500%) opacity(0.5);
}
- type: custom:mushroom-template-card
entity: sensor.p1s_ams_1_tray_4
primary: >
{{ state_translated(config.entity) }}{% if
is_state_attr(config.entity, "name", None) %} {{
state_attr(config.entity, 'type') }}{% endif %}
secondary: |
{% if state_attr(config.entity, 'remain') > -1 %}{{
state_attr(config.entity, 'remain') }}%{% endif %}
icon: |
{% if is_state_attr(config.entity, "active", true) %}
mdi:printer-3d-nozzle
{% elif is_state_attr(config.entity, 'empty', true) %}
mdi:slash-forward
{% elif is_state_attr(config.entity, 'color', "#00000000") %}
mdi:help
{% else %}
mdi:
{% endif %}
layout: vertical
multiline_secondary: true
tap_action:
action: more-info
card_mod:
style:
.: |
ha-card { height: 140px !important; }
mushroom-card { }
mushroom-state-item$: |
div.container { justify-content: normal; }
mushroom-state-info$: |
.primary {
white-space: pre-wrap!important;
height: 60px;
font-size: var(--card-secondary-font-size)!important;
line-height: var(--card-secondary-line-height)!important;
}
mushroom-shape-icon$: |
.shape {
--filament-color: {{ state_attr(config.entity, 'color') }};
display: flex;
box-shadow: 0 0 0 5px var(--shape-color) !important;
{% if is_state_attr(config.entity, 'empty', true) or is_state_attr(config.entity, 'color', "#00000000") %}
background: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>');
background-color: white!important;
--icon-color: white;
{% else %}
background-color: var(--filament-color)!important;
--icon-color: var(--filament-color);
{% endif %}
border-radius: 50% !important;
}
ha-state-icon$: |
@keyframes shake {
50% {
transform: translate3d(4px, 0, 0);
}
}
ha-icon {
{% if is_state_attr(config.entity, "active", true) %}
animation: shake 0.2s infinite linear;
{% endif %}
filter: invert(1) grayscale(1) brightness(500%) opacity(0.5);
}
grid_options:
columns: 9
rows: auto
visibility:
- condition: state
entity: input_boolean.enable_ha_bambulab_ams_spool_cards
state: "off"
- type: heading
icon: fas:temperature-half
heading: Temperatures
heading_style: subtitle
- type: custom:mini-graph-card
name: Nozzle Temp.
line_width: 7
font_size: 60
animate: true
decimals: 1
points_per_hour: 60
unit: " "
show:
labels: false
points: false
state: true
fill: false
tap_action:
action: none
state_map:
- value: "005"
label: "Off"
entities:
- entity: sensor.p1s_nozzle_target_temperature
name: Target
state_adaptive_color: true
show_state: true
show_fill: true
show_line: true
font_size: 50
smooth: false
- entity: sensor.p1s_nozzle_temperature
name: Nozzle
state_adaptive_color: true
show_state: true
show_fill: false
hours_to_show: 6
grid_options:
columns: 6
- type: custom:mini-graph-card
name: Bed Temp.
line_width: 7
font_size: 60
animate: true
decimals: 1
points_per_hour: 60
unit: " "
show:
labels: false
points: false
state: true
fill: false
tap_action:
action: none
state_map:
- value: "005"
label: "Off"
entities:
- entity: sensor.p1s_bed_target_temperature
name: Target
state_adaptive_color: true
show_state: true
show_fill: true
show_line: true
font_size: 50
smooth: false
- entity: sensor.p1s_bed_temperature
name: Bed
state_adaptive_color: true
show_state: true
show_fill: false
hours_to_show: 6
grid_options:
columns: 6
- type: grid
cards:
- type: heading
icon: fas:temperature-half
heading: Temperature History
heading_style: subtitle
- chart_type: line
period: 5minute
type: statistics-graph
entities:
- entity: sensor.p1s_nozzle_temperature
name: Nozzle
- entity: sensor.p1s_bed_temperature
name: Bed
- entity: sensor.p1s_chamber_multi_sensor_temperature
name: Chamber
- entity: sensor.p1s_ams_1_multi_sensor_temperature
name: AMS
stat_types:
- mean
days_to_show: 0.2
- type: heading
icon: mdi:fan
heading: Fans
heading_style: subtitle
- chart_type: line
period: 5minute
type: statistics-graph
entities:
- entity: sensor.p1s_aux_fan_speed
name: Aux
- entity: sensor.p1s_cooling_fan_speed
name: Cooling
- entity: sensor.p1s_chamber_fan_speed
name: Chamber
- entity: sensor.p1s_heatbreak_fan_speed
name: Heat Break
stat_types:
- mean
days_to_show: 0.2
logarithmic_scale: false
- type: heading
icon: fas:triangle-exclamation
heading: Errors History
heading_style: subtitle
- type: custom:multiple-logbook-card
entities:
- entity: binary_sensor.p1s_print_error
attributes:
- value: code
- value: error
hidden_state:
- "off"
- unavailable
- entity: binary_sensor.p1s_hms_errors
attributes:
- value: 1-Code
label: Code
- value: 1-Error
label: Error
- value: 1-Wiki
label: Wiki
type: url
link_label: Click to visit
- value: count
hidden_state:
- "off"
- unavailable
show:
state: false
duration: true
start_date: true
end_date: false
icon: true
separator: true
entity_name: true
custom_logs: false
grid_options:
columns: 12
subview: true
cards: []
badges: []
top_margin: false
header:
layout: responsive
badges_position: bottom
type: custom:stack-in-card
horizontal: true
cards:
- type: custom:mushroom-template-card
primary: |
P1S - {{ state_translated("sensor.p1s_current_stage") }}
secondary: "{{ state_translated(\"sensor.p1s_task_name\") }}"
icon: none
icon_color: blue
layout: horizontal
fill_container: false
multiline_secondary: true
tap_action:
action: navigate
navigation_path: /lovelace/p1s
card_mod:
style:
.: |
ha-card {
dheight: 140px !important;
--icon-size: 96px ;
}
mushroom-card { }
mushroom-state-item$: |
div.container {
justify-content: normal;
flex-direction: row-reverse;
{% if (states("sensor.p1s_print_progress") | int) == 100 %}
padding-bottom: 10px;
{% else %}
padding-bottom: 0px;
{% endif %}
}
mushroom-state-info$: |
.primary {
white-space: pre-wrap!important;
height: 45px;
align-content: flex-end;
color: green !important;
font-size: 16px !important;
}
.secondary {
}
mushroom-shape-icon$: |
.shape {
display: flex;
xbox-shadow: 0 0 0 5px var(--shape-color) !important;
background: url("{{ state_attr('image.p1s_cover_image', 'entity_picture') }}");
background:
center / contain no-repeat
url("{{ state_attr('image.p1s_cover_image', 'entity_picture') }}"),
linear-gradient(#999999, #444444);
border-radius: 20% !important;
}
- type: custom:entity-progress-card
entity: sensor.p1s_print_progress
unit: "%"
show_more_info: false
bar_size: small
bar_color: var(--green-color)
layout: horizontal
icon: none
hide:
- icon
- name
- secondary_info
tap_action:
action: navigate
navigation_path: /lovelace/p1s
card_mod:
style: |
ha-card {
height: 10px;
margin-top: 0px;
margin-bottom: 0px;
}
visibility:
- condition: numeric_state
entity: sensor.p1s_print_progress
below: 100
- type: markdown
content: |
<table width=100%>
<tr>
<td align=left valign=top>
<font size=2>Time Left</font><br />
<strong>
-{{ (states("sensor.p1s_remaining_time") | int/60) | int }}h{{states("sensor.p1s_remaining_time") | int % 60 }}m
</strong>
</td>
<td align=left valign=top width=78>
<font size=2>ETA</font><br />
<strong>{{ as_datetime(states("sensor.p1s_end_time")).strftime("%H:%M") }}</strong>
<font size=1>{{ as_datetime(states("sensor.p1s_end_time")).strftime("%b%-d") }}</font>
</td>
</tr>
</table>
card_mod:
style: |
ha-markdown {
padding-top: 0px !important;
padding-bottom: 4px !important;
padding-left: 10px !important;
}
navigate_to: /lovelace/p1s
visibility:
- condition: numeric_state
entity: sensor.p1s_print_progress
below: 100
grid_options:
columns: 12
rows: auto
@doobes
Copy link

doobes commented Jan 20, 2026

Well, the static version of the window above works, but the version with the printer running doesn't. Stay tuned

@doobes
Copy link

doobes commented Jan 21, 2026

Ok, got everything working. It's VERY particular about tabs and such:

Here's the dashboard:

image

And here is the yaml

  - title: Home
    type: sections
    max_columns: 3
    path: p1s
    sections:
      - type: grid
        cards:
          - type: heading
            icon: mdi:printer-3d
            heading_style: subtitle
            heading: Printer
            badges:
              - type: entity
                show_state: true
                show_icon: true
                entity: light.p1s_chamber_light
                tap_action:
                  action: toggle
                name: Light
                state_content:
                  - name
                  - state
                color: state
              - type: entity
                show_state: true
                show_icon: true
                entity: image.p1s_cover_image
                icon: mdi:printer-3d
                color: state
          - show_state: false
            show_name: true
            camera_view: auto
            fit_mode: cover
            type: picture-entity
            entity: camera.p1s_camera
          - type: picture
            grid_options:
              columns: 6
              rows: 4
            theme: macOS Theme
            image_entity: image.p1s_cover_image
            card_mod:
              style: |
                ha-card {
                  align-content: center;
                  background: linear-gradient(#999999, #111111);
                  //background: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>');

                }
                img {
                  filter: drop-shadow(0px 5px 2px #00000055);
                }
          - type: custom:stack-in-card
            horizontal: true
            cards:
              - type: markdown
                content: |
                  <div>
                    <font size="5">
                      {{ states.sensor.p1s_task_name.state [:60]}}
                    </font>
                  </div>
                  <table width=100% table border="0">
                    <tr>
                      <td align=left>Printed layers
                      <td align=right>
                        <font color=#77fc54; size="4">
                          {{states.sensor.p1s_current_layer.state}}
                          /
                          {{states.sensor.p1s_total_layer_count.state}}
                          </font>
                        </td>
                      </tr>
                    </table>
                    
                  <table width=100% table border="0">
                    <tr> 
                      <td align=left>
                        <font size="4";color=#77fc54>
                          {{states.sensor.p1s_print_progress.state}}%
                        </font>
                      <td align=right>    
                        {% if (states.sensor.p1s_remaining_time.state | int) == 0 %}
                    Success  
                        {% else %}
                    <font color=#77fc54; size= "4">
                      {{(states.sensor.p1s_remaining_time.state | int/60) | int  }}h {{(states.sensor.p1s_remaining_time.state | int%60) }}m 
                        {% endif %} </td> </tr>
                  </table>
                card_mod:
                  style:
                    .: |
                      ha-card {
                        --markdown-table-border-style: none;
                        position: absolute;
                        top: 0px;
                      }
                    ha-markdown:
                      $: |
                        div {
                          --markdown-table-border-style: none;
                          height: 100px;
                          width: 200px;
                          overflow: hidden;
                          word-break: break-words;
                          hyphens: auto!important;
                          hyphenate-character: " ";
                        }
                grid_options:
                  columns: 6
                  rows: 3
              - type: custom:entity-progress-card
                entity: sensor.p1s_print_progress
                unit: '%'
                show_more_info: false
                bar_size: small
                bar_color: var(--green-color)
                layout: horizontal
                icon: none
                hide:
                  - icon
                  - name
                  - secondary_info
                grid_options:
                  columns: 6
                  rows: 1
                card_mod:
                  style:
                    .: |
                      ha-card {
                        --markdown-table-border-style: none;
                      }
            card_mod:
              style: |
                ha-card {
                  height: 100%;
                  align-content: end;
                  border-style: solid;
                }
            grid_options:
              columns: 6
              rows: 4
          - type: custom:ha-bambulab-print_control-card
            printer: 27069188e8387ed3d25eae2602210d3b
            grid_options:
              columns: full
              rows: auto
            card_mod:
              style: |
                div.control-container {
                  width: 100%;
                  overflow: hidden;
                }
                div.buttons-container {
                  gap: 0px
                }
          - type: custom:mushroom-fan-card
            entity: fan.p1s_chamber_fan
            name: Chamber
            grid_options:
              columns: 4
              rows: 1
            tap_action:
              action: more-info
            icon_animation: true
          - type: custom:mushroom-fan-card
            name: Aux
            grid_options:
              columns: 4
              rows: 1
            tap_action:
              action: more-info
            icon_animation: true
            entity: fan.aux_fan
          - type: custom:mushroom-fan-card
            entity: fan.p1s_cooling_fan
            name: Cooling
            grid_options:
              columns: 4
              rows: 1
            tap_action:
              action: more-info
            icon_animation: true
      - type: grid
        cards:
          - type: heading
            icon: mdi:camera-control
            heading_style: subtitle
            badges: []
            heading: Status
          - show_name: true
            show_icon: true
            show_state: true
            type: glance
            entities:
              - entity: sensor.p1s_nozzle_temperature
                icon: mdi:printer-3d-nozzle-heat
                name: Nozzle
                card_mod:
                  style: |
                    :host {
                      --paper-item-icon-color: white;
                      --icon-primary-color: white;
                    }
                    state-badge {
                      background-color: #D5AE43;
                      border-radius: 50%;
                    }
                    div {
                      white-space: unset !important;
                      text-wrap: balance !important;
                    }
              - entity: sensor.p1s_bed_temperature
                icon: mdi:train-car-flatbed
                name: Print Bed
                card_mod:
                  style: |
                    :host {
                      --paper-item-icon-color: white;
                      --icon-primary-color: white;
                    }
                    state-badge {
                      background-color: #4DAE51;
                      border-radius: 50%;
                    }
                    div {
                      white-space: unset !important;
                      text-wrap: balance !important;
                    }
              - entity: select.p1s_printing_speed
                name: Speed
                icon: mdi:window-close
                card_mod:
                  style: |
                    {% set current_sensor = "select.p1s_printing_speed" %}
                    :host {
                      --paper-item-icon-color: white;
                      --icon-primary-color: white;
                      {% if is_state(current_sensor, "silent") %}
                      --card-mod-icon: mdi:speedometer-slow;
                      {% elif is_state(current_sensor, "standard") %}
                      --card-mod-icon: mdi:speedometer-medium;
                      {% elif is_state(current_sensor, "sport") %}
                      --card-mod-icon: mdi:speedometer;
                      {% elif is_state(current_sensor, "ludicrous") %}
                      --card-mod-icon: mdi:rocket-launch;
                      {% else %}
                      --card-mod-icon: mdi:window-close
                      {% endif %}
                    }
                    state-badge {
                      background-color: orange;
                      border-radius: 50%;
                    }
                    div {
                      white-space: unset !important;
                      text-wrap: balance !important;
                    }
            state_color: false
            card_mod:
              style: |
                ha-card {
                  font-size: 12px;
                  height: 100%
                }
                ha-card.type-glance .entities {
                  align-items: flex-start !important;
                }
          - type: heading
            heading: Ext. Spool
            heading_style: subtitle
            grid_options:
              columns: 3
            icon: mdi:alpha-e-box
          - type: heading
            heading: AMS
            heading_style: subtitle
            grid_options:
              columns: 9
            icon: mdi:alpha-a-box
            tap_action:
              action: perform-action
              perform_action: input_boolean.toggle
              target:
                entity_id: input_boolean.enable_ha_bambulab_ams_spool_cards
          - type: custom:ha-bambulab-spool-card
            header: Header Text
            subtitle: Subtitle Text
            show_header: true
            show_type: true
            spool: 463cf2384c0f8deb41635045674cde41
            card_mod:
              style:
                .: |
                  ha-card {
                    background: var(--ha-card-background, var(--card-background-color, #fff));
                    -webkit-backdrop-filter: var(--ha-card-backdrop-filter, none);
                    backdrop-filter: var(--ha-card-backdrop-filter, none);
                    box-shadow: var(--ha-card-box-shadow, none);
                    box-sizing: border-box;
                    border-radius: var(--ha-card-border-radius, 12px);
                    border-width: var(--ha-card-border-width, 1px);
                    border-style: solid;
                    border-color: var(--ha-card-border-color, var(--divider-color, #e0e0e0));
                    color: var(--primary-text-color);
                    display: block;
                    transition: all .3sease-out;
                    position: relative;
                  }
                  ha-bambulab-spool {
                    xbackground-color: red!important;
                    margin: 5px;
                  }
                ha-bambulab-spool $ ams-popup: |
                  div.ha-bambulab-spool-card-container {
                      xbackground-color: cyan;
                  }      
                  div.ha-bambulab-spool-card-holder {
                      border: 7px solid rgba(0,0,0,0) !important;
                      background: none !important;
                  }   
                  div.ha-bambulab-spool-container {
                    border: 2px solid rgba(0,0,0,0);
                    
                  }

                  div.ha-bambulab-spool-card-holder {
                    width: 62px;
                    margin-left: auto;
                    margin-right: auto;
                  }

                  div.ha-bambulab-spool-info {
                      background: none;
                      font-weight: 500;
                      font-size: 12px;
                      line-height: 16px;
                      color: var(--card-primary-color);
                      letter-spacing: 0.1px;
                      text-overflow: ellipsis;
                      overflow: hidden;
                  }
                  div.v-string-roll {
                    xbackground-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>') !important;
                  }

                  div.v-string-layer {
                    background-color: rgba(0, 0, 0, 0.1);
                  }
            visibility:
              - condition: state
                entity: input_boolean.enable_ha_bambulab_ams_spool_cards
                state: 'on'
          - type: horizontal-stack
            cards:
              - type: custom:ha-bambulab-ams-card
                entity: ''
                header: ''
                subtitle: ''
                style: vector
                ams: d821c699f076280b0c467e090be20286
                show_type: true
                show_info_bar: false
                card_mod:
                  style:
                    .: |
                      ha-card {
                        background: var(--ha-card-background, var(--card-background-color, #fff));
                        -webkit-backdrop-filter: var(--ha-card-backdrop-filter, none);
                        backdrop-filter: var(--ha-card-backdrop-filter, none);
                        box-shadow: var(--ha-card-box-shadow, none);
                        box-sizing: border-box;
                        border-radius: var(--ha-card-border-radius, 12px);
                        border-width: var(--ha-card-border-width, 1px);
                        border-style: solid;
                        border-color: var(--ha-card-border-color, var(--divider-color, #e0e0e0));
                        color: var(--primary-text-color);
                        display: block;
                        transition: all .3sease-out;
                        position: relative;
                      }
                      ha-bambulab-spool {
                        padding: 0px 0px !important;
                      }
                    ha-bambulab-spool $:
                      ams-popup: |
                        div.ha-bambulab-spool-card-container {
                            xbackground-color: cyan;
                        }      
                        div.ha-bambulab-spool-card-holder {
                            border: 7px solid rgba(0,0,0,0) !important;
                            background: none !important;
                        }   
                        div.ha-bambulab-spool-container {
                          border: 2px solid rgba(0,0,0,0);
                        }

                        div.ha-bambulab-spool-card-holder {
                          width: 62px;
                          margin-left: auto;
                          margin-right: auto;
                        }

                        div.ha-bambulab-spool-info {
                          background: none;
                          font-weight: 500;
                          font-size: 12px;
                          line-height: 16px;
                          color: var(--card-primary-color);
                          letter-spacing: 0.1px;
                          text-overflow: ellipsis;
                          overflow: hidden;
                        }
                        div.v-string-roll {
                          xbackground-image: url('data:image/svg+xml;utf8,<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 4 4"><rect width="5" height="5" fill="%23ffffff50" /><path d="M0,0V5H1V0zM2,0V5H3V0zM4,0V5H5V0zM0,0H5V1H0zM0,2H5V3H0zM0,4H5V5H0z" fill="%23aaaaaa50" fill-rule="evenodd"/></svg>') !important;
                        }

                        div.v-string-layer {
                          background-color: rgba(0, 0, 0, 0.1);
                        }
            grid_options:
              columns: 9
              rows: 3
            visibility:
              - condition: state
                entity: input_boolean.enable_ha_bambulab_ams_spool_cards
                state: 'on'
          - type: heading
            icon: fas:temperature-half
            heading: Temperatures
            heading_style: subtitle
          - type: custom:mini-graph-card
            name: Nozzle Temp.
            line_width: 7
            font_size: 60
            animate: true
            decimals: 1
            points_per_hour: 60
            unit: ' '
            show:
              labels: false
              points: false
              state: true
              fill: false
            tap_action:
              action: none
            state_map:
              - value: '005'
                label: 'Off'
            entities:
              - entity: sensor.p1s_nozzle_target_temperature
                name: Target
                state_adaptive_color: true
                show_state: true
                show_fill: true
                show_line: true
                font_size: 50
                smooth: false
              - entity: sensor.p1s_nozzle_temperature
                name: Nozzle
                state_adaptive_color: true
                show_state: true
                show_fill: false
            hours_to_show: 6
            grid_options:
              columns: 6
          - type: custom:mini-graph-card
            name: Bed Temp.
            line_width: 7
            font_size: 60
            animate: true
            decimals: 1
            points_per_hour: 60
            unit: ' '
            show:
              labels: false
              points: false
              state: true
              fill: false
            tap_action:
              action: none
            state_map:
              - value: '005'
                label: 'Off'
            entities:
              - entity: sensor.p1s_bed_target_temperature
                name: Target
                state_adaptive_color: true
                show_state: true
                show_fill: true
                show_line: true
                font_size: 50
                smooth: false
              - entity: sensor.p1s_bed_temperature
                name: Bed
                state_adaptive_color: true
                show_state: true
                show_fill: false
            hours_to_show: 6
            grid_options:
              columns: 6
      - type: grid
        cards:
          - type: heading
            icon: fas:temperature-half
            heading: Temperature History
            heading_style: subtitle
          - chart_type: line
            period: 5minute
            type: statistics-graph
            entities:
              - entity: sensor.p1s_nozzle_temperature
                name: Nozzle
              - entity: sensor.p1s_bed_temperature
                name: Bed
            stat_types:
              - mean
            days_to_show: 0.2
          - type: heading
            icon: mdi:fan
            heading: Fans
            heading_style: subtitle
          - chart_type: line
            period: 5minute
            type: statistics-graph
            entities:
              - entity: sensor.p1s_aux_fan_speed
                name: Aux
              - entity: sensor.p1s_cooling_fan_speed
                name: Cooling
              - entity: sensor.p1s_chamber_fan_speed
                name: Chamber
              - entity: sensor.p1s_heatbreak_fan_speed
                name: Heat Break
            stat_types:
              - mean
            days_to_show: 0.2
            logarithmic_scale: false
    subview: true
    cards: []
    badges: []
    top_margin: false
    header:
      layout: responsive
      badges_position: bottom

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment