diff --git a/.ha_mcp/logs/mcp_usage.jsonl b/.ha_mcp/logs/mcp_usage.jsonl index b99791ac..eaa5bb15 100644 --- a/.ha_mcp/logs/mcp_usage.jsonl +++ b/.ha_mcp/logs/mcp_usage.jsonl @@ -4494,3 +4494,4 @@ {"timestamp": "2026-10-14T13:52:15.604110+00:00", "tool_name": "ha_config_list_helpers", "parameters": {"helper_type": "template", "limit": 100, "offset": 0}, "execution_time_ms": 26.131153106689453, "success": true, "error_message": null, "response_size_bytes": 18400, "user_context": null} {"timestamp": "2026-10-14T13:53:19.193153+00:00", "tool_name": "ha_eval_template", "parameters": {"template": "{% set job_g = v_job_g | float(0) %}\n{% set gcol = v_gcol | string | replace('#','') | lower %}\n{% set mono = v_mono %}\n{% set cols = namespace(list=[]) %}\n{% for n in ['1','2','3','4'] %}\n{% set cc = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_color') | replace('#','') | lower %}\n{% if cc not in ['','none','unknown','unavailable'] %}{% set cols.list = cols.list + [cc] %}{% endif %}\n{% endfor %}\n{% set per_slot = gcol if (mono and gcol != '' and gcol in cols.list) else '' %}\n{% set mono_offline = mono and gcol != '' and gcol not in cols.list %}\n{% set ns = namespace(req=[], short=[], missing=[], loaded=[], avail=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{% 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) %}\n{% for e in integration_entities('spoolman') if e.endswith('_color_hex') %}\n{% if sp.id == '' and (states(e) | replace('#','') | lower) == c and (state_attr(e[:-10],'location') | default('', true) | lower) == 'cfs lite' %}\n{% set sp.id = e[:-10] %}\n{% set sp.rem = states(e[:-10]) | float(0) %}\n{% endif %}\n{% endfor %}\n{% if sp.id != '' %}\n{% set ns.avail = ns.avail + sp.rem %}\n{% set ns.loaded = ns.loaded + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g'] %}\n{% endif %}\n{% if job_g > 0 %}\n{% set req = job_g if (per_slot == '' or c == per_slot) else 0 %}\n{% if req > 0 %}\n{% if sp.id == '' %}\n{% set ns.missing = ns.missing + [label ~ ' (#' ~ (c | upper) ~ ')'] %}\n{% elif sp.rem < req %}\n{% set ns.short = ns.short + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g left, up to ' ~ req ~ ' g needed'] %}\n{% else %}\n{% set ns.req = ns.req + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g left, up to ' ~ req ~ ' g needed'] %}\n{% endif %}\n{% endif %}\n{% endif %}\n{% endfor %}\n{% if job_g <= 0 %}Cannot verify: slicer filament estimate not available yet.{% if ns.loaded %} Loaded: {{ ns.loaded | join('; ') }}.{% endif %}\n{% elif mono_offline %}Cannot verify: this looks like a single-colour print of #{{ gcol | upper }}, which is not in a loaded CFS slot.\n{% elif ns.short %}NOT ENOUGH filament - possible shortfall:\n{{ ns.short | join('\\n') }}{% if ns.req %}\nOK: {{ ns.req | join('; ') }}{% endif %}{% if ns.missing %}\nNo Spoolman spool matched for: {{ ns.missing | join(', ') }}{% endif %}\n{% elif ns.req %}Enough filament:\n{{ ns.req | join('\\n') }}{% if ns.missing %}\nNo Spoolman spool matched for: {{ ns.missing | join(', ') }}{% endif %}\n{% else %}Cannot verify: could not match this job's filament to a loaded CFS slot.{% endif %}", "condition": null, "variables": {"v_job_g": 150, "v_gcol": "", "v_mono": false}, "strict": false, "timeout": 3, "report_errors": true}, "execution_time_ms": 356.2769889831543, "success": true, "error_message": null, "response_size_bytes": 4097, "user_context": null} {"timestamp": "2026-10-14T13:53:19.207342+00:00", "tool_name": "ha_eval_template", "parameters": {"template": "{% set job_g = v_job_g | float(0) %}\n{% set gcol = v_gcol | string | replace('#','') | lower %}\n{% set mono = v_mono %}\n{% set cols = namespace(list=[]) %}\n{% for n in ['1','2','3','4'] %}\n{% set cc = states('sensor.sparkx_i7_cfs_box_1_slot_' ~ n ~ '_color') | replace('#','') | lower %}\n{% if cc not in ['','none','unknown','unavailable'] %}{% set cols.list = cols.list + [cc] %}{% endif %}\n{% endfor %}\n{% set per_slot = gcol if (mono and gcol != '' and gcol in cols.list) else '' %}\n{% set mono_offline = mono and gcol != '' and gcol not in cols.list %}\n{% set ns = namespace(req=[], short=[], missing=[], loaded=[], avail=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{% 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) %}\n{% for e in integration_entities('spoolman') if e.endswith('_color_hex') %}\n{% if sp.id == '' and (states(e) | replace('#','') | lower) == c and (state_attr(e[:-10],'location') | default('', true) | lower) == 'cfs lite' %}\n{% set sp.id = e[:-10] %}\n{% set sp.rem = states(e[:-10]) | float(0) %}\n{% endif %}\n{% endfor %}\n{% if sp.id != '' %}\n{% set ns.avail = ns.avail + sp.rem %}\n{% set ns.loaded = ns.loaded + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g'] %}\n{% endif %}\n{% if job_g > 0 %}\n{% set req = job_g if (per_slot == '' or c == per_slot) else 0 %}\n{% if req > 0 %}\n{% if sp.id == '' %}\n{% set ns.missing = ns.missing + [label ~ ' (#' ~ (c | upper) ~ ')'] %}\n{% elif sp.rem < req %}\n{% set ns.short = ns.short + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g left, up to ' ~ req ~ ' g needed'] %}\n{% else %}\n{% set ns.req = ns.req + [label ~ ': ' ~ (sp.rem | round(1)) ~ ' g left, up to ' ~ req ~ ' g needed'] %}\n{% endif %}\n{% endif %}\n{% endif %}\n{% endfor %}\n{% if job_g <= 0 %}Cannot verify: slicer filament estimate not available yet.{% if ns.loaded %} Loaded: {{ ns.loaded | join('; ') }}.{% endif %}\n{% elif mono_offline %}Cannot verify: this looks like a single-colour print of #{{ gcol | upper }}, which is not in a loaded CFS slot.\n{% elif ns.short %}NOT ENOUGH filament - possible shortfall:\n{{ ns.short | join('\\n') }}{% if ns.req %}\nOK: {{ ns.req | join('; ') }}{% endif %}{% if ns.missing %}\nNo Spoolman spool matched for: {{ ns.missing | join(', ') }}{% endif %}\n{% elif ns.req %}Enough filament:\n{{ ns.req | join('\\n') }}{% if ns.missing %}\nNo Spoolman spool matched for: {{ ns.missing | join(', ') }}{% endif %}\n{% else %}Cannot verify: could not match this job's filament to a loaded CFS slot.{% endif %}", "condition": null, "variables": {"v_job_g": 150, "v_gcol": "FFFFFF", "v_mono": true}, "strict": false, "timeout": 3, "report_errors": true}, "execution_time_ms": 369.60887908935547, "success": true, "error_message": null, "response_size_bytes": 3942, "user_context": null} +{"timestamp": "2026-10-14T15:43:36.773373+00:00", "tool_name": "ha_get_hacs_info", "parameters": {"action": "search", "query": "localtuya", "category": null, "installed_only": false, "max_results": 10, "offset": 0, "repository_id": null, "ctx": {"_STATE_TTL_SECONDS": 86400}}, "execution_time_ms": 467.132568359375, "success": true, "error_message": null, "response_size_bytes": 1266, "user_context": null} diff --git a/zigbee2mqtt/state.json b/zigbee2mqtt/state.json index 268f2288..674eb415 100644 --- a/zigbee2mqtt/state.json +++ b/zigbee2mqtt/state.json @@ -27,8 +27,8 @@ "led_brightness": 100, "countdown_to_turn_off": 0, "countdown_to_turn_on": 0, - "power": 1.9, - "current": 0.09, + "power": 2.3, + "current": 0.1, "energy": 56.26, "power_factor": 0.16, "update": { @@ -45,9 +45,9 @@ "state": "ON", "led_brightness": 100, "countdown_to_turn_off": 0, - "voltage": 118.5, + "voltage": 119, "countdown_to_turn_on": 0, - "energy": 108.78, + "energy": 108.79, "power_factor": 0.9, "ac_frequency": 60, "update": { @@ -58,7 +58,7 @@ "latest_release_notes": null }, "linkquality": 145, - "power": 85.9, + "power": 85.6, "current": 0.83, "power_on_behavior": "on" }, @@ -74,13 +74,13 @@ "led_brightness": 100, "countdown_to_turn_off": 0, "countdown_to_turn_on": 0, - "voltage": 118.1, + "voltage": 119, "state": "ON", "ac_frequency": 60, "energy": 220.95, - "power": 95.1, - "current": 0.89, - "power_factor": 0.95, + "power": 0.8, + "current": 0.05, + "power_factor": 0.39, "update": { "state": "idle", "installed_version": 268513381, @@ -96,10 +96,10 @@ "countdown_to_turn_off": 0, "countdown_to_turn_on": 0, "voltage": 119.5, - "energy": 103.57, + "energy": 103.58, "state": "ON", - "power": 19.8, - "current": 0.32, + "power": 16, + "current": 0.23, "ac_frequency": 60, "power_factor": 0.54, "update": { @@ -136,7 +136,7 @@ "0xffffb40e0608864e": { "led_brightness": 100, "countdown_to_turn_off": 0, - "voltage": 119.5, + "voltage": 120, "energy": 36.92, "countdown_to_turn_on": 0, "state": "ON", @@ -171,7 +171,7 @@ }, "0xa4c1380d0679ffff": { "battery": 100, - "temperature": 11.9, + "temperature": 12, "temperature_units": "celsius", "temperature_calibration": 0, "update": {