This commit is contained in:
Home Assistant Version Control
2026-10-08 18:35:02 +00:00
parent 9abe9051eb
commit 1ad50fd5fe
4 changed files with 1586 additions and 785 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+54 -775
View File
@@ -1034,770 +1034,64 @@
"cards": [
{
"type": "heading",
"heading": "Spool 3 — Black · CFS Slot 1",
"heading": "Spool Details — CFS Lite",
"icon": "mdi:spool"
},
{
"type": "gauge",
"entity": "sensor.spoolman_spool_3",
"name": "Remaining",
"unit": "g",
"min": 0,
"max": 1000,
"severity": {
"red": 0,
"yellow": 300,
"green": 600
},
"grid_options": {
"columns": 6,
"rows": 3
}
},
{
"type": "custom:mushroom-template-card",
"entity": "sensor.spoolman_spool_3_color_hex",
"name": "Color",
"icon": "mdi:palette",
"icon_color": "{% set c = states('sensor.spoolman_spool_3_color_hex') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-text-color){% endif %}",
"primary": "{{ states('sensor.spoolman_spool_3_color_hex') }}",
"secondary": "{{ states('sensor.spoolman_spool_3_vendor') }} · {{ states('sensor.spoolman_spool_3_filament_name') }} · {{ states('sensor.spoolman_spool_3_material') }}",
"entity": "sensor.sparkx_i7_cfs_box_1_slot_1_color",
"name": "Slot 1",
"icon": "mdi:spool",
"icon_color": "{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_1_color') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}",
"picture": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_1_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') if ns.id and state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') else '' }}",
"primary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_1_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}Spool {{ ns.id }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_name') | default('?', true) }} · {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g left{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"secondary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_1_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_vendor_name') | default('?', true) }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_material') | default('?', true) }} · #{{ color | upper }}\nRemaining: {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g · used {{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_weight') | float(0)) | round(1) }} g ({{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_percentage') | float(0)) | round(1) }}%)\nRemaining length: {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'remaining_length') | float(0)) / 1000) | round(1) }} m · used {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_length') | float(0)) / 1000) | round(1) }} m\nSpool: Ø{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_diameter') | default('?', true) }} mm · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_density') | default('?', true) }} g/cm³ · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_weight') | default('?', true) }} g · art. {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_article_number') | default('?', true) }}\nTemps: bed {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_bed_temp') | default('?', true) }}°C · hotend {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_extruder_temp') | default('?', true) }}°C\nFlow: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_flow_rate') }} · Runout est.: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_estimated_runout') }}\nRegistered: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'registered') | default('?', true) }} · Location: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'location') | default('?', true) }} · Price: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_price') | default('?', true) }}{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"multiline_secondary": true,
"grid_options": {
"columns": 6
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_used_weight",
"name": "Used Weight",
"icon": "mdi:scale-balance",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_used_percentage",
"name": "Used %",
"icon": "mdi:chart-donut",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_remaining_length",
"name": "Remaining Length",
"icon": "mdi:ruler",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_used_length",
"name": "Used Length",
"icon": "mdi:ruler-square",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_filament_weight",
"name": "Full Spool Weight",
"icon": "mdi:weight-kilogram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_density",
"name": "Density",
"icon": "mdi:weight-gram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_diameter",
"name": "Diameter",
"icon": "mdi:circle-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_vendor",
"name": "Vendor",
"icon": "mdi:factory",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_material",
"name": "Material",
"icon": "mdi:layers-triple",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_filament_name",
"name": "Filament Name",
"icon": "mdi:tag-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_bed_temp",
"name": "Bed Temp",
"icon": "mdi:thermometer",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_extruder_temp",
"name": "Extruder Temp",
"icon": "mdi:thermometer-lines",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_flow_rate",
"name": "Flow Rate",
"icon": "mdi:progress-clock",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_estimated_runout",
"name": "Est. Runout",
"icon": "mdi:calendar-alert",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_registered",
"name": "Registered",
"icon": "mdi:calendar-check-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_3_id",
"name": "Spool ID",
"icon": "mdi:identifier",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "select.spoolman_spool_3_location",
"name": "Location",
"icon": "mdi:map-marker-outline",
"grid_options": {
"columns": 4
}
}
]
},
{
"type": "grid",
"cards": [
{
"type": "heading",
"heading": "Spool 4 — Crimson · CFS Slot 2",
"icon": "mdi:spool"
},
{
"type": "gauge",
"entity": "sensor.spoolman_spool_4",
"name": "Remaining",
"unit": "g",
"min": 0,
"max": 1000,
"severity": {
"red": 0,
"yellow": 300,
"green": 600
},
"grid_options": {
"columns": 6,
"rows": 3
}
},
{
"type": "custom:mushroom-template-card",
"entity": "sensor.spoolman_spool_4_color_hex",
"name": "Color",
"icon": "mdi:palette",
"icon_color": "{% set c = states('sensor.spoolman_spool_4_color_hex') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-text-color){% endif %}",
"primary": "{{ states('sensor.spoolman_spool_4_color_hex') }}",
"secondary": "{{ states('sensor.spoolman_spool_4_vendor') }} · {{ states('sensor.spoolman_spool_4_filament_name') }} · {{ states('sensor.spoolman_spool_4_material') }}",
"entity": "sensor.sparkx_i7_cfs_box_1_slot_2_color",
"name": "Slot 2",
"icon": "mdi:spool",
"icon_color": "{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_2_color') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}",
"picture": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_2_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') if ns.id and state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') else '' }}",
"primary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_2_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}Spool {{ ns.id }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_name') | default('?', true) }} · {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g left{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"secondary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_2_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_vendor_name') | default('?', true) }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_material') | default('?', true) }} · #{{ color | upper }}\nRemaining: {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g · used {{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_weight') | float(0)) | round(1) }} g ({{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_percentage') | float(0)) | round(1) }}%)\nRemaining length: {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'remaining_length') | float(0)) / 1000) | round(1) }} m · used {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_length') | float(0)) / 1000) | round(1) }} m\nSpool: Ø{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_diameter') | default('?', true) }} mm · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_density') | default('?', true) }} g/cm³ · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_weight') | default('?', true) }} g · art. {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_article_number') | default('?', true) }}\nTemps: bed {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_bed_temp') | default('?', true) }}°C · hotend {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_extruder_temp') | default('?', true) }}°C\nFlow: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_flow_rate') }} · Runout est.: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_estimated_runout') }}\nRegistered: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'registered') | default('?', true) }} · Location: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'location') | default('?', true) }} · Price: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_price') | default('?', true) }}{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"multiline_secondary": true,
"grid_options": {
"columns": 6
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_used_weight",
"name": "Used Weight",
"icon": "mdi:scale-balance",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_used_percentage",
"name": "Used %",
"icon": "mdi:chart-donut",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_remaining_length",
"name": "Remaining Length",
"icon": "mdi:ruler",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_used_length",
"name": "Used Length",
"icon": "mdi:ruler-square",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_filament_weight",
"name": "Full Spool Weight",
"icon": "mdi:weight-kilogram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_density",
"name": "Density",
"icon": "mdi:weight-gram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_diameter",
"name": "Diameter",
"icon": "mdi:circle-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_vendor",
"name": "Vendor",
"icon": "mdi:factory",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_material",
"name": "Material",
"icon": "mdi:layers-triple",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_filament_name",
"name": "Filament Name",
"icon": "mdi:tag-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_bed_temp",
"name": "Bed Temp",
"icon": "mdi:thermometer",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_extruder_temp",
"name": "Extruder Temp",
"icon": "mdi:thermometer-lines",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_flow_rate",
"name": "Flow Rate",
"icon": "mdi:progress-clock",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_estimated_runout",
"name": "Est. Runout",
"icon": "mdi:calendar-alert",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_registered",
"name": "Registered",
"icon": "mdi:calendar-check-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_4_id",
"name": "Spool ID",
"icon": "mdi:identifier",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "select.spoolman_spool_4_location",
"name": "Location",
"icon": "mdi:map-marker-outline",
"grid_options": {
"columns": 4
}
}
]
},
{
"type": "grid",
"cards": [
{
"type": "heading",
"heading": "Spool 5 — White · CFS Slot 3",
"icon": "mdi:spool"
},
{
"type": "gauge",
"entity": "sensor.spoolman_spool_5",
"name": "Remaining",
"unit": "g",
"min": 0,
"max": 1000,
"severity": {
"red": 0,
"yellow": 300,
"green": 600
},
"grid_options": {
"columns": 6,
"rows": 3
}
},
{
"type": "custom:mushroom-template-card",
"entity": "sensor.spoolman_spool_5_color_hex",
"name": "Color",
"icon": "mdi:palette",
"icon_color": "{% set c = states('sensor.spoolman_spool_5_color_hex') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-text-color){% endif %}",
"primary": "{{ states('sensor.spoolman_spool_5_color_hex') }}",
"secondary": "{{ states('sensor.spoolman_spool_5_vendor') }} · {{ states('sensor.spoolman_spool_5_filament_name') }} · {{ states('sensor.spoolman_spool_5_material') }}",
"entity": "sensor.sparkx_i7_cfs_box_1_slot_3_color",
"name": "Slot 3",
"icon": "mdi:spool",
"icon_color": "{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_3_color') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}",
"picture": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_3_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') if ns.id and state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') else '' }}",
"primary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_3_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}Spool {{ ns.id }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_name') | default('?', true) }} · {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g left{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"secondary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_3_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_vendor_name') | default('?', true) }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_material') | default('?', true) }} · #{{ color | upper }}\nRemaining: {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g · used {{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_weight') | float(0)) | round(1) }} g ({{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_percentage') | float(0)) | round(1) }}%)\nRemaining length: {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'remaining_length') | float(0)) / 1000) | round(1) }} m · used {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_length') | float(0)) / 1000) | round(1) }} m\nSpool: Ø{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_diameter') | default('?', true) }} mm · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_density') | default('?', true) }} g/cm³ · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_weight') | default('?', true) }} g · art. {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_article_number') | default('?', true) }}\nTemps: bed {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_bed_temp') | default('?', true) }}°C · hotend {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_extruder_temp') | default('?', true) }}°C\nFlow: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_flow_rate') }} · Runout est.: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_estimated_runout') }}\nRegistered: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'registered') | default('?', true) }} · Location: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'location') | default('?', true) }} · Price: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_price') | default('?', true) }}{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"multiline_secondary": true,
"grid_options": {
"columns": 6
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_used_weight",
"name": "Used Weight",
"icon": "mdi:scale-balance",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_used_percentage",
"name": "Used %",
"icon": "mdi:chart-donut",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_remaining_length",
"name": "Remaining Length",
"icon": "mdi:ruler",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_used_length",
"name": "Used Length",
"icon": "mdi:ruler-square",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_filament_weight",
"name": "Full Spool Weight",
"icon": "mdi:weight-kilogram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_density",
"name": "Density",
"icon": "mdi:weight-gram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_diameter",
"name": "Diameter",
"icon": "mdi:circle-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_vendor",
"name": "Vendor",
"icon": "mdi:factory",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_material",
"name": "Material",
"icon": "mdi:layers-triple",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_filament_name",
"name": "Filament Name",
"icon": "mdi:tag-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_bed_temp",
"name": "Bed Temp",
"icon": "mdi:thermometer",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_extruder_temp",
"name": "Extruder Temp",
"icon": "mdi:thermometer-lines",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_flow_rate",
"name": "Flow Rate",
"icon": "mdi:progress-clock",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_estimated_runout",
"name": "Est. Runout",
"icon": "mdi:calendar-alert",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_registered",
"name": "Registered",
"icon": "mdi:calendar-check-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_5_id",
"name": "Spool ID",
"icon": "mdi:identifier",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "select.spoolman_spool_5_location",
"name": "Location",
"icon": "mdi:map-marker-outline",
"grid_options": {
"columns": 4
}
}
]
},
{
"type": "grid",
"cards": [
{
"type": "heading",
"heading": "Spool 6 — Gold · CFS Slot 4",
"icon": "mdi:spool"
},
{
"type": "gauge",
"entity": "sensor.spoolman_spool_6",
"name": "Remaining",
"unit": "g",
"min": 0,
"max": 1000,
"severity": {
"red": 0,
"yellow": 300,
"green": 600
},
"grid_options": {
"columns": 6,
"rows": 3
}
},
{
"type": "custom:mushroom-template-card",
"entity": "sensor.spoolman_spool_6_color_hex",
"name": "Color",
"icon": "mdi:palette",
"icon_color": "{% set c = states('sensor.spoolman_spool_6_color_hex') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-text-color){% endif %}",
"primary": "{{ states('sensor.spoolman_spool_6_color_hex') }}",
"secondary": "{{ states('sensor.spoolman_spool_6_vendor') }} · {{ states('sensor.spoolman_spool_6_filament_name') }} · {{ states('sensor.spoolman_spool_6_material') }}",
"entity": "sensor.sparkx_i7_cfs_box_1_slot_4_color",
"name": "Slot 4",
"icon": "mdi:spool",
"icon_color": "{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_4_color') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}",
"picture": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_4_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') if ns.id and state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') else '' }}",
"primary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_4_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}Spool {{ ns.id }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_name') | default('?', true) }} · {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g left{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"secondary": "{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_4_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}{% if ns.id %}{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_vendor_name') | default('?', true) }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_material') | default('?', true) }} · #{{ color | upper }}\nRemaining: {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g · used {{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_weight') | float(0)) | round(1) }} g ({{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_percentage') | float(0)) | round(1) }}%)\nRemaining length: {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'remaining_length') | float(0)) / 1000) | round(1) }} m · used {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_length') | float(0)) / 1000) | round(1) }} m\nSpool: Ø{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_diameter') | default('?', true) }} mm · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_density') | default('?', true) }} g/cm³ · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_weight') | default('?', true) }} g · art. {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_article_number') | default('?', true) }}\nTemps: bed {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_bed_temp') | default('?', true) }}°C · hotend {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_extruder_temp') | default('?', true) }}°C\nFlow: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_flow_rate') }} · Runout est.: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_estimated_runout') }}\nRegistered: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'registered') | default('?', true) }} · Location: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'location') | default('?', true) }} · Price: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_price') | default('?', true) }}{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}",
"multiline_secondary": true,
"grid_options": {
"columns": 6
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_used_weight",
"name": "Used Weight",
"icon": "mdi:scale-balance",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_used_percentage",
"name": "Used %",
"icon": "mdi:chart-donut",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_remaining_length",
"name": "Remaining Length",
"icon": "mdi:ruler",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_used_length",
"name": "Used Length",
"icon": "mdi:ruler-square",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_filament_weight",
"name": "Full Spool Weight",
"icon": "mdi:weight-kilogram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_density",
"name": "Density",
"icon": "mdi:weight-gram",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_diameter",
"name": "Diameter",
"icon": "mdi:circle-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_vendor",
"name": "Vendor",
"icon": "mdi:factory",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_material",
"name": "Material",
"icon": "mdi:layers-triple",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_filament_name",
"name": "Filament Name",
"icon": "mdi:tag-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_bed_temp",
"name": "Bed Temp",
"icon": "mdi:thermometer",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_extruder_temp",
"name": "Extruder Temp",
"icon": "mdi:thermometer-lines",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_flow_rate",
"name": "Flow Rate",
"icon": "mdi:progress-clock",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_estimated_runout",
"name": "Est. Runout",
"icon": "mdi:calendar-alert",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_registered",
"name": "Registered",
"icon": "mdi:calendar-check-outline",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "sensor.spoolman_spool_6_id",
"name": "Spool ID",
"icon": "mdi:identifier",
"grid_options": {
"columns": 4
}
},
{
"type": "tile",
"entity": "select.spoolman_spool_6_location",
"name": "Location",
"icon": "mdi:map-marker-outline",
"grid_options": {
"columns": 4
}
}
]
},
@@ -1965,55 +1259,40 @@
"cards": [
{
"type": "heading",
"heading": "Spool History",
"heading": "Spool History — CFS Lite (auto)",
"icon": "mdi:history"
},
{
"type": "history-graph",
"title": "Remaining & Used (7 days)",
"hours_to_show": 168,
"show_names": true,
"entities": [
{
"entity": "sensor.spoolman_spool_3",
"name": "Spool 3 (Black) remaining"
},
{
"entity": "sensor.spoolman_spool_3_used_weight",
"name": "Spool 3 (Black) used"
},
{
"entity": "sensor.spoolman_spool_4",
"name": "Spool 4 (Crimson) remaining"
},
{
"entity": "sensor.spoolman_spool_4_used_weight",
"name": "Spool 4 (Crimson) used"
},
{
"entity": "sensor.spoolman_spool_5",
"name": "Spool 5 (White) remaining"
},
{
"entity": "sensor.spoolman_spool_5_used_weight",
"name": "Spool 5 (White) used"
},
{
"entity": "sensor.spoolman_spool_6",
"name": "Spool 6 (Gold) remaining"
},
{
"entity": "sensor.spoolman_spool_6_used_weight",
"name": "Spool 6 (Gold) used"
}
],
"type": "custom:auto-entities",
"filter": {
"include": [
{
"entity_id": "sensor.spoolman_spool_*",
"attributes": {
"location": "CFS Lite"
}
}
]
},
"sort": {
"method": "attribute",
"attribute": "id",
"numeric": true
},
"card": {
"type": "history-graph",
"title": "Remaining weight (7 days)",
"hours_to_show": 168,
"show_names": true
},
"show_empty": false,
"grid_options": {
"columns": "full"
}
},
{
"type": "markdown",
"content": "**Changing filaments:** 1. Set the slot color in the CFS app. 2. Register the new roll in Spoolman with the same color hex (location: CFS Lite). No Home Assistant changes needed — the automations match by color hex and skip exhausted spools (remaining > 0).",
"content": "Every spool with location **CFS Lite** joins this graph automatically — register a new roll in Spoolman (same color hex, location CFS Lite) and it appears without dashboard edits. History follows the spool entity; a replaced roll keeps its own history under its own spool id.",
"grid_options": {
"columns": "full"
}
+10 -10
View File
@@ -4,7 +4,7 @@
"state": "ON",
"led_brightness": 100,
"countdown_to_turn_off": 0,
"voltage": 118.2,
"voltage": 118.7,
"countdown_to_turn_on": 0,
"ac_frequency": 60,
"power_factor": 0.11,
@@ -27,7 +27,7 @@
"led_brightness": 100,
"countdown_to_turn_off": 0,
"countdown_to_turn_on": 0,
"power": 2.1,
"power": 2,
"current": 0.09,
"energy": 54.02,
"power_factor": 0.17,
@@ -45,7 +45,7 @@
"state": "ON",
"led_brightness": 100,
"countdown_to_turn_off": 0,
"voltage": 118.1,
"voltage": 118.5,
"countdown_to_turn_on": 0,
"energy": 103.7,
"power_factor": 0.9,
@@ -74,11 +74,11 @@
"led_brightness": 100,
"countdown_to_turn_off": 0,
"countdown_to_turn_on": 0,
"voltage": 116.9,
"voltage": 117.4,
"state": "ON",
"ac_frequency": 60,
"energy": 210.48,
"power": 101.7,
"energy": 210.49,
"power": 102.5,
"current": 0.94,
"power_factor": 0.95,
"update": {
@@ -95,10 +95,10 @@
"led_brightness": 100,
"countdown_to_turn_off": 0,
"countdown_to_turn_on": 0,
"voltage": 118.1,
"voltage": 119.1,
"energy": 100.69,
"state": "ON",
"power": 10.3,
"power": 10.1,
"current": 0.32,
"ac_frequency": 60,
"power_factor": 0.51,
@@ -114,7 +114,7 @@
},
"0xffffb40e060895b3": {
"state": "ON",
"voltage": 116.3,
"voltage": 118.8,
"ac_frequency": 60,
"energy": 14.2,
"current": 0.01,
@@ -136,7 +136,7 @@
"0xffffb40e0608864e": {
"led_brightness": 100,
"countdown_to_turn_off": 0,
"voltage": 119.9,
"voltage": 119,
"energy": 33.5,
"countdown_to_turn_on": 0,
"state": "ON",