###################################################################### # @CCOSTAN - Follow Me on X # For more info visit https://www.vcloudinfo.com/click-here # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # ------------------------------------------------------------------- # Infrastructure Partial - Docker operations # Host health, updates, NAS capacity, active exceptions, and inventory drill-down. # ------------------------------------------------------------------- # Notes: Healthy stacks and containers live in the hidden Docker Inventory subview. # Notes: Host maintenance controls remain in the existing confirmed popups. # Notes: Synology NAS/NVR temperatures stay with their storage telemetry, not household temperature cards. # Notes: Storage Health includes the persisted nightly Duplicati verification result and last successful backup time. ###################################################################### # ------------------------------------------------------------------- # Docker health strip (mandatory first full-width wrapper) # ------------------------------------------------------------------- - type: grid column_span: 4 columns: 1 square: false cards: - type: custom:layout-card grid_options: columns: full layout_type: custom:grid-layout layout: grid-template-columns: repeat(5, 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(2, minmax(0, 1fr)) cards: - type: custom:button-card template: bearstone_infra_kpi entity: sensor.docker_monitored_container_count name: Monitored icon: mdi:docker state_display: > [[[ return `${entity.state} workloads`; ]]] tap_action: action: navigate navigation_path: /dashboard-infrastructure/docker-inventory - type: custom:button-card template: bearstone_infra_status_kpi entity: sensor.docker_monitored_unavailable_count name: Unavailable icon: mdi:alert-circle-outline variables: ok_state: '0' healthy_text: NONE raw_suffix: UNAVAILABLE - type: custom:button-card template: bearstone_infra_status_kpi entity: binary_sensor.docker_container_telemetry_degraded name: Telemetry icon: mdi:lan-check variables: ok_state: 'off' - type: custom:button-card template: bearstone_infra_kpi entity: sensor.carlo_nvr_volume_1_volume_used name: NVR Used icon: mdi:harddisk - type: custom:button-card template: bearstone_infra_kpi entity: sensor.carlo_nas01_volume_1_volume_used name: NAS Used icon: mdi:nas # ------------------------------------------------------------------- # Host maintenance signals and durable NAS capacity history # ------------------------------------------------------------------- - type: grid column_span: 4 columns: 1 square: false cards: - type: custom:layout-card grid_options: columns: full 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)) cards: - type: custom:vertical-stack-in-card card_mod: style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml cards: - type: custom:button-card template: bearstone_infra_panel_header name: Host Updates - type: custom:button-card template: bearstone_infra_update_row entity: sensor.docker_10_apt_status name: docker_10 tap_action: action: navigate navigation_path: '#infra-docker-10' - type: custom:button-card template: bearstone_infra_update_row entity: sensor.docker_17_apt_status name: docker_17 tap_action: action: navigate navigation_path: '#infra-docker-17' - type: custom:button-card template: bearstone_infra_update_row entity: sensor.docker_69_apt_status name: docker_69 tap_action: action: navigate navigation_path: '#infra-docker-69' - type: custom:button-card template: bearstone_infra_update_row entity: sensor.docker_14_apt_status name: docker_14 tap_action: action: navigate navigation_path: '#infra-docker-14' - type: custom:vertical-stack-in-card card_mod: style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml cards: - type: custom:button-card template: bearstone_infra_panel_header name: Storage Health - type: grid columns: 2 square: false cards: - type: custom:button-card template: bearstone_infra_list_row entity: sensor.carlo_nas01_temperature name: NAS Temperature icon: mdi:nas - type: custom:button-card template: bearstone_infra_list_row entity: sensor.carlo_nvr_temperature name: NVR Temperature icon: mdi:video-box - type: custom:button-card template: bearstone_infra_status_kpi entity: input_text.infra_duplicati_backup_verification_status name: Docker Config Backup icon: mdi:backup-restore variables: ok_state: verified state_display: > [[[ const status = String(entity?.state ?? 'unverified').toLowerCase(); const raw = String(states['input_datetime.infra_duplicati_backup_last_success']?.state ?? ''); const parsed = raw ? new Date(raw.replace(' ', 'T')) : null; const when = parsed instanceof Date && !Number.isNaN(parsed.getTime()) ? parsed.toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }).toUpperCase() : 'NO SUCCESS TIME'; if (status === 'verified') return `SUCCESS · ${when}`; if (status === 'failed') return `FAILED · LAST SUCCESS ${when}`; return `UNVERIFIED · LAST SUCCESS ${when}`; ]]] # Core statistics-graph is required because mini-graph-card can only read # the 180-day recorder window, while long-term statistics retain 12 months. - type: statistics-graph title: NAS + NVR Used Space - 12 Months chart_type: line days_to_show: 365 period: month stat_types: - mean - max entities: - entity: sensor.carlo_nas01_volume_1_used_space name: NAS Used Space - entity: sensor.carlo_nvr_volume_1_used_space name: NVR Used Space card_mod: style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml # ------------------------------------------------------------------- # Exceptions only; full inventory is a hidden subview # ------------------------------------------------------------------- - 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: Workload Exceptions - type: custom:button-card template: bearstone_infra_alert_row entity: binary_sensor.docker_container_telemetry_degraded name: Docker telemetry degraded icon: mdi:lan-disconnect variables: alert_kind: binary_on state_display: > [[[ const unavailable = states['sensor.docker_monitored_unavailable_count']?.state ?? '0'; const total = states['sensor.docker_monitored_container_count']?.state ?? '0'; return `${unavailable}/${total} unavailable`; ]]] - type: custom:auto-entities show_empty: false 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 state: 'off' options: type: custom:button-card template: bearstone_infra_list_row_running icon: mdi:package-variant-closed-remove state_display: '[[[ return "STACK DOWN"; ]]]' sort: method: name - type: custom:auto-entities show_empty: false 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: template: | [{% for entity_id in state_attr('sensor.docker_monitored_switch_inventory', 'entity_id') or [] %} {% if not entity_id.endswith('_container_2') and states(entity_id) == 'off' %} {'entity': '{{ entity_id }}', 'type': 'custom:button-card', 'template': 'bearstone_infra_container_row', 'icon': 'mdi:docker'}, {% endif %} {% endfor %}] sort: method: name # Existing confirmed host maintenance popups are intentionally reused. - type: grid column_span: 4 columns: 1 square: false cards: - !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