3 files
This commit is contained in:
@@ -0,0 +1,683 @@
|
||||
# ha_mcp_backup
|
||||
schema_version: 1
|
||||
domain: dashboard
|
||||
entity_id: sparkx-i7
|
||||
captured: '2026-10-08T16:48:05.400974+00:00'
|
||||
tool: ha_config_set_dashboard
|
||||
config:
|
||||
views:
|
||||
- max_columns: 4
|
||||
path: print
|
||||
sections:
|
||||
- cards:
|
||||
- bed: sensor.sparkx_i7_bed_temperature
|
||||
camera: camera.sparkx_i7_printer_camera
|
||||
grid_options:
|
||||
columns: full
|
||||
layer: sensor.sparkx_i7_working_layer
|
||||
light: light.sparkx_i7_light
|
||||
name: SparkX i7
|
||||
nozzle: sensor.sparkx_i7_nozzle_temperature
|
||||
pause_btn: button.sparkx_i7_pause_print
|
||||
progress: sensor.sparkx_i7_print_progress
|
||||
resume_btn: button.sparkx_i7_resume_print
|
||||
status: sensor.sparkx_i7_print_status
|
||||
stop_btn: button.sparkx_i7_stop_print
|
||||
time_left: sensor.sparkx_i7_print_time_left
|
||||
total_layers: sensor.sparkx_i7_total_layers
|
||||
type: custom:k-printer-card
|
||||
- grid_options:
|
||||
columns: full
|
||||
type: custom:webrtc-camera
|
||||
ui: true
|
||||
url: octoprint
|
||||
- grid_options:
|
||||
columns: full
|
||||
type: custom:webrtc-camera
|
||||
ui: true
|
||||
url: octoprint2
|
||||
- camera_image: camera.sparkx_i7_printer_camera
|
||||
camera_view: live
|
||||
entity: camera.sparkx_i7_printer_camera
|
||||
fit_mode: cover
|
||||
grid_options:
|
||||
columns: full
|
||||
show_name: true
|
||||
show_state: true
|
||||
type: picture-entity
|
||||
- cards:
|
||||
- grid_options:
|
||||
columns: 6
|
||||
image_entity: image.sparkx_i7_current_print_preview
|
||||
show_name: false
|
||||
type: picture
|
||||
- entity: sensor.sparkx_i7_active_filament_slot
|
||||
icon: mdi:palette
|
||||
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
|
||||
''color'') | default('''') | string %}{% set core = color | replace(''#'',
|
||||
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
|
||||
endif %}'
|
||||
multiline_secondary: true
|
||||
name: Active Color
|
||||
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
|
||||
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
|
||||
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
|
||||
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
|
||||
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
|
||||
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
|
||||
}}{% else %}Unknown{% endif %}'
|
||||
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
|
||||
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
|
||||
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
|
||||
\ 'filament') }}{% endif %}"
|
||||
type: custom:mushroom-template-card
|
||||
grid_options:
|
||||
columns: full
|
||||
type: horizontal-stack
|
||||
- entity: sensor.sparkx_i7_print_status
|
||||
grid_options:
|
||||
columns: 12
|
||||
icon: mdi:state-machine
|
||||
name: Status
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_position_z_2_decimals
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:axis-z-arrow
|
||||
name: Current Z
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_position_x
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:axis-x-arrow
|
||||
name: X
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_position_y
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:axis-y-arrow
|
||||
name: Y
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_print_status
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:message-alert-outline
|
||||
multiline_secondary: true
|
||||
name: Printer Message
|
||||
primary: '{{ states("sensor.sparkx_i7_print_status") | replace("_", " ") |
|
||||
title }}'
|
||||
secondary: '{% set err = state_attr("sensor.sparkx_i7_print_status", "err")
|
||||
or {} %}{% set code = err.get("errcode", 0) | int(0) %}{% set msg = err.get("value",
|
||||
"") %}{% if state_attr("sensor.sparkx_i7_print_status", "paused_flag") |
|
||||
default(false) %}Print paused{% elif msg %}ERROR {{ code }}: {{ msg }}{%
|
||||
elif code %}Printer error {{ code }}{% else %}No printer error{% endif %}'
|
||||
type: custom:mushroom-template-card
|
||||
- entity: sensor.sparkx_i7_print_status
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:file-document-outline
|
||||
multiline_secondary: true
|
||||
name: Current File
|
||||
primary: Current File
|
||||
secondary: '{% set file = state_attr("sensor.sparkx_i7_print_status", "file")
|
||||
or "" %}{% if file %}{{ file.split("/")[-1] | replace(".gcode", "") }}{%
|
||||
else %}No active file{% endif %}'
|
||||
type: custom:mushroom-template-card
|
||||
type: grid
|
||||
- cards:
|
||||
- heading: Print Progress
|
||||
icon: mdi:progress-clock
|
||||
type: heading
|
||||
- entity: sensor.sparkx_i7_print_progress
|
||||
grid_options:
|
||||
columns: 6
|
||||
rows: 3
|
||||
max: 100
|
||||
min: 0
|
||||
name: Progress
|
||||
severity:
|
||||
green: 0
|
||||
red: 90
|
||||
yellow: 40
|
||||
type: gauge
|
||||
unit: '%'
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:clock-start
|
||||
multiline_secondary: true
|
||||
name: Elapsed
|
||||
primary: Elapsed
|
||||
secondary: '{% set s = states(''sensor.sparkx_i7_print_job_time'') | float(0)
|
||||
%}{% set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{%
|
||||
if h %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}'
|
||||
type: custom:mushroom-template-card
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:clock-end
|
||||
multiline_secondary: true
|
||||
name: Remaining
|
||||
primary: Remaining
|
||||
secondary: '{% set s = states(''sensor.sparkx_i7_print_time_left'') | float(-1)
|
||||
%}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set
|
||||
m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{
|
||||
m }} min{% endif %}{% endif %}'
|
||||
type: custom:mushroom-template-card
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:clock-outline
|
||||
multiline_secondary: true
|
||||
primary: Est. Finish
|
||||
secondary: "{% set left = states('sensor.sparkx_i7_print_time_left') | int(0)\
|
||||
\ %}{% if left > 0 %}{{ (now() + timedelta(seconds=left)).strftime('%I:%M\
|
||||
\ %p').lstrip('0') }}{% else %}\u2014{% endif %}"
|
||||
type: custom:mushroom-template-card
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:layers
|
||||
multiline_secondary: true
|
||||
name: Layer
|
||||
primary: Layer
|
||||
secondary: '{% set c = states(''sensor.sparkx_i7_working_layer'') | int(0)
|
||||
%}{% set t = states(''sensor.sparkx_i7_total_layers'') | int(0) %}{{ c }}
|
||||
of {{ t }}'
|
||||
type: custom:mushroom-template-card
|
||||
- entity: light.sparkx_i7_light
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:lightbulb
|
||||
name: Printer Light
|
||||
type: tile
|
||||
- detail: 1
|
||||
entity: sensor.sparkx_i7_print_progress
|
||||
graph: line
|
||||
grid_options:
|
||||
columns: full
|
||||
hours_to_show: 24
|
||||
name: Progress History
|
||||
type: sensor
|
||||
- entity: number.sparkx_i7_print_tuning
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:speedometer
|
||||
name: Print Tuning
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_print_speed
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:speedometer
|
||||
name: Speed
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_real_time_flow
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:cube-send
|
||||
name: Real-Time Flow
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_flow_rate
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:chart-gantt
|
||||
name: Flow Rate
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_current_object
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:cube-outline
|
||||
name: Object
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_object_count
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:counter
|
||||
name: Object Count
|
||||
type: tile
|
||||
type: grid
|
||||
- cards:
|
||||
- heading: Temperatures
|
||||
icon: mdi:thermometer
|
||||
type: heading
|
||||
- entity: sensor.sparkx_i7_nozzle_temperature
|
||||
grid_options:
|
||||
columns: 4
|
||||
max: 300
|
||||
min: 0
|
||||
name: Nozzle
|
||||
severity:
|
||||
green: 0
|
||||
red: 240
|
||||
yellow: 180
|
||||
type: gauge
|
||||
unit: "\xB0C"
|
||||
- entity: sensor.sparkx_i7_bed_temperature
|
||||
grid_options:
|
||||
columns: 4
|
||||
max: 100
|
||||
min: 0
|
||||
name: Bed
|
||||
severity:
|
||||
green: 0
|
||||
red: 100
|
||||
yellow: 60
|
||||
type: gauge
|
||||
unit: "\xB0C"
|
||||
- entity: number.sparkx_i7_nozzle_target
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:printer-3d-nozzle
|
||||
name: Nozzle Target
|
||||
type: tile
|
||||
- entity: number.sparkx_i7_bed_target
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:radiator
|
||||
name: Bed Target
|
||||
type: tile
|
||||
- entities:
|
||||
- color: '#ef5350'
|
||||
entity: sensor.sparkx_i7_nozzle_temperature
|
||||
name: Actual
|
||||
- color: '#4caf50'
|
||||
entity: number.sparkx_i7_nozzle_target
|
||||
name: Target
|
||||
expand_legend: true
|
||||
grid_options:
|
||||
columns: full
|
||||
hours_to_show: 24
|
||||
show_names: true
|
||||
title: Nozzle Temperature
|
||||
type: history-graph
|
||||
- entities:
|
||||
- color: '#42a5f5'
|
||||
entity: sensor.sparkx_i7_bed_temperature
|
||||
name: Actual
|
||||
- color: '#4caf50'
|
||||
entity: number.sparkx_i7_bed_target
|
||||
name: Target
|
||||
expand_legend: true
|
||||
grid_options:
|
||||
columns: full
|
||||
hours_to_show: 24
|
||||
show_names: true
|
||||
title: Bed Temperature
|
||||
type: history-graph
|
||||
type: grid
|
||||
- cards:
|
||||
- heading: Controls
|
||||
icon: mdi:gesture-tap-button
|
||||
type: heading
|
||||
- entity: button.sparkx_i7_pause_print
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:pause
|
||||
name: Pause
|
||||
tap_action:
|
||||
action: perform-action
|
||||
perform_action: button.press
|
||||
target:
|
||||
entity_id: button.sparkx_i7_pause_print
|
||||
type: tile
|
||||
- entity: button.sparkx_i7_resume_print
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:play
|
||||
name: Resume
|
||||
tap_action:
|
||||
action: perform-action
|
||||
perform_action: button.press
|
||||
target:
|
||||
entity_id: button.sparkx_i7_resume_print
|
||||
type: tile
|
||||
- entity: button.sparkx_i7_reconnect
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:lan-connect
|
||||
name: Connect
|
||||
tap_action:
|
||||
action: perform-action
|
||||
perform_action: button.press
|
||||
target:
|
||||
entity_id: button.sparkx_i7_reconnect
|
||||
type: tile
|
||||
- entity: button.sparkx_i7_stop_print
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:cancel
|
||||
name: Cancel Print
|
||||
tap_action:
|
||||
action: perform-action
|
||||
perform_action: button.press
|
||||
target:
|
||||
entity_id: button.sparkx_i7_stop_print
|
||||
type: tile
|
||||
- entity: button.sparkx_i7_home_xy_then_z
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:home-circle
|
||||
name: Home
|
||||
tap_action:
|
||||
action: perform-action
|
||||
perform_action: button.press
|
||||
target:
|
||||
entity_id: button.sparkx_i7_home_xy_then_z
|
||||
type: tile
|
||||
type: grid
|
||||
- cards:
|
||||
- heading: Filament
|
||||
icon: mdi:printer-3d-nozzle-outline
|
||||
type: heading
|
||||
- entity: sensor.sparkx_i7_filament_weight_estimated
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st in
|
||||
[''printing'', ''paused''] %}mdi:printer-3d-nozzle{% else %}mdi:calendar-today{%
|
||||
endif %}'
|
||||
multiline_secondary: true
|
||||
name: Filament Used
|
||||
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
|
||||
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_filament_weight_estimated'')
|
||||
| round(1) }} g{% else %}No active job{% endif %}'
|
||||
secondary: "{% set st = states('sensor.sparkx_i7_print_status') %}{% if st\
|
||||
\ in ['printing', 'paused'] %}{{ states('sensor.sparkx_i7_used_material_length')\
|
||||
\ | round(0) }} cm this job{% else %}{{ states('sensor.sparkx_i7_filament_weight_daily')\
|
||||
\ | round(1) }} g \xB7 {{ states('sensor.sparkx_i7_filament_cost_daily')\
|
||||
\ | round(2) }} $ today{% endif %}"
|
||||
type: custom:mushroom-template-card
|
||||
- entity: input_number.sparkx_i7_filament_g_cm
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:weight-kilogram
|
||||
name: g/cm
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_used_material_length
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:counter
|
||||
multiline_secondary: true
|
||||
name: Used Length
|
||||
primary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if st
|
||||
in [''printing'', ''paused''] %}{{ states(''sensor.sparkx_i7_used_material_length'')
|
||||
| round(0) }} cm{% else %}{{ (states(''sensor.sparkx_i7_filament_weight_daily'')
|
||||
| float(0) / states(''input_number.sparkx_i7_filament_g_cm'') | float(0.0298))
|
||||
| round(0) }} cm{% endif %}'
|
||||
secondary: '{% set st = states(''sensor.sparkx_i7_print_status'') %}{% if
|
||||
st in [''printing'', ''paused''] %}this job (printer-reported){% else %}today,
|
||||
from today''s weight{% endif %}'
|
||||
type: custom:mushroom-template-card
|
||||
- entity: sensor.sparkx_i7_filament_cost
|
||||
grid_options:
|
||||
columns: 3
|
||||
icon: mdi:cash
|
||||
name: Job Cost (total)
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_filament_cost_daily
|
||||
grid_options:
|
||||
columns: 3
|
||||
icon: mdi:cash-multiple
|
||||
name: Today
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_filament_cost_weekly
|
||||
grid_options:
|
||||
columns: 3
|
||||
icon: mdi:cash-multiple
|
||||
name: This Week
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_filament_cost_monthly
|
||||
grid_options:
|
||||
columns: 3
|
||||
icon: mdi:cash-multiple
|
||||
name: This Month
|
||||
type: tile
|
||||
type: grid
|
||||
title: Print
|
||||
type: sections
|
||||
- max_columns: 2
|
||||
path: history
|
||||
sections:
|
||||
- cards:
|
||||
- heading: Temperature History
|
||||
icon: mdi:chart-line-variant
|
||||
type: heading
|
||||
- entities:
|
||||
- color: '#ef5350'
|
||||
entity: sensor.sparkx_i7_nozzle_temperature
|
||||
name: Nozzle
|
||||
- color: '#ffab91'
|
||||
entity: number.sparkx_i7_nozzle_target
|
||||
name: Nozzle Target
|
||||
- color: '#42a5f5'
|
||||
entity: sensor.sparkx_i7_bed_temperature
|
||||
name: Bed
|
||||
- color: '#90caf9'
|
||||
entity: number.sparkx_i7_bed_target
|
||||
name: Bed Target
|
||||
expand_legend: true
|
||||
grid_options:
|
||||
columns: full
|
||||
hours_to_show: 24
|
||||
show_names: true
|
||||
title: Temperatures (24h)
|
||||
type: history-graph
|
||||
- entities:
|
||||
- color: '#ef5350'
|
||||
entity: sensor.sparkx_i7_nozzle_temperature
|
||||
name: Nozzle
|
||||
- color: '#42a5f5'
|
||||
entity: sensor.sparkx_i7_bed_temperature
|
||||
name: Bed
|
||||
expand_legend: true
|
||||
grid_options:
|
||||
columns: full
|
||||
hours_to_show: 168
|
||||
show_names: true
|
||||
title: Temperatures (7 days)
|
||||
type: history-graph
|
||||
type: grid
|
||||
- cards:
|
||||
- heading: Print Activity
|
||||
icon: mdi:chart-box-outline
|
||||
type: heading
|
||||
- apex_config:
|
||||
chart:
|
||||
height: 300
|
||||
stroke:
|
||||
width: 1
|
||||
graph_span: 24h
|
||||
grid_options:
|
||||
columns: full
|
||||
header:
|
||||
colorize_states: true
|
||||
show: true
|
||||
show_states: true
|
||||
title: Z Position (24h)
|
||||
series:
|
||||
- color: '#ab47bc'
|
||||
curve: straight
|
||||
entity: sensor.sparkx_i7_position_z
|
||||
fill_raw: last
|
||||
name: Current Z
|
||||
type: line
|
||||
type: custom:apexcharts-card
|
||||
- entities:
|
||||
- color: '#66bb6a'
|
||||
entity: sensor.sparkx_i7_print_progress
|
||||
name: Progress
|
||||
grid_options:
|
||||
columns: full
|
||||
hours_to_show: 24
|
||||
show_names: true
|
||||
title: Print Progress (24h)
|
||||
type: history-graph
|
||||
- entities:
|
||||
- color: '#26c6da'
|
||||
entity: sensor.sparkx_i7_print_job_time
|
||||
name: Elapsed
|
||||
- color: '#ffa726'
|
||||
entity: sensor.sparkx_i7_print_time_left
|
||||
name: Remaining
|
||||
grid_options:
|
||||
columns: full
|
||||
hours_to_show: 24
|
||||
show_names: true
|
||||
title: Print Duration (24h)
|
||||
type: history-graph
|
||||
type: grid
|
||||
title: History
|
||||
type: sections
|
||||
- icon: mdi:printer-3d-nozzle-outline
|
||||
max_columns: 4
|
||||
path: cfs-fans
|
||||
sections:
|
||||
- cards:
|
||||
- heading: CFS Box 1
|
||||
icon: mdi:file-cabinet
|
||||
type: heading
|
||||
- entity: sensor.sparkx_i7_cfs_box_1_temperature
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:thermometer
|
||||
name: Temperature
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_cfs_box_1_humidity
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:water-percent
|
||||
name: Humidity
|
||||
type: tile
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:printer-3d-nozzle
|
||||
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_1_color'')|default('''')|string
|
||||
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
|
||||
}}{% endif %}'
|
||||
multiline_secondary: true
|
||||
name: Slot 1
|
||||
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_1_filament'') }}'
|
||||
secondary: "{% set col = states('sensor.sparkx_i7_slot_1_color_name') %}{%\
|
||||
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_1_remaining')\
|
||||
\ }}% left"
|
||||
type: custom:mushroom-template-card
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:printer-3d-nozzle
|
||||
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_2_color'')|default('''')|string
|
||||
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
|
||||
}}{% endif %}'
|
||||
multiline_secondary: true
|
||||
name: Slot 2
|
||||
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_2_filament'') }}'
|
||||
secondary: "{% set col = states('sensor.sparkx_i7_slot_2_color_name') %}{%\
|
||||
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_2_remaining')\
|
||||
\ }}% left"
|
||||
type: custom:mushroom-template-card
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:printer-3d-nozzle
|
||||
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_3_color'')|default('''')|string
|
||||
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
|
||||
}}{% endif %}'
|
||||
multiline_secondary: true
|
||||
name: Slot 3
|
||||
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_3_filament'') }}'
|
||||
secondary: "{% set col = states('sensor.sparkx_i7_slot_3_color_name') %}{%\
|
||||
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_3_remaining')\
|
||||
\ }}% left"
|
||||
type: custom:mushroom-template-card
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:printer-3d-nozzle
|
||||
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_4_color'')|default('''')|string
|
||||
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
|
||||
}}{% endif %}'
|
||||
multiline_secondary: true
|
||||
name: Slot 4
|
||||
primary: '{{ states(''sensor.sparkx_i7_cfs_box_1_slot_4_filament'') }}'
|
||||
secondary: "{% set col = states('sensor.sparkx_i7_slot_4_color_name') %}{%\
|
||||
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_box_1_slot_4_remaining')\
|
||||
\ }}% left"
|
||||
type: custom:mushroom-template-card
|
||||
type: grid
|
||||
- cards:
|
||||
- heading: External / Active
|
||||
icon: mdi:printer-3d
|
||||
type: heading
|
||||
- cards:
|
||||
- entity: sensor.sparkx_i7_active_filament_slot
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:swap-horizontal
|
||||
name: Active Slot
|
||||
type: tile
|
||||
- entity: sensor.sparkx_i7_active_filament_slot
|
||||
icon: mdi:palette
|
||||
icon_color: '{% set color = state_attr(''sensor.sparkx_i7_active_filament_slot'',
|
||||
''color'') | default('''') | string %}{% set core = color | replace(''#'',
|
||||
'''') %}{% if core | length >= 6 %}#{{ core[-6:] }}{% else %}var(--primary-text-color){%
|
||||
endif %}'
|
||||
multiline_secondary: true
|
||||
name: Active Color
|
||||
primary: '{% set slot = states(''sensor.sparkx_i7_active_filament_slot'')
|
||||
%}{% if ''Slot 1'' in slot %}{{ states(''sensor.sparkx_i7_slot_1_color_name'')
|
||||
}}{% elif ''Slot 2'' in slot %}{{ states(''sensor.sparkx_i7_slot_2_color_name'')
|
||||
}}{% elif ''Slot 3'' in slot %}{{ states(''sensor.sparkx_i7_slot_3_color_name'')
|
||||
}}{% elif ''Slot 4'' in slot %}{{ states(''sensor.sparkx_i7_slot_4_color_name'')
|
||||
}}{% elif slot == ''External'' %}{{ states(''sensor.sparkx_i7_external_color_name'')
|
||||
}}{% else %}Unknown{% endif %}'
|
||||
secondary: "{% set slot = states('sensor.sparkx_i7_active_filament_slot')\
|
||||
\ %}{{ slot }}{% if state_attr('sensor.sparkx_i7_active_filament_slot',\
|
||||
\ 'filament') %} \xB7 {{ state_attr('sensor.sparkx_i7_active_filament_slot',\
|
||||
\ 'filament') }}{% endif %}"
|
||||
type: custom:mushroom-template-card
|
||||
grid_options:
|
||||
columns: full
|
||||
type: horizontal-stack
|
||||
- grid_options:
|
||||
columns: 6
|
||||
icon: mdi:lan-outline
|
||||
icon_color: '{% set c = states(''sensor.sparkx_i7_cfs_external_color'')|default('''')|string
|
||||
%}{% set core = c|replace(''#'','''') %}{% if core|length >= 6 %}#{{ core[-6:]
|
||||
}}{% endif %}'
|
||||
multiline_secondary: true
|
||||
name: External Filament
|
||||
primary: '{{ states(''sensor.sparkx_i7_cfs_external_filament'') }}'
|
||||
secondary: "{% set col = states('sensor.sparkx_i7_external_color_name') %}{%\
|
||||
\ if col %}{{ col }} \xB7 {% endif %}{{ states('sensor.sparkx_i7_cfs_external_remaining')\
|
||||
\ }}% left"
|
||||
type: custom:mushroom-template-card
|
||||
- entity: sensor.sparkx_i7_filament_status
|
||||
grid_options:
|
||||
columns: 6
|
||||
icon: mdi:printer-3d-nozzle-alert
|
||||
name: Filament Status
|
||||
type: tile
|
||||
type: grid
|
||||
- cards:
|
||||
- heading: Fans
|
||||
icon: mdi:fan
|
||||
type: heading
|
||||
- entity: fan.sparkx_i7_model_fan
|
||||
features:
|
||||
- type: fan-speed
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:fan
|
||||
name: Model Fan
|
||||
type: tile
|
||||
- entity: fan.sparkx_i7_case_fan
|
||||
features:
|
||||
- type: fan-speed
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:fan
|
||||
name: Case Fan
|
||||
type: tile
|
||||
- entity: fan.sparkx_i7_side_fan
|
||||
features:
|
||||
- type: fan-speed
|
||||
grid_options:
|
||||
columns: 4
|
||||
icon: mdi:fan
|
||||
name: Side Fan
|
||||
type: tile
|
||||
type: grid
|
||||
title: CFS / Fans
|
||||
type: sections
|
||||
File diff suppressed because one or more lines are too long
@@ -912,6 +912,349 @@
|
||||
],
|
||||
"title": "CFS / Fans",
|
||||
"type": "sections"
|
||||
},
|
||||
{
|
||||
"title": "Spoolman",
|
||||
"path": "spoolman",
|
||||
"icon": "mdi:package-variant-closed",
|
||||
"type": "sections",
|
||||
"max_columns": 4,
|
||||
"sections": [
|
||||
{
|
||||
"type": "grid",
|
||||
"cards": [
|
||||
{
|
||||
"type": "heading",
|
||||
"heading": "Overture Black ABS (Spool 1)",
|
||||
"icon": "mdi:spool"
|
||||
},
|
||||
{
|
||||
"type": "gauge",
|
||||
"entity": "sensor.spoolman_spool_1",
|
||||
"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_1_color_hex",
|
||||
"name": "Color",
|
||||
"icon": "mdi:palette",
|
||||
"icon_color": "{% set c = states('sensor.spoolman_spool_1_color_hex')|replace('#','')|lower %}{% if c|length == 6 %}#{{ c }}{% else %}var(--primary-text-color){% endif %}",
|
||||
"primary": "{{ states('sensor.spoolman_spool_1_color_hex') }}",
|
||||
"secondary": "{{ states('sensor.spoolman_spool_1_filament_name') }} · {{ states('sensor.spoolman_spool_1_material') }}",
|
||||
"multiline_secondary": true,
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_used_weight",
|
||||
"name": "Used Weight",
|
||||
"icon": "mdi:scale-balance",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_used_percentage",
|
||||
"name": "Used %",
|
||||
"icon": "mdi:chart-donut",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_remaining_length",
|
||||
"name": "Remaining Length",
|
||||
"icon": "mdi:ruler",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_used_length",
|
||||
"name": "Used Length",
|
||||
"icon": "mdi:ruler-square",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_spool_weight",
|
||||
"name": "Empty Spool Weight",
|
||||
"icon": "mdi:scale",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_filament_weight",
|
||||
"name": "Full Spool Weight",
|
||||
"icon": "mdi:weight-kilogram",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_vendor",
|
||||
"name": "Vendor",
|
||||
"icon": "mdi:factory",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_material",
|
||||
"name": "Material",
|
||||
"icon": "mdi:layers-triple",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_diameter",
|
||||
"name": "Diameter",
|
||||
"icon": "mdi:circle-outline",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_density",
|
||||
"name": "Density",
|
||||
"icon": "mdi:weight-gram",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_filament_name",
|
||||
"name": "Filament Name",
|
||||
"icon": "mdi:tag-outline",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "select.spoolman_spool_1_location",
|
||||
"name": "Location",
|
||||
"icon": "mdi:map-marker-outline",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_estimated_runout",
|
||||
"name": "Est. Runout",
|
||||
"icon": "mdi:calendar-alert",
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_registered",
|
||||
"name": "Registered",
|
||||
"icon": "mdi:calendar-check-outline",
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "binary_sensor.spoolman_spool_1_low_filament",
|
||||
"name": "Low Filament",
|
||||
"icon": "mdi:alert-circle-outline",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_flow_rate",
|
||||
"name": "Flow Rate",
|
||||
"icon": "mdi:progress-clock",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1_id",
|
||||
"name": "Spool ID",
|
||||
"icon": "mdi:identifier",
|
||||
"grid_options": {
|
||||
"columns": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "markdown",
|
||||
"content": "**Spoolman UI:** [http://2c829f0e-spoolman.local.hass.io:7912](http://2c829f0e-spoolman.local.hass.io:7912)\n\n**Changing filaments:** 1. Set the slot color in the CFS app. 2. Create the spool in Spoolman with a matching color hex. No Home Assistant changes needed — new spools appear here automatically.",
|
||||
"grid_options": {
|
||||
"columns": "full"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "grid",
|
||||
"cards": [
|
||||
{
|
||||
"type": "heading",
|
||||
"heading": "Adjust Remaining",
|
||||
"icon": "mdi:pencil-outline"
|
||||
},
|
||||
{
|
||||
"type": "entities",
|
||||
"title": "Set value (g)",
|
||||
"show_header_toggle": false,
|
||||
"entities": [
|
||||
"input_number.spoolman_set_remaining"
|
||||
],
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.spoolman_spool_1",
|
||||
"name": "Apply to Spool 1",
|
||||
"icon": "mdi:content-save-outline",
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
},
|
||||
"tap_action": {
|
||||
"action": "perform-action",
|
||||
"perform_action": "script.spoolman_set_spool_remaining",
|
||||
"data": {
|
||||
"spool_id": 1
|
||||
},
|
||||
"confirmation": {
|
||||
"text": "Overwrite Spool 1 remaining weight in Spoolman?"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "markdown",
|
||||
"content": "1. Type the new remaining grams above. 2. Tap **Apply to Spool 1**. The value is **absolute** — it replaces Spoolman's remaining weight, and print deductions continue from there. Wait for a running print to finish before adjusting.",
|
||||
"grid_options": {
|
||||
"columns": "full"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "grid",
|
||||
"cards": [
|
||||
{
|
||||
"type": "heading",
|
||||
"heading": "Print Linkage",
|
||||
"icon": "mdi:printer-3d-nozzle"
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "input_text.sparkx_i7_print_spool_latch",
|
||||
"name": "Latched Spool ID",
|
||||
"icon": "mdi:link-variant",
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "sensor.sparkx_i7_filament_weight_estimated",
|
||||
"name": "Current Job Weight",
|
||||
"icon": "mdi:weight-gram",
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "automation.sparkx_i7_latch_print_spool_for_spoolman",
|
||||
"name": "Latch Automation",
|
||||
"icon": "mdi:link",
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "tile",
|
||||
"entity": "automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete",
|
||||
"name": "Deduct Automation",
|
||||
"icon": "mdi:minus-circle-outline",
|
||||
"grid_options": {
|
||||
"columns": 6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "custom:mushroom-template-card",
|
||||
"name": "Next Deduction Match",
|
||||
"icon": "mdi:magnet",
|
||||
"icon_color": "mdi:link",
|
||||
"primary": "{{ states('sensor.sparkx_i7_active_filament_slot') }}",
|
||||
"secondary": "{% set slot = states('sensor.sparkx_i7_active_filament_slot') %}{% set ce = 'sensor.sparkx_i7_cfs_' ~ (slot|lower|replace(' ','_')) ~ '_color' %}{% set color = states(ce)|replace('#','')|lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e)|lower) == color %}{% set ns.id = states(e[:-10] ~ '_id') %}{% endif %}{% endfor %}{% if ns.id %}Color #{{ color }} → deducts from spool {{ ns.id }} ({% set fn = 'sensor.spoolman_spool_' ~ ns.id ~ '_filament_name' %}{{ states(fn) }}){% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}Color #{{ color }} — no matching spool{% endif %}",
|
||||
"multiline_secondary": true,
|
||||
"grid_options": {
|
||||
"columns": "full"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "grid",
|
||||
"cards": [
|
||||
{
|
||||
"type": "heading",
|
||||
"heading": "Spool History",
|
||||
"icon": "mdi:history"
|
||||
},
|
||||
{
|
||||
"type": "history-graph",
|
||||
"title": "Remaining & Used (7 days)",
|
||||
"hours_to_show": 168,
|
||||
"show_names": true,
|
||||
"entities": [
|
||||
{
|
||||
"entity": "sensor.spoolman_spool_1",
|
||||
"name": "Remaining"
|
||||
},
|
||||
{
|
||||
"entity": "sensor.spoolman_spool_1_used_weight",
|
||||
"name": "Used"
|
||||
}
|
||||
],
|
||||
"grid_options": {
|
||||
"columns": "full"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user