4 files
This commit is contained in:
1 parent
9abe9051eb
commit
1ad50fd5fe
4 files changed
+1586
-785
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -4047,3 +4047,4 @@
|
||||
{"timestamp": "2026-10-08T18:30:20.847753+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": "sparkx-i7", "list_only": false, "force_reload": false, "entity_id": null, "card_type": null, "heading": null, "include_config": false, "include_screenshot": false, "view_path": "spoolman", "mode": null, "query": null}, "execution_time_ms": 126.52206420898438, "success": true, "error_message": null, "response_size_bytes": 27628, "user_context": null}
|
||||
{"timestamp": "2026-10-08T18:30:20.864219+00:00", "tool_name": "ha_eval_template", "parameters": {"template": "{% 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 %}{% set bb = 'sensor.spoolman_spool_' ~ ns.id %}{% if ns.id %}MATCH id={{ ns.id }} base={{ bb }} color={{ color }} state={{ states(bb) }} loc={{ state_attr(bb, 'location') }} reg={{ state_attr(bb, 'registered') }} vendor={{ state_attr(bb, 'filament_vendor_name') }} mat={{ state_attr(bb, 'filament_material') }} name={{ state_attr(bb, 'filament_name') }} dens={{ state_attr(bb, 'filament_density') }} diam={{ state_attr(bb, 'filament_diameter') }} w={{ state_attr(bb, 'filament_weight') }} ters={{ state_attr(bb, 'filament_settings_extruder_temp') }} tbed={{ state_attr(bb, 'filament_settings_bed_temp') }} extra={{ state_attr(bb, 'not_a_real_attr') }} flow={{ states(bb ~ '_flow_rate') }} runout={{ states(bb ~ '_estimated_runout') }}{% else %}NO_MATCH{% endif %}", "condition": null, "variables": null, "strict": false, "timeout": 3, "report_errors": true}, "execution_time_ms": 145.97225189208984, "success": true, "error_message": null, "response_size_bytes": 1825, "user_context": null}
|
||||
{"timestamp": "2026-10-08T18:31:31.662481+00:00", "tool_name": "ha_eval_template", "parameters": {"template": "{% set bb = 'sensor.spoolman_spool_3' %}used_w={{ state_attr(bb, 'used_weight') }} used_pct={{ state_attr(bb, 'used_percentage') }} init_w={{ state_attr(bb, 'initial_weight') }} rem_len={{ state_attr(bb, 'remaining_length') }} used_len={{ state_attr(bb, 'used_length') }} dens={{ state_attr(bb, 'filament_density') }} art={{ state_attr(bb, 'filament_article_number') | default('—', true) }} pic={{ state_attr(bb, 'entity_picture') | default('—', true) }} arch={{ state_attr(bb, 'archived') }} price={{ state_attr(bb, 'filament_price') | default('—', true) }}", "condition": null, "variables": null, "strict": false, "timeout": 3, "report_errors": true}, "execution_time_ms": 34.293174743652344, "success": true, "error_message": null, "response_size_bytes": 864, "user_context": null}
|
||||
{"timestamp": "2026-10-08T18:34:55.811830+00:00", "tool_name": "ha_config_set_dashboard", "parameters": {"url_path": "sparkx-i7", "config": null, "python_transform": "v = config['views'][3]; s = v['sections']\ndel s[4]; del s[3]; del s[2]; del s[1]\nlookup = \"{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_@N@_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 %}\"\ntail = \"{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}\"\nbody = \"{% if ns.id %}\" + \"\\n\".join([\n \"{{ 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 }}\",\n \"Remaining: {{ (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) }}%)\",\n \"Remaining 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\",\n \"Spool: Ø{{ 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) }}\",\n \"Temps: 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\",\n \"Flow: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_flow_rate') }} · Runout est.: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_estimated_runout') }}\",\n \"Registered: {{ 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) }}\"\n])\ncards = []\nfor n in [1, 2, 3, 4]: cards.append({\"type\": \"custom:mushroom-template-card\", \"entity\": \"sensor.sparkx_i7_cfs_box_1_slot_@N@_color\".replace('@N@', str(n)), \"name\": \"Slot @N@\".replace('@N@', str(n)), \"icon\": \"mdi:spool\", \"icon_color\": \"{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_@N@_color') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}\".replace('@N@', str(n)), \"picture\": (lookup + \"{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') if ns.id and state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') else '' }}\").replace('@N@', str(n)), \"primary\": (lookup + \"{% 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\" + tail).replace('@N@', str(n)), \"secondary\": (lookup + body + tail).replace('@N@', str(n)), \"multiline_secondary\": True, \"grid_options\": {\"columns\": 6}})\ns.insert(1, {\"type\": \"grid\", \"cards\": [{\"type\": \"heading\", \"heading\": \"Spool Details — CFS Lite\", \"icon\": \"mdi:spool\"}] + cards})\ns[4] = {\"type\": \"grid\", \"cards\": [{\"type\": \"heading\", \"heading\": \"Spool History — CFS Lite (auto)\", \"icon\": \"mdi:history\"}, {\"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\": \"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\"}}]}", "config_hash": "2842457c0302206d", "title": null, "icon": null, "require_admin": null, "show_in_sidebar": nLine truncated
|
||||
+54
-775
@@ -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
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user