3 files
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
|||||||
|
# ha_mcp_backup
|
||||||
|
schema_version: 1
|
||||||
|
domain: automation
|
||||||
|
entity_id: automation.sparkx_i7_deduct_filament_in_spoolman_on_print_complete
|
||||||
|
captured: '2026-10-08T17:50:27.997890+00:00'
|
||||||
|
tool: ha_config_set_automation
|
||||||
|
config:
|
||||||
|
id: '1791477238729'
|
||||||
|
alias: SparkX i7 - Deduct filament in Spoolman on print complete
|
||||||
|
triggers:
|
||||||
|
- trigger: state
|
||||||
|
entity_id: sensor.sparkx_i7_print_status
|
||||||
|
from: printing
|
||||||
|
to: completed
|
||||||
|
conditions:
|
||||||
|
- condition: numeric_state
|
||||||
|
entity_id: sensor.sparkx_i7_filament_weight_estimated
|
||||||
|
above: 0
|
||||||
|
actions:
|
||||||
|
- variables:
|
||||||
|
weight: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
|
||||||
|
}}'
|
||||||
|
spool_id: '{{ states(''input_text.sparkx_i7_print_spool_latch'') | int(0) }}'
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
condition: template
|
||||||
|
value_template: '{{ spool_id > 0 }}'
|
||||||
|
sequence:
|
||||||
|
- action: spoolman.use_spool_filament
|
||||||
|
data:
|
||||||
|
id: '{{ spool_id | int(0) }}'
|
||||||
|
use_weight: '{{ weight | float(0) }}'
|
||||||
|
- action: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_text.sparkx_i7_print_spool_latch
|
||||||
|
data:
|
||||||
|
value: ''
|
||||||
|
- conditions:
|
||||||
|
condition: template
|
||||||
|
value_template: '{{ spool_id <= 0 }}'
|
||||||
|
sequence:
|
||||||
|
- action: notify.persistent_notification
|
||||||
|
data:
|
||||||
|
title: Spoolman deduction skipped
|
||||||
|
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
|
||||||
|
\ latched for this print \u2014 nothing deducted."
|
||||||
|
- action: notify.mobile_app_francos_ipad
|
||||||
|
data:
|
||||||
|
title: Spoolman deduction skipped
|
||||||
|
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
|
||||||
|
\ latched for this print \u2014 nothing deducted."
|
||||||
|
- action: notify.mobile_app_sm_f956w
|
||||||
|
data:
|
||||||
|
title: Spoolman deduction skipped
|
||||||
|
message: "Print completed: {{ weight }} g used, but no Spoolman spool was\
|
||||||
|
\ latched for this print \u2014 nothing deducted."
|
||||||
|
mode: single
|
||||||
File diff suppressed because one or more lines are too long
+116
-34
@@ -4376,53 +4376,135 @@
|
|||||||
| int }}'
|
| int }}'
|
||||||
- id: '1791477238729'
|
- id: '1791477238729'
|
||||||
alias: SparkX i7 - Deduct filament in Spoolman on print complete
|
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 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 the checkpoint.
|
||||||
triggers:
|
triggers:
|
||||||
- trigger: state
|
- trigger: state
|
||||||
entity_id: sensor.sparkx_i7_print_status
|
entity_id: sensor.sparkx_i7_print_status
|
||||||
from: printing
|
from: printing
|
||||||
to: completed
|
to: completed
|
||||||
conditions:
|
conditions: []
|
||||||
- condition: numeric_state
|
|
||||||
entity_id: sensor.sparkx_i7_filament_weight_estimated
|
|
||||||
above: 0
|
|
||||||
actions:
|
actions:
|
||||||
- variables:
|
- variables:
|
||||||
weight: '{{ states(''sensor.sparkx_i7_filament_weight_estimated'') | float(0)
|
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
|
||||||
}}'
|
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
|
||||||
spool_id: '{{ states(''input_text.sparkx_i7_print_spool_latch'') | int(0) }}'
|
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
|
||||||
- choose:
|
| float(0) }}'
|
||||||
- conditions:
|
- variables:
|
||||||
condition: template
|
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
|
||||||
value_template: '{{ spool_id > 0 }}'
|
| float(0.03))) | round(2) }}'
|
||||||
sequence:
|
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
|
||||||
- action: spoolman.use_spool_filament
|
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
|
||||||
data:
|
- variables:
|
||||||
id: '{{ spool_id | int(0) }}'
|
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
|
||||||
use_weight: '{{ weight | float(0) }}'
|
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''') |
|
||||||
- action: input_text.set_value
|
lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and
|
||||||
target:
|
ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{% endif %}{%
|
||||||
entity_id: input_text.sparkx_i7_print_spool_latch
|
endfor %}{{ ns.id }}'
|
||||||
data:
|
- variables:
|
||||||
value: ''
|
helper_idx: '{{ old_slot.split('' '')[-1] if old_slot.split('' '')[-1] in [''1'',
|
||||||
- conditions:
|
''2'', ''3'', ''4''] else '''' }}'
|
||||||
condition: template
|
- variables:
|
||||||
value_template: '{{ spool_id <= 0 }}'
|
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
|
||||||
sequence:
|
in ['''', ''unknown'', ''unavailable'']) and (helper_idx == '''') else 0 }}'
|
||||||
|
- if:
|
||||||
|
condition: template
|
||||||
|
value_template: '{{ final_grams | float > 0 }}'
|
||||||
|
then:
|
||||||
|
- choose:
|
||||||
|
- conditions:
|
||||||
|
condition: template
|
||||||
|
value_template: '{{ spool_id not in ['''', ''unknown'', ''unavailable'']
|
||||||
|
}}'
|
||||||
|
sequence:
|
||||||
|
- action: spoolman.use_spool_filament
|
||||||
|
data:
|
||||||
|
id: '{{ spool_id | int(0) }}'
|
||||||
|
use_weight: '{{ final_grams | float(0) }}'
|
||||||
|
- if:
|
||||||
|
condition: template
|
||||||
|
value_template: '{{ helper_idx != '''' }}'
|
||||||
|
then:
|
||||||
|
- action: input_number.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_number.sparkx_i7_slot_{{ helper_idx }}_grams
|
||||||
|
data:
|
||||||
|
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ helper_idx ~ ''_grams'')
|
||||||
|
| float(0)) + (final_grams | float) }}'
|
||||||
|
default:
|
||||||
- action: notify.persistent_notification
|
- action: notify.persistent_notification
|
||||||
data:
|
data:
|
||||||
title: Spoolman deduction skipped
|
title: 'Spoolman: no spool for slot color'
|
||||||
message: 'Print completed: {{ weight }} g used, but no Spoolman spool was
|
message: 'Print completed: final segment of {{ final_grams }} g from {{
|
||||||
latched for this print — nothing deducted.'
|
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
|
||||||
|
}}) could not be deducted - no Spoolman spool with remaining weight matches
|
||||||
|
that color. Register the new roll in Spoolman, then adjust manually if
|
||||||
|
needed.'
|
||||||
- action: notify.mobile_app_francos_ipad
|
- action: notify.mobile_app_francos_ipad
|
||||||
data:
|
data:
|
||||||
title: Spoolman deduction skipped
|
title: 'Spoolman: no spool for slot color'
|
||||||
message: 'Print completed: {{ weight }} g used, but no Spoolman spool was
|
message: 'Print completed: final segment of {{ final_grams }} g from {{
|
||||||
latched for this print — nothing deducted.'
|
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
|
||||||
|
}}) could not be deducted - no Spoolman spool with remaining weight matches
|
||||||
|
that color. Register the new roll in Spoolman, then adjust manually if
|
||||||
|
needed.'
|
||||||
- action: notify.mobile_app_sm_f956w
|
- action: notify.mobile_app_sm_f956w
|
||||||
data:
|
data:
|
||||||
title: Spoolman deduction skipped
|
title: 'Spoolman: no spool for slot color'
|
||||||
message: 'Print completed: {{ weight }} g used, but no Spoolman spool was
|
message: 'Print completed: final segment of {{ final_grams }} g from {{
|
||||||
latched for this print — nothing deducted.'
|
old_slot if old_slot else ''the active slot'' }} (color #{{ color | upper
|
||||||
|
}}) could not be deducted - no Spoolman spool with remaining weight matches
|
||||||
|
that color. Register the new roll in Spoolman, 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'')
|
||||||
|
| float(0) %}{% if g > 0 %}{% set ns.t = ns.t + g %}{% endif %}{% endfor %}{{
|
||||||
|
(ns.t + (nonhelper_g | float)) | round(1) }}'
|
||||||
|
- variables:
|
||||||
|
summary_lines: '{% set ns = namespace(l = []) %}{% for n in [''1'', ''2'', ''3'',
|
||||||
|
''4''] %}{% set g = states(''input_number.sparkx_i7_slot_'' ~ n ~ ''_grams'')
|
||||||
|
| float(0) %}{% if g > 0 %}{% set ns.l = ns.l + [''Slot '' ~ n ~ '' ('' ~
|
||||||
|
states(''sensor.sparkx_i7_slot_'' ~ n ~ ''_color_name'') ~ ''): '' ~ (g |
|
||||||
|
round(1)) ~ '' g''] %}{% endif %}{% endfor %}{% if nonhelper_g | float > 0
|
||||||
|
%}{% set ns.l = ns.l + [(old_slot if old_slot else ''Unlatched'') ~ '': ''
|
||||||
|
~ (nonhelper_g | float | round(1)) ~ '' g''] %}{% endif %}{{ ns.l | join(''\n'')
|
||||||
|
}}'
|
||||||
|
- if:
|
||||||
|
condition: template
|
||||||
|
value_template: '{{ summary_total | float > 0 }}'
|
||||||
|
then:
|
||||||
|
- action: notify.persistent_notification
|
||||||
|
data:
|
||||||
|
title: Print complete - Spoolman updated
|
||||||
|
message: 'Print complete - Spoolman deducted {{ summary_total }} g
|
||||||
|
|
||||||
|
{{ summary_lines }}'
|
||||||
|
- action: notify.mobile_app_francos_ipad
|
||||||
|
data:
|
||||||
|
title: Print complete - Spoolman updated
|
||||||
|
message: 'Print complete - Spoolman deducted {{ summary_total }} g
|
||||||
|
|
||||||
|
{{ summary_lines }}'
|
||||||
|
- action: notify.mobile_app_sm_f956w
|
||||||
|
data:
|
||||||
|
title: Print complete - Spoolman updated
|
||||||
|
message: 'Print complete - Spoolman deducted {{ summary_total }} g
|
||||||
|
|
||||||
|
{{ summary_lines }}'
|
||||||
|
- action: input_number.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
|
||||||
|
data:
|
||||||
|
value: '{{ cur }}'
|
||||||
|
- action: input_text.set_value
|
||||||
|
target:
|
||||||
|
entity_id: input_text.sparkx_i7_print_spool_latch
|
||||||
|
data:
|
||||||
|
value: ''
|
||||||
mode: single
|
mode: single
|
||||||
- id: '1791477238762'
|
- id: '1791477238762'
|
||||||
alias: SparkX i7 - Latch print spool for Spoolman
|
alias: SparkX i7 - Latch print spool for Spoolman
|
||||||
|
|||||||
Reference in New Issue
Block a user