7 files
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# ha_mcp_backup
|
||||
schema_version: 1
|
||||
domain: automation
|
||||
entity_id: '1791477238729'
|
||||
captured: '2026-10-09T00:32:47.977680+00:00'
|
||||
tool: ha_config_set_automation
|
||||
config:
|
||||
id: '1791477238729'
|
||||
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:
|
||||
- trigger: state
|
||||
entity_id: sensor.sparkx_i7_print_status
|
||||
from: printing
|
||||
to: completed
|
||||
conditions: []
|
||||
actions:
|
||||
- variables:
|
||||
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
|
||||
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
|
||||
checkpoint: '{{ states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
|
||||
| float(0) }}'
|
||||
- variables:
|
||||
final_grams: '{{ (([cur | float - (checkpoint | float), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
|
||||
| float(0.03))) | round(2) }}'
|
||||
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
|
||||
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
|
||||
- variables:
|
||||
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
|
||||
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''') |
|
||||
lower) == color and (state_attr(e[:-10], ''location'') | default('''', true)
|
||||
| lower) == ''cfs lite'' %}{% set b = e[:-10] %}{% if (states(b) | float(0))
|
||||
> 0 and ns.id == '''' %}{% set ns.id = states(b ~ ''_id'') %}{% endif %}{%
|
||||
endif %}{% endfor %}{{ ns.id }}'
|
||||
- variables:
|
||||
helper_idx: '{{ old_slot.split('' '')[-1] if old_slot.split('' '')[-1] in [''1'',
|
||||
''2'', ''3'', ''4''] else '''' }}'
|
||||
- variables:
|
||||
nonhelper_g: '{{ final_grams if (final_grams | float > 0) and (spool_id not
|
||||
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
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Print completed: 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 with remaining weight matches
|
||||
that color. Register the new roll in Spoolman, then adjust manually if
|
||||
needed.'
|
||||
- action: notify.mobile_app_francos_ipad
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Print completed: 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 with remaining weight matches
|
||||
that color. Register the new roll in Spoolman, then adjust manually if
|
||||
needed.'
|
||||
- action: notify.mobile_app_sm_f956w
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Print completed: 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 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
|
||||
@@ -0,0 +1,151 @@
|
||||
# ha_mcp_backup
|
||||
schema_version: 1
|
||||
domain: automation
|
||||
entity_id: '1791477238762'
|
||||
captured: '2026-10-09T00:32:47.861324+00:00'
|
||||
tool: ha_config_set_automation
|
||||
config:
|
||||
id: '1791477238762'
|
||||
alias: SparkX i7 - Latch print spool for Spoolman
|
||||
description: 'Segment tracking for Spoolman: at print start resets the length checkpoint
|
||||
and per-slot gram counters and latches the active CFS slot. On every slot change
|
||||
mid-print, deducts the exact extrusion of the finished segment (used_material_length
|
||||
delta x g/cm) from the Spoolman spool matching the previous slot color hex (only
|
||||
if that spool has remaining weight), accumulates grams per slot, notifies on no-match,
|
||||
then re-baselines the checkpoint and advances the latch.'
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id: sensor.sparkx_i7_print_status
|
||||
to: printing
|
||||
id: print_started
|
||||
- trigger: state
|
||||
entity_id: sensor.sparkx_i7_active_filament_slot
|
||||
id: slot_changed
|
||||
conditions:
|
||||
- condition: state
|
||||
entity_id: sensor.sparkx_i7_print_status
|
||||
state: printing
|
||||
actions:
|
||||
- variables:
|
||||
new_slot: '{{ states(''sensor.sparkx_i7_active_filament_slot'') }}'
|
||||
old_slot: '{{ states(''input_text.sparkx_i7_print_spool_latch'') }}'
|
||||
cur: '{{ states(''sensor.sparkx_i7_used_material_length'') | float(0) }}'
|
||||
- choose:
|
||||
- conditions:
|
||||
condition: trigger
|
||||
id: print_started
|
||||
sequence:
|
||||
- action: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
|
||||
data:
|
||||
value: '{{ cur }}'
|
||||
- action: input_number.set_value
|
||||
target:
|
||||
entity_id:
|
||||
- input_number.sparkx_i7_slot_1_grams
|
||||
- input_number.sparkx_i7_slot_2_grams
|
||||
- input_number.sparkx_i7_slot_3_grams
|
||||
- input_number.sparkx_i7_slot_4_grams
|
||||
data:
|
||||
value: 0
|
||||
- action: input_text.set_value
|
||||
target:
|
||||
entity_id: input_text.sparkx_i7_print_spool_latch
|
||||
data:
|
||||
value: '{{ new_slot if new_slot not in [''unknown'', ''unavailable''] else
|
||||
'''' }}'
|
||||
- conditions:
|
||||
condition: template
|
||||
value_template: '{{ old_slot not in ['''', ''unknown'', ''unavailable''] and
|
||||
new_slot not in ['''', ''unknown'', ''unavailable''] and new_slot != old_slot
|
||||
}}'
|
||||
sequence:
|
||||
- variables:
|
||||
grams: '{{ (([cur | float - (states(''input_number.sparkx_i7_spoolman_length_checkpoint'')
|
||||
| float(0)), 0] | max) * (states(''input_number.sparkx_i7_filament_g_cm'')
|
||||
| float(0.03))) | round(2) }}'
|
||||
color: '{{ states(''sensor.sparkx_i7_cfs_'' ~ (old_slot | lower | replace(''
|
||||
'', ''_'')) ~ ''_color'') | replace(''#'', '''') | lower }}'
|
||||
- variables:
|
||||
spool_id: '{% set ns = namespace(id='''') %}{% for e in integration_entities(''spoolman'')
|
||||
%}{% if e.endswith(''_color_hex'') and (states(e) | replace(''#'', '''')
|
||||
| lower) == color and (state_attr(e[:-10], ''location'') | default('''',
|
||||
true) | lower) == ''cfs lite'' %}{% 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
|
||||
value_template: '{{ 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: '{{ grams | float(0) }}'
|
||||
- if:
|
||||
condition: template
|
||||
value_template: '{{ old_slot.split('' '')[-1] in [''1'', ''2'', ''3'',
|
||||
''4''] }}'
|
||||
then:
|
||||
- action: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.sparkx_i7_slot_{{ old_slot.split(' ')[-1]
|
||||
}}_grams
|
||||
data:
|
||||
value: '{{ (states(''input_number.sparkx_i7_slot_'' ~ old_slot.split(''
|
||||
'')[-1] ~ ''_grams'') | float(0)) + (grams | float) }}'
|
||||
default:
|
||||
- action: notify.persistent_notification
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Segment of {{ grams }} g from {{ old_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
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Segment of {{ grams }} g from {{ old_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
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Segment of {{ grams }} g from {{ old_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: 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: '{{ new_slot }}'
|
||||
- conditions:
|
||||
condition: template
|
||||
value_template: '{{ old_slot in ['''', ''unknown'', ''unavailable''] and new_slot
|
||||
not in ['''', ''unknown'', ''unavailable''] }}'
|
||||
sequence:
|
||||
- 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: '{{ new_slot }}'
|
||||
mode: queued
|
||||
max: 10
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4155,3 +4155,6 @@
|
||||
{"timestamp": "2026-10-09T00:31:08.025982+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": "sparkx-i7", "list_only": false, "force_reload": false, "entity_id": "sensor.sparkx_i7_active_filament_slot", "card_type": null, "heading": null, "include_config": false, "include_screenshot": false, "view_path": null, "mode": null, "query": null}, "execution_time_ms": 88.17911148071289, "success": true, "error_message": null, "response_size_bytes": 1379, "user_context": null}
|
||||
{"timestamp": "2026-10-09T00:31:09.198470+00:00", "tool_name": "ha_config_get_automation", "parameters": {"identifier": "1791477238729"}, "execution_time_ms": 1289.0384197235107, "success": true, "error_message": null, "response_size_bytes": 5811, "user_context": null}
|
||||
{"timestamp": "2026-10-09T00:31:09.481568+00:00", "tool_name": "ha_config_get_automation", "parameters": {"identifier": "1791477238762"}, "execution_time_ms": 1559.7484111785889, "success": true, "error_message": null, "response_size_bytes": 5503, "user_context": null}
|
||||
{"timestamp": "2026-10-09T00:32:48.159296+00:00", "tool_name": "ha_config_set_dashboard", "parameters": {"url_path": "sparkx-i7", "config": null, "python_transform": "config['views'][3]['sections'][0]['cards'][10]['content'] = config['views'][3]['sections'][0]['cards'][10]['content'].replace('http://2c829f0e-spoolman.local.hass.io:7912', 'http://192.168.1.140:7912')", "config_hash": "3e1e0c8a1bbb7498", "title": null, "icon": null, "require_admin": null, "show_in_sidebar": null, "MandatoryBPS": false, "BestPracticeKey": null, "return_screenshot": false, "view_path": null, "patch": null}, "execution_time_ms": 165.86875915527344, "success": true, "error_message": null, "response_size_bytes": 1030, "user_context": null}
|
||||
{"timestamp": "2026-10-09T00:32:50.390327+00:00", "tool_name": "ha_config_set_automation", "parameters": {"config": null, "identifier": "1791477238762", "python_transform": "config['description'] = config['description'].replace('from the Spoolman spool matching the previous slot color hex', 'from the Spoolman spool in the CFS Lite location matching the previous slot color hex')\nfor s in config['actions'][1]['choose'][1]['sequence'][2]['then'][0]['default']:\n d = s['data']\n d['message'] = d['message'].replace('no Spoolman spool with remaining weight matches that color', 'no Spoolman spool in the CFS Lite location with remaining weight matches that color').replace('Register the new roll in Spoolman, then adjust manually if needed.', 'Register the new roll in Spoolman with location CFS Lite, then adjust manually if needed.')", "config_hash": "733d8e8ed285ab77", "take_control_of_blueprint": false, "category": null, "wait": true, "enabled": null, "run_actions": false, "MandatoryBPS": false, "BestPracticeKey": null}, "execution_time_ms": 2440.6590461730957, "success": true, "error_message": null, "response_size_bytes": 7646, "user_context": null}
|
||||
{"timestamp": "2026-10-09T00:32:51.251728+00:00", "tool_name": "ha_config_set_automation", "parameters": {"config": null, "identifier": "1791477238729", "python_transform": "config['description'] = config['description'].replace('from the Spoolman spool matching the latched slot color', 'from the Spoolman spool in the CFS Lite location matching the latched slot color')\nfor s in config['actions'][5]['then'][0]['default']:\n d = s['data']\n d['message'] = d['message'].replace('no Spoolman spool with remaining weight matches that color', 'no Spoolman spool in the CFS Lite location with remaining weight matches that color').replace('Register the new roll in Spoolman, then adjust manually if needed.', 'Register the new roll in Spoolman with location CFS Lite, then adjust manually if needed.')", "config_hash": "3e4b8c309716746d", "take_control_of_blueprint": false, "category": null, "wait": true, "enabled": null, "run_actions": false, "MandatoryBPS": false, "BestPracticeKey": null}, "execution_time_ms": 3172.0316410064697, "success": true, "error_message": null, "response_size_bytes": 7608, "user_context": null}
|
||||
|
||||
@@ -1036,7 +1036,7 @@
|
||||
},
|
||||
{
|
||||
"type": "markdown",
|
||||
"content": "**Spoolman UI:** [http://2c829f0e-spoolman.local.hass.io:7912](http://2c829f0e-spoolman.local.hass.io:7912)\n\nEach CFS slot is matched to the Spoolman spool with the same **color hex** that still has stock (remaining > 0) **and whose location is CFS Lite**. All 4 rolls live in the **CFS Lite** location in Spoolman.\n\n**Replaced a roll?** Register the new roll in Spoolman with the same color hex and location CFS Lite. No Home Assistant changes needed — a same-color roll in another location (e.g. Storage) is ignored, and exhausted spools are skipped automatically.",
|
||||
"content": "**Spoolman UI:** [http://192.168.1.140:7912](http://192.168.1.140:7912)\n\nEach CFS slot is matched to the Spoolman spool with the same **color hex** that still has stock (remaining > 0) **and whose location is CFS Lite**. All 4 rolls live in the **CFS Lite** location in Spoolman.\n\n**Replaced a roll?** Register the new roll in Spoolman with the same color hex and location CFS Lite. No Home Assistant changes needed — a same-color roll in another location (e.g. Storage) is ignored, and exhausted spools are skipped automatically.",
|
||||
"grid_options": {
|
||||
"columns": "full"
|
||||
}
|
||||
|
||||
+27
-25
@@ -4377,10 +4377,11 @@
|
||||
- id: '1791477238729'
|
||||
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.
|
||||
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
|
||||
the checkpoint.
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id: sensor.sparkx_i7_print_status
|
||||
@@ -4441,25 +4442,25 @@
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Print completed: 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 with remaining weight matches
|
||||
that color. Register the new roll in Spoolman, then adjust manually if
|
||||
needed.'
|
||||
}}) 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.'
|
||||
- action: notify.mobile_app_francos_ipad
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Print completed: 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 with remaining weight matches
|
||||
that color. Register the new roll in Spoolman, then adjust manually if
|
||||
needed.'
|
||||
}}) 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.'
|
||||
- action: notify.mobile_app_sm_f956w
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Print completed: 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 with remaining weight matches
|
||||
that color. Register the new roll in Spoolman, then adjust manually if
|
||||
needed.'
|
||||
}}) 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.'
|
||||
- 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'')
|
||||
@@ -4512,9 +4513,10 @@
|
||||
description: 'Segment tracking for Spoolman: at print start resets the length checkpoint
|
||||
and per-slot gram counters and latches the active CFS slot. On every slot change
|
||||
mid-print, deducts the exact extrusion of the finished segment (used_material_length
|
||||
delta x g/cm) from the Spoolman spool matching the previous slot color hex (only
|
||||
if that spool has remaining weight), accumulates grams per slot, notifies on no-match,
|
||||
then re-baselines the checkpoint and advances the latch.'
|
||||
delta x g/cm) from the Spoolman spool in the CFS Lite location matching the previous
|
||||
slot color hex (only if that spool has remaining weight), accumulates grams per
|
||||
slot, notifies on no-match, then re-baselines the checkpoint and advances the
|
||||
latch.'
|
||||
triggers:
|
||||
- trigger: state
|
||||
entity_id: sensor.sparkx_i7_print_status
|
||||
@@ -4607,23 +4609,23 @@
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Segment of {{ grams }} g from {{ old_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.'
|
||||
| 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.'
|
||||
- action: notify.mobile_app_francos_ipad
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Segment of {{ grams }} g from {{ old_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.'
|
||||
| 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.'
|
||||
- action: notify.mobile_app_sm_f956w
|
||||
data:
|
||||
title: 'Spoolman: no spool for slot color'
|
||||
message: 'Segment of {{ grams }} g from {{ old_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.'
|
||||
| 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.'
|
||||
- action: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.sparkx_i7_spoolman_length_checkpoint
|
||||
|
||||
+15
-15
@@ -4,7 +4,7 @@
|
||||
"state": "ON",
|
||||
"led_brightness": 100,
|
||||
"countdown_to_turn_off": 0,
|
||||
"voltage": 119.6,
|
||||
"voltage": 119.2,
|
||||
"countdown_to_turn_on": 0,
|
||||
"ac_frequency": 60,
|
||||
"power_factor": 0.62,
|
||||
@@ -15,9 +15,9 @@
|
||||
"latest_source": "https://raw.githubusercontent.com/Koenkk/zigbee-OTA/master/images/ThirdReality/SmartPlug_Zigbee_PROD_OTA_V101_1.01.01.ota",
|
||||
"latest_release_notes": null
|
||||
},
|
||||
"power": 24.5,
|
||||
"power": 192.1,
|
||||
"linkquality": 149,
|
||||
"current": 0.46,
|
||||
"current": 2.54,
|
||||
"power_on_behavior": "on"
|
||||
},
|
||||
"0xffffb40e0607af27": {
|
||||
@@ -27,7 +27,7 @@
|
||||
"led_brightness": 100,
|
||||
"countdown_to_turn_off": 0,
|
||||
"countdown_to_turn_on": 0,
|
||||
"power": 2.1,
|
||||
"power": 1.9,
|
||||
"current": 0.09,
|
||||
"energy": 54.08,
|
||||
"power_factor": 0.18,
|
||||
@@ -45,9 +45,9 @@
|
||||
"state": "ON",
|
||||
"led_brightness": 100,
|
||||
"countdown_to_turn_off": 0,
|
||||
"voltage": 119.6,
|
||||
"voltage": 119,
|
||||
"countdown_to_turn_on": 0,
|
||||
"energy": 103.89,
|
||||
"energy": 103.9,
|
||||
"power_factor": 0.2,
|
||||
"ac_frequency": 60,
|
||||
"update": {
|
||||
@@ -58,7 +58,7 @@
|
||||
"latest_release_notes": null
|
||||
},
|
||||
"linkquality": 145,
|
||||
"power": 84.5,
|
||||
"power": 83.8,
|
||||
"current": 0.83,
|
||||
"power_on_behavior": "on"
|
||||
},
|
||||
@@ -74,12 +74,12 @@
|
||||
"led_brightness": 100,
|
||||
"countdown_to_turn_off": 0,
|
||||
"countdown_to_turn_on": 0,
|
||||
"voltage": 118,
|
||||
"voltage": 118.5,
|
||||
"state": "ON",
|
||||
"ac_frequency": 60,
|
||||
"energy": 211.06,
|
||||
"power": 100,
|
||||
"current": 0.92,
|
||||
"power": 101.5,
|
||||
"current": 0.93,
|
||||
"power_factor": 0.95,
|
||||
"update": {
|
||||
"state": "idle",
|
||||
@@ -95,7 +95,7 @@
|
||||
"led_brightness": 100,
|
||||
"countdown_to_turn_off": 0,
|
||||
"countdown_to_turn_on": 0,
|
||||
"voltage": 118.9,
|
||||
"voltage": 119,
|
||||
"energy": 100.77,
|
||||
"state": "ON",
|
||||
"power": 10.8,
|
||||
@@ -114,12 +114,12 @@
|
||||
},
|
||||
"0xffffb40e060895b3": {
|
||||
"state": "ON",
|
||||
"voltage": 119.5,
|
||||
"voltage": 119.4,
|
||||
"ac_frequency": 60,
|
||||
"energy": 14.23,
|
||||
"current": 0.01,
|
||||
"power": 0.1,
|
||||
"power_factor": 0.11,
|
||||
"power_factor": 0.22,
|
||||
"linkquality": 116,
|
||||
"update": {
|
||||
"state": "idle",
|
||||
@@ -136,7 +136,7 @@
|
||||
"0xffffb40e0608864e": {
|
||||
"led_brightness": 100,
|
||||
"countdown_to_turn_off": 0,
|
||||
"voltage": 119.9,
|
||||
"voltage": 120.1,
|
||||
"energy": 34.53,
|
||||
"countdown_to_turn_on": 0,
|
||||
"state": "ON",
|
||||
@@ -224,7 +224,7 @@
|
||||
},
|
||||
"0xb40e060fffe717c5": {
|
||||
"battery": 100,
|
||||
"occupancy": true,
|
||||
"occupancy": false,
|
||||
"tamper": false,
|
||||
"battery_low": false,
|
||||
"linkquality": 145,
|
||||
|
||||
Reference in New Issue
Block a user