From 0e6c4e97e202b2915839fa356bb228a3f1b9dd60 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Fri, 6 Mar 2026 11:27:54 -0500 Subject: [PATCH] Update HA version to 2026.3.0 and enhance dashboard configurations - Updated the Home Assistant version in the configuration file. - Added new bubble cards for Docker container status monitoring in the infrastructure dashboard. - Included popups for maintenance actions related to specific Docker containers in the infrastructure dashboard. - Refined navigation paths in the overview dashboard for better user experience. --- config/.HA_VERSION | 2 +- .../partials/docker_containers_sections.yaml | 125 +++++++++++++++++- .../partials/proxmox_sections.yaml | 41 +++++- .../partials/website_health_sections.yaml | 123 ++++++++++++++++- .../popups/docker_10_maintenance.yaml | 58 ++++++++ .../dashboards/overview/views/06_water.yaml | 23 ---- .../dashboards/overview/views/07_admin.yaml | 18 --- 7 files changed, 340 insertions(+), 50 deletions(-) create mode 100644 config/dashboards/infrastructure/popups/docker_10_maintenance.yaml delete mode 100644 config/dashboards/overview/views/06_water.yaml delete mode 100644 config/dashboards/overview/views/07_admin.yaml diff --git a/config/.HA_VERSION b/config/.HA_VERSION index fcba00b3..80add063 100755 --- a/config/.HA_VERSION +++ b/config/.HA_VERSION @@ -1 +1 @@ -2026.2.3 \ No newline at end of file +2026.3.0 \ No newline at end of file diff --git a/config/dashboards/infrastructure/partials/docker_containers_sections.yaml b/config/dashboards/infrastructure/partials/docker_containers_sections.yaml index 3417b05e..a17700a6 100644 --- a/config/dashboards/infrastructure/partials/docker_containers_sections.yaml +++ b/config/dashboards/infrastructure/partials/docker_containers_sections.yaml @@ -4,11 +4,12 @@ # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # ------------------------------------------------------------------- # Infrastructure Partial - Docker containers sections -# Related Issue: 1560 +# Related Issue: 1560, 1584 # Sections layout for the Docker containers view. # ------------------------------------------------------------------- # Notes: Auto-discovers Portainer container entities from `switch.*_container`. # Notes: Keeps cards visible when Portainer telemetry is unavailable (degraded mode). +# Notes: Includes stack-level status tiles from Portainer `*_stack_status` entities. ###################################################################### - type: grid @@ -32,6 +33,76 @@ name: NAS Used icon: mdi:nas +- type: grid + column_span: 4 + columns: 4 + square: false + cards: + - type: custom:bubble-card + card_type: button + button_type: state + entity: sensor.docker_10_apt_status + name: docker_10 + icon: mdi:server + show_state: true + show_last_changed: true + card_layout: large + tap_action: + action: navigate + navigation_path: '#infra-docker-10' + button_action: + tap_action: + action: navigate + navigation_path: '#infra-docker-10' + - type: custom:bubble-card + card_type: button + button_type: state + entity: sensor.docker_17_apt_status + name: docker_17 + icon: mdi:server + show_state: true + show_last_changed: true + card_layout: large + tap_action: + action: navigate + navigation_path: '#infra-docker-17' + button_action: + tap_action: + action: navigate + navigation_path: '#infra-docker-17' + - type: custom:bubble-card + card_type: button + button_type: state + entity: sensor.docker_69_apt_status + name: docker_69 + icon: mdi:server + show_state: true + show_last_changed: true + card_layout: large + tap_action: + action: navigate + navigation_path: '#infra-docker-69' + button_action: + tap_action: + action: navigate + navigation_path: '#infra-docker-69' + - type: custom:bubble-card + card_type: button + button_type: state + entity: sensor.docker_14_apt_status + name: docker_14 + icon: mdi:server + show_state: true + show_last_changed: true + card_layout: large + tap_action: + action: navigate + navigation_path: '#infra-docker-14' + button_action: + tap_action: + action: navigate + navigation_path: '#infra-docker-14' + - type: grid column_span: 4 columns: 4 @@ -70,6 +141,53 @@ prune_button: button.docker2_prune_unused_images name: docker_14 +- type: grid + column_span: 4 + columns: 1 + square: false + cards: + - type: custom:vertical-stack-in-card + grid_options: + columns: full + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml + cards: + - type: custom:button-card + template: bearstone_infra_panel_header + name: Docker Stacks + - type: custom:auto-entities + show_empty: true + card: + type: custom:layout-card + layout_type: custom:grid-layout + layout: + grid-template-columns: repeat(2, minmax(0, 1fr)) + grid-auto-flow: row + grid-auto-rows: min-content + grid-gap: 12px + margin: 0 + mediaquery: + "(max-width: 900px)": + grid-template-columns: repeat(1, minmax(0, 1fr)) + card_param: cards + filter: + include: + - entity_id: binary_sensor.*_stack_status + options: + type: custom:button-card + template: bearstone_infra_list_row_running + icon: mdi:package-variant + state_display: > + [[[ + const base = entity.entity_id.replace('binary_sensor.', '').replace('_stack_status', ''); + const count = states[`sensor.${base}_stack_containers_count`]?.state ?? 'n/a'; + const type = String(states[`sensor.${base}_stack_type`]?.state ?? 'n/a').toUpperCase(); + const status = entity.state === 'on' ? 'RUNNING' : 'DOWN'; + return `${status} | ${count} ctrs | ${type}`; + ]]] + sort: + method: name + - type: grid column_span: 4 columns: 1 @@ -121,3 +239,8 @@ icon: mdi:docker sort: method: name + +- !include /config/dashboards/infrastructure/popups/docker_10_maintenance.yaml +- !include /config/dashboards/infrastructure/popups/docker_17_maintenance.yaml +- !include /config/dashboards/infrastructure/popups/docker_69_maintenance.yaml +- !include /config/dashboards/infrastructure/popups/docker_14_maintenance.yaml diff --git a/config/dashboards/infrastructure/partials/proxmox_sections.yaml b/config/dashboards/infrastructure/partials/proxmox_sections.yaml index ff77c025..7df52b13 100644 --- a/config/dashboards/infrastructure/partials/proxmox_sections.yaml +++ b/config/dashboards/infrastructure/partials/proxmox_sections.yaml @@ -6,12 +6,13 @@ # Infrastructure Partial - proxmox sections # Reusable list extracted from a view for smaller diffs and safer edits. # ------------------------------------------------------------------- +# Related Issue: 1584 # Notes: Standardized on `custom:button-card` + `custom:mini-graph-card` with `card_mod` polish. ###################################################################### - type: grid column_span: 4 - columns: 4 + columns: 6 square: false cards: - type: custom:button-card @@ -24,6 +25,11 @@ entity: sensor.node_proxmox1_memory_used_percentage name: P1 MEM icon: mdi:memory + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.proxmox1_disk_used_percentage + name: P1 DISK + icon: mdi:harddisk - type: custom:button-card template: bearstone_infra_kpi entity: sensor.node_proxmox02_cpu_used @@ -34,6 +40,31 @@ entity: sensor.node_proxmox02_memory_used_percentage name: P2 MEM icon: mdi:memory + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.proxmox02_disk_used_percentage + name: P2 DISK + icon: mdi:harddisk + +- type: grid + column_span: 4 + columns: 2 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_list_row_running + entity: binary_sensor.proxmox1_runtime_healthy + name: Proxmox01 Runtime + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'ONLINE' : 'OFFLINE'; ]]] + - type: custom:button-card + template: bearstone_infra_list_row_running + entity: binary_sensor.proxmox02_runtime_healthy + name: Proxmox02 Runtime + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'ONLINE' : 'OFFLINE'; ]]] - type: grid column_span: 4 @@ -48,7 +79,7 @@ template: bearstone_infra_panel_header name: Proxmox01 - type: custom:mini-graph-card - name: Host CPU / Memory + name: Host CPU / Memory / Disk icon: mdi:server hours_to_show: 24 points_per_hour: 2 @@ -65,6 +96,8 @@ name: CPU - entity: sensor.node_proxmox1_memory_used_percentage name: Memory + - entity: sensor.proxmox1_disk_used_percentage + name: Disk - type: custom:mini-graph-card name: VMs CPU / Memory icon: mdi:chart-line @@ -100,7 +133,7 @@ template: bearstone_infra_panel_header name: Proxmox02 - type: custom:mini-graph-card - name: Host CPU / Memory + name: Host CPU / Memory / Disk icon: mdi:server hours_to_show: 24 points_per_hour: 2 @@ -117,6 +150,8 @@ name: CPU - entity: sensor.node_proxmox02_memory_used_percentage name: Memory + - entity: sensor.proxmox02_disk_used_percentage + name: Disk - type: custom:mini-graph-card name: Frigate VM CPU / Memory icon: mdi:video diff --git a/config/dashboards/infrastructure/partials/website_health_sections.yaml b/config/dashboards/infrastructure/partials/website_health_sections.yaml index 88a49367..4841a26e 100644 --- a/config/dashboards/infrastructure/partials/website_health_sections.yaml +++ b/config/dashboards/infrastructure/partials/website_health_sections.yaml @@ -4,9 +4,10 @@ # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # ------------------------------------------------------------------- # Infrastructure Partial - Website health sections -# Website uptime + domain expiry + certificate telemetry detail view. +# Website uptime + response windows + domain expiry telemetry view. # ------------------------------------------------------------------- -# Notes: Keep the first section full-width to avoid whitespace. +# Related Issue: 1584 +# Notes: Uses direct Uptime Kuma entities (no aggregate uptime min sensors). ###################################################################### # ------------------------------------------------------------------- @@ -73,6 +74,94 @@ icon: mdi:web-check state_display: > [[[ return entity.state === 'on' ? 'UP' : (entity.state || 'unknown').toUpperCase(); ]]] + - type: custom:button-card + template: bearstone_infra_list_row + entity: binary_sensor.vcloudinfo_com + name: vcloudinfo.com uptime + icon: mdi:chart-line + state_display: > + [[[ + const pick = (metric, window) => { + const suffix = `${metric}_${window}`; + const candidates = Object.keys(states).filter((k) => + k.startsWith('sensor.') && + k.includes('vcloudinfo_com') && + k.endsWith(suffix) + ); + const eid = candidates[0]; + return eid ? (states[eid]?.state ?? 'n/a') : 'n/a'; + }; + const uptime1d = pick('uptime', '1d'); + const uptime30d = pick('uptime', '30d'); + const uptime365d = pick('uptime', '365d'); + return `1d ${uptime1d}% | 30d ${uptime30d}% | 365d ${uptime365d}%`; + ]]] + - type: custom:button-card + template: bearstone_infra_list_row + entity: binary_sensor.vcloudinfo_com + name: vcloudinfo.com response + icon: mdi:timer-outline + state_display: > + [[[ + const pick = (metric, window) => { + const suffix = `${metric}_${window}`; + const candidates = Object.keys(states).filter((k) => + k.startsWith('sensor.') && + k.includes('vcloudinfo_com') && + k.endsWith(suffix) + ); + const eid = candidates[0]; + return eid ? (states[eid]?.state ?? 'n/a') : 'n/a'; + }; + const r1d = pick('avg_response_time', '1d'); + const r30d = pick('avg_response_time', '30d'); + const r365d = pick('avg_response_time', '365d'); + return `1d ${r1d}s | 30d ${r30d}s | 365d ${r365d}s`; + ]]] + - type: custom:button-card + template: bearstone_infra_list_row + entity: binary_sensor.www_kingcrafthomes_com + name: kingcrafthomes.com uptime + icon: mdi:chart-line + state_display: > + [[[ + const pick = (metric, window) => { + const suffix = `${metric}_${window}`; + const candidates = Object.keys(states).filter((k) => + k.startsWith('sensor.') && + (k.includes('kingcrafthomes_com') || k.includes('www_kingcrafthomes_com')) && + k.endsWith(suffix) + ); + const eid = candidates[0]; + return eid ? (states[eid]?.state ?? 'n/a') : 'n/a'; + }; + const uptime1d = pick('uptime', '1d'); + const uptime30d = pick('uptime', '30d'); + const uptime365d = pick('uptime', '365d'); + return `1d ${uptime1d}% | 30d ${uptime30d}% | 365d ${uptime365d}%`; + ]]] + - type: custom:button-card + template: bearstone_infra_list_row + entity: binary_sensor.www_kingcrafthomes_com + name: kingcrafthomes.com response + icon: mdi:timer-outline + state_display: > + [[[ + const pick = (metric, window) => { + const suffix = `${metric}_${window}`; + const candidates = Object.keys(states).filter((k) => + k.startsWith('sensor.') && + (k.includes('kingcrafthomes_com') || k.includes('www_kingcrafthomes_com')) && + k.endsWith(suffix) + ); + const eid = candidates[0]; + return eid ? (states[eid]?.state ?? 'n/a') : 'n/a'; + }; + const r1d = pick('avg_response_time', '1d'); + const r30d = pick('avg_response_time', '30d'); + const r365d = pick('avg_response_time', '365d'); + return `1d ${r1d}s | 30d ${r30d}s | 365d ${r365d}s`; + ]]] - type: custom:vertical-stack-in-card grid_options: @@ -101,7 +190,7 @@ name: vcloudinfo.com icon: mdi:calendar-clock state_display: > - [[[ + [[[ const days = states['sensor.vcloudinfo_com_days_until_expiration']?.state ?? 'n/a'; const expRaw = states['sensor.vcloudinfo_com_expires']?.state; let exp = 'n/a'; @@ -127,7 +216,7 @@ name: kingcrafthomes.com icon: mdi:calendar-clock state_display: > - [[[ + [[[ const days = states['sensor.kingcrafthomes_com_days_until_expiration']?.state ?? 'n/a'; const expRaw = states['sensor.kingcrafthomes_com_expires']?.state; let exp = 'n/a'; @@ -148,3 +237,29 @@ return `${days}d | ${exp}`; ]]] +- type: grid + column_span: 4 + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_alert_row + entity: binary_sensor.infra_website_degraded + name: Website status degraded + icon: mdi:web-off + variables: + alert_kind: binary_on + - type: custom:button-card + template: bearstone_infra_alert_row + entity: binary_sensor.infra_website_uptime_slo_breach + name: Uptime SLO breach + icon: mdi:alert-decagram + variables: + alert_kind: binary_on + - type: custom:button-card + template: bearstone_infra_alert_row + entity: binary_sensor.infra_website_latency_degraded + name: Website latency degraded + icon: mdi:timer-alert + variables: + alert_kind: binary_on diff --git a/config/dashboards/infrastructure/popups/docker_10_maintenance.yaml b/config/dashboards/infrastructure/popups/docker_10_maintenance.yaml new file mode 100644 index 00000000..481942ad --- /dev/null +++ b/config/dashboards/infrastructure/popups/docker_10_maintenance.yaml @@ -0,0 +1,58 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure Popup - docker_10 maintenance +# Bubble Card popup for host maintenance details and safe cleanup actions. +# ------------------------------------------------------------------- +# Related Issue: 1560 +# Notes: Reuses existing Infrastructure button-card templates inside the popup. +###################################################################### + +type: vertical-stack +cards: +- type: custom:bubble-card + card_type: pop-up + hash: '#infra-docker-10' + entity: sensor.docker_10_apt_status + button_type: state + name: docker_10 maintenance + icon: mdi:server + show_header: true + show_state: true + width_desktop: 520px + bg_opacity: '35' +- type: grid + columns: 2 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_apt_prune_tile + name: docker_10 + entity: sensor.docker_10_apt_status + variables: + last_update_sensor: sensor.docker_10_apt_last_update + prune_button: button.carlo_hass_prune_unused_images + name: docker_10 + - type: custom:button-card + template: bearstone_infra_tile + entity: sensor.docker_10_apt_last_update + name: Last Update + icon: mdi:update + variables: + label: Most recent package update + - type: custom:button-card + template: bearstone_infra_tile + entity: sensor.docker_10_apt_last_check + name: Last Check + icon: mdi:calendar-check + variables: + label: Most recent apt check + - type: custom:button-card + template: bearstone_infra_tile + entity: sensor.docker_10_apt_status + name: Apt Status + icon: mdi:package-up + variables: + label: Pending package summary diff --git a/config/dashboards/overview/views/06_water.yaml b/config/dashboards/overview/views/06_water.yaml deleted file mode 100644 index 463f7cef..00000000 --- a/config/dashboards/overview/views/06_water.yaml +++ /dev/null @@ -1,23 +0,0 @@ -###################################################################### -# @CCOSTAN - Follow Me on X -# For more info visit https://www.vcloudinfo.com/click-here -# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig -# ------------------------------------------------------------------- -# Overview View - Utilities -# YAML-exported Lovelace dashboard (split into view files). -# ------------------------------------------------------------------- -# Notes: Exported from config/.storage/lovelace.lovelace view index 6. -###################################################################### - -title: Utilities -path: water -icon: mdi:home-lightning-bolt -type: sections -max_columns: 3 -sections: !include /config/dashboards/overview/partials/water_sections.yaml -cards: [] -visible: -- user: be280a93c9d7416e98d25d0470f414be -- user: 46a8d15eb20e4a1daf2d1d1f63180ec5 -- user: 8fc5ba22cb32430a9143beb4df70541b -- user: 19970706e7e4492c844ea2fc94a4599a diff --git a/config/dashboards/overview/views/07_admin.yaml b/config/dashboards/overview/views/07_admin.yaml deleted file mode 100644 index 0ddf6be3..00000000 --- a/config/dashboards/overview/views/07_admin.yaml +++ /dev/null @@ -1,18 +0,0 @@ -###################################################################### -# @CCOSTAN - Follow Me on X -# For more info visit https://www.vcloudinfo.com/click-here -# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig -# ------------------------------------------------------------------- -# Overview View - Admin -# YAML-exported Lovelace dashboard (split into view files). -# ------------------------------------------------------------------- -# Notes: Exported from config/.storage/lovelace.lovelace view index 7. -###################################################################### - -title: Admin -icon: mdi:security -visible: -- user: be280a93c9d7416e98d25d0470f414be -cards: [] -type: sections -sections: !include /config/dashboards/overview/partials/admin_sections.yaml