diff --git a/.ha_mcp/logs/mcp_usage.jsonl b/.ha_mcp/logs/mcp_usage.jsonl index c60c66e1..387e84c0 100644 --- a/.ha_mcp/logs/mcp_usage.jsonl +++ b/.ha_mcp/logs/mcp_usage.jsonl @@ -4049,3 +4049,6 @@ {"timestamp": "2026-10-08T18:31:31.662481+00:00", "tool_name": "ha_eval_template", "parameters": {"template": "{% set bb = 'sensor.spoolman_spool_3' %}used_w={{ state_attr(bb, 'used_weight') }} used_pct={{ state_attr(bb, 'used_percentage') }} init_w={{ state_attr(bb, 'initial_weight') }} rem_len={{ state_attr(bb, 'remaining_length') }} used_len={{ state_attr(bb, 'used_length') }} dens={{ state_attr(bb, 'filament_density') }} art={{ state_attr(bb, 'filament_article_number') | default('—', true) }} pic={{ state_attr(bb, 'entity_picture') | default('—', true) }} arch={{ state_attr(bb, 'archived') }} price={{ state_attr(bb, 'filament_price') | default('—', true) }}", "condition": null, "variables": null, "strict": false, "timeout": 3, "report_errors": true}, "execution_time_ms": 34.293174743652344, "success": true, "error_message": null, "response_size_bytes": 864, "user_context": null} {"timestamp": "2026-10-08T18:34:55.811830+00:00", "tool_name": "ha_config_set_dashboard", "parameters": {"url_path": "sparkx-i7", "config": null, "python_transform": "v = config['views'][3]; s = v['sections']\ndel s[4]; del s[3]; del s[2]; del s[1]\nlookup = \"{% set color = states('sensor.sparkx_i7_cfs_box_1_slot_@N@_color') | replace('#', '') | lower %}{% set ns = namespace(id='') %}{% for e in integration_entities('spoolman') %}{% if e.endswith('_color_hex') and (states(e) | replace('#', '') | lower) == color %}{% set b = e[:-10] %}{% if (states(b) | float(0)) > 0 and ns.id == '' %}{% set ns.id = states(b ~ '_id') %}{% endif %}{% endif %}{% endfor %}\"\ntail = \"{% elif color in ['', 'unknown', 'unavailable'] %}Slot color unavailable{% else %}No spool with stock matches this color{% endif %}\"\nbody = \"{% if ns.id %}\" + \"\\n\".join([\n \"{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_vendor_name') | default('?', true) }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_material') | default('?', true) }} · #{{ color | upper }}\",\n \"Remaining: {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g · used {{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_weight') | float(0)) | round(1) }} g ({{ (state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_percentage') | float(0)) | round(1) }}%)\",\n \"Remaining length: {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'remaining_length') | float(0)) / 1000) | round(1) }} m · used {{ ((state_attr('sensor.spoolman_spool_' ~ ns.id, 'used_length') | float(0)) / 1000) | round(1) }} m\",\n \"Spool: Ø{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_diameter') | default('?', true) }} mm · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_density') | default('?', true) }} g/cm³ · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_weight') | default('?', true) }} g · art. {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_article_number') | default('?', true) }}\",\n \"Temps: bed {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_bed_temp') | default('?', true) }}°C · hotend {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_settings_extruder_temp') | default('?', true) }}°C\",\n \"Flow: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_flow_rate') }} · Runout est.: {{ states('sensor.spoolman_spool_' ~ ns.id ~ '_estimated_runout') }}\",\n \"Registered: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'registered') | default('?', true) }} · Location: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'location') | default('?', true) }} · Price: {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_price') | default('?', true) }}\"\n])\ncards = []\nfor n in [1, 2, 3, 4]: cards.append({\"type\": \"custom:mushroom-template-card\", \"entity\": \"sensor.sparkx_i7_cfs_box_1_slot_@N@_color\".replace('@N@', str(n)), \"name\": \"Slot @N@\".replace('@N@', str(n)), \"icon\": \"mdi:spool\", \"icon_color\": \"{% set c = states('sensor.sparkx_i7_cfs_box_1_slot_@N@_color') | replace('#', '') | lower %}{% if c | length == 6 %}#{{ c }}{% else %}var(--primary-color){% endif %}\".replace('@N@', str(n)), \"picture\": (lookup + \"{{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') if ns.id and state_attr('sensor.spoolman_spool_' ~ ns.id, 'entity_picture') else '' }}\").replace('@N@', str(n)), \"primary\": (lookup + \"{% if ns.id %}Spool {{ ns.id }} · {{ state_attr('sensor.spoolman_spool_' ~ ns.id, 'filament_name') | default('?', true) }} · {{ (states('sensor.spoolman_spool_' ~ ns.id) | float(0)) | round(1) }} g left\" + tail).replace('@N@', str(n)), \"secondary\": (lookup + body + tail).replace('@N@', str(n)), \"multiline_secondary\": True, \"grid_options\": {\"columns\": 6}})\ns.insert(1, {\"type\": \"grid\", \"cards\": [{\"type\": \"heading\", \"heading\": \"Spool Details — CFS Lite\", \"icon\": \"mdi:spool\"}] + cards})\ns[4] = {\"type\": \"grid\", \"cards\": [{\"type\": \"heading\", \"heading\": \"Spool History — CFS Lite (auto)\", \"icon\": \"mdi:history\"}, {\"type\": \"custom:auto-entities\", \"filter\": {\"include\": [{\"entity_id\": \"sensor.spoolman_spool_*\", \"attributes\": {\"location\": \"CFS Lite\"}}]}, \"sort\": {\"method\": \"attribute\", \"attribute\": \"id\", \"numeric\": True}, \"card\": {\"type\": \"history-graph\", \"title\": \"Remaining weight (7 days)\", \"hours_to_show\": 168, \"show_names\": True}, \"show_empty\": False, \"grid_options\": {\"columns\": \"full\"}}, {\"type\": \"markdown\", \"content\": \"Every spool with location **CFS Lite** joins this graph automatically — register a new roll in Spoolman (same color hex, location CFS Lite) and it appears without dashboard edits. History follows the spool entity; a replaced roll keeps its own history under its own spool id.\", \"grid_options\": {\"columns\": \"full\"}}]}", "config_hash": "2842457c0302206d", "title": null, "icon": null, "require_admin": null, "show_in_sidebar": null, "MandatoryBPS": true, "BestPracticeKey": null, "return_screenshot": false, "view_path": null, "patch": null}, "execution_time_ms": 32.436370849609375, "success": true, "error_message": null, "response_size_bytes": 37423, "user_context": null} {"timestamp": "2026-10-08T18:35:02.972738+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": "sparkx-i7", "list_only": false, "force_reload": false, "entity_id": null, "card_type": null, "heading": null, "include_config": false, "include_screenshot": false, "view_path": "spoolman", "mode": null, "query": null}, "execution_time_ms": 314.3584728240967, "success": true, "error_message": null, "response_size_bytes": 29804, "user_context": null} +{"timestamp": "2026-10-08T18:36:56.847630+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": "sparkx-i7", "list_only": false, "force_reload": false, "entity_id": null, "card_type": "heading", "heading": "Spool 3", "include_config": false, "include_screenshot": false, "view_path": null, "mode": null, "query": null}, "execution_time_ms": 5.962371826171875, "success": true, "error_message": null, "response_size_bytes": 383, "user_context": null} +{"timestamp": "2026-10-08T18:36:56.855946+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": "sparkx-i7", "list_only": false, "force_reload": false, "entity_id": null, "card_type": "heading", "heading": "Spool", "include_config": false, "include_screenshot": false, "view_path": null, "mode": null, "query": null}, "execution_time_ms": 13.239383697509766, "success": true, "error_message": null, "response_size_bytes": 680, "user_context": null} +{"timestamp": "2026-10-08T18:36:56.859383+00:00", "tool_name": "ha_config_get_dashboard", "parameters": {"url_path": null, "list_only": true, "force_reload": false, "entity_id": null, "card_type": null, "heading": null, "include_config": false, "include_screenshot": false, "view_path": null, "mode": null, "query": null}, "execution_time_ms": 16.191959381103516, "success": true, "error_message": null, "response_size_bytes": 2166, "user_context": null} diff --git a/zigbee2mqtt/state.json b/zigbee2mqtt/state.json index aac4e091..68c625ca 100644 --- a/zigbee2mqtt/state.json +++ b/zigbee2mqtt/state.json @@ -7,7 +7,7 @@ "voltage": 118.7, "countdown_to_turn_on": 0, "ac_frequency": 60, - "power_factor": 0.11, + "power_factor": 0.15, "update": { "state": "idle", "installed_version": 268513381, @@ -27,7 +27,7 @@ "led_brightness": 100, "countdown_to_turn_off": 0, "countdown_to_turn_on": 0, - "power": 2, + "power": 1.9, "current": 0.09, "energy": 54.02, "power_factor": 0.17, @@ -45,7 +45,7 @@ "state": "ON", "led_brightness": 100, "countdown_to_turn_off": 0, - "voltage": 118.5, + "voltage": 118.3, "countdown_to_turn_on": 0, "energy": 103.7, "power_factor": 0.9, @@ -77,8 +77,8 @@ "voltage": 117.4, "state": "ON", "ac_frequency": 60, - "energy": 210.49, - "power": 102.5, + "energy": 210.5, + "power": 101.8, "current": 0.94, "power_factor": 0.95, "update": { @@ -95,13 +95,13 @@ "led_brightness": 100, "countdown_to_turn_off": 0, "countdown_to_turn_on": 0, - "voltage": 119.1, + "voltage": 119.3, "energy": 100.69, "state": "ON", - "power": 10.1, - "current": 0.32, + "power": 23.3, + "current": 0.35, "ac_frequency": 60, - "power_factor": 0.51, + "power_factor": 0.52, "update": { "state": "idle", "installed_version": 268513381, @@ -136,7 +136,7 @@ "0xffffb40e0608864e": { "led_brightness": 100, "countdown_to_turn_off": 0, - "voltage": 119, + "voltage": 120.2, "energy": 33.5, "countdown_to_turn_on": 0, "state": "ON", @@ -171,7 +171,7 @@ }, "0xa4c1380d0679ffff": { "battery": 100, - "temperature": 23.2, + "temperature": 23.1, "temperature_units": "celsius", "temperature_calibration": 0, "update": {