diff --git a/.ha_mcp/backups/dashboard.printer-stats.20261010_061830.yaml b/.ha_mcp/backups/dashboard.printer-stats.20261010_061830.yaml new file mode 100644 index 00000000..5c2138ba --- /dev/null +++ b/.ha_mcp/backups/dashboard.printer-stats.20261010_061830.yaml @@ -0,0 +1,787 @@ +# ha_mcp_backup +schema_version: 1 +domain: dashboard +entity_id: printer-stats +captured: '2026-10-10T06:18:30.555566+00:00' +tool: ha_config_set_dashboard +config: + views: + - title: Print + path: print + type: sections + max_columns: 4 + sections: + - type: grid + cards: + - type: heading + heading: Printer Status + icon: mdi:printer-3d-nozzle + - type: custom:webrtc-camera + url: octoprint + ui: true + - type: custom:webrtc-camera + url: octoprint2 + ui: true + - type: tile + entity: binary_sensor.octoprint_printing + name: Printing + icon: mdi:printer-3d + grid_options: + columns: 6 + - type: tile + entity: binary_sensor.octoprint_connected + name: Connected + icon: mdi:lan-connect + grid_options: + columns: 6 + - type: tile + entity: sensor.octoprint_print_status + name: Status + icon: mdi:state-machine + grid_options: + columns: 6 + - type: tile + entity: sensor.octoprint_last_event + name: Last Event + icon: mdi:history + grid_options: + columns: 6 + - type: tile + entity: binary_sensor.octoprint_paused + name: Paused + icon: mdi:pause + grid_options: + columns: 6 + - type: tile + entity: sensor.octoprint_current_z + name: Current Z + icon: mdi:axis-z-arrow + grid_options: + columns: 6 + - type: markdown + content: '**File:** {{ states(''sensor.octoprint_print_file'') }} + + **Size:** {{ (states(''sensor.octoprint_print_file_size'') | int(0) / 1048576) + | round(2) }} MB + + **User:** {{ states(''sensor.octoprint_print_user'') }}' + grid_options: + columns: full + - type: tile + entity: sensor.octoprint_print_file + name: File + icon: mdi:file-code + grid_options: + columns: full + - type: grid + cards: + - type: heading + heading: Print Progress + icon: mdi:progress-clock + - type: gauge + entity: sensor.octoprint_print_progress_live + name: Progress + min: 0 + max: 100 + unit: '%' + severity: + green: 0 + yellow: 40 + red: 90 + grid_options: + columns: 6 + rows: 3 + - type: custom:mushroom-template-card + primary: Elapsed + name: Elapsed + icon: mdi:clock-start + grid_options: + columns: 6 + multiline_secondary: true + secondary: '{% set s = states(''sensor.octoprint_elapsed'') | float(0) %}{% + set h = (s / 3600) | int %}{% set m = ((s % 3600) / 60) | int %}{% if h + %}{{ h }} hr {{ m }} min{% else %}{{ m }} min{% endif %}' + - type: custom:mushroom-template-card + primary: Remaining + name: Remaining + icon: mdi:clock-end + grid_options: + columns: 6 + multiline_secondary: true + secondary: '{% set s = states(''sensor.octoprint_time_left'') | float(-1) + %}{% if s <= 0 %}No estimate{% else %}{% set h = (s / 3600) | int %}{% set + m = ((s % 3600) / 60) | int %}{% if h %}{{ h }} hr {{ m }} min{% else %}{{ + m }} min{% endif %}{% endif %}' + - type: custom:mushroom-template-card + primary: Est. Finish + secondary: "{% set finish = states('sensor.octoprint_approximate_completion_time')\ + \ | as_datetime %}{% if finish %}{{ (as_local(finish)).strftime('%I:%M %p').lstrip('0')\ + \ }}{% else %}\u2014{% endif %}" + multiline_secondary: true + icon: mdi:clock-outline + grid_options: + columns: 6 + - type: custom:mushroom-template-card + primary: Layer + name: Layer + icon: mdi:layers + grid_options: + columns: 6 + multiline_secondary: true + secondary: '{% set c = states(''sensor.octoprint_layer_progress'') | int(0) + %}{% set t = state_attr(''sensor.octoprint_layer_progress'', ''total'') + | int(0) %}{{ c }} of {{ t }}' + - type: custom:mushroom-template-card + primary: Height + name: Height + icon: mdi:axis-z-arrow + grid_options: + columns: 6 + secondary: '{% set c = states(''sensor.octoprint_height_progress_clean'') + | float(0) %}{% set t = state_attr(''sensor.octoprint_height_progress_clean'', + ''total'') | float(0) %}{{ c }} of {{ t }} mm' + multiline_secondary: true + - type: tile + entity: light.3d_printer_lights_local + name: Printer Light + icon: mdi:lightbulb + grid_options: + columns: 6 + - type: sensor + entity: sensor.octoprint_print_progress_live + name: Progress History + graph: line + hours_to_show: 24 + detail: 1 + grid_options: + columns: full + - type: grid + cards: + - type: heading + heading: Temperatures + icon: mdi:thermometer + - type: gauge + entity: sensor.octoprint_tool_0_temperature + name: Nozzle + min: 0 + max: 260 + unit: "\xB0C" + severity: + green: 0 + yellow: 180 + red: 240 + grid_options: + columns: 4 + - type: gauge + entity: sensor.octoprint_bed_temperature + name: Bed + min: 0 + max: 120 + unit: "\xB0C" + severity: + green: 0 + yellow: 60 + red: 100 + grid_options: + columns: 4 + - type: gauge + entity: sensor.octoprint_soc_temperature + name: SoC + min: 0 + max: 100 + unit: "\xB0C" + severity: + green: 0 + yellow: 70 + red: 90 + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_tool_0_target + name: Nozzle Target + icon: mdi:printer-3d-nozzle + grid_options: + columns: 6 + - type: tile + entity: sensor.octoprint_bed_target + name: Bed Target + icon: mdi:radiator + grid_options: + columns: 6 + - title: Nozzle Temperature + type: history-graph + entities: + - entity: sensor.octoprint_tool_0_temperature + name: Actual + color: '#ef5350' + - entity: sensor.octoprint_tool_0_target + name: Target + color: '#4caf50' + hours_to_show: 24 + show_names: true + expand_legend: true + grid_options: + columns: full + - title: Bed Temperature + type: history-graph + entities: + - entity: sensor.octoprint_bed_temperature + name: Actual + color: '#42a5f5' + - entity: sensor.octoprint_bed_target + name: Target + color: '#4caf50' + hours_to_show: 24 + show_names: true + expand_legend: true + grid_options: + columns: full + - type: grid + cards: + - type: heading + heading: Controls + icon: mdi:gesture-tap-button + - type: tile + entity: switch.octoprint_pause_print + name: Pause + icon: mdi:pause + grid_options: + columns: 4 + - type: tile + entity: switch.octoprint_connect_to_printer + name: Connect + icon: mdi:lan-connect + grid_options: + columns: 4 + - type: tile + entity: switch.octoprint_camera_snapshot + name: Snapshot + icon: mdi:camera + grid_options: + columns: 4 + - type: tile + entity: button.octoprint_cancel_print + name: Cancel Print + icon: mdi:cancel + tap_action: + action: perform-action + perform_action: button.press + target: + entity_id: button.octoprint_cancel_print + grid_options: + columns: 6 + - type: tile + entity: button.octoprint_emergency_stop + name: Emergency Stop + icon: mdi:stop-circle + tap_action: + action: perform-action + perform_action: button.press + target: + entity_id: button.octoprint_emergency_stop + grid_options: + columns: 6 + - type: button + name: GCode Viewer + icon: mdi:cube-outline + tap_action: + action: url + url_path: https://ender5pro.duckdns.org/#gcode + grid_options: + columns: 6 + - type: button + name: Pretty GCode Viewer + icon: mdi:cube-outline + tap_action: + action: url + url_path: https://ender5pro.duckdns.org/#tab_plugin_prettygcode + grid_options: + columns: 6 + - type: grid + cards: + - type: heading + heading: Totals + icon: mdi:chart-box-outline + - type: tile + entity: sensor.octoprint_printer_print_time_today + name: Print Time Today + icon: mdi:clock-start + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_printer_print_time_this_week + name: Print Time This Week + icon: mdi:calendar-week + grid_options: + columns: 4 + - type: tile + grid_options: + columns: 4 + entity: sensor.octoprint_printer_print_time_last_7_days + name: Print Time Last 7 Days + icon: mdi:history + vertical: false + features_position: bottom + - type: tile + entity: sensor.octoprint_printer_prints_today + name: Prints Today + icon: mdi:counter + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_printer_prints_this_week + name: Prints This Week + icon: mdi:counter + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_printer_prints_last_7_days + name: Prints Last 7 Days + icon: mdi:counter + grid_options: + columns: 4 + - type: grid + cards: + - type: heading + heading: Filament Usage + icon: mdi:chart-donut + - type: tile + entity: sensor.octoprint_last_print_filament + name: Last Job + icon: mdi:history + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_daily + name: Filament Today + icon: mdi:chart-donut + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_weekly + name: Filament This Week + icon: mdi:calendar-week + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_monthly + name: Filament This Month + icon: mdi:calendar-month + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_used_total + name: Grand Total + icon: mdi:chart-pie + grid_options: + columns: 4 + - type: heading + heading: Grams Usage + icon: mdi:weight + - type: tile + entity: sensor.octoprint_last_print_filament_weight + name: Last Job + icon: mdi:history + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_weight_daily + name: Filament Today + icon: mdi:chart-donut + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_weight_weekly + name: Filament This Week + icon: mdi:calendar-week + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_weight_monthly + name: Filament This Month + icon: mdi:calendar-month + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_used_weight_total + name: Grand Total + icon: mdi:chart-pie + grid_options: + columns: 4 + - type: heading + heading: Cost Usage + icon: mdi:cash-multiple + - type: tile + entity: sensor.octoprint_filament_cost_last_job + name: Last Job + icon: mdi:history + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_cost_daily + name: Cost Today + icon: mdi:chart-donut + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_cost_weekly + name: Cost This Week + icon: mdi:calendar-week + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_cost_monthly + name: Cost This Month + icon: mdi:calendar-month + grid_options: + columns: 4 + - type: tile + entity: sensor.octoprint_filament_cost_total + name: Grand Total + icon: mdi:chart-pie + grid_options: + columns: 4 + - title: History + path: history + type: sections + max_columns: 2 + sections: + - type: grid + cards: + - type: heading + heading: Temperature History + icon: mdi:chart-line-variant + - type: history-graph + title: Temperatures (24h) + hours_to_show: 24 + show_names: true + expand_legend: true + entities: + - entity: sensor.octoprint_tool_0_temperature + name: Nozzle + color: '#ef5350' + - entity: sensor.octoprint_tool_0_target + name: Nozzle Target + color: '#ffab91' + - entity: sensor.octoprint_bed_temperature + name: Bed + color: '#42a5f5' + - entity: sensor.octoprint_bed_target + name: Bed Target + color: '#90caf9' + grid_options: + columns: full + - type: history-graph + title: Temperatures (7 days) + hours_to_show: 168 + show_names: true + expand_legend: true + entities: + - entity: sensor.octoprint_tool_0_temperature + name: Nozzle + color: '#ef5350' + - entity: sensor.octoprint_bed_temperature + name: Bed + color: '#42a5f5' + grid_options: + columns: full + - type: grid + cards: + - type: heading + heading: Print Activity + icon: mdi:chart-box-outline + - type: custom:apexcharts-card + header: + show: true + title: Z Position (24h) + show_states: true + colorize_states: true + graph_span: 24h + series: + - entity: sensor.octoprint_current_z + name: Current Z + color: '#ab47bc' + type: line + curve: straight + fill_raw: last + grid_options: + columns: full + apex_config: + chart: + height: 300 + stroke: + width: 1 + - type: history-graph + title: Print Progress (24h) + hours_to_show: 24 + show_names: true + entities: + - entity: sensor.octoprint_print_progress_live + name: Progress + color: '#66bb6a' + grid_options: + columns: full + - type: history-graph + title: Print Duration (24h) + hours_to_show: 24 + show_names: true + entities: + - entity: sensor.octoprint_elapsed + name: Elapsed + color: '#26c6da' + - entity: sensor.octoprint_time_left + name: Remaining + color: '#ffa726' + grid_options: + columns: full + - type: grid + cards: + - type: heading + heading: Print History + icon: mdi:history + - type: markdown + content: '**Successful:** {{ states(''sensor.octoprint_successful_prints_count'') + }} | **Failed:** {{ states(''sensor.octoprint_failed_prints_count'') }}' + - type: history-graph + title: Printing State (7 days) + hours_to_show: 168 + show_names: true + entities: + - entity: binary_sensor.octoprint_printing + name: Printing + color: '#66bb6a' + grid_options: + columns: full + - type: custom:apexcharts-card + header: + show: true + title: Print Outcomes (30 days) + show_states: true + colorize_states: true + graph_span: 30d + apex_config: + chart: + type: bar + stacked: true + height: 300 + plotOptions: + bar: + columnWidth: 50% + dataLabels: + enabled: true + yaxis: + tickAmount: 4 + labels: + minWidth: 40 + legend: + show: true + series: + - entity: sensor.octoprint_successful_prints_count + name: Successful + color: '#66bb6a' + type: column + group_by: + func: diff + duration: 1d + start_with_last: true + - entity: sensor.octoprint_failed_prints_count + name: Failed + color: '#ef5350' + type: column + group_by: + func: diff + duration: 1d + start_with_last: true + grid_options: + columns: full + span: + end: day + - type: markdown + title: Recent Prints + content: "{% for j in (state_attr('sensor.octoprint_recent_prints', 'allPrintJobs')\ + \ | default([]))[:5] %}\n{% set d = j.get('duration', 0) | int %}\n- **{{\ + \ j.fileName }}** \u2014 {{ j.printStatusResult | title }}, {{ (d / 3600)\ + \ | int }}h {{ ((d % 3600) / 60) | int }}m, {{ j.get('filamentModels', {}).get('total',\ + \ {}).get('usedLength', 0) | round(0) }}mm\n{% endfor %}" + - type: grid + cards: + - type: heading + heading: Filament Usage + icon: mdi:spool + - type: custom:apexcharts-card + header: + show: true + title: Filament Usage (30 days) + show_states: true + colorize_states: true + graph_span: 30d + apex_config: + chart: + type: bar + height: 300 + plotOptions: + bar: + columnWidth: 50% + dataLabels: + enabled: false + yaxis: + tickAmount: 4 + labels: + minWidth: 40 + series: + - entity: sensor.octoprint_filament_daily + name: Used (mm) + color: '#26c6da' + type: column + group_by: + func: last + duration: 1d + start_with_last: true + - entity: sensor.octoprint_filament_used_total + name: Total (mm) + color: '#ab47bc' + type: line + curve: straight + group_by: + func: last + duration: 1d + start_with_last: true + - entity: sensor.octoprint_filament_weekly + name: Weekly (mm) + color: '#ffca28' + type: column + group_by: + func: last + duration: 1d + start_with_last: true + grid_options: + columns: full + span: + end: day + - type: custom:apexcharts-card + header: + show: true + title: Filament Usage - Grams (30 days) + show_states: true + colorize_states: true + graph_span: 30d + apex_config: + chart: + type: bar + height: 300 + plotOptions: + bar: + columnWidth: 50% + dataLabels: + enabled: false + yaxis: + tickAmount: 4 + labels: + minWidth: 40 + series: + - entity: sensor.octoprint_filament_weight_daily + name: Used (g) + color: '#26c6da' + type: column + group_by: + func: last + duration: 1d + start_with_last: true + - entity: sensor.octoprint_filament_used_weight_total + name: Total (g) + color: '#ab47bc' + type: line + curve: straight + group_by: + func: last + duration: 1d + start_with_last: true + - entity: sensor.octoprint_filament_weight_weekly + name: Weekly (g) + color: '#ffca28' + type: column + group_by: + func: last + duration: 1d + start_with_last: true + grid_options: + columns: full + span: + end: day + - type: custom:apexcharts-card + header: + show: true + title: Filament Usage - Cost (30 days) + show_states: true + colorize_states: true + graph_span: 30d + apex_config: + chart: + type: bar + height: 300 + plotOptions: + bar: + columnWidth: 50% + dataLabels: + enabled: false + yaxis: + tickAmount: 4 + labels: + minWidth: 40 + series: + - entity: sensor.octoprint_filament_cost_daily + name: Used ($) + color: '#26c6da' + type: column + group_by: + func: last + duration: 1d + start_with_last: true + - entity: sensor.octoprint_filament_cost_weekly + name: Weekly ($) + color: '#ffca28' + type: column + group_by: + func: last + duration: 1d + start_with_last: true + - entity: sensor.octoprint_filament_cost_total + name: Total ($) + color: '#ab47bc' + type: line + curve: straight + group_by: + func: last + duration: 1d + start_with_last: true + grid_options: + columns: full + span: + end: day + - type: grid + cards: + - type: heading + heading: OctoPrint Host + icon: mdi:server + - type: tile + entity: sensor.octoprint_disk_usage + icon: mdi:harddisk + - type: tile + entity: sensor.octoprint_cpu_usage + icon: mdi:cpu-64-bit + - type: tile + entity: sensor.octoprint_memory_usage + icon: mdi:memory + - type: tile + entity: sensor.octoprint_core_0_temperature + icon: mdi:thermometer + - type: tile + entity: sensor.octoprint_uptime + icon: mdi:clock-outline + - type: sections + max_columns: 4 + title: Test + path: test + sections: + - type: grid + cards: [] diff --git a/.ha_mcp/logs/mcp_usage.jsonl b/.ha_mcp/logs/mcp_usage.jsonl index 7fdd82d2..19745252 100644 --- a/.ha_mcp/logs/mcp_usage.jsonl +++ b/.ha_mcp/logs/mcp_usage.jsonl @@ -4271,3 +4271,4 @@ {"timestamp": "2026-10-10T06:16:58.823790+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": null, "mode": null, "query": null}, "execution_time_ms": 34.96861457824707, "success": true, "error_message": null, "response_size_bytes": 57424, "user_context": null} {"timestamp": "2026-10-10T06:16:58.964355+00:00", "tool_name": "ha_search", "parameters": {"query": "atc_3d_temperature", "domain_filter": null, "area_filter": null, "search_types": null, "limit": 10, "offset": 0, "exact_match": true, "include_hidden": true, "include_config": false, "group_by_domain": false, "per_domain_limit": null, "state_filter": null, "result_fields": null, "fields": null, "config_time_budget": null, "ctx": {"_STATE_TTL_SECONDS": 86400}}, "execution_time_ms": 176.8505573272705, "success": true, "error_message": null, "response_size_bytes": 506, "user_context": null} {"timestamp": "2026-10-10T06:17:25.283728+00:00", "tool_name": "ha_get_state", "parameters": {"entity_id": ["camera.sparkx_moonraker_back", "camera.sparkx_moonraker_bed", "camera.sparkx_moonraker_thumbnail", "number.sparkx_moonraker_output_pin_fan0", "sensor.sparkx_moonraker_hotend_fan", "sensor.sparkx_moonraker_mcu_temp"], "fields": ["entity_id", "state", "attributes"], "attribute_keys": ["friendly_name", "access_token", "entity_picture", "unit_of_measurement", "device_class"]}, "execution_time_ms": 13.564825057983398, "success": true, "error_message": null, "response_size_bytes": 2121, "user_context": null} +{"timestamp": "2026-10-10T06:18:30.910601+00:00", "tool_name": "ha_config_set_dashboard", "parameters": {"url_path": "printer-stats", "config": null, "python_transform": "config['views'][2]['sections'] = [\n {'type': 'grid', 'cards': [\n {'type': 'custom:mushroom-title-card', 'title': \"Moonraker – {{ states('sensor.sparkx_moonraker_current_display_message') }}\", 'subtitle': \"{{ states('sensor.sparkx_moonraker_filename') }}\", 'alignment': 'center', 'title_tap_action': {'action': 'url', 'url_path': 'http://moonraker.local/'}},\n {'type': 'tile', 'entity': 'sensor.sparkx_moonraker_current_print_state', 'name': 'Status', 'grid_options': {'columns': 4}},\n {'type': 'tile', 'entity': 'sensor.sparkx_moonraker_print_duration', 'name': 'Elapsed', 'grid_options': {'columns': 4}},\n {'type': 'tile', 'entity': 'sensor.sparkx_moonraker_print_eta', 'name': 'Completion', 'grid_options': {'columns': 4}},\n {'type': 'tile', 'entity': 'sensor.sparkx_moonraker_progress', 'name': 'Print Progress', 'icon': 'mdi:clock-end', 'features': [{'type': 'bar-gauge', 'min': 0, 'max': 100}], 'grid_options': {'columns': 'full'}}\n ]},\n {'type': 'grid', 'cards': [\n {'type': 'heading', 'heading': 'Controls', 'icon': 'mdi:gesture-tap-button'},\n {'type': 'grid', 'columns': 4, 'square': False, 'cards': [\n {'type': 'custom:button-card', 'entity': 'button.sparkx_moonraker_pause_print', 'color_type': 'icon', 'tap_action': {'action': 'toggle'}, 'name': 'Pause'},\n {'type': 'custom:button-card', 'entity': 'button.sparkx_moonraker_resume_print', 'color_type': 'icon', 'tap_action': {'action': 'toggle'}, 'name': 'Resume'},\n {'type': 'custom:button-card', 'entity': 'button.sparkx_moonraker_cancel_print', 'color_type': 'icon', 'tap_action': {'action': 'toggle'}, 'name': 'Cancel', 'lock': {'enabled': False}, 'confirmation': {'text': 'This will CANCEL the print. Are you sure?'}},\n {'type': 'custom:button-card', 'entity': 'button.sparkx_moonraker_emergency_stop', 'color_type': 'icon', 'color': 'red', 'tap_action': {'action': 'toggle'}, 'name': 'Emergency', 'lock': {'enabled': False}, 'confirmation': {'text': 'This will REBOOT the printer. Are you sure?'}}\n ], 'grid_options': {'columns': 'full'}}\n ]},\n {'type': 'grid', 'cards': [\n {'type': 'heading', 'heading': 'Printer Temperatures', 'icon': 'mdi:thermometer'},\n {'type': 'custom:apexcharts-card', 'graph_span': '1h', 'header': {'show': True, 'title': 'Printer Temperatures', 'show_states': True, 'colorize_states': True}, 'apex_config': {'chart': {'height': 200, 'legend': {'show': False}}, 'grid': {'xaxis': {'lines': {'show': True}, 'borderColor': '#555'}}, 'yaxis': [{'opposite': True, 'decimals': 0, 'tickAmount': 2}]}, 'all_series_config': {'stroke_width': 2, 'float_precision': 0, 'show': {'name_in_header': True}}, 'series': [\n {'entity': 'sensor.sparkx_moonraker_extruder_temperature', 'name': 'Hotend'},\n {'entity': 'sensor.sparkx_moonraker_bed_temperature', 'name': 'Bed'},\n {'entity': 'sensor.sparkx_moonraker_mcu_temp', 'name': 'MCU'}\n ], 'grid_options': {'columns': 'full'}}\n ]},\n {'type': 'grid', 'cards': [\n {'type': 'heading', 'heading': 'Fan Speeds', 'icon': 'mdi:fan'},\n {'type': 'custom:apexcharts-card', 'graph_span': '1h', 'header': {'show': True, 'title': 'Fan Speeds', 'show_states': True, 'colorize_states': True}, 'apex_config': {'chart': {'height': 200, 'legend': {'show': False}}, 'grid': {'xaxis': {'lines': {'show': True}, 'borderColor': '#555'}}, 'yaxis': [{'opposite': True, 'decimals': 0, 'tickAmount': 2}]}, 'all_series_config': {'stroke_width': 2, 'show': {'name_in_header': True}}, 'series': [\n {'entity': 'sensor.sparkx_moonraker_hotend_fan', 'name': 'Hotend'}\n ], 'grid_options': {'columns': 'full'}}\n ]},\n {'type': 'grid', 'cards': [\n {'type': 'heading', 'heading': 'Camera', 'icon': 'mdi:camera'},\n {'type': 'conditional', 'conditions': [{'entity': 'sensor.sparkx_moonraker_current_print_state', 'state_not': 'unavailable'}], 'card': {'type': 'picture-entity', 'entity': 'camera.sparkx_moonraker_back', 'camera_view': 'live', 'show_name': False, 'show_state': False, 'aspect_ratio': '4x3'}, 'grid_options': {'columns': 6}},\n {'type': 'conditional', 'conditions': [{'entity': 'sensor.sparkx_moonraker_current_print_state', 'state_not': 'unavailable'}], 'card': {'type': 'picture-entity', 'entity': 'camera.sparkx_moonraker_thumbnail', 'camera_view': 'auto', 'show_name': False, 'show_state': False}, 'grid_options': {'columns': 6}}\n ]}\n]", "config_hash": "968e5b5ada3420d2", "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": 142.09318161010742, "success": true, "error_message": null, "response_size_bytes": 5638, "user_context": null} diff --git a/.storage/lovelace.printer_stats b/.storage/lovelace.printer_stats index cee221d3..202c7d09 100644 --- a/.storage/lovelace.printer_stats +++ b/.storage/lovelace.printer_stats @@ -1156,7 +1156,301 @@ "sections": [ { "type": "grid", - "cards": [] + "cards": [ + { + "type": "custom:mushroom-title-card", + "title": "Moonraker – {{ states('sensor.sparkx_moonraker_current_display_message') }}", + "subtitle": "{{ states('sensor.sparkx_moonraker_filename') }}", + "alignment": "center", + "title_tap_action": { + "action": "url", + "url_path": "http://moonraker.local/" + } + }, + { + "type": "tile", + "entity": "sensor.sparkx_moonraker_current_print_state", + "name": "Status", + "grid_options": { + "columns": 4 + } + }, + { + "type": "tile", + "entity": "sensor.sparkx_moonraker_print_duration", + "name": "Elapsed", + "grid_options": { + "columns": 4 + } + }, + { + "type": "tile", + "entity": "sensor.sparkx_moonraker_print_eta", + "name": "Completion", + "grid_options": { + "columns": 4 + } + }, + { + "type": "tile", + "entity": "sensor.sparkx_moonraker_progress", + "name": "Print Progress", + "icon": "mdi:clock-end", + "features": [ + { + "type": "bar-gauge", + "min": 0, + "max": 100 + } + ], + "grid_options": { + "columns": "full" + } + } + ] + }, + { + "type": "grid", + "cards": [ + { + "type": "heading", + "heading": "Controls", + "icon": "mdi:gesture-tap-button" + }, + { + "type": "grid", + "columns": 4, + "square": false, + "cards": [ + { + "type": "custom:button-card", + "entity": "button.sparkx_moonraker_pause_print", + "color_type": "icon", + "tap_action": { + "action": "toggle" + }, + "name": "Pause" + }, + { + "type": "custom:button-card", + "entity": "button.sparkx_moonraker_resume_print", + "color_type": "icon", + "tap_action": { + "action": "toggle" + }, + "name": "Resume" + }, + { + "type": "custom:button-card", + "entity": "button.sparkx_moonraker_cancel_print", + "color_type": "icon", + "tap_action": { + "action": "toggle" + }, + "name": "Cancel", + "lock": { + "enabled": false + }, + "confirmation": { + "text": "This will CANCEL the print. Are you sure?" + } + }, + { + "type": "custom:button-card", + "entity": "button.sparkx_moonraker_emergency_stop", + "color_type": "icon", + "color": "red", + "tap_action": { + "action": "toggle" + }, + "name": "Emergency", + "lock": { + "enabled": false + }, + "confirmation": { + "text": "This will REBOOT the printer. Are you sure?" + } + } + ], + "grid_options": { + "columns": "full" + } + } + ] + }, + { + "type": "grid", + "cards": [ + { + "type": "heading", + "heading": "Printer Temperatures", + "icon": "mdi:thermometer" + }, + { + "type": "custom:apexcharts-card", + "graph_span": "1h", + "header": { + "show": true, + "title": "Printer Temperatures", + "show_states": true, + "colorize_states": true + }, + "apex_config": { + "chart": { + "height": 200, + "legend": { + "show": false + } + }, + "grid": { + "xaxis": { + "lines": { + "show": true + }, + "borderColor": "#555" + } + }, + "yaxis": [ + { + "opposite": true, + "decimals": 0, + "tickAmount": 2 + } + ] + }, + "all_series_config": { + "stroke_width": 2, + "float_precision": 0, + "show": { + "name_in_header": true + } + }, + "series": [ + { + "entity": "sensor.sparkx_moonraker_extruder_temperature", + "name": "Hotend" + }, + { + "entity": "sensor.sparkx_moonraker_bed_temperature", + "name": "Bed" + }, + { + "entity": "sensor.sparkx_moonraker_mcu_temp", + "name": "MCU" + } + ], + "grid_options": { + "columns": "full" + } + } + ] + }, + { + "type": "grid", + "cards": [ + { + "type": "heading", + "heading": "Fan Speeds", + "icon": "mdi:fan" + }, + { + "type": "custom:apexcharts-card", + "graph_span": "1h", + "header": { + "show": true, + "title": "Fan Speeds", + "show_states": true, + "colorize_states": true + }, + "apex_config": { + "chart": { + "height": 200, + "legend": { + "show": false + } + }, + "grid": { + "xaxis": { + "lines": { + "show": true + }, + "borderColor": "#555" + } + }, + "yaxis": [ + { + "opposite": true, + "decimals": 0, + "tickAmount": 2 + } + ] + }, + "all_series_config": { + "stroke_width": 2, + "show": { + "name_in_header": true + } + }, + "series": [ + { + "entity": "sensor.sparkx_moonraker_hotend_fan", + "name": "Hotend" + } + ], + "grid_options": { + "columns": "full" + } + } + ] + }, + { + "type": "grid", + "cards": [ + { + "type": "heading", + "heading": "Camera", + "icon": "mdi:camera" + }, + { + "type": "conditional", + "conditions": [ + { + "entity": "sensor.sparkx_moonraker_current_print_state", + "state_not": "unavailable" + } + ], + "card": { + "type": "picture-entity", + "entity": "camera.sparkx_moonraker_back", + "camera_view": "live", + "show_name": false, + "show_state": false, + "aspect_ratio": "4x3" + }, + "grid_options": { + "columns": 6 + } + }, + { + "type": "conditional", + "conditions": [ + { + "entity": "sensor.sparkx_moonraker_current_print_state", + "state_not": "unavailable" + } + ], + "card": { + "type": "picture-entity", + "entity": "camera.sparkx_moonraker_thumbnail", + "camera_view": "auto", + "show_name": false, + "show_state": false + }, + "grid_options": { + "columns": 6 + } + } + ] } ] }