From 2cada5677939543a4ab82082d4b74faf29b23a00 Mon Sep 17 00:00:00 2001 From: Home Assistant Version Control Date: Thu, 15 Oct 2026 13:11:17 +0000 Subject: [PATCH] .ha_mcp/logs/mcp_usage.jsonl, zigbee2mqtt/state.json --- .ha_mcp/logs/mcp_usage.jsonl | 1 + zigbee2mqtt/state.json | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.ha_mcp/logs/mcp_usage.jsonl b/.ha_mcp/logs/mcp_usage.jsonl index 483773c0..b3562932 100644 --- a/.ha_mcp/logs/mcp_usage.jsonl +++ b/.ha_mcp/logs/mcp_usage.jsonl @@ -4554,3 +4554,4 @@ {"timestamp": "2026-10-15T13:01:52.067939+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": null, "list_only": false, "force_reload": false, "entity_id": null, "card_type": null, "heading": null, "include_config": false, "include_screenshot": false, "view_path": null, "query": "cfs lite", "describe": false}, "execution_time_ms": 42.00410842895508, "success": true, "error_message": null, "response_size_bytes": 40410, "user_context": null} {"timestamp": "2026-10-15T13:02:16.858398+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": "3d-printer-cellphone", "list_only": false, "force_reload": false, "entity_id": null, "card_type": null, "heading": null, "include_config": false, "include_screenshot": false, "view_path": "print", "query": null, "describe": false}, "execution_time_ms": 5.109310150146484, "success": false, "error_message": "{\n \"success\": false,\n \"error\": {\n \"code\": \"RESOURCE_NOT_FOUND\",\n \"message\": \"Dashboard view path 'print' is not found.\",\n \"suggestion\": \"Use a view_path returned by ha_config_get_dashboard\"\n },\n \"url_path\": \"3d-printer-cellphone\",\n \"view_path\": \"print\",\n \"available_view_paths\": []\n}", "response_size_bytes": null, "user_context": null} {"timestamp": "2026-10-15T13:03:07.407090+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": "3d-printer-cellphone", "list_only": false, "force_reload": false, "entity_id": null, "card_type": null, "heading": null, "include_config": false, "include_screenshot": false, "view_path": null, "query": null, "describe": false}, "execution_time_ms": 18.734455108642578, "success": true, "error_message": null, "response_size_bytes": 7886, "user_context": null} +{"timestamp": "2026-10-15T13:11:11.405670+00:00", "tool_name": "ha_eval_template", "parameters": {"template": "{% set cols = namespace(list=[]) %}\n{% 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 %}\n{% set gc = namespace(list=[]) %}\n{% 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 %}\n{% set mc = namespace(list=[]) %}\n{% 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 %}\n{% set single = (gc.list | length) == 1 %}\n{% set gcol = gc.list[0] if single else '' %}\n{% set aslot = (states('sensor.sparkx_i7_active_filament_slot') | default('', true) | string).split('_')[-1] %}\n{% set aslot = aslot if aslot in ['1','2','3','4'] else '' %}\n{% set rem_g = ([((job_g | float) - (used_g | float)), 0] | max) | round(1) %}\n{% set ns = namespace(cover=[], below=[], short=[], ok=[], missing=[], loaded=[], match_label='', match_rem=0) %}\n{% for n in ['1','2','3','4'] %}\n{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_color') | replace('#','') | lower %}\n{% if c not in ['','none','unknown','unavailable'] %}\n{% set cname = states('sensor.sparkx_i7_slot_' ~ n ~ '_color_name') %}\n{% set flabel = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_filament') %}\n{% set label = 'Slot ' ~ n ~ ' ' ~ (cname if cname not in ['','unknown','unavailable'] else (flabel if flabel not in ['','unknown','unavailable'] else ('#' ~ (c | upper)))) %}\n{% set sp = namespace(id='', rem=0, fw=0) %}\n{% for e in integration_entities('spoolman') if e.endswith('_color_hex') %}\n{% if sp.id == '' and (state_attr(e[:-10],'location') | default('', true) | lower) == ('cfs lite ' ~ n) %}\n{% set sp.id = e[:-10] %}\n{% set sp.rem = states(e[:-10]) | float(0) %}\n{% set sp.fw = state_attr(e[:-10],'filament_weight') | float(0) %}\n{% endif %}\n{% endfor %}\n{% set pct = ((((sp.rem | float) / (sp.fw | float)) * 100) | round(0) | int) if (sp.fw | float) > 0 else 0 %}\n{% if sp.id != '' %}{% set ns.loaded = ns.loaded + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%)'] %}{% endif %}\n{% if sp.id != '' and single and n == aslot %}{% set ns.match_label = label %}{% set ns.match_rem = sp.rem %}{% endif %}\n{% if sp.id != '' %}\n{% if single and n == aslot %}\n{% if (sp.rem | float) < (job_g | float) %}{% set ns.short = ns.short + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, ' ~ job_g ~ ' g needed'] %}\n{% else %}{% set ns.ok = ns.ok + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, ' ~ job_g ~ ' g needed'] %}{% endif %}\n{% elif single %}\n{% if (sp.rem | float) >= (job_g | float) %}{% set ns.cover = ns.cover + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%)'] %}\n{% else %}{% set ns.below = ns.below + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%)'] %}{% endif %}\n{% else %}\n{% 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'] %}\n{% else %}{% set ns.ok = ns.ok + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g (' ~ pct ~ '%) left, up to ' ~ job_g ~ ' g needed'] %}{% endif %}\n{% endif %}\n{% elif job_g > 0 %}\n{% set ns.missing = ns.missing + [label ~ ' (#' ~ (c | upper) ~ ')'] %}\n{% endif %}\n{% endif %}\n{% endfor %}\nJob: {{ gcode_file if gcode_file not in ['','unknown','unavailable'] else (state_attr('sensor.sparkx_i7_print_status','file') | default('', true) | string).split('/')[-1] }}\nNeeds {{ job_g | round(1) }} g ({{ length_cm | round(1) }} cm) · used {{ used_g }} g · {{ rem_g }} g left to print\nSlicer: {{ (mc.list | join(', ')) if mc.list else 'material unknown' }} · {{ ('single colour #' ~ (gcol | upper)) if single else ((gc.list | length) ~ ' colours') }}\n{% if job_g <= 0 %}Cannot verify: slicer filament estimate not available yet.{% if ns.loaded %}\nLoaded:\n- {{ ns.loaded | join('\\n- ') }}{% endif %}\n{% elif single and aslot != '' %}\n{% if ns.short %}NOT ENOUGH filament:\n- {{ ns.short | join('\\n- ') }}\n{% elif ns.match_label %}Enough filament: {{ ns.match_label }}: {{ ns.match_rem | round(1) }} g left, {{ job_g }} g needed.\n{% else %}Active slot {{ aslot }} has no Spoolman spool at CFS Lite, so remaining cannot be checked.{% endif %}\n{% 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 %}\nWould cover {{ job_g }} g:\n- {{ ns.cover | join('\\n- ') }}{% endif %}{% if ns.below %}\nBelow {{ job_g }} g:\n- {{ ns.below | join('\\n- ') }}{% endif %}{% if not ns.cover and not ns.below %}\nNo loaded CFS slot has a matching Spoolman spool to compare.{% endif %}\n{% elif ns.short %}NOT ENOUGH filament - possible shortfall:\n- {{ ns.short | join('\\n- ') }}{% if ns.ok %}\nOK (would still cover the whole job):\n- {{ ns.ok | join('\\n- ') }}{% endif %}{% if ns.missing %}\nNo Spoolman spool matched for:\n- {{ ns.missing | join('\\n- ') }}{% endif %}\n{% elif ns.ok %}Enough filament:\n- {{ ns.ok | join('\\n- ') }}{% if ns.missing %}\nNo Spoolman spool matched for:\n- {{ ns.missing | join('\\n- ') }}{% endif %}\n{% elif ns.missing %}Could not match any loaded CFS slot to a Spoolman spool.{% endif %}", "condition": null, "variables": {"job_g": 239.1, "gcm": 0.0298, "length_cm": 8022.6, "used_len": 0, "used_g": 0, "gcode_file": "Test_Print.gcode"}, "strict": false, "timeout": 3, "report_errors": true}, "execution_time_ms": 213.69385719299316, "success": true, "error_message": null, "response_size_bytes": 6739, "user_context": null} diff --git a/zigbee2mqtt/state.json b/zigbee2mqtt/state.json index b8f4079e..6edaff9e 100644 --- a/zigbee2mqtt/state.json +++ b/zigbee2mqtt/state.json @@ -4,7 +4,7 @@ "state": "ON", "led_brightness": 100, "countdown_to_turn_off": 0, - "voltage": 119.8, + "voltage": 119.9, "countdown_to_turn_on": 0, "ac_frequency": 60, "power_factor": 0.14, @@ -27,7 +27,7 @@ "led_brightness": 100, "countdown_to_turn_off": 0, "countdown_to_turn_on": 0, - "power": 1.9, + "power": 2, "current": 0.09, "energy": 57.08, "power_factor": 0.17, @@ -77,8 +77,8 @@ "voltage": 118.3, "state": "ON", "ac_frequency": 60, - "energy": 222.52, - "power": 98.5, + "energy": 222.53, + "power": 98.8, "current": 0.91, "power_factor": 0.41, "update": { @@ -98,8 +98,8 @@ "voltage": 119.2, "energy": 104.14, "state": "ON", - "power": 66.4, - "current": 0.77, + "power": 107.7, + "current": 1.12, "ac_frequency": 60, "power_factor": 0.8, "update": { @@ -114,12 +114,12 @@ }, "0xffffb40e060895b3": { "state": "ON", - "voltage": 119.3, + "voltage": 119.8, "ac_frequency": 60, "energy": 15.31, "current": 0.01, "power": 0.1, - "power_factor": 0.11, + "power_factor": 0.13, "linkquality": 116, "update": { "state": "idle", @@ -143,7 +143,7 @@ "current": 0.02, "ac_frequency": 60, "power": 0.3, - "power_factor": 0.14, + "power_factor": 0.2, "update": { "state": "idle", "installed_version": 268513381, @@ -171,7 +171,7 @@ }, "0xa4c1380d0679ffff": { "battery": 100, - "temperature": 11, + "temperature": 10.9, "temperature_units": "celsius", "temperature_calibration": 0, "update": {