3 files
This commit is contained in:
1 parent
c181946323
commit
c85606c96e
3 files changed
+368
-83
No files matched your search
+196
-83
@@ -4388,9 +4388,9 @@
|
||||
alias: SparkX i7 - Deduct filament in Spoolman on print complete
|
||||
description: On print completion, deducts the final segment (used_material_length
|
||||
delta since last checkpoint x g/cm) from the Spoolman spool in the CFS Lite location
|
||||
matching the latched slot color (remaining weight > 0 guard), accumulates it per
|
||||
slot, then sends a summary notification with total and per-slot breakdown whenever
|
||||
anything was deducted. Silent when total is 0. Clears the latch and re-baselines
|
||||
matching the latched slot's CFS Lite location (remaining weight > 0 guard), accumulates
|
||||
it per slot, then sends a summary notification with total and per-slot breakdown
|
||||
whenever anything was deducted. Silent when total is 0. Clears the latch and re-baselines
|
||||
the checkpoint.
|
||||
triggers:
|
||||
- trigger: state
|
||||
@@ -4426,8 +4426,8 @@
|
||||
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
|
||||
- variables:
|
||||
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
|
||||
%}{% if e.endswith(''_color_hex'') and (state_attr(e[:-10], ''location'') |
|
||||
default('''', true) | lower) == (''cfs lite '' ~ old_slot.split(''_'')[-1])
|
||||
%}{% if e.endswith(''_color_hex'') and (state_attr(e[:-10], ''location'')
|
||||
| default('''', true) | lower) == (''cfs lite '' ~ old_slot.split(''_'')[-1])
|
||||
%}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == ''''
|
||||
%}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{% endif %}{% endfor %}{{
|
||||
ns.id }}'
|
||||
@@ -4464,28 +4464,28 @@
|
||||
default:
|
||||
- action: notify.persistent_notification
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
title: 'Spoolman: no spool for the latched slot'
|
||||
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
|
||||
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
|
||||
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
|
||||
with remaining weight matches that color. Register the new roll in Spoolman
|
||||
with location CFS Lite, then adjust manually if needed.'
|
||||
upper }}) could not be deducted - no Spoolman spool with remaining weight
|
||||
is in that slot''s CFS Lite location. Register the new roll in Spoolman
|
||||
in that location, then adjust manually if needed.'
|
||||
- action: notify.mobile_app_francos_ipad
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
title: 'Spoolman: no spool for the latched slot'
|
||||
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
|
||||
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
|
||||
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
|
||||
with remaining weight matches that color. Register the new roll in Spoolman
|
||||
with location CFS Lite, then adjust manually if needed.'
|
||||
upper }}) could not be deducted - no Spoolman spool with remaining weight
|
||||
is in that slot''s CFS Lite location. Register the new roll in Spoolman
|
||||
in that location, then adjust manually if needed.'
|
||||
- action: notify.mobile_app_sm_f956w
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
title: 'Spoolman: no spool for the latched slot'
|
||||
message: 'Print {{ outcome }}: final segment of {{ final_grams }} g from
|
||||
{{ old_slot if old_slot else ''the active slot'' }} (color #{{ color |
|
||||
upper }}) could not be deducted - no Spoolman spool in the CFS Lite location
|
||||
with remaining weight matches that color. Register the new roll in Spoolman
|
||||
with location CFS Lite, then adjust manually if needed.'
|
||||
upper }}) could not be deducted - no Spoolman spool with remaining weight
|
||||
is in that slot''s CFS Lite location. Register the new roll in Spoolman
|
||||
in that location, then adjust manually if needed.'
|
||||
- variables:
|
||||
summary_total: '{% set ns = namespace(t = 0) %}{% for n in [''1'', ''2'', ''3'',
|
||||
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
|
||||
@@ -4615,8 +4615,8 @@
|
||||
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
|
||||
%}{% if e.endswith(''_color_hex'') and (state_attr(e[:-10], ''location'')
|
||||
| default('''', true) | lower) == (''cfs lite '' ~ old_slot.split(''_'')[-1])
|
||||
%}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id ==
|
||||
'''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{% endif %}{% endfor
|
||||
%}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == ''''
|
||||
%}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{% endif %}{% endfor
|
||||
%}{{ ns.id }}'
|
||||
- if:
|
||||
condition: template
|
||||
@@ -4772,106 +4772,219 @@
|
||||
target:
|
||||
entity_id: notify.franco
|
||||
mode: single
|
||||
|
||||
- id: '1791477238799'
|
||||
alias: SparkX i7 - Filament sufficiency check at print start
|
||||
description: >-
|
||||
When a print starts and stays printing for 45 s, reports how much filament the
|
||||
job needs, how much has already been used and how much is left, then compares
|
||||
description: When a print starts and stays printing for 45 s, reports how much filament
|
||||
the job needs, how much has already been used and how much is left, then compares
|
||||
the loaded CFS Lite spools against that. A single-colour job whose colour is in
|
||||
a loaded slot is checked exactly against that slot's spool; otherwise the
|
||||
slicer gives no per-colour figure, so each loaded spool is compared against the
|
||||
whole job total. Always sends a notification.
|
||||
a loaded slot is checked exactly against that slot's spool; otherwise the slicer
|
||||
gives no per-colour figure, so each loaded spool is compared against the whole
|
||||
job total. Always sends a notification.
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id: sensor.sparkx_i7_print_status
|
||||
to: printing
|
||||
for: '00:00:45'
|
||||
for: 00:00:45
|
||||
conditions: []
|
||||
actions:
|
||||
- variables:
|
||||
gcm: "{{ states('input_number.sparkx_i7_filament_g_cm') | float(0.0298) }}"
|
||||
length_cm: "{{ states('sensor.sparkx_i7_expected_material_length') | float(0) }}"
|
||||
weight_g: "{{ states('sensor.sparkx_i7_expected_material_weight') | float(0) }}"
|
||||
job_g: "{{ ((weight_g | float) if (weight_g | float) > 0 else (length_cm | float) * (gcm | float)) | round(1) }}"
|
||||
used_len: "{{ states('sensor.sparkx_i7_used_material_length') | float(0) }}"
|
||||
used_g: "{{ (((used_len | float) * (gcm | float)) | round(1)) }}"
|
||||
gcode_file: "{{ state_attr('sensor.sparkx_i7_expected_material_length', 'gcode_file') | default('', true) }}"
|
||||
gcm: '{{ states(''input_number.sparkx_i7_filament_g_cm'') | float(0.0298) }}'
|
||||
length_cm: '{{ states(''sensor.sparkx_i7_expected_material_length'') | float(0)
|
||||
}}'
|
||||
weight_g: '{{ states(''sensor.sparkx_i7_expected_material_weight'') | float(0)
|
||||
}}'
|
||||
job_g: '{{ ((weight_g | float) if (weight_g | float) > 0 else (length_cm | float)
|
||||
* (gcm | float)) | round(1) }}'
|
||||
used_len: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
|
||||
used_g: '{{ (((used_len | float) * (gcm | float)) | round(1)) }}'
|
||||
gcode_file: '{{ state_attr(''sensor.sparkx_i7_expected_material_length'', ''gcode_file'')
|
||||
| default('''', true) }}'
|
||||
- variables:
|
||||
report: |-
|
||||
{% set cols = namespace(list=[]) %}
|
||||
{% for n in ['1','2','3','4'] %}{% set cc = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_color') | replace('#','') | lower %}{% if cc not in ['','none','unknown','unavailable'] %}{% set cols.list = cols.list + [cc] %}{% endif %}{% endfor %}
|
||||
report: '{% set cols = namespace(list=[]) %}
|
||||
|
||||
{% for n in [''1'',''2'',''3'',''4''] %}{% set cc = states(''sensor.sparkx_i7_cfs_box_1_slot_''
|
||||
~ n ~ ''_color'') | replace(''#'','''') | lower %}{% if cc not in ['''',''none'',''unknown'',''unavailable'']
|
||||
%}{% set cols.list = cols.list + [cc] %}{% endif %}{% endfor %}
|
||||
|
||||
{% set gc = namespace(list=[]) %}
|
||||
{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','color') | default('', true) | string).split(';') %}{% set q = p | replace('#','') | lower | trim %}{% if q not in ['','none','unknown','unavailable'] %}{% set gc.list = gc.list + [q] %}{% endif %}{% endfor %}
|
||||
|
||||
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''color'')
|
||||
| default('''', true) | string).split('';'') %}{% set q = p | replace(''#'','''')
|
||||
| lower | trim %}{% if q not in ['''',''none'',''unknown'',''unavailable'']
|
||||
%}{% set gc.list = gc.list + [q] %}{% endif %}{% endfor %}
|
||||
|
||||
{% set mc = namespace(list=[]) %}
|
||||
{% for p in (state_attr('sensor.sparkx_i7_expected_material_length','material') | default('', true) | string).split(';') %}{% set q = p | trim %}{% if q not in ['','none','unknown','unavailable'] %}{% set mc.list = mc.list + [q] %}{% endif %}{% endfor %}
|
||||
|
||||
{% for p in (state_attr(''sensor.sparkx_i7_expected_material_length'',''material'')
|
||||
| default('''', true) | string).split('';'') %}{% set q = p | trim %}{% if
|
||||
q not in ['''',''none'',''unknown'',''unavailable''] %}{% set mc.list = mc.list
|
||||
+ [q] %}{% endif %}{% endfor %}
|
||||
|
||||
{% set single = (gc.list | length) == 1 %}
|
||||
{% set gcol = gc.list[0] if single else '' %}
|
||||
{% set aslot = (states('sensor.sparkx_i7_active_filament_slot') | default('', true) | string).split('_')[-1] %}
|
||||
{% set aslot = aslot if aslot in ['1','2','3','4'] else '' %}
|
||||
{% set rem_g = ([((job_g | float) - (used_g | float)), 0] | max) | round(1) %}
|
||||
{% set ns = namespace(cover=[], below=[], short=[], ok=[], missing=[], loaded=[], match_label='', match_rem=0) %}
|
||||
{% for n in ['1','2','3','4'] %}
|
||||
{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_color') | replace('#','') | lower %}
|
||||
{% if c not in ['','none','unknown','unavailable'] %}
|
||||
{% set cname = states('sensor.sparkx_i7_slot_' ~ n ~ '_color_name') %}
|
||||
{% set flabel = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_filament') %}
|
||||
{% set label = 'Slot ' ~ n ~ ' ' ~ (cname if cname not in ['','unknown','unavailable'] else (flabel if flabel not in ['','unknown','unavailable'] else ('#' ~ (c | upper)))) %}
|
||||
{% set sp = namespace(id='', rem=0, fw=0) %}
|
||||
{% for e in integration_entities('spoolman') if e.endswith('_color_hex') %}
|
||||
{% if sp.id == '' and (state_attr(e[:-10],'location') | default('', true) | lower) == ('cfs lite ' ~ n) %}
|
||||
|
||||
{% set gcol = gc.list[0] if single else '''' %}
|
||||
|
||||
{% set aslot = (states(''sensor.sparkx_i7_active_filament_slot'') | default('''',
|
||||
true) | string).split(''_'')[-1] %}
|
||||
|
||||
{% set aslot = aslot if aslot in [''1'',''2'',''3'',''4''] else '''' %}
|
||||
|
||||
{% set rem_g = ([((job_g | float) - (used_g | float)), 0] | max) | round(1)
|
||||
%}
|
||||
|
||||
{% set ns = namespace(cover=[], below=[], short=[], ok=[], missing=[], loaded=[],
|
||||
match_label='''', match_rem=0) %}
|
||||
|
||||
{% for n in [''1'',''2'',''3'',''4''] %}
|
||||
|
||||
{% set c = states(''sensor.sparkx_i7_cfs_box_1_slot_'' ~ n ~ ''_color'') |
|
||||
replace(''#'','''') | lower %}
|
||||
|
||||
{% if c not in ['''',''none'',''unknown'',''unavailable''] %}
|
||||
|
||||
{% set cname = states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') %}
|
||||
|
||||
{% set flabel = states(''sensor.sparkx_i7_cfs_box_1_slot_'' ~ n ~ ''_filament'')
|
||||
%}
|
||||
|
||||
{% set label = ''Slot '' ~ n ~ '' '' ~ (cname if cname not in ['''',''unknown'',''unavailable'']
|
||||
else (flabel if flabel not in ['''',''unknown'',''unavailable''] else (''#''
|
||||
~ (c | upper)))) %}
|
||||
|
||||
{% set sp = namespace(id='''', rem=0, fw=0) %}
|
||||
|
||||
{% for e in integration_entities(''spoolman'') if e.endswith(''_color_hex'')
|
||||
%}
|
||||
|
||||
{% if sp.id == '''' and (state_attr(e[:-10],''location'') | default('''',
|
||||
true) | lower) == (''cfs lite '' ~ n) %}
|
||||
|
||||
{% set sp.id = e[:-10] %}
|
||||
|
||||
{% set sp.rem = states(e[:-10]) | float(0) %}
|
||||
{% set sp.fw = state_attr(e[:-10],'filament_weight') | float(0) %}
|
||||
|
||||
{% set sp.fw = state_attr(e[:-10],''filament_weight'') | float(0) %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
{% set pct = ((((sp.rem | float) / (sp.fw | float)) * 100) | round(0) | int) if (sp.fw | float) > 0 else 0 %}
|
||||
{% if sp.id != '' %}{% set ns.loaded = ns.loaded + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%)'] %}{% endif %}
|
||||
{% if sp.id != '' and single and n == aslot %}{% set ns.match_label = label %}{% set ns.match_rem = sp.rem %}{% endif %}
|
||||
{% if sp.id != '' %}
|
||||
|
||||
{% set pct = ((((sp.rem | float) / (sp.fw | float)) * 100) | round(0) | int)
|
||||
if (sp.fw | float) > 0 else 0 %}
|
||||
|
||||
{% if sp.id != '''' %}{% set ns.loaded = ns.loaded + [label ~ '': '' ~ (sp.rem
|
||||
| round(1)) ~ '' g ('' ~ pct ~ ''%)''] %}{% endif %}
|
||||
|
||||
{% if sp.id != '''' and single and n == aslot %}{% set ns.match_label = label
|
||||
%}{% set ns.match_rem = sp.rem %}{% endif %}
|
||||
|
||||
{% if sp.id != '''' %}
|
||||
|
||||
{% if single and n == aslot %}
|
||||
{% if (sp.rem | float) < (job_g | float) %}{% set ns.short = ns.short + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, ' ~ job_g ~ ' g needed'] %}
|
||||
{% else %}{% set ns.ok = ns.ok + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, ' ~ job_g ~ ' g needed'] %}{% endif %}
|
||||
|
||||
{% if (sp.rem | float) < (job_g | float) %}{% set ns.short = ns.short + [label
|
||||
~ '': '' ~ (sp.rem | round(1)) ~ '' g ('' ~ pct ~ ''%) left, '' ~ job_g ~
|
||||
'' g needed''] %}
|
||||
|
||||
{% else %}{% set ns.ok = ns.ok + [label ~ '': '' ~ (sp.rem | round(1)) ~ ''
|
||||
g ('' ~ pct ~ ''%) left, '' ~ job_g ~ '' g needed''] %}{% endif %}
|
||||
|
||||
{% elif single %}
|
||||
{% if (sp.rem | float) >= (job_g | float) %}{% set ns.cover = ns.cover + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%)'] %}
|
||||
{% else %}{% set ns.below = ns.below + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%)'] %}{% endif %}
|
||||
|
||||
{% if (sp.rem | float) >= (job_g | float) %}{% set ns.cover = ns.cover + [label
|
||||
~ '': '' ~ (sp.rem | round(1)) ~ '' g ('' ~ pct ~ ''%)''] %}
|
||||
|
||||
{% else %}{% set ns.below = ns.below + [label ~ '': '' ~ (sp.rem | round(1))
|
||||
~ '' g ('' ~ pct ~ ''%)''] %}{% endif %}
|
||||
|
||||
{% else %}
|
||||
{% if (sp.rem | float) < (job_g | float) %}{% set ns.short = ns.short + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, up to ' ~ job_g ~ ' g needed'] %}
|
||||
{% else %}{% set ns.ok = ns.ok + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, up to ' ~ job_g ~ ' g needed'] %}{% endif %}
|
||||
|
||||
{% if (sp.rem | float) < (job_g | float) %}{% set ns.short = ns.short + [label
|
||||
~ '': '' ~ (sp.rem | round(1)) ~ '' g ('' ~ pct ~ ''%) left, up to '' ~ job_g
|
||||
~ '' g needed''] %}
|
||||
|
||||
{% else %}{% set ns.ok = ns.ok + [label ~ '': '' ~ (sp.rem | round(1)) ~ ''
|
||||
g ('' ~ pct ~ ''%) left, up to '' ~ job_g ~ '' g needed''] %}{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% elif job_g > 0 %}
|
||||
{% set ns.missing = ns.missing + [label ~ ' (#' ~ (c | upper) ~ ')'] %}
|
||||
|
||||
{% set ns.missing = ns.missing + [label ~ '' (#'' ~ (c | upper) ~ '')''] %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
{% endfor %}
|
||||
Job: {{ gcode_file if gcode_file not in ['','unknown','unavailable'] else (state_attr('sensor.sparkx_i7_print_status','file') | default('', true) | string).split('/')[-1] }}
|
||||
Needs {{ job_g | round(1) }} g ({{ length_cm | round(1) }} cm) · used {{ used_g }} g · {{ rem_g }} g left to print
|
||||
Slicer: {{ (mc.list | join(', ')) if mc.list else 'material unknown' }} · {{ ('single colour #' ~ (gcol | upper)) if single else ((gc.list | length) ~ ' colours') }}
|
||||
{% if job_g <= 0 %}Cannot verify: slicer filament estimate not available yet.{% if ns.loaded %}
|
||||
|
||||
Job: {{ gcode_file if gcode_file not in ['''',''unknown'',''unavailable'']
|
||||
else (state_attr(''sensor.sparkx_i7_print_status'',''file'') | default('''',
|
||||
true) | string).split(''/'')[-1] }}
|
||||
|
||||
Needs {{ job_g | round(1) }} g ({{ length_cm | round(1) }} cm) · used {{ used_g
|
||||
}} g · {{ rem_g }} g left to print
|
||||
|
||||
Slicer: {{ (mc.list | join('', '')) if mc.list else ''material unknown'' }}
|
||||
· {{ (''single colour #'' ~ (gcol | upper)) if single else ((gc.list | length)
|
||||
~ '' colours'') }}
|
||||
|
||||
{% if job_g <= 0 %}Cannot verify: slicer filament estimate not available yet.{%
|
||||
if ns.loaded %}
|
||||
|
||||
Loaded:
|
||||
- {{ ns.loaded | join('\n- ') }}{% endif %}
|
||||
{% elif single and aslot != '' %}
|
||||
|
||||
- {{ ns.loaded | join(''\n- '') }}{% endif %}
|
||||
|
||||
{% elif single and aslot != '''' %}
|
||||
|
||||
{% if ns.short %}NOT ENOUGH filament:
|
||||
- {{ ns.short | join('\n- ') }}
|
||||
{% elif ns.match_label %}Enough filament: {{ ns.match_label }}: {{ ns.match_rem | round(1) }} g left, {{ job_g }} g needed.
|
||||
{% else %}Active slot {{ aslot }} has no Spoolman spool at CFS Lite, so remaining cannot be checked.{% endif %}
|
||||
{% elif single %}No exact colour match for the print colour #{{ gcol | upper }} in a loaded CFS slot, so the exact spool cannot be identified.{% if ns.cover %}
|
||||
|
||||
- {{ ns.short | join(''\n- '') }}
|
||||
|
||||
{% elif ns.match_label %}Enough filament: {{ ns.match_label }}: {{ ns.match_rem
|
||||
| round(1) }} g left, {{ job_g }} g needed.
|
||||
|
||||
{% else %}Active slot {{ aslot }} has no Spoolman spool at CFS Lite, so remaining
|
||||
cannot be checked.{% endif %}
|
||||
|
||||
{% elif single %}No exact colour match for the print colour #{{ gcol | upper
|
||||
}} in a loaded CFS slot, so the exact spool cannot be identified.{% if ns.cover
|
||||
%}
|
||||
|
||||
Would cover {{ job_g }} g:
|
||||
- {{ ns.cover | join('\n- ') }}{% endif %}{% if ns.below %}
|
||||
|
||||
- {{ ns.cover | join(''\n- '') }}{% endif %}{% if ns.below %}
|
||||
|
||||
Below {{ job_g }} g:
|
||||
- {{ ns.below | join('\n- ') }}{% endif %}{% if not ns.cover and not ns.below %}
|
||||
|
||||
- {{ ns.below | join(''\n- '') }}{% endif %}{% if not ns.cover and not ns.below
|
||||
%}
|
||||
|
||||
No loaded CFS slot has a matching Spoolman spool to compare.{% endif %}
|
||||
|
||||
{% elif ns.short %}NOT ENOUGH filament - possible shortfall:
|
||||
- {{ ns.short | join('\n- ') }}{% if ns.ok %}
|
||||
|
||||
- {{ ns.short | join(''\n- '') }}{% if ns.ok %}
|
||||
|
||||
OK (would still cover the whole job):
|
||||
- {{ ns.ok | join('\n- ') }}{% endif %}{% if ns.missing %}
|
||||
|
||||
- {{ ns.ok | join(''\n- '') }}{% endif %}{% if ns.missing %}
|
||||
|
||||
No Spoolman spool matched for:
|
||||
- {{ ns.missing | join('\n- ') }}{% endif %}
|
||||
|
||||
- {{ ns.missing | join(''\n- '') }}{% endif %}
|
||||
|
||||
{% elif ns.ok %}Enough filament:
|
||||
- {{ ns.ok | join('\n- ') }}{% if ns.missing %}
|
||||
|
||||
- {{ ns.ok | join(''\n- '') }}{% if ns.missing %}
|
||||
|
||||
No Spoolman spool matched for:
|
||||
- {{ ns.missing | join('\n- ') }}{% endif %}
|
||||
{% elif ns.missing %}Could not match any loaded CFS slot to a Spoolman spool.{% endif %}
|
||||
|
||||
- {{ ns.missing | join(''\n- '') }}{% endif %}
|
||||
|
||||
{% elif ns.missing %}Could not match any loaded CFS slot to a Spoolman spool.{%
|
||||
endif %}'
|
||||
- action: notify.persistent_notification
|
||||
data:
|
||||
title: Print started - filament check
|
||||
|
||||
Reference in new issue
Block a user