-
-
Save eodabas/880612a39c4ff04e573dc921ff3aabdf to your computer and use it in GitHub Desktop.
| 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 |
I still don't have the sensor states, but here is what my dashboard looks like:
This is the entire YAML Listing
views:
- 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.frog_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.frog_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.frog_p1s_camera
- type: picture
image_entity: image.frog_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.frog_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.frog_p1s_current_layer.state}}</font>/{{states.sensor.frog_p1s_total_layer_count.state}}</td></tr></table>
<table width=100%><tr> <td align=left><font
size="5";color=#77fc54>{{
states.sensor.frog_p1s_print_progress.state}}%<td
align=right> {% if
(states.sensor.frog_p1s_remaining_time.state | int) == 0 %}
Success
{% else %}
<font color=#959595>-{{(states.sensor.frog_p1s_remaining_time.state | int/60) | int }}h{{ states.sensor.frog_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.frog_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.frog_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.frog_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.frog_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.frog_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.frog_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.frog_p1s_printing_speed
name: Speed
icon: mdi:window-close
card_mod:
style: |
{% set current_sensor = "select.frog_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.frog_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.frog_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.frog_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.frog_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.frog_p1s_nozzle_temperature
name: Nozzle
- entity: sensor.frog_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.frog_p1s_aux_fan_speed
name: Aux
- entity: sensor.frog_p1s_cooling_fan_speed
name: Cooling
- entity: sensor.frog_p1s_chamber_fan_speed
name: Chamber
- entity: sensor.frog_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
Finally figured out how to format code here.....
Lemme know if you figure out the sensor states.
cheers
hello guys. Unfortunately I'm away from my 3d printer and home assistant setup for the last 5 months. Considering the updates to both home assistant and ha-bambulab, I won't be able to assist at least until I'm back with my setups in next a few months.
Ok,
I made some progress in conjuction with Perplexity.
Here are the sensors:
template:
- sensor:
# Print task name (string)
- name: "P1S Task Name"
unique_id: p1s_task_name
state: "{{ states('sensor.p1s_task_name') }}"
# Current printed layer (number)
- name: "P1S Current Layer"
unique_id: p1s_current_layer
unit_of_measurement: "layers"
state: "{{ states('sensor.p1s_current_layer') | int(0) }}"
# Total layer count (number)
- name: "P1S Total Layer Count"
unique_id: p1s_total_layer_count
unit_of_measurement: "layers"
state: "{{ states('sensor.p1s_total_layer_count') | int(0) }}"
# Print progress (percent)
- name: "P1S Print Progress"
unique_id: p1s_print_progress
unit_of_measurement: "%"
state: "{{ states('sensor.p1s_print_progress') | int(0) }}"
# Remaining time (minutes)
- name: "P1S Remaining Time"
unique_id: p1s_remaining_time
unit_of_measurement: "min"
state: "{{ states('sensor.p1s_remaining_time') | int(0) }}"
# Nozzle temperature
- name: "P1S Nozzle Temperature"
unique_id: p1s_nozzle_temperature
device_class: temperature
unit_of_measurement: "°C"
state: "{{ states('sensor.p1s_nozzle_temperature') | float(0) }}"
# Nozzle target temperature
- name: "P1S Nozzle Target Temperature"
unique_id: p1s_nozzle_target_temperature
device_class: temperature
unit_of_measurement: "°C"
state: "{{ states('sensor.p1s_nozzle_target_temperature') | float(0) }}"
# Bed temperature
- name: "P1S Bed Temperature"
unique_id: p1s_bed_temperature
device_class: temperature
unit_of_measurement: "°C"
state: "{{ states('sensor.p1s_bed_temperature') | float(0) }}"
# Bed target temperature
- name: "P1S Bed Target Temperature"
unique_id: p1s_bed_target_temperature
device_class: temperature
unit_of_measurement: "°C"
state: "{{ states('sensor.p1s_bed_target_temperature') | float(0) }}"
The only issue I'm having is the text in this box is not wrapping, and the box borders are shown:
Here is the yaml:
type: custom:stack-in-card
horizontal: true
cards:
- type: markdown
content: |
<div>
<font size="4">
{{ 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}}%
</font>
<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;
height: auto;
Columns: 1
}
ha-markdown:
$: |
div {
height: 80px;
#overflow: hidden;
#hyphens: auto!important;
#hyphenate-character: " ";
white-space: mormal;
overflow-wrap: break-word;
hyphens: auto;
}
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
Any thoughts on how to rectify?
Thanks!
Okay, got it resolved:
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}}
</font>/{{states.sensor.p1s_total_layer_count.state}}
</td>
</tr>
</table>
<table width=100% table border="0">
<tr>
<td align=left>
<font size="5";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=#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 {
--markdown-table-border-style: none;
position: absolute;
top: 0px;
}
ha-markdown:
$: |
div {
--markdown-table-border-style: none;
height: 90px;
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
Final Card for my P1S:
So this is my the YAML:
views:
- 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
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% table border="0">
<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% table border="0">
<tr>
<td align=left>
<font size="5";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=#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 {
--markdown-table-border-style: none;
position: absolute;
top: 0px;
}
ha-markdown:
$: |
div {
--markdown-table-border-style: none;
height: 90px;
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
Cheers!
Well, the static version of the window above works, but the version with the printer running doesn't. Stay tuned
Ok, got everything working. It's VERY particular about tabs and such:
Here's the dashboard:
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
How did you do it @doobes ? I am struggling ...