From bbe1dbe218832171c879a0bb7f4f5f78537543b0 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Sat, 7 Feb 2026 17:20:22 -0500 Subject: [PATCH 1/4] Add YAML dashboards and enable Lovelace YAML mode --- config/README.md | 3 +- config/configuration.yaml | 30 ++ config/dashboards/README.md | 50 ++ config/dashboards/SCRATCHPAD.md | 9 + .../infrastructure/card_mod/.gitkeep | 0 .../infrastructure/card_mod/infra_card.yaml | 17 + .../infrastructure/card_mod/infra_panel.yaml | 18 + .../dashboards/infrastructure/cards/.gitkeep | 0 .../dashboards/infrastructure/dashboard.yaml | 13 + .../infrastructure/partials/.gitkeep | 0 .../docker_container_restart_include.yaml | 451 ++++++++++++++++++ .../docker_container_rows_include.yaml | 407 ++++++++++++++++ .../partials/docker_containers_sections.yaml | 82 ++++ .../partials/home_sections.yaml | 339 +++++++++++++ .../partials/mariadb_sections.yaml | 146 ++++++ .../partials/pi_hole_cards.yaml | 15 + .../partials/proxmox_badges.yaml | 37 ++ .../partials/proxmox_sections.yaml | 187 ++++++++ .../partials/vacuum_badges.yaml | 16 + .../partials/vacuum_sections.yaml | 344 +++++++++++++ .../infrastructure/partials/view_cards.yaml | 15 + .../dashboards/infrastructure/popups/.gitkeep | 0 .../templates/button_card_templates.yaml | 304 ++++++++++++ .../infrastructure/views/01_home.yaml | 19 + .../infrastructure/views/02_proxmox.yaml | 19 + .../infrastructure/views/03_pi_hole.yaml | 18 + .../infrastructure/views/04_vacuum.yaml | 23 + .../views/05_activity_feed.yaml | 16 + .../infrastructure/views/06_mariadb.yaml | 18 + .../views/07_docker_containers.yaml | 18 + config/dashboards/kiosk/card_mod/.gitkeep | 0 config/dashboards/kiosk/cards/.gitkeep | 0 config/dashboards/kiosk/dashboard.yaml | 12 + config/dashboards/kiosk/partials/.gitkeep | 0 .../kiosk/partials/kiosk_oveview_badges.yaml | 20 + .../partials/kiosk_oveview_sections.yaml | 73 +++ .../kiosk/partials/locator_sections.yaml | 134 ++++++ config/dashboards/kiosk/popups/.gitkeep | 0 .../kiosk/views/01_kiosk_oveview.yaml | 33 ++ config/dashboards/kiosk/views/02_locator.yaml | 29 ++ config/dashboards/overview/card_mod/.gitkeep | 0 config/dashboards/overview/cards/.gitkeep | 0 config/dashboards/overview/dashboard.yaml | 13 + config/dashboards/overview/partials/.gitkeep | 0 .../overview/partials/admin_sections.yaml | 61 +++ .../overview/partials/camera_badges.yaml | 29 ++ .../overview/partials/camera_sections.yaml | 54 +++ .../overview/partials/cameras_cards.yaml | 51 ++ .../partials/family_locator_cards.yaml | 36 ++ .../overview/partials/home_badges.yaml | 21 + .../overview/partials/home_sections.yaml | 412 ++++++++++++++++ .../overview/partials/vacuum_badges.yaml | 16 + .../overview/partials/vacuum_sections.yaml | 352 ++++++++++++++ .../overview/partials/water_sections.yaml | 117 +++++ config/dashboards/overview/popups/.gitkeep | 0 config/dashboards/overview/views/01_home.yaml | 29 ++ .../overview/views/02_family_locator.yaml | 17 + .../dashboards/overview/views/03_camera.yaml | 18 + .../dashboards/overview/views/04_cameras.yaml | 17 + .../dashboards/overview/views/05_vacuum.yaml | 23 + .../dashboards/overview/views/06_water.yaml | 23 + .../dashboards/overview/views/07_admin.yaml | 18 + config/dashboards/resources.yaml | 49 ++ config/dashboards/shared/card_mod/.gitkeep | 0 config/dashboards/shared/partials/.gitkeep | 0 config/dashboards/shared/popups/.gitkeep | 0 config/dashboards/shared/views/.gitkeep | 0 config/packages/vacuum.yaml | 27 +- 68 files changed, 4287 insertions(+), 11 deletions(-) create mode 100644 config/dashboards/README.md create mode 100644 config/dashboards/SCRATCHPAD.md create mode 100644 config/dashboards/infrastructure/card_mod/.gitkeep create mode 100644 config/dashboards/infrastructure/card_mod/infra_card.yaml create mode 100644 config/dashboards/infrastructure/card_mod/infra_panel.yaml create mode 100644 config/dashboards/infrastructure/cards/.gitkeep create mode 100644 config/dashboards/infrastructure/dashboard.yaml create mode 100644 config/dashboards/infrastructure/partials/.gitkeep create mode 100644 config/dashboards/infrastructure/partials/docker_container_restart_include.yaml create mode 100644 config/dashboards/infrastructure/partials/docker_container_rows_include.yaml create mode 100644 config/dashboards/infrastructure/partials/docker_containers_sections.yaml create mode 100644 config/dashboards/infrastructure/partials/home_sections.yaml create mode 100644 config/dashboards/infrastructure/partials/mariadb_sections.yaml create mode 100644 config/dashboards/infrastructure/partials/pi_hole_cards.yaml create mode 100644 config/dashboards/infrastructure/partials/proxmox_badges.yaml create mode 100644 config/dashboards/infrastructure/partials/proxmox_sections.yaml create mode 100644 config/dashboards/infrastructure/partials/vacuum_badges.yaml create mode 100644 config/dashboards/infrastructure/partials/vacuum_sections.yaml create mode 100644 config/dashboards/infrastructure/partials/view_cards.yaml create mode 100644 config/dashboards/infrastructure/popups/.gitkeep create mode 100644 config/dashboards/infrastructure/templates/button_card_templates.yaml create mode 100644 config/dashboards/infrastructure/views/01_home.yaml create mode 100644 config/dashboards/infrastructure/views/02_proxmox.yaml create mode 100644 config/dashboards/infrastructure/views/03_pi_hole.yaml create mode 100644 config/dashboards/infrastructure/views/04_vacuum.yaml create mode 100644 config/dashboards/infrastructure/views/05_activity_feed.yaml create mode 100644 config/dashboards/infrastructure/views/06_mariadb.yaml create mode 100644 config/dashboards/infrastructure/views/07_docker_containers.yaml create mode 100644 config/dashboards/kiosk/card_mod/.gitkeep create mode 100644 config/dashboards/kiosk/cards/.gitkeep create mode 100644 config/dashboards/kiosk/dashboard.yaml create mode 100644 config/dashboards/kiosk/partials/.gitkeep create mode 100644 config/dashboards/kiosk/partials/kiosk_oveview_badges.yaml create mode 100644 config/dashboards/kiosk/partials/kiosk_oveview_sections.yaml create mode 100644 config/dashboards/kiosk/partials/locator_sections.yaml create mode 100644 config/dashboards/kiosk/popups/.gitkeep create mode 100644 config/dashboards/kiosk/views/01_kiosk_oveview.yaml create mode 100644 config/dashboards/kiosk/views/02_locator.yaml create mode 100644 config/dashboards/overview/card_mod/.gitkeep create mode 100644 config/dashboards/overview/cards/.gitkeep create mode 100644 config/dashboards/overview/dashboard.yaml create mode 100644 config/dashboards/overview/partials/.gitkeep create mode 100644 config/dashboards/overview/partials/admin_sections.yaml create mode 100644 config/dashboards/overview/partials/camera_badges.yaml create mode 100644 config/dashboards/overview/partials/camera_sections.yaml create mode 100644 config/dashboards/overview/partials/cameras_cards.yaml create mode 100644 config/dashboards/overview/partials/family_locator_cards.yaml create mode 100644 config/dashboards/overview/partials/home_badges.yaml create mode 100644 config/dashboards/overview/partials/home_sections.yaml create mode 100644 config/dashboards/overview/partials/vacuum_badges.yaml create mode 100644 config/dashboards/overview/partials/vacuum_sections.yaml create mode 100644 config/dashboards/overview/partials/water_sections.yaml create mode 100644 config/dashboards/overview/popups/.gitkeep create mode 100644 config/dashboards/overview/views/01_home.yaml create mode 100644 config/dashboards/overview/views/02_family_locator.yaml create mode 100644 config/dashboards/overview/views/03_camera.yaml create mode 100644 config/dashboards/overview/views/04_cameras.yaml create mode 100644 config/dashboards/overview/views/05_vacuum.yaml create mode 100644 config/dashboards/overview/views/06_water.yaml create mode 100644 config/dashboards/overview/views/07_admin.yaml create mode 100644 config/dashboards/resources.yaml create mode 100644 config/dashboards/shared/card_mod/.gitkeep create mode 100644 config/dashboards/shared/partials/.gitkeep create mode 100644 config/dashboards/shared/popups/.gitkeep create mode 100644 config/dashboards/shared/views/.gitkeep diff --git a/config/README.md b/config/README.md index ec5a1656..f303f98a 100755 --- a/config/README.md +++ b/config/README.md @@ -21,7 +21,7 @@ Live view of the `config/` directory my production Home Assistant instance loads ### Quick navigation - You are here: `config/` (configuration root) - [Repo overview](../README.md) | [Blog](https://www.vcloudinfo.com) | [Issues](https://github.com/CCOSTAN/Home-AssistantConfig/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc) | [Diagram](config/www/custom_ui/floorplan/images/branding/Bear-Stone-Docker-Diagram.jpg) | [YouTube](https://youtube.com/vCloudInfo) -- Directory highlights: [packages](packages), [automation](automation), [script](script), [scene](scene), [templates](templates), [www](www), [custom_components](custom_components) +- Directory highlights: [packages](packages), [automation](automation), [script](script), [scene](scene), [templates](templates), [dashboards](dashboards), [www](www), [custom_components](custom_components) ![Home Assistant header](https://i.imgur.com/vjDH1LJ.png) @@ -36,6 +36,7 @@ Live view of the `config/` directory my production Home Assistant instance loads - **Automations (`automation/`)** – event-driven YAML broken out by area or device; the legacy `automations.yaml` remains for UI-created flows. - **Scripts & scenes (`script/`, `scene/`)** – curated lighting and ambiance logic used by presence, holiday, and seasonal routines. - **Templates (`templates/`)** – Jinja helpers and speech templates reused by the notify/speech engines. +- **Dashboards (`dashboards/`)** – YAML-managed Lovelace dashboards and UI resources (generated from storage, then maintained as code). - **www/ + custom components** – branding assets, floorplans, and any custom components the core install depends on. ### Featured automations by section diff --git a/config/configuration.yaml b/config/configuration.yaml index 8845aca4..23203d8c 100755 --- a/config/configuration.yaml +++ b/config/configuration.yaml @@ -24,6 +24,36 @@ homeassistant: default_config: +# ------------------------------------------------------------------- +# Lovelace (YAML dashboards/resources) +# Dashboard YAML lives under config/dashboards. Do not edit config/.storage. +# ------------------------------------------------------------------- +lovelace: + resource_mode: yaml + resources: !include dashboards/resources.yaml + dashboards: + lovelace: + mode: yaml + title: "Overview" + icon: mdi:home + show_in_sidebar: true + require_admin: false + filename: dashboards/overview/dashboard.yaml + dashboard-infrastructure: + mode: yaml + title: "Infrastructure" + icon: mdi:server-network + show_in_sidebar: true + require_admin: true + filename: dashboards/infrastructure/dashboard.yaml + dashboard-kiosk: + mode: yaml + title: "KIOSK" + icon: mdi:tablet-dashboard + show_in_sidebar: true + require_admin: false + filename: dashboards/kiosk/dashboard.yaml + config: cloud: diff --git a/config/dashboards/README.md b/config/dashboards/README.md new file mode 100644 index 00000000..b67264a3 --- /dev/null +++ b/config/dashboards/README.md @@ -0,0 +1,50 @@ +

+ Dashboards (Lovelace YAML) +

+ +This folder holds YAML-managed Home Assistant Lovelace dashboards and UI resources. + +### Why this exists +- Home Assistant stores dashboards and resources in `config/.storage/` by default (runtime state). +- YAML dashboards make the UI version-controllable and editable by automation tools (including Codex). + +### What is in here +- `resources.yaml` + - Lovelace JS resources used by custom cards (HACS and local resources). + - This is used when `lovelace.resource_mode: yaml` is enabled. +- `SCRATCHPAD.md` + - Parking lot for multi-step dashboard work and patterns. +- `/` + - One folder per dashboard (example: `overview/`, `infrastructure/`, `kiosk/`). + - `dashboard.yaml` is the dashboard entrypoint. + - `views/` contains one YAML file per view. + - `partials/` is reusable card lists included into views. + - `popups/` is reusable popup stacks (typically `bubble-card`) included into views. + - `card_mod/` is CSS overrides (use only when card-native options are insufficient). +- `shared/` + - Cross-dashboard reuse only. If something is only used by one dashboard, keep it in that dashboard folder. + +### How it is wired into Home Assistant +This folder is referenced from `config/configuration.yaml` via: +- `lovelace.resource_mode: yaml` +- `lovelace.resources: !include dashboards/resources.yaml` +- `lovelace.dashboards: ... filename: dashboards//dashboard.yaml` + +### Migration / Cutover Notes +- During migration you may have both storage dashboards (from the UI) and YAML dashboards (from this folder) at the same time. +- Do not try to create YAML dashboards with the same dashboard ID/key as an existing storage dashboard; remove/disable the storage version first in the UI. +- Once you confirm the YAML dashboards render correctly: + - Hide or delete the old storage dashboards in **Settings -> Dashboards**. + - Keep strategies/dynamic dashboards in storage (Map, Areas, etc.) unless you intentionally export them. + +### Conventions +- Include paths in Lovelace YAML should use absolute container paths starting with `/config/`. + - Example: `!include /config/dashboards/overview/partials/some_cards.yaml` +- Views are loaded using `!include_dir_list` and ordered by filename (prefix with `01_`, `02_`, etc.). +- Prefer card-native styling; treat `card_mod` as a last resort. +- Prefer CSS variables (`var(--*)`) over hardcoded hex colors. +- When using the Stitch MCP for inspiration, generation may exceed the tool timeout; wait and then fetch results via `stitch/list_screens` and `stitch/get_screen`. + +### Notes +- Do not edit `config/.storage` by hand. Export once, then maintain the YAML files here. +- It is safe to restart Home Assistant after dashboard changes as long as a configuration check passes first. diff --git a/config/dashboards/SCRATCHPAD.md b/config/dashboards/SCRATCHPAD.md new file mode 100644 index 00000000..d4696573 --- /dev/null +++ b/config/dashboards/SCRATCHPAD.md @@ -0,0 +1,9 @@ +# Dashboards Scratchpad + +## Current Working Items + +- (empty) + +## Patterns / Notes + +- (empty) diff --git a/config/dashboards/infrastructure/card_mod/.gitkeep b/config/dashboards/infrastructure/card_mod/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/infrastructure/card_mod/infra_card.yaml b/config/dashboards/infrastructure/card_mod/infra_card.yaml new file mode 100644 index 00000000..66beb975 --- /dev/null +++ b/config/dashboards/infrastructure/card_mod/infra_card.yaml @@ -0,0 +1,17 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure card_mod - Base card polish +# Shared card_mod style block used across Infrastructure views. +# ------------------------------------------------------------------- +# Notes: card_mod style is YAML scalar (multi-line string) so it can be `!include`d. +###################################################################### + +| + ha-card { + border-radius: 18px; + border: 1px solid rgba(0,0,0,0.06); + box-shadow: none; + } diff --git a/config/dashboards/infrastructure/card_mod/infra_panel.yaml b/config/dashboards/infrastructure/card_mod/infra_panel.yaml new file mode 100644 index 00000000..f779b063 --- /dev/null +++ b/config/dashboards/infrastructure/card_mod/infra_panel.yaml @@ -0,0 +1,18 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure card_mod - Panel container +# Wrapper style for multi-row panels (Stitch-inspired). +# ------------------------------------------------------------------- +# Notes: card_mod style is YAML scalar (multi-line string) so it can be `!include`d. +###################################################################### + +| + ha-card { + border-radius: 18px; + border: 1px solid rgba(0,0,0,0.06); + box-shadow: none; + padding: 12px; + } diff --git a/config/dashboards/infrastructure/cards/.gitkeep b/config/dashboards/infrastructure/cards/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/infrastructure/dashboard.yaml b/config/dashboards/infrastructure/dashboard.yaml new file mode 100644 index 00000000..159b6606 --- /dev/null +++ b/config/dashboards/infrastructure/dashboard.yaml @@ -0,0 +1,13 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure Dashboard - YAML entrypoint +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Entry point for dashboard key `dashboard-infrastructure`. Views are loaded from /config/dashboards/infrastructure/views. +###################################################################### + +button_card_templates: !include /config/dashboards/infrastructure/templates/button_card_templates.yaml +views: !include_dir_list /config/dashboards/infrastructure/views diff --git a/config/dashboards/infrastructure/partials/.gitkeep b/config/dashboards/infrastructure/partials/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/infrastructure/partials/docker_container_restart_include.yaml b/config/dashboards/infrastructure/partials/docker_container_restart_include.yaml new file mode 100644 index 00000000..38a38afe --- /dev/null +++ b/config/dashboards/infrastructure/partials/docker_container_restart_include.yaml @@ -0,0 +1,451 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure Include - Docker container restart buttons +# Auto-entities include list for Portainer container restart buttons (button.*_restart_container). +# ------------------------------------------------------------------- +# Notes: Generated from core.entity_registry (platform: portainer). +###################################################################### + +- entity_id: button.91aca40203c0_portainer_agent_restart_container + options: + type: tile + name: 91aca40203c0_portainer_agent + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.91aca40203c0_portainer_agent_restart_container +- entity_id: button.cloudflared_kch_restart_container + options: + type: tile + name: cloudflared_kch + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.cloudflared_kch_restart_container +- entity_id: button.cloudflared_wp_restart_container + options: + type: tile + name: cloudflared_wp + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.cloudflared_wp_restart_container +- entity_id: button.codex_appliance_restart_container + options: + type: tile + name: codex_appliance + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.codex_appliance_restart_container +- entity_id: button.college_budget_app_restart_container + options: + type: tile + name: college_budget_app + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.college_budget_app_restart_container +- entity_id: button.cruise_tracker_restart_container + options: + type: tile + name: cruise_tracker + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.cruise_tracker_restart_container +- entity_id: button.dashy_restart_container + options: + type: tile + name: dashy + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.dashy_restart_container +- entity_id: button.dozzle_agent_10_restart_container + options: + type: tile + name: dozzle_agent_10 + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.dozzle_agent_10_restart_container +- entity_id: button.dozzle_agent_14_restart_container + options: + type: tile + name: dozzle_agent_14 + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.dozzle_agent_14_restart_container +- entity_id: button.dozzle_restart_container + options: + type: tile + name: dozzle + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.dozzle_restart_container +- entity_id: button.duplicati_restart_container + options: + type: tile + name: duplicati + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.duplicati_restart_container +- entity_id: button.esphome_restart_container + options: + type: tile + name: esphome + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.esphome_restart_container +- entity_id: button.foodie_tracker_restart_container + options: + type: tile + name: foodie_tracker + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.foodie_tracker_restart_container +- entity_id: button.frigate_restart_container + options: + type: tile + name: frigate + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.frigate_restart_container +- entity_id: button.games_hub_restart_container + options: + type: tile + name: games_hub + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.games_hub_restart_container +- entity_id: button.home_assistant_restart_container + options: + type: tile + name: home-assistant + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.home_assistant_restart_container +- entity_id: button.imposter_restart_container + options: + type: tile + name: imposter + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.imposter_restart_container +- entity_id: button.infra_info_restart_container + options: + type: tile + name: infra_info + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.infra_info_restart_container +- entity_id: button.kingcrafthomes_restart_container + options: + type: tile + name: kingcrafthomes + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.kingcrafthomes_restart_container +- entity_id: button.mariadb_backup_restart_container + options: + type: tile + name: mariadb-backup + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.mariadb_backup_restart_container +- entity_id: button.mariadb_restart_container + options: + type: tile + name: mariadb + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.mariadb_restart_container +- entity_id: button.matter_server_restart_container + options: + type: tile + name: matter-server + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.matter_server_restart_container +- entity_id: button.mqtt_restart_container + options: + type: tile + name: mqtt + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.mqtt_restart_container +- entity_id: button.nebula_sync_restart_container + options: + type: tile + name: nebula_sync + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.nebula_sync_restart_container +- entity_id: button.panel_notes_restart_container + options: + type: tile + name: panel_notes + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.panel_notes_restart_container +- entity_id: button.pihole_restart_container + options: + type: tile + name: pihole + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.pihole_restart_container +- entity_id: button.pihole_secondary_restart_container + options: + type: tile + name: pihole_secondary + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.pihole_secondary_restart_container +- entity_id: button.poker_tracker_restart_container + options: + type: tile + name: poker_tracker + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.poker_tracker_restart_container +- entity_id: button.portainer_agent_restart_container + options: + type: tile + name: portainer_agent + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.portainer_agent_restart_container +- entity_id: button.portainer_restart_container + options: + type: tile + name: portainer + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.portainer_restart_container +- entity_id: button.postgres_webhooks_engine_restart_container + options: + type: tile + name: postgres_webhooks_engine + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.postgres_webhooks_engine_restart_container +- entity_id: button.rc_price_checker_restart_container + options: + type: tile + name: rc_price_checker + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.rc_price_checker_restart_container +- entity_id: button.redis_webhooks_engine_restart_container + options: + type: tile + name: redis_webhooks_engine + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.redis_webhooks_engine_restart_container +- entity_id: button.rvtools_ppt_web_restart_container + options: + type: tile + name: rvtools_ppt_web + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.rvtools_ppt_web_restart_container +- entity_id: button.steelesharing_home_restart_container + options: + type: tile + name: steelesharing_home + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.steelesharing_home_restart_container +- entity_id: button.tapple_restart_container + options: + type: tile + name: tapple + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.tapple_restart_container +- entity_id: button.tugtainer_agent_restart_container + options: + type: tile + name: tugtainer-agent + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.tugtainer_agent_restart_container +- entity_id: button.tugtainer_restart_container + options: + type: tile + name: tugtainer + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.tugtainer_restart_container +- entity_id: button.tugtainer_socket_proxy_restart_container + options: + type: tile + name: tugtainer_socket_proxy + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.tugtainer_socket_proxy_restart_container +- entity_id: button.unifi_restart_container + options: + type: tile + name: unifi + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.unifi_restart_container +- entity_id: button.webhooks_engine_restart_container + options: + type: tile + name: webhooks_engine + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.webhooks_engine_restart_container +- entity_id: button.wordpress_db_restart_container + options: + type: tile + name: wordpress_db + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.wordpress_db_restart_container +- entity_id: button.wordpress_wp_restart_container + options: + type: tile + name: wordpress_wp + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.wordpress_wp_restart_container +- entity_id: button.wyze_bridge_restart_container + options: + type: tile + name: wyze-bridge + hide_state: true + tap_action: + action: call-service + service: button.press + service_data: + entity_id: button.wyze_bridge_restart_container diff --git a/config/dashboards/infrastructure/partials/docker_container_rows_include.yaml b/config/dashboards/infrastructure/partials/docker_container_rows_include.yaml new file mode 100644 index 00000000..df118656 --- /dev/null +++ b/config/dashboards/infrastructure/partials/docker_container_rows_include.yaml @@ -0,0 +1,407 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure Include - Docker container rows +# Auto-entities include list mapping Portainer status -> restart button. +# ------------------------------------------------------------------- +# Notes: Generated from core.entity_registry + button restart entities. +###################################################################### + +- entity_id: binary_sensor.91aca40203c0_portainer_agent_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: 91aca40203c0_portainer_agent + icon: mdi:docker + variables: + restart_button: button.91aca40203c0_portainer_agent_restart_container + name: 91aca40203c0_portainer_agent +- entity_id: binary_sensor.cloudflared_kch_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: cloudflared_kch + icon: mdi:docker + variables: + restart_button: button.cloudflared_kch_restart_container + name: cloudflared_kch +- entity_id: binary_sensor.cloudflared_wp_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: cloudflared_wp + icon: mdi:docker + variables: + restart_button: button.cloudflared_wp_restart_container + name: cloudflared_wp +- entity_id: binary_sensor.codex_appliance_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: codex_appliance + icon: mdi:docker + variables: + restart_button: button.codex_appliance_restart_container + name: codex_appliance +- entity_id: binary_sensor.college_budget_app_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: college_budget_app + icon: mdi:docker + variables: + restart_button: button.college_budget_app_restart_container + name: college_budget_app +- entity_id: binary_sensor.cruise_tracker_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: cruise_tracker + icon: mdi:docker + variables: + restart_button: button.cruise_tracker_restart_container + name: cruise_tracker +- entity_id: binary_sensor.dashy_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: dashy + icon: mdi:docker + variables: + restart_button: button.dashy_restart_container + name: dashy +- entity_id: binary_sensor.dozzle_agent_10_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: dozzle_agent_10 + icon: mdi:docker + variables: + restart_button: button.dozzle_agent_10_restart_container + name: dozzle_agent_10 +- entity_id: binary_sensor.dozzle_agent_14_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: dozzle_agent_14 + icon: mdi:docker + variables: + restart_button: button.dozzle_agent_14_restart_container + name: dozzle_agent_14 +- entity_id: binary_sensor.dozzle_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: dozzle + icon: mdi:docker + variables: + restart_button: button.dozzle_restart_container + name: dozzle +- entity_id: binary_sensor.duplicati_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: duplicati + icon: mdi:docker + variables: + restart_button: button.duplicati_restart_container + name: duplicati +- entity_id: binary_sensor.esphome_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: esphome + icon: mdi:docker + variables: + restart_button: button.esphome_restart_container + name: esphome +- entity_id: binary_sensor.foodie_tracker_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: foodie_tracker + icon: mdi:docker + variables: + restart_button: button.foodie_tracker_restart_container + name: foodie_tracker +- entity_id: binary_sensor.frigate_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: frigate + icon: mdi:docker + variables: + restart_button: button.frigate_restart_container + name: frigate +- entity_id: binary_sensor.games_hub_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: games_hub + icon: mdi:docker + variables: + restart_button: button.games_hub_restart_container + name: games_hub +- entity_id: binary_sensor.home_assistant_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: home-assistant + icon: mdi:docker + variables: + restart_button: button.home_assistant_restart_container + name: home-assistant +- entity_id: binary_sensor.imposter_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: imposter + icon: mdi:docker + variables: + restart_button: button.imposter_restart_container + name: imposter +- entity_id: binary_sensor.infra_info_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: infra_info + icon: mdi:docker + variables: + restart_button: button.infra_info_restart_container + name: infra_info +- entity_id: binary_sensor.kingcrafthomes_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: kingcrafthomes + icon: mdi:docker + variables: + restart_button: button.kingcrafthomes_restart_container + name: kingcrafthomes +- entity_id: binary_sensor.mariadb_backup_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: mariadb-backup + icon: mdi:docker + variables: + restart_button: button.mariadb_backup_restart_container + name: mariadb-backup +- entity_id: binary_sensor.mariadb_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: mariadb + icon: mdi:docker + variables: + restart_button: button.mariadb_restart_container + name: mariadb +- entity_id: binary_sensor.matter_server_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: matter-server + icon: mdi:docker + variables: + restart_button: button.matter_server_restart_container + name: matter-server +- entity_id: binary_sensor.mqtt_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: mqtt + icon: mdi:docker + variables: + restart_button: button.mqtt_restart_container + name: mqtt +- entity_id: binary_sensor.nebula_sync_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: nebula_sync + icon: mdi:docker + variables: + restart_button: button.nebula_sync_restart_container + name: nebula_sync +- entity_id: binary_sensor.panel_notes_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: panel_notes + icon: mdi:docker + variables: + restart_button: button.panel_notes_restart_container + name: panel_notes +- entity_id: binary_sensor.pihole_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: pihole + icon: mdi:docker + variables: + restart_button: button.pihole_restart_container + name: pihole +- entity_id: binary_sensor.pihole_secondary_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: pihole_secondary + icon: mdi:docker + variables: + restart_button: button.pihole_secondary_restart_container + name: pihole_secondary +- entity_id: binary_sensor.poker_tracker_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: poker_tracker + icon: mdi:docker + variables: + restart_button: button.poker_tracker_restart_container + name: poker_tracker +- entity_id: binary_sensor.portainer_agent_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: portainer_agent + icon: mdi:docker + variables: + restart_button: button.portainer_agent_restart_container + name: portainer_agent +- entity_id: binary_sensor.portainer_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: portainer + icon: mdi:docker + variables: + restart_button: button.portainer_restart_container + name: portainer +- entity_id: binary_sensor.postgres_webhooks_engine_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: postgres_webhooks_engine + icon: mdi:docker + variables: + restart_button: button.postgres_webhooks_engine_restart_container + name: postgres_webhooks_engine +- entity_id: binary_sensor.rc_price_checker_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: rc_price_checker + icon: mdi:docker + variables: + restart_button: button.rc_price_checker_restart_container + name: rc_price_checker +- entity_id: binary_sensor.redis_webhooks_engine_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: redis_webhooks_engine + icon: mdi:docker + variables: + restart_button: button.redis_webhooks_engine_restart_container + name: redis_webhooks_engine +- entity_id: binary_sensor.rvtools_ppt_web_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: rvtools_ppt_web + icon: mdi:docker + variables: + restart_button: button.rvtools_ppt_web_restart_container + name: rvtools_ppt_web +- entity_id: binary_sensor.steelesharing_home_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: steelesharing_home + icon: mdi:docker + variables: + restart_button: button.steelesharing_home_restart_container + name: steelesharing_home +- entity_id: binary_sensor.tapple_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: tapple + icon: mdi:docker + variables: + restart_button: button.tapple_restart_container + name: tapple +- entity_id: binary_sensor.tugtainer_agent_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: tugtainer-agent + icon: mdi:docker + variables: + restart_button: button.tugtainer_agent_restart_container + name: tugtainer-agent +- entity_id: binary_sensor.tugtainer_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: tugtainer + icon: mdi:docker + variables: + restart_button: button.tugtainer_restart_container + name: tugtainer +- entity_id: binary_sensor.tugtainer_socket_proxy_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: tugtainer_socket_proxy + icon: mdi:docker + variables: + restart_button: button.tugtainer_socket_proxy_restart_container + name: tugtainer_socket_proxy +- entity_id: binary_sensor.unifi_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: unifi + icon: mdi:docker + variables: + restart_button: button.unifi_restart_container + name: unifi +- entity_id: binary_sensor.webhooks_engine_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: webhooks_engine + icon: mdi:docker + variables: + restart_button: button.webhooks_engine_restart_container + name: webhooks_engine +- entity_id: binary_sensor.wordpress_db_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: wordpress_db + icon: mdi:docker + variables: + restart_button: button.wordpress_db_restart_container + name: wordpress_db +- entity_id: binary_sensor.wordpress_wp_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: wordpress_wp + icon: mdi:docker + variables: + restart_button: button.wordpress_wp_restart_container + name: wordpress_wp +- entity_id: binary_sensor.wyze_bridge_status + options: + type: custom:button-card + template: bearstone_infra_container_row + name: wyze-bridge + icon: mdi:docker + variables: + restart_button: button.wyze_bridge_restart_container + name: wyze-bridge diff --git a/config/dashboards/infrastructure/partials/docker_containers_sections.yaml b/config/dashboards/infrastructure/partials/docker_containers_sections.yaml new file mode 100644 index 00000000..7d4b4b8c --- /dev/null +++ b/config/dashboards/infrastructure/partials/docker_containers_sections.yaml @@ -0,0 +1,82 @@ +###################################################################### +# @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 containers sections +# Sections layout for the Docker containers view. +# ------------------------------------------------------------------- +# Notes: Uses Portainer entities (`binary_sensor.*_status`, `button.*_restart_container`). +###################################################################### + +- type: grid + column_span: 4 + columns: 4 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox1_updates_packages + name: Proxmox01 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + - type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox02_updates_packages + name: Proxmox02 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + - type: custom:button-card + template: bearstone_infra_chip + entity: sensor.garage_ups_status + name: Garage UPS + icon: mdi:transmission-tower + - type: custom:button-card + template: bearstone_infra_chip + entity: sensor.vcloudinfo_com + name: vCloudinfo + icon: mdi:microsoft-internet-explorer + +- type: grid + column_span: 4 + columns: 1 + square: false + cards: + - type: custom:auto-entities + show_empty: true + grid_options: + columns: full + card: + type: grid + title: Docker Containers + columns: 4 + square: false + card_param: cards + filter: + include: !include /config/dashboards/infrastructure/partials/docker_container_rows_include.yaml + exclude: + - state: unavailable + sort: + method: name + +- type: grid + column_span: 4 + columns: 1 + square: false + cards: + - type: markdown + grid_options: + columns: full + content: |- + **Tip:** Hold a container row to restart it (confirmation required). + card_mod: + style: | + ha-card { + background: transparent; + border: none; + box-shadow: none; + text-align: center; + color: var(--secondary-text-color); + } diff --git a/config/dashboards/infrastructure/partials/home_sections.yaml b/config/dashboards/infrastructure/partials/home_sections.yaml new file mode 100644 index 00000000..09b7402f --- /dev/null +++ b/config/dashboards/infrastructure/partials/home_sections.yaml @@ -0,0 +1,339 @@ +###################################################################### +# @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 - Home sections +# Rebuilt homepage layout (Stitch-inspired). +# ------------------------------------------------------------------- +# Notes: Standardized on `custom:button-card` + `custom:mini-graph-card` with `card_mod` polish. +###################################################################### + +- type: grid + column_span: 4 + columns: 4 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox1_updates_packages + name: Proxmox01 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + - type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox02_updates_packages + name: Proxmox02 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + - type: custom:button-card + template: bearstone_infra_chip + entity: sensor.garage_ups_status + name: Garage UPS + icon: mdi:transmission-tower + - type: custom:button-card + template: bearstone_infra_chip + entity: sensor.vcloudinfo_com + name: vCloudinfo + icon: mdi:microsoft-internet-explorer + +- type: grid + column_span: 3 + columns: 2 + square: false + cards: + - type: vertical-stack + cards: + - type: custom:mini-graph-card + name: Proxmox01 + icon: mdi:server + hours_to_show: 24 + points_per_hour: 2 + line_width: 2 + animate: true + show: + fill: true + legend: true + icon: true + name: true + state: true + entities: + - entity: sensor.node_proxmox1_cpu_used + name: CPU + - entity: sensor.node_proxmox1_memory_used_percentage + name: Memory + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: grid + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_docker69_169_status + name: Docker69 + icon: mdi:docker + label: > + [[[ return "Last boot: " + (states['sensor.qemu_docker69_169_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_docker69_169_reboot + name: Docker69 + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_carlo_hass_105_status + name: HASS + icon: mdi:home-assistant + label: > + [[[ return "Last boot: " + (states['sensor.qemu_carlo_hass_105_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_carlo_hass_105_reboot + name: HASS + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_wireguard_104_status + name: WireGuard + icon: mdi:vpn + label: > + [[[ return "Last boot: " + (states['sensor.qemu_wireguard_104_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_wireguard_104_reboot + name: WireGuard + + - type: vertical-stack + cards: + - type: custom:mini-graph-card + name: Proxmox02 + icon: mdi:server + hours_to_show: 24 + points_per_hour: 2 + line_width: 2 + animate: true + show: + fill: true + legend: true + icon: true + name: true + state: true + entities: + - entity: sensor.node_proxmox02_cpu_used + name: CPU + - entity: sensor.node_proxmox02_memory_used_percentage + name: Memory + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: grid + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_docker2_101_status + name: Frigate + icon: mdi:video + label: > + [[[ return "Last boot: " + (states['sensor.qemu_docker2_101_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_docker2_101_reboot + name: Frigate + +- type: grid + column_span: 1 + columns: 1 + square: false + cards: + - type: custom:mini-graph-card + entities: + - entity: sensor.proxmox_garage_average_temperature + name: Garage + - entity: sensor.pirateweather_temperature + name: Outside + name: Garage Temp + hours_to_show: 96 + color_thresholds: + - value: 50 + color: '#f39c12' + - value: 120 + color: '#d35400' + - value: 145 + color: '#c0392b' + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: custom:mini-graph-card + name: Garage UPS Load + icon: mdi:transmission-tower + entities: + - entity: sensor.garage_ups_load + name: Load + unit: '%' + hours_to_show: 24 + points_per_hour: 4 + line_width: 2 + animate: true + color_thresholds: + - value: 20 + color: '#43a047' + - value: 50 + color: '#ffa000' + - value: 80 + color: '#e53935' + show: + fill: true + icon: true + name: true + state: true + graph: line + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + +- type: grid + column_span: 2 + columns: 2 + square: true + cards: + - type: custom:flex-horseshoe-card + entities: + - entity: sensor.carlo_nvr_volume_1_volume_used + name: NVR Video + decimals: 1 + unit: '%' + - entity: sensor.carlo_nvr_volume_1_total_size + name: Total + decimals: 2 + unit: TiB + show: + horseshoe_style: colorstopgradient + horseshoe_scale: + min: 0 + max: 100 + color_stops: + '0': '#43a047' + '50': '#fbc02d' + '80': '#e53935' + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: custom:flex-horseshoe-card + entities: + - entity: sensor.carlo_nas01_volume_1_volume_used + name: NAS Storage + decimals: 1 + unit: '%' + - entity: sensor.carlo_nas01_volume_1_total_size + name: Total + decimals: 2 + unit: TiB + show: + horseshoe_style: colorstopgradient + horseshoe_scale: + min: 0 + max: 100 + color_stops: + '0': '#43a047' + '50': '#fbc02d' + '80': '#e53935' + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + +- type: grid + column_span: 2 + columns: 1 + square: false + cards: + - type: custom:mini-graph-card + name: Wi-Fi Overview + icon: mdi:wifi + hours_to_show: 24 + line_width: 2 + points_per_hour: 1 + smoothing: true + show: + graph: line + legend: true + labels: false + name: true + icon: true + state: true + entities: + - entity: sensor.total_wifi_clients + name: Total + show_state: true + show_graph: false + show_line: false + show_points: false + show_fill: false + show_legend: false + - entity: sensor.unifi_ap_office_clients + name: Office AP + show_state: true + - entity: sensor.unifi_ap_study_clients + name: Study AP + show_state: true + - entity: sensor.unifi_ap_garage_clients + name: Garage AP + show_state: true + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + +- type: grid + column_span: 4 + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_device_tile + name: Garage AP + icon: mdi:access-point + entity: sensor.unifi_ap_garage_clients + label: > + [[[ return "Uptime: " + (states['sensor.unifi_ap_garage_uptime']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.unifi_ap_garage_restart + name: Garage AP + - type: custom:button-card + template: bearstone_infra_device_tile + name: Office AP + icon: mdi:access-point + entity: sensor.unifi_ap_office_clients + label: > + [[[ return "Uptime: " + (states['sensor.unifi_ap_office_uptime']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.unifi_ap_office_restart + name: Office AP + - type: custom:button-card + template: bearstone_infra_device_tile + name: Study AP + icon: mdi:access-point + entity: sensor.unifi_ap_study_clients + label: > + [[[ return "Uptime: " + (states['sensor.unifi_ap_study_uptime']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.unifi_ap_study_restart + name: Study AP + +- type: grid + column_span: 4 + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_tile + name: docker_10 + icon: mdi:server + entity: sensor.docker_10_apt_status + label: > + [[[ return "Last update: " + (states['sensor.docker_10_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_10_apt_reboot_status']?.state ?? ''); ]]] + - type: custom:button-card + template: bearstone_infra_tile + name: docker_69 + icon: mdi:server + entity: sensor.docker_69_apt_status + label: > + [[[ return "Last update: " + (states['sensor.docker_69_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_69_apt_reboot_status']?.state ?? ''); ]]] + - type: custom:button-card + template: bearstone_infra_tile + name: docker_14 + icon: mdi:server + entity: sensor.docker_14_apt_status + label: > + [[[ return "Last update: " + (states['sensor.docker_14_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_14_apt_reboot_status']?.state ?? ''); ]]] diff --git a/config/dashboards/infrastructure/partials/mariadb_sections.yaml b/config/dashboards/infrastructure/partials/mariadb_sections.yaml new file mode 100644 index 00000000..d749f138 --- /dev/null +++ b/config/dashboards/infrastructure/partials/mariadb_sections.yaml @@ -0,0 +1,146 @@ +###################################################################### +# @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 - mariadb sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Stitch-inspired MariaDB layout (3 panel columns). +###################################################################### + +- column_span: 1 + 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: Database Statistics + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.database_size + name: Database Size + icon: mdi:database + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.database_tables_count + name: Number of Tables + icon: mdi:table + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.database_total_records + name: Total Records + icon: mdi:counter + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.database_records_per_day + name: Records per Day + icon: mdi:chart-line + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.database_oldest_record + name: Oldest Record + icon: mdi:clock-start + +- column_span: 1 + 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: MariaDB Status + - type: custom:button-card + template: bearstone_infra_list_row_running + entity: sensor.mariadb_status + name: Server Status + icon: mdi:database + state_display: > + [[[ + if (entity.state === 'unknown') return 'Unknown'; + return String(entity.state).toUpperCase(); + ]]] + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.mariadb_version + name: Version + icon: mdi:information-outline + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.mariadb_performance + name: Performance + icon: mdi:chart-line + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.mariadb_uptime + name: Uptime + icon: mdi:timer-outline + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.mariadb_connections + name: Active Connections + icon: mdi:lan-connect + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.mariadb_questions + name: Total Queries + icon: mdi:database-search + +- column_span: 1 + 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: MariaDB Tuning + - type: grid + columns: 2 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_buffer_pool_size + name: InnoDB Buffer + icon: mdi:memory + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_max_connections + name: Max Conn. + icon: mdi:account-multiple + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_log_file_size + name: Log File + icon: mdi:file + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_tmp_table_size + name: Temp Size + icon: mdi:table + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_io_capacity + name: IO Capacity + icon: mdi:speedometer + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_io_threads + name: IO Threads + icon: mdi:developer-board + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_table_cache + name: Table Cache + icon: mdi:cached + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_buffer_sizes + name: Sort/Join + icon: mdi:code-brackets + + diff --git a/config/dashboards/infrastructure/partials/pi_hole_cards.yaml b/config/dashboards/infrastructure/partials/pi_hole_cards.yaml new file mode 100644 index 00000000..b74a17eb --- /dev/null +++ b/config/dashboards/infrastructure/partials/pi_hole_cards.yaml @@ -0,0 +1,15 @@ +###################################################################### +# @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 - pi_hole cards +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/infrastructure/views/02_pi_hole.yaml key `cards`. +###################################################################### + +- type: custom:pi-hole + device_id: d69637da16f7d7f3626070582be59808 + grid_options: + columns: full diff --git a/config/dashboards/infrastructure/partials/proxmox_badges.yaml b/config/dashboards/infrastructure/partials/proxmox_badges.yaml new file mode 100644 index 00000000..d34fdbec --- /dev/null +++ b/config/dashboards/infrastructure/partials/proxmox_badges.yaml @@ -0,0 +1,37 @@ +###################################################################### +# @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 - proxmox badges +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/infrastructure/views/01_proxmox.yaml key `badges`. +###################################################################### + +- type: entity + show_name: true + show_state: true + show_icon: true + entity: binary_sensor.node_proxmox1_updates_packages + name: ProxMox1 +- type: entity + show_name: true + show_state: true + show_icon: true + entity: binary_sensor.node_proxmox02_updates_packages + name: Proxmox02 +- type: entity + icon: mdi:transmission-tower + show_name: true + show_state: true + show_icon: true + entity: sensor.garage_ups_status + name: Garage UPS +- type: entity + show_name: true + show_state: true + show_icon: true + icon: mdi:microsoft-internet-explorer + entity: sensor.vcloudinfo_com + name: vCloudinfo diff --git a/config/dashboards/infrastructure/partials/proxmox_sections.yaml b/config/dashboards/infrastructure/partials/proxmox_sections.yaml new file mode 100644 index 00000000..ae4a2fc5 --- /dev/null +++ b/config/dashboards/infrastructure/partials/proxmox_sections.yaml @@ -0,0 +1,187 @@ +###################################################################### +# @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 - proxmox sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Standardized on `custom:button-card` + `custom:mini-graph-card` with `card_mod` polish. +###################################################################### + +- type: grid + column_span: 4 + columns: 4 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox1_updates_packages + name: Proxmox01 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + - type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox02_updates_packages + name: Proxmox02 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + - type: custom:button-card + template: bearstone_infra_chip + entity: sensor.garage_ups_status + name: Garage UPS + icon: mdi:transmission-tower + - type: custom:button-card + template: bearstone_infra_chip + entity: sensor.vcloudinfo_com + name: vCloudinfo + icon: mdi:microsoft-internet-explorer + +- type: grid + column_span: 4 + columns: 2 + square: false + cards: + - type: vertical-stack + cards: + - type: custom:mini-graph-card + name: Proxmox01 + icon: mdi:server + hours_to_show: 24 + points_per_hour: 2 + line_width: 2 + animate: true + show: + fill: true + legend: true + icon: true + name: true + state: true + entities: + - entity: sensor.node_proxmox1_cpu_used + name: CPU + - entity: sensor.node_proxmox1_memory_used_percentage + name: Memory + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: custom:mini-graph-card + name: Proxmox01 VMs (CPU / MEM) + icon: mdi:chart-line + hours_to_show: 24 + points_per_hour: 2 + line_width: 2 + animate: true + show: + fill: false + legend: true + icon: true + name: true + state: false + entities: + - entity: sensor.qemu_docker69_169_cpu_used + name: Docker69 CPU + - entity: sensor.qemu_docker69_169_memory_used_percentage + name: Docker69 MEM + - entity: sensor.qemu_carlo_hass_105_cpu_used + name: HASS CPU + - entity: sensor.qemu_carlo_hass_105_memory_used_percentage + name: HASS MEM + - entity: sensor.qemu_wireguard_104_cpu_used + name: WireGuard CPU + - entity: sensor.qemu_wireguard_104_memory_used_percentage + name: WireGuard MEM + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: grid + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_docker69_169_status + name: Docker69 + icon: mdi:docker + label: > + [[[ return "Last boot: " + (states['sensor.qemu_docker69_169_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_docker69_169_reboot + name: Docker69 + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_carlo_hass_105_status + name: HASS + icon: mdi:home-assistant + label: > + [[[ return "Last boot: " + (states['sensor.qemu_carlo_hass_105_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_carlo_hass_105_reboot + name: HASS + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_wireguard_104_status + name: WireGuard + icon: mdi:vpn + label: > + [[[ return "Last boot: " + (states['sensor.qemu_wireguard_104_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_wireguard_104_reboot + name: WireGuard + + - type: vertical-stack + cards: + - type: custom:mini-graph-card + name: Proxmox02 + icon: mdi:server + hours_to_show: 24 + points_per_hour: 2 + line_width: 2 + animate: true + show: + fill: true + legend: true + icon: true + name: true + state: true + entities: + - entity: sensor.node_proxmox02_cpu_used + name: CPU + - entity: sensor.node_proxmox02_memory_used_percentage + name: Memory + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: custom:mini-graph-card + name: Frigate VM (CPU / MEM) + icon: mdi:video + hours_to_show: 24 + points_per_hour: 2 + line_width: 2 + animate: true + show: + fill: false + legend: true + icon: true + name: true + state: false + entities: + - entity: sensor.qemu_docker2_101_cpu_used + name: CPU + - entity: sensor.qemu_docker2_101_memory_used_percentage + name: MEM + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml + - type: grid + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_device_tile + entity: sensor.qemu_docker2_101_status + name: Frigate + icon: mdi:video + label: > + [[[ return "Last boot: " + (states['sensor.qemu_docker2_101_last_boot']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.qemu_docker2_101_reboot + name: Frigate diff --git a/config/dashboards/infrastructure/partials/vacuum_badges.yaml b/config/dashboards/infrastructure/partials/vacuum_badges.yaml new file mode 100644 index 00000000..755ff304 --- /dev/null +++ b/config/dashboards/infrastructure/partials/vacuum_badges.yaml @@ -0,0 +1,16 @@ +###################################################################### +# @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 - vacuum badges +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/infrastructure/views/03_vacuum.yaml key `badges`. +###################################################################### + +- type: entity + show_name: true + show_state: true + show_icon: true + entity: input_boolean.l10s_vacuum_on_demand diff --git a/config/dashboards/infrastructure/partials/vacuum_sections.yaml b/config/dashboards/infrastructure/partials/vacuum_sections.yaml new file mode 100644 index 00000000..eda04a2d --- /dev/null +++ b/config/dashboards/infrastructure/partials/vacuum_sections.yaml @@ -0,0 +1,344 @@ +###################################################################### +# @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 - vacuum sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/infrastructure/views/03_vacuum.yaml key `sections`. +###################################################################### + +- type: grid + cards: + - type: tile + entity: input_text.l10s_vacuum_room_catalog + vertical: false + features_position: bottom + grid_options: + columns: full + - type: tile + entity: input_text.l10s_vacuum_room_queue + vertical: false + features_position: bottom + grid_options: + columns: full + - type: tile + entity: input_text.l10s_vacuum_rooms_cleaned_today + vertical: false + features_position: bottom + grid_options: + columns: full + - type: tile + grid_options: + columns: full + entity: sensor.l10s_vacuum_current_room + state_content: + - state + - room_id + - last_changed + vertical: false + features_position: bottom + - type: tile + entity: input_select.l10s_vacuum_phase +- type: grid + cards: + - type: custom:xiaomi-vacuum-map-card + map_source: + camera: camera.l10s_vacuum_map + calibration_source: + camera: true + entity: vacuum.l10s_vacuum + vacuum_platform: Tasshack/dreame-vacuum + map_modes: + - template: vacuum_clean_zone + - template: vacuum_clean_point + - template: vacuum_clean_segment + predefined_selections: + - id: '1' + icon: + name: mdi:home-outline + x: -8100 + y: 12400 + label: + text: Pool-Bath + x: -8100 + y: 12400 + offset_y: 35 + outline: + - - -9950 + - 11350 + - - -6650 + - 11350 + - - -6650 + - 12900 + - - -9950 + - 12900 + - id: '2' + icon: + name: mdi:monitor-shimmer + x: -4650 + y: 10900 + label: + text: Office + x: -4650 + y: 10900 + offset_y: 35 + outline: + - - -6650 + - 7400 + - - -2800 + - 7400 + - - -2800 + - 12850 + - - -6650 + - 12850 + - id: '3' + icon: + name: mdi:home-outline + x: -5600 + y: 5250 + label: + text: Kids-Bathroom + x: -5600 + y: 5250 + offset_y: 35 + outline: + - - -6450 + - 4250 + - - -4750 + - 4250 + - - -4750 + - 6150 + - - -6450 + - 6150 + - id: '4' + icon: + name: mdi:home-outline + x: 7300 + y: 4100 + label: + text: Master-Bathroom + x: 7300 + y: 4100 + offset_y: 35 + outline: + - - 5450 + - 250 + - - 9400 + - 250 + - - 9400 + - 7850 + - - 5450 + - 7850 + - id: '6' + icon: + name: mdi:home-outline + x: -8450 + y: 4200 + label: + text: Paige-Bedroom + x: -8450 + y: 4200 + offset_y: 35 + outline: + - - -9900 + - 1600 + - - -6600 + - 1600 + - - -6600 + - 6100 + - - -9900 + - 6100 + - id: '7' + icon: + name: mdi:home-outline + x: 6450 + y: 10400 + label: + text: Master-Bedroom + x: 6450 + y: 10400 + offset_y: 35 + outline: + - - 3450 + - 7850 + - - 9550 + - 7850 + - - 9550 + - 12850 + - - 3450 + - 12850 + - id: '8' + icon: + name: mdi:home-outline + x: -8300 + y: 9300 + label: + text: Justin-Bedroom + x: -8300 + y: 9300 + offset_y: 35 + outline: + - - -9950 + - 6250 + - - -6650 + - 6250 + - - -6650 + - 11150 + - - -9950 + - 11150 + - id: '9' + icon: + name: mdi:home-outline + x: 7250 + y: -2200 + label: + text: Stacey-Office + x: 7250 + y: -2200 + offset_y: 35 + outline: + - - 5450 + - -4700 + - - 9450 + - -4700 + - - 9450 + - 350 + - - 5450 + - 350 + - id: '10' + icon: + name: mdi:sofa-outline + x: 2500 + y: 4800 + label: + text: Living Room + x: 2500 + y: 4800 + offset_y: 35 + outline: + - - -650 + - 750 + - - 5300 + - 750 + - - 5300 + - 8800 + - - -650 + - 8800 + - id: '11' + icon: + name: mdi:home-outline + x: -5350 + y: 2600 + label: + text: Garage-Hallway + x: -5350 + y: 2600 + offset_y: 35 + outline: + - - -6600 + - 1100 + - - -4050 + - 1100 + - - -4050 + - 4200 + - - -6600 + - 4200 + - id: '12' + icon: + name: mdi:home-outline + x: 700 + y: 8900 + label: + text: Dining-Room + x: 700 + y: 8900 + offset_y: 35 + outline: + - - -4350 + - 6000 + - - 2650 + - 6000 + - - 2650 + - 12650 + - - -4350 + - 12650 + - id: '13' + icon: + name: mdi:home-outline + x: -6200 + y: 6800 + label: + text: Hallway + x: -6200 + y: 6800 + offset_y: 35 + outline: + - - -7550 + - 6100 + - - -4350 + - 6100 + - - -4350 + - 7700 + - - -7550 + - 7700 + - id: '14' + icon: + name: mdi:chef-hat + x: -1700 + y: 3350 + label: + text: Kitchen + x: -1700 + y: 3350 + offset_y: 35 + outline: + - - -4200 + - 950 + - - -300 + - 950 + - - -300 + - 6100 + - - -4200 + - 6100 + - id: '15' + icon: + name: mdi:home-outline + x: 4050 + y: -1350 + label: + text: Foyer + x: 4050 + y: -1350 + offset_y: 35 + outline: + - - 2850 + - -3500 + - - 5450 + - -3500 + - - 5450 + - 800 + - - 2850 + - 800 + - id: '17' + icon: + name: mdi:home-outline + x: 750 + y: -1250 + label: + text: Formal-Dining + x: 750 + y: -1250 + offset_y: 35 + outline: + - - -1500 + - -3500 + - - 2950 + - -3500 + - - 2950 + - 950 + - - -1500 + - 950 + map_locked: true + two_finger_pan: true diff --git a/config/dashboards/infrastructure/partials/view_cards.yaml b/config/dashboards/infrastructure/partials/view_cards.yaml new file mode 100644 index 00000000..8c3a4abc --- /dev/null +++ b/config/dashboards/infrastructure/partials/view_cards.yaml @@ -0,0 +1,15 @@ +###################################################################### +# @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 - view cards +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/infrastructure/views/04_view.yaml key `cards`. +###################################################################### + +- type: logbook + target: + entity_id: + - sensor.activity_feed diff --git a/config/dashboards/infrastructure/popups/.gitkeep b/config/dashboards/infrastructure/popups/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/infrastructure/templates/button_card_templates.yaml b/config/dashboards/infrastructure/templates/button_card_templates.yaml new file mode 100644 index 00000000..3a2dc973 --- /dev/null +++ b/config/dashboards/infrastructure/templates/button_card_templates.yaml @@ -0,0 +1,304 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure Templates - custom:button-card +# Shared `button_card_templates` used across Infrastructure views. +# ------------------------------------------------------------------- +# Notes: Keep templates generic; view-specific tuning stays in the view partials. +###################################################################### + +bearstone_infra_base: + show_icon: true + show_name: true + show_state: true + tap_action: + action: more-info + styles: + card: + - border-radius: 18px + - padding: 14px + - box-shadow: none + - background: var(--ha-card-background, var(--card-background-color)) + - border: 1px solid rgba(0,0,0,0.06) + - overflow: hidden + grid: + - grid-template-areas: "\"i n\" \"i s\"" + - grid-template-columns: 40px 1fr + - grid-template-rows: min-content min-content + icon: + - width: 22px + - color: var(--primary-text-color) + name: + - font-weight: 700 + - font-size: 14px + - justify-self: start + - padding-bottom: 2px + state: + - font-size: 12px + - opacity: 0.75 + - justify-self: start + +bearstone_infra_chip: + template: bearstone_infra_base + show_state: true + styles: + card: + - border-radius: 999px + - padding: 10px 12px + - border: 1px solid rgba(0,0,0,0.06) + - background: rgba(255,255,255,0.75) + - backdrop-filter: blur(6px) + - -webkit-backdrop-filter: blur(6px) + grid: + - grid-template-areas: "\"i n\" \"i s\"" + - grid-template-columns: 28px 1fr + icon: + - width: 18px + name: + - font-weight: 700 + - font-size: 12px + state: + - font-size: 11px + - opacity: 0.7 + +bearstone_infra_chip_running: + template: bearstone_infra_chip + state: + - value: 'on' + styles: + card: + - border-color: rgba(67,160,71,0.45) + - background: rgba(232,245,233,0.85) + icon: + - color: rgba(46,125,50,1) + - value: 'off' + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + icon: + - color: rgba(198,40,40,1) + - value: unavailable + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + icon: + - color: rgba(198,40,40,1) + +bearstone_infra_tile: + template: bearstone_infra_base + show_label: true + label: '[[[ return variables.label ? variables.label : "" ]]]' + styles: + grid: + - grid-template-areas: "\"i n\" \"i l\"" + - grid-template-rows: min-content min-content + label: + - font-size: 12px + - opacity: 0.8 + - justify-self: start + state: + - value: unavailable + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + +bearstone_infra_reboot: + template: bearstone_infra_tile + show_state: false + icon: mdi:restart + label: '[[[ return variables.subtitle ? variables.subtitle : "Hold to reboot" ]]]' + hold_action: + action: call-service + service: button.press + service_data: + entity_id: '[[[ return variables.button_entity ]]]' + confirmation: + text: '[[[ return "Reboot " + (variables.name ? variables.name : "device") + "?" ]]]' + styles: + icon: + - color: var(--secondary-text-color) + +bearstone_infra_device_tile: + template: bearstone_infra_tile + show_state: true + label: '[[[ return variables.subtitle ? variables.subtitle : "" ]]]' + hold_action: + action: call-service + service: button.press + service_data: + entity_id: '[[[ return variables.button_entity ]]]' + confirmation: + text: '[[[ return "Restart " + (variables.name ? variables.name : "device") + "?" ]]]' + styles: + state: + - font-weight: 700 + +bearstone_infra_container_row: + template: bearstone_infra_list_row_running + show_label: false + tap_action: + action: none + hold_action: + action: call-service + service: button.press + service_data: + entity_id: '[[[ return variables.restart_button ]]]' + confirmation: + text: '[[[ return "Restart container " + entity.attributes.friendly_name + "?" ]]]' + icon: mdi:docker + +bearstone_infra_panel_header: + show_icon: false + show_state: false + show_label: false + tap_action: + action: none + styles: + card: + - background: transparent + - border: none + - box-shadow: none + - padding: 6px 2px 10px 2px + name: + - font-size: 18px + - font-weight: 800 + - justify-self: start + +bearstone_infra_list_row: + show_icon: true + show_name: true + show_state: true + show_label: false + tap_action: + action: more-info + styles: + card: + - border-radius: 14px + - padding: 12px 12px + - box-shadow: none + - border: 1px solid rgba(0,0,0,0.03) + - background: rgba(0,0,0,0.02) + - width: 100% + - box-sizing: border-box + grid: + - grid-template-areas: "\"i n s\"" + - grid-template-columns: 24px 1fr auto + - align-items: center + - column-gap: 10px + icon: + - width: 18px + - color: var(--primary-color) + name: + - font-weight: 700 + - font-size: 14px + - justify-self: start + - opacity: 0.95 + - min-width: 0 + - overflow: hidden + - text-overflow: ellipsis + - white-space: nowrap + state: + - justify-self: end + - font-weight: 700 + - font-size: 13px + - opacity: 0.8 + - padding-left: 8px + - white-space: nowrap + +bearstone_infra_list_row_running: + template: bearstone_infra_list_row + state: + - value: 'on' + styles: + card: + - border-color: rgba(67,160,71,0.45) + - background: rgba(232,245,233,0.85) + icon: + - color: rgba(46,125,50,1) + state: + - color: rgba(46,125,50,1) + - opacity: 1 + - value: 'off' + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + icon: + - color: rgba(198,40,40,1) + state: + - color: rgba(198,40,40,1) + - opacity: 1 + - value: Running + styles: + icon: + - color: rgba(46,125,50,1) + state: + - color: rgba(46,125,50,1) + - opacity: 1 + - value: running + styles: + icon: + - color: rgba(46,125,50,1) + state: + - color: rgba(46,125,50,1) + - opacity: 1 + - value: Stopped + styles: + icon: + - color: rgba(198,40,40,1) + state: + - color: rgba(198,40,40,1) + - opacity: 1 + - value: stopped + styles: + icon: + - color: rgba(198,40,40,1) + state: + - color: rgba(198,40,40,1) + - opacity: 1 + - value: unavailable + styles: + icon: + - color: rgba(198,40,40,1) + state: + - color: rgba(198,40,40,1) + - opacity: 1 + +bearstone_infra_kpi: + show_icon: true + show_name: true + show_state: true + show_label: false + tap_action: + action: more-info + styles: + card: + - border-radius: 14px + - padding: 12px + - box-shadow: none + - border: 1px solid rgba(0,0,0,0.03) + - background: rgba(0,0,0,0.02) + grid: + - grid-template-areas: "\"i\" \"n\" \"s\"" + - grid-template-rows: 22px min-content min-content + - row-gap: 6px + - justify-items: center + icon: + - width: 18px + - color: var(--primary-color) + name: + - font-size: 11px + - font-weight: 800 + - opacity: 0.65 + - text-transform: uppercase + - text-align: center + - letter-spacing: 0.6px + state: + - font-size: 16px + - font-weight: 800 + - opacity: 0.9 diff --git a/config/dashboards/infrastructure/views/01_home.yaml b/config/dashboards/infrastructure/views/01_home.yaml new file mode 100644 index 00000000..d5ea1d7d --- /dev/null +++ b/config/dashboards/infrastructure/views/01_home.yaml @@ -0,0 +1,19 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure View - Home +# Clean layout inspired by Stitch wireframe (hosts, right-rail trends, storage, wifi, apt). +# ------------------------------------------------------------------- +# Notes: Uses existing Infrastructure entities from Proxmox/UniFi/UPS/Docker hosts. +###################################################################### + +title: Infrastructure +path: home +type: sections +icon: mdi:view-dashboard-variant +max_columns: 4 +badges: [] +sections: !include /config/dashboards/infrastructure/partials/home_sections.yaml +cards: [] diff --git a/config/dashboards/infrastructure/views/02_proxmox.yaml b/config/dashboards/infrastructure/views/02_proxmox.yaml new file mode 100644 index 00000000..90ff8120 --- /dev/null +++ b/config/dashboards/infrastructure/views/02_proxmox.yaml @@ -0,0 +1,19 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure View - ProxMox +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.dashboard_infrastructure view index 1. +###################################################################### + +title: ProxMox +path: proxmox +cards: [] +type: sections +icon: mdi:server +badges: [] +sections: !include /config/dashboards/infrastructure/partials/proxmox_sections.yaml +max_columns: 4 diff --git a/config/dashboards/infrastructure/views/03_pi_hole.yaml b/config/dashboards/infrastructure/views/03_pi_hole.yaml new file mode 100644 index 00000000..14cf420c --- /dev/null +++ b/config/dashboards/infrastructure/views/03_pi_hole.yaml @@ -0,0 +1,18 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure View - Pi-Hole +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.dashboard_infrastructure view index 2. +###################################################################### + +type: panel +path: pi-hole +title: Pi-Hole +icon: mdi:pi-hole +visible: +- user: be280a93c9d7416e98d25d0470f414be +cards: !include /config/dashboards/infrastructure/partials/pi_hole_cards.yaml diff --git a/config/dashboards/infrastructure/views/04_vacuum.yaml b/config/dashboards/infrastructure/views/04_vacuum.yaml new file mode 100644 index 00000000..bae82707 --- /dev/null +++ b/config/dashboards/infrastructure/views/04_vacuum.yaml @@ -0,0 +1,23 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure View - Vacuum +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.dashboard_infrastructure view index 3. +###################################################################### + +title: Vacuum +icon: mdi:robot-vacuum +type: sections +cards: [] +visible: +- user: be280a93c9d7416e98d25d0470f414be +- user: 46a8d15eb20e4a1daf2d1d1f63180ec5 +- user: 8fc5ba22cb32430a9143beb4df70541b +- user: 19970706e7e4492c844ea2fc94a4599a +sections: !include /config/dashboards/infrastructure/partials/vacuum_sections.yaml +max_columns: 2 +badges: !include /config/dashboards/infrastructure/partials/vacuum_badges.yaml diff --git a/config/dashboards/infrastructure/views/05_activity_feed.yaml b/config/dashboards/infrastructure/views/05_activity_feed.yaml new file mode 100644 index 00000000..ec4b5286 --- /dev/null +++ b/config/dashboards/infrastructure/views/05_activity_feed.yaml @@ -0,0 +1,16 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure View - Untitled +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.dashboard_infrastructure view index 4. +###################################################################### + +type: panel +icon: mdi:clipboard-text-outline +title: Activity +path: activity +cards: !include /config/dashboards/infrastructure/partials/view_cards.yaml diff --git a/config/dashboards/infrastructure/views/06_mariadb.yaml b/config/dashboards/infrastructure/views/06_mariadb.yaml new file mode 100644 index 00000000..84e79f06 --- /dev/null +++ b/config/dashboards/infrastructure/views/06_mariadb.yaml @@ -0,0 +1,18 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure View - MariaDB +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.dashboard_infrastructure view index 5. +###################################################################### + +type: sections +title: MariaDB +path: mariadb +max_columns: 3 +icon: mdi:database +sections: !include /config/dashboards/infrastructure/partials/mariadb_sections.yaml +cards: [] diff --git a/config/dashboards/infrastructure/views/07_docker_containers.yaml b/config/dashboards/infrastructure/views/07_docker_containers.yaml new file mode 100644 index 00000000..4e0cac14 --- /dev/null +++ b/config/dashboards/infrastructure/views/07_docker_containers.yaml @@ -0,0 +1,18 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Infrastructure View - Docker containers +# Container status + restart controls (Portainer integration). +# ------------------------------------------------------------------- +# Notes: Uses `binary_sensor.*_status` and `button.*_restart_container` entities (Portainer integration). +###################################################################### + +title: Docker +path: docker +type: sections +icon: mdi:docker +badges: [] +sections: !include /config/dashboards/infrastructure/partials/docker_containers_sections.yaml +max_columns: 4 diff --git a/config/dashboards/kiosk/card_mod/.gitkeep b/config/dashboards/kiosk/card_mod/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/kiosk/cards/.gitkeep b/config/dashboards/kiosk/cards/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/kiosk/dashboard.yaml b/config/dashboards/kiosk/dashboard.yaml new file mode 100644 index 00000000..99e6dddc --- /dev/null +++ b/config/dashboards/kiosk/dashboard.yaml @@ -0,0 +1,12 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# KIOSK Dashboard - YAML entrypoint +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Entry point for dashboard key `dashboard-kiosk`. Views are loaded from /config/dashboards/kiosk/views. +###################################################################### + +views: !include_dir_list /config/dashboards/kiosk/views diff --git a/config/dashboards/kiosk/partials/.gitkeep b/config/dashboards/kiosk/partials/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/kiosk/partials/kiosk_oveview_badges.yaml b/config/dashboards/kiosk/partials/kiosk_oveview_badges.yaml new file mode 100644 index 00000000..1bbea1c9 --- /dev/null +++ b/config/dashboards/kiosk/partials/kiosk_oveview_badges.yaml @@ -0,0 +1,20 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Kiosk Partial - kiosk_oveview badges +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/kiosk/views/01_kiosk_oveview.yaml key `badges`. +###################################################################### + +- type: entity + show_name: true + show_state: false + show_icon: true + entity: switch.alarm_panel_1_screensaver + tap_action: + action: toggle + show_entity_picture: false + name: Turn On ScreenSaver diff --git a/config/dashboards/kiosk/partials/kiosk_oveview_sections.yaml b/config/dashboards/kiosk/partials/kiosk_oveview_sections.yaml new file mode 100644 index 00000000..57af6b63 --- /dev/null +++ b/config/dashboards/kiosk/partials/kiosk_oveview_sections.yaml @@ -0,0 +1,73 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Kiosk Partial - kiosk_oveview sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/kiosk/views/01_kiosk_oveview.yaml key `sections`. +###################################################################### + +- type: grid + cards: + - type: picture-glance + camera_image: camera.frontdoorbell + camera_view: auto + entities: [] + grid_options: + columns: 12 + rows: auto + column_span: 1 +- type: grid + column_span: 1 + cards: + - type: picture-glance + camera_image: camera.garagecam + camera_view: auto + entities: [] + grid_options: + columns: 6 + rows: auto + - type: picture-glance + camera_image: camera.driveway + camera_view: auto + entities: [] + grid_options: + columns: 6 + rows: auto + - type: picture-glance + camera_image: camera.kidsgate + camera_view: auto + entities: [] + grid_options: + columns: 6 + rows: auto + - type: picture-glance + camera_image: camera.frontlawn + camera_view: auto + entities: [] + grid_options: + columns: 6 + rows: auto + - type: picture-glance + camera_image: camera.bedroomgate + camera_view: auto + entities: [] + grid_options: + columns: 6 + rows: auto + - type: picture-glance + camera_image: camera.filtergate + camera_view: auto + entities: [] + grid_options: + columns: 6 + rows: auto + - type: picture-glance + camera_image: camera.poolcam + camera_view: auto + entities: [] + grid_options: + columns: 6 + rows: auto diff --git a/config/dashboards/kiosk/partials/locator_sections.yaml b/config/dashboards/kiosk/partials/locator_sections.yaml new file mode 100644 index 00000000..f82a6db9 --- /dev/null +++ b/config/dashboards/kiosk/partials/locator_sections.yaml @@ -0,0 +1,134 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Kiosk Partial - locator sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/kiosk/views/02_locator.yaml key `sections`. +###################################################################### + +- cards: + - square: true + type: grid + cards: + - type: picture-entity + entity: person.carlo + name: Carlo + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + - type: picture-entity + entity: person.stacey + name: Stacey (Mom) + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + - type: picture-entity + entity: person.justin + name: Justin (Son) + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + - type: picture-entity + entity: person.paige + name: Paige (Daughter) + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + columns: 4 + - type: entities + entities: + - type: conditional + conditions: + - entity: person.carlo + state_not: home + row: + type: attribute + entity: sensor.carlo_place + name: Carlo Location + - type: conditional + conditions: + - entity: person.stacey + state_not: home + row: + type: attribute + entity: sensor.stacey_place + attribute: place_name + name: Stacey Location + - type: conditional + conditions: + - entity: person.justin + state_not: home + row: + type: attribute + entity: sensor.justin_place + attribute: place_name + name: Justin Location + - type: conditional + conditions: + - entity: person.paige + state_not: home + row: + type: attribute + entity: sensor.paige_place + attribute: place_name + name: Paige Location + - show_state: true + show_name: true + camera_view: live + type: picture-entity + entity: camera.birdseye + column_span: 1 +- type: grid + cards: + - type: custom:mushroom-template-card + primary: Family Map + icon: mdi:map-marker + tap_action: + action: navigate + navigation_path: /lovelace/family_locator + hold_action: + action: none + double_tap_action: + action: none + layout: horizontal + fill_container: true + - type: map + entities: + - person.justin + - person.paige + hours_to_show: 48 + aspect_ratio: '4:3' + theme_mode: auto + card_mod: + style: null + ha-map $ ha-entity-marker $: ".marker { \n /* Style person marker & adjust position to avoid blocking waypoints */\ + \ \n border: 3px solid var(\u2014state-person) !important; \n border-radius: 50% 50% 50% 0px !important; \n transform:\ + \ rotate(-45deg) translate(50%, -50%); \n overflow: visible !important;\n} \n.entity-picture { \n /* Correct orientation\ + \ of person avatar / \n transform: rotate(45deg); \n border-radius: 50%; \n} \n" + ha-map $: "path:first-child { \n / Style accuracy radius / \n stroke: var(\u2014state-person); \n fill: color-mix(in\ + \ srgb, var(\u2014state-person) 50%, transparent); \n stroke-width: 0px; } \npath:nth-child(even) { \n / Styling\ + \ for waypoints / \n stroke: var(\u2014purple-color); \n stroke-width: 4px; \n} \npath:nth-child(odd):not(:first-child)\ + \ { \n / Styling for lines */ \n stroke: var(\u2014purple-color); \n stroke-width: 4px; \n}\n:host { \n /* Define\ + \ Person State colors. Can be added to theme / \n \u2014state-person-home: var(\u2014green-color); \n \u2014state-person-not-home:\ + \ var(\u2014red-color); \n \u2014state-person-zone: var(\u2014blue-color); \n \u2014state-person-unknown: var(\u2014\ + grey-color); \n / Set person state color */ \n \u2014state-person: \n {% if is_state(config.entities[0].entity,\ + \ [\u2018home\u2019, \u2018not_home\u2019, \u2018unknown\u2019]) %} \n var(\u2014state-person-{{ states(config.entities[0].entity)\ + \ | replace(\u2018_\u2019, \u2018-\u2018) }}) \n {% else %} \n var(\u2014state-person-zone) \n {% endif\ + \ %}; \n}\n" + - show_current: true + show_forecast: true + type: weather-forecast + entity: weather.pirateweather + forecast_type: daily + secondary_info_attribute: humidity diff --git a/config/dashboards/kiosk/popups/.gitkeep b/config/dashboards/kiosk/popups/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/kiosk/views/01_kiosk_oveview.yaml b/config/dashboards/kiosk/views/01_kiosk_oveview.yaml new file mode 100644 index 00000000..23f30fd9 --- /dev/null +++ b/config/dashboards/kiosk/views/01_kiosk_oveview.yaml @@ -0,0 +1,33 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# KIOSK View - Overview +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.dashboard_kiosk view index 1. +###################################################################### + +title: Overview +path: kiosk_oveview +icon: mdi:cctv +type: sections +max_columns: 2 +sections: !include /config/dashboards/kiosk/partials/kiosk_oveview_sections.yaml +badges: !include /config/dashboards/kiosk/partials/kiosk_oveview_badges.yaml +cards: [] +visible: +- user: be280a93c9d7416e98d25d0470f414be +- user: 9543feb5402742a0ab90f301f09f1c0e +dense_section_placement: true +background: + opacity: 100 + alignment: center + size: cover + repeat: no-repeat + attachment: fixed + image: /api/image/serve/caf7862354abd804ef658f899fb3218b/original +header: + layout: center + badges_position: top diff --git a/config/dashboards/kiosk/views/02_locator.yaml b/config/dashboards/kiosk/views/02_locator.yaml new file mode 100644 index 00000000..7f6d3009 --- /dev/null +++ b/config/dashboards/kiosk/views/02_locator.yaml @@ -0,0 +1,29 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# KIOSK View - Locator +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.dashboard_kiosk view index 2. +###################################################################### + +type: sections +max_columns: 3 +title: Locator +path: locator +icon: mdi:map-marker-radius-outline +dense_section_placement: true +background: + opacity: 100 + alignment: center + size: cover + repeat: no-repeat + attachment: fixed + image: /api/image/serve/caf7862354abd804ef658f899fb3218b/original +visible: +- user: be280a93c9d7416e98d25d0470f414be +- user: 9543feb5402742a0ab90f301f09f1c0e +sections: !include /config/dashboards/kiosk/partials/locator_sections.yaml +cards: [] diff --git a/config/dashboards/overview/card_mod/.gitkeep b/config/dashboards/overview/card_mod/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/overview/cards/.gitkeep b/config/dashboards/overview/cards/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/overview/dashboard.yaml b/config/dashboards/overview/dashboard.yaml new file mode 100644 index 00000000..fb5ca1b2 --- /dev/null +++ b/config/dashboards/overview/dashboard.yaml @@ -0,0 +1,13 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Dashboard - YAML entrypoint +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Entry point for dashboard key `lovelace`. Views are loaded from /config/dashboards/overview/views. +###################################################################### + +title: Bear Stone +views: !include_dir_list /config/dashboards/overview/views diff --git a/config/dashboards/overview/partials/.gitkeep b/config/dashboards/overview/partials/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/overview/partials/admin_sections.yaml b/config/dashboards/overview/partials/admin_sections.yaml new file mode 100644 index 00000000..16be50ea --- /dev/null +++ b/config/dashboards/overview/partials/admin_sections.yaml @@ -0,0 +1,61 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - admin sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/07_admin.yaml key `sections`. +###################################################################### + +- type: grid + cards: + - type: tile + entity: automation.llm_vision_garage_cans_upper_right + - type: tile + entity: input_text.llmvision_garbage_last_keyframe + - type: tile + entity: input_datetime.llmvision_garbage_last_run + - type: tile + entity: input_text.llmvision_garbage_last_response + - type: tile + entity: calendar.llm_vision_timeline + - type: tile + entity: update.llm_vision_update + - type: tile + entity: input_button.llmvision_garbage_check +- type: grid + cards: + - type: markdown + title: AI Diagnostics + content: '**OpenAI Response:** + + + {{ state_attr(''sensor.openai_response'', ''response'') }} + + ' + - type: markdown + title: AI Diagnostics + content: '**OpenAI Instructions:** + + + {{ state_attr(''sensor.openai_instructions'', ''instructions'') }} + + ' +- type: grid + cards: + - camera_view: auto + type: picture-glance + title: Bedroom Tablet + image: https://demo.home-assistant.io/stub_config/kitchen.png + entities: + - entity: switch.alarm_panel_1_screensaver + image_entity: image.alarm_panel_1_screenshot + - camera_view: auto + type: picture-glance + title: Bedroom Tablet + image: https://demo.home-assistant.io/stub_config/kitchen.png + entities: + - entity: sensor.alarm_panel_1_battery + camera_image: camera.alarm_panel_1 diff --git a/config/dashboards/overview/partials/camera_badges.yaml b/config/dashboards/overview/partials/camera_badges.yaml new file mode 100644 index 00000000..0e852ed7 --- /dev/null +++ b/config/dashboards/overview/partials/camera_badges.yaml @@ -0,0 +1,29 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - camera badges +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/03_camera.yaml key `badges`. +###################################################################### + +- type: entity + show_name: true + show_state: true + show_icon: true + entity: cover.large_garage_door + color: '' +- type: entity + show_name: true + show_state: true + show_icon: true + entity: cover.small_garage_door + color: '' +- type: entity + show_name: true + show_state: true + show_icon: true + entity: lock.front_door + color: '' diff --git a/config/dashboards/overview/partials/camera_sections.yaml b/config/dashboards/overview/partials/camera_sections.yaml new file mode 100644 index 00000000..8947677f --- /dev/null +++ b/config/dashboards/overview/partials/camera_sections.yaml @@ -0,0 +1,54 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - camera sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/03_camera.yaml key `sections`. +###################################################################### + +- type: grid + cards: + - type: picture-glance + camera_image: camera.frontdoorbell + camera_view: auto + entities: [] + grid_options: + columns: 12 + rows: 7 + - type: picture-glance + camera_image: camera.poolcam + camera_view: auto + entities: [] +- type: grid + column_span: 3 + cards: + - type: picture-glance + camera_image: camera.garagecam + camera_view: auto + entities: [] + - type: picture-glance + camera_image: camera.frontlawn + camera_view: auto + entities: [] + - type: picture-glance + camera_image: camera.driveway + camera_view: auto + entities: [] + - type: picture-glance + camera_image: camera.kidsgate + camera_view: auto + entities: [] + - type: picture-glance + camera_image: camera.bedroomgate + camera_view: auto + entities: [] + - type: picture-glance + camera_image: camera.filtergate + camera_view: auto + entities: [] + - type: custom:frigate-events-card + frigate_client_id: frigate + event_count: 3 diff --git a/config/dashboards/overview/partials/cameras_cards.yaml b/config/dashboards/overview/partials/cameras_cards.yaml new file mode 100644 index 00000000..f44d075b --- /dev/null +++ b/config/dashboards/overview/partials/cameras_cards.yaml @@ -0,0 +1,51 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - cameras cards +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/04_cameras.yaml key `cards`. +###################################################################### + +- type: custom:frigate-card + cameras: + - camera_entity: camera.frontdoorbell + dependencies: + all_cameras: true + cameras: + - camera.bedroomgate + - camera.filtergate + - camera.driveway + - camera_entity: camera.bedroomgate + - camera_entity: camera.filtergate + - camera_entity: camera.driveway + - camera_entity: camera.poolcam + live_provider: auto + - camera_entity: camera.blink1 + live_provider: auto + - camera_entity: camera.frontlawn + live_provider: auto + - camera_entity: camera.kidsgate + - camera_entity: camera.garagecam + view: + default: snapshots + update_cycle_camera: true + scan: + enabled: true + menu: + style: outside + media_gallery: + controls: + thumbnails: + size: 175 + show_favorite_control: false + show_details: false + dimensions: + min_height: '500' + aspect_ratio: '16:9' + aspect_ratio_mode: unconstrained + media_viewer: + layout: + fit: cover diff --git a/config/dashboards/overview/partials/family_locator_cards.yaml b/config/dashboards/overview/partials/family_locator_cards.yaml new file mode 100644 index 00000000..331d3197 --- /dev/null +++ b/config/dashboards/overview/partials/family_locator_cards.yaml @@ -0,0 +1,36 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - family_locator cards +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/02_family_locator.yaml key `cards`. +###################################################################### + +- type: map + entities: + - person.carlo + - person.stacey + - person.justin + - person.paige + hours_to_show: 48 + aspect_ratio: '4:3' + theme_mode: auto + card_mod: + style: null + ha-map $ ha-entity-marker $: ".marker { \n /* Style person marker & adjust position to avoid blocking waypoints */ \n\ + \ border: 3px solid var(\u2014state-person) !important; \n border-radius: 50% 50% 50% 0px !important; \n transform:\ + \ rotate(-45deg) translate(50%, -50%); \n overflow: visible !important;\n} \n.entity-picture { \n /* Correct orientation\ + \ of person avatar / \n transform: rotate(45deg); \n border-radius: 50%; \n} \n" + ha-map $: "path:first-child { \n / Style accuracy radius / \n stroke: var(\u2014state-person); \n fill: color-mix(in\ + \ srgb, var(\u2014state-person) 50%, transparent); \n stroke-width: 0px; } \npath:nth-child(even) { \n / Styling for\ + \ waypoints / \n stroke: var(\u2014purple-color); \n stroke-width: 4px; \n} \npath:nth-child(odd):not(:first-child)\ + \ { \n / Styling for lines */ \n stroke: var(\u2014purple-color); \n stroke-width: 4px; \n}\n:host { \n /* Define\ + \ Person State colors. Can be added to theme / \n \u2014state-person-home: var(\u2014green-color); \n \u2014state-person-not-home:\ + \ var(\u2014red-color); \n \u2014state-person-zone: var(\u2014blue-color); \n \u2014state-person-unknown: var(\u2014\ + grey-color); \n / Set person state color */ \n \u2014state-person: \n {% if is_state(config.entities[0].entity,\ + \ [\u2018home\u2019, \u2018not_home\u2019, \u2018unknown\u2019]) %} \n var(\u2014state-person-{{ states(config.entities[0].entity)\ + \ | replace(\u2018_\u2019, \u2018-\u2018) }}) \n {% else %} \n var(\u2014state-person-zone) \n {% endif %};\ + \ \n}\n" diff --git a/config/dashboards/overview/partials/home_badges.yaml b/config/dashboards/overview/partials/home_badges.yaml new file mode 100644 index 00000000..09f08854 --- /dev/null +++ b/config/dashboards/overview/partials/home_badges.yaml @@ -0,0 +1,21 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - home badges +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/01_home.yaml key `badges`. +###################################################################### + +- type: entity + entity: cover.large_garage_door + display_type: complete + show_entity_picture: false +- type: entity + entity: cover.small_garage_door + display_type: complete +- type: entity + entity: lock.front_door + display_type: complete diff --git a/config/dashboards/overview/partials/home_sections.yaml b/config/dashboards/overview/partials/home_sections.yaml new file mode 100644 index 00000000..b4673fcb --- /dev/null +++ b/config/dashboards/overview/partials/home_sections.yaml @@ -0,0 +1,412 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - home sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/01_home.yaml key `sections`. +###################################################################### + +- cards: + - square: true + type: grid + cards: + - type: picture-entity + entity: person.carlo + name: Carlo + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + driving: grayscale(100%) opacity(50%) + - type: picture-entity + entity: person.stacey + name: Stacey + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + gym: grayscale(100%) opacity(50%) + driving: grayscale(100%) opacity(50%) + - type: picture-entity + entity: person.justin + name: Justin + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + Justin Dorm: grayscale(10%) opacity(50%) + Paige Dorm: grayscale(10%) opacity(50%) + gym: grayscale(100%) opacity(50%) + driving: grayscale(100%) opacity(50%) + - type: picture-entity + entity: person.paige + name: Paige + show_state: false + show_name: false + state_filter: + home: none + not_home: grayscale(100%) opacity(50%) + paige_work: grayscale(100%) opacity(50%) + Justin Dorm: grayscale(10%) opacity(50%) + Paige Dorm: grayscale(10%) opacity(50%) + gym: grayscale(100%) opacity(50%) + driving: grayscale(100%) opacity(50%) + columns: 4 + - type: entities + entities: + - type: conditional + conditions: + - entity: person.carlo + state_not: home + row: + type: attribute + entity: sensor.carlo_place + attribute: formatted_place + name: Carlo Location + - type: conditional + conditions: + - entity: person.stacey + state_not: home + row: + type: attribute + entity: sensor.stacey_place + attribute: formatted_place + name: Stacey Location + - type: conditional + conditions: + - entity: person.justin + state_not: home + row: + type: attribute + entity: sensor.justin_place + attribute: formatted_place + name: Justin Location + - type: conditional + conditions: + - entity: person.paige + state_not: home + row: + type: attribute + entity: sensor.paige_place + attribute: formatted_place + name: Paige Location + state_color: false + - type: custom:mushroom-template-card + primary: Zoom Map + icon: mdi:map-marker + tap_action: + action: navigate + navigation_path: /lovelace/family_locator + hold_action: + action: none + double_tap_action: + action: none + layout: horizontal + fill_container: true + - type: map + entities: + - person.justin + - person.paige + hours_to_show: 48 + aspect_ratio: '4:3' + theme_mode: auto + card_mod: + style: null + ha-map $ ha-entity-marker $: ".marker { \n /* Style person marker & adjust position to avoid blocking waypoints */\ + \ \n border: 3px solid var(\u2014state-person) !important; \n border-radius: 50% 50% 50% 0px !important; \n transform:\ + \ rotate(-45deg) translate(50%, -50%); \n overflow: visible !important;\n} \n.entity-picture { \n /* Correct orientation\ + \ of person avatar / \n transform: rotate(45deg); \n border-radius: 50%; \n} \n" + ha-map $: "path:first-child { \n / Style accuracy radius / \n stroke: var(\u2014state-person); \n fill: color-mix(in\ + \ srgb, var(\u2014state-person) 50%, transparent); \n stroke-width: 0px; } \npath:nth-child(even) { \n / Styling\ + \ for waypoints / \n stroke: var(\u2014purple-color);\n stroke-width: 4px; \n} \npath:nth-child(odd):not(:first-child)\ + \ { \n / Styling for lines */ \n stroke: var(\u2014purple-color);\n stroke-width: 4px; \n}\n:host { \n /* Define\ + \ Person State colors. Can be added to theme / \n \u2014state-person-home: var(\u2014green-color); \n \u2014state-person-not-home:\ + \ var(\u2014red-color); \n \u2014state-person-zone: var(\u2014blue-color); \n \u2014state-person-unknown: var(\u2014\ + grey-color); \n / Set person state color */ \n \u2014state-person: \n {% if is_state(config.entities[0].entity,\ + \ [\u2018home\u2019, \u2018not_home\u2019, \u2018unknown\u2019]) %} \n var(\u2014state-person-{{ states(config.entities[0].entity)\ + \ | replace(\u2018_\u2019, \u2018-\u2018) }}) \n {% else %} \n var(\u2014state-person-zone) \n {% endif\ + \ %}; \n}\n" + - type: map + entities: + - person.carlo + - person.stacey + hours_to_show: 48 + aspect_ratio: '4:3' + theme_mode: auto + card_mod: + style: null + ha-map $ ha-entity-marker $: ".marker { \n /* Style person marker & adjust position to avoid blocking waypoints */\ + \ \n border: 3px solid var(\u2014state-person) !important; \n border-radius: 50% 50% 50% 0px !important; \n transform:\ + \ rotate(-45deg) translate(50%, -50%); \n overflow: visible !important;\n} \n.entity-picture { \n /* Correct orientation\ + \ of person avatar / \n transform: rotate(45deg); \n border-radius: 50%; \n} \n" + ha-map $: "path:first-child { \n / Style accuracy radius / \n stroke: var(\u2014state-person); \n fill: color-mix(in\ + \ srgb, var(\u2014state-person) 50%, transparent); \n stroke-width: 0px; } \npath:nth-child(even) { \n / Styling\ + \ for waypoints / \n stroke: var(\u2014purple-color); \n stroke-width: 4px; \n} \npath:nth-child(odd):not(:first-child)\ + \ { \n / Styling for lines */ \n stroke: var(\u2014purple-color); \n stroke-width: 4px; \n}\n:host { \n /* Define\ + \ Person State colors. Can be added to theme / \n \u2014state-person-home: var(\u2014green-color); \n \u2014state-person-not-home:\ + \ var(\u2014red-color); \n \u2014state-person-zone: var(\u2014blue-color); \n \u2014state-person-unknown: var(\u2014\ + grey-color); \n / Set person state color */ \n \u2014state-person: \n {% if is_state(config.entities[0].entity,\ + \ [\u2018home\u2019, \u2018not_home\u2019, \u2018unknown\u2019]) %} \n var(\u2014state-person-{{ states(config.entities[0].entity)\ + \ | replace(\u2018_\u2019, \u2018-\u2018) }}) \n {% else %} \n var(\u2014state-person-zone) \n {% endif\ + \ %}; \n}\n" + column_span: 1 +- cards: + - type: custom:mushroom-vacuum-card + entity: vacuum.l10s_vacuum + icon_animation: true + commands: + - return_home + - start_pause + - locate + double_tap_action: + action: none + tap_action: + action: navigate + navigation_path: /lovelace/vacuum + visibility: + - condition: state + entity: vacuum.l10s_vacuum + state_not: docked + primary_info: name + fill_container: true + grid_options: + rows: 1 + columns: full + layout: horizontal + - type: tile + entity: climate.downstairs + state_content: + - current_temperature + - temperature + vertical: false + features_position: bottom + - type: tile + entity: climate.upstairs + show_entity_picture: false + hide_state: false + state_content: + - current_temperature + - temperature + vertical: false + features_position: bottom + - type: custom:search-card + max_results: 10 + - type: custom:bubble-card + card_type: button + button_type: slider + entity: light.living_room_lights + name: Living Room Lights + icon: mdi:sofa + show_state: true + show_attribute: false + show_last_changed: true + tap_action: + action: navigate + navigation_path: '#living_room' + grid_options: + columns: 6 + rows: 1 + card_layout: large + - type: custom:bubble-card + card_type: button + name: Lights On + icon: mdi:lightbulb-on-outline + show_state: true + tap_action: + action: navigate + navigation_path: '#lights-popup' + button_action: + tap_action: + action: navigate + navigation_path: '#lights-popup' + grid_options: + columns: 6 + rows: 1 + card_layout: large + button_type: switch + show_name: true + show_attribute: false + attribute: icon + entity: sensor.number_of_lights_on + - type: vertical-stack + cards: + - type: custom:bubble-card + card_type: pop-up + hash: '#living_room' + button_type: slider + entity: light.living_room_lights + name: Living Room Lights + icon: mdi:sofa + show_attribute: false + slide_to_close_distance: '100000' + trigger: [] + bg_opacity: '35' + show_state: true + show_last_changed: true + tap_action: + action: toggle + - type: custom:bubble-card + card_type: button + button_type: slider + entity: light.m1_front_left + name: Front Left + icon: mdi:light-recessed + show_state: true + show_attribute: false + show_last_changed: true + sub_button: [] + grid_options: + columns: 6 + rows: 1 + columns: 2 + - type: custom:bubble-card + card_type: button + button_type: slider + entity: light.m1_front_right + name: Front Right + icon: mdi:light-recessed + show_state: true + show_attribute: false + show_last_changed: true + sub_button: [] + grid_options: + columns: 6 + rows: 1 + - type: custom:bubble-card + card_type: button + button_type: slider + entity: light.m1_back_left + name: Back Left + icon: mdi:light-recessed + show_state: true + show_attribute: false + show_last_changed: true + sub_button: [] + grid_options: + columns: 6 + rows: 1 + - type: custom:bubble-card + card_type: button + button_type: slider + entity: light.m1_back_right + name: Back Right + icon: mdi:light-recessed + show_state: true + show_attribute: false + show_last_changed: true + sub_button: [] + grid_options: + columns: 6 + rows: 1 + grid_options: + columns: 12 + rows: auto + - type: custom:bubble-card + card_type: button + button_type: switch + entity: group.interior_switches + name: Interior Switches + icon: mdi:lightning-bolt + show_state: true + show_attribute: false + show_last_changed: false + button_action: + tap_action: + action: more-info + grid_options: + columns: 6 + rows: 1 + tap_action: + action: toggle + card_layout: large + - type: custom:bubble-card + card_type: button + button_type: state + entity: group.exterior_lights + name: Exterior Lights + icon: mdi:palm-tree + show_state: true + show_attribute: false + show_last_changed: true + grid_options: + columns: 6 + rows: 1 + - type: vertical-stack + cards: + - type: custom:bubble-card + card_type: pop-up + hash: '#lights-popup' + name: Lights Control + icon: mdi:lightbulb-group + width_desktop: 500px + show_header: true + entity: sensor.number_of_lights_on + button_type: name + - type: custom:auto-entities + filter: + include: + - domain: light + exclude: + - state: 'off' + - state: unavailable + - hidden_by: user + show_empty: true + entity: sensor.number_of_lights_on + button_type: state + show_name: true + card: + type: custom:auto-entities + card: + type: entities + filter: + include: [] + exclude: [] +- cards: + - type: custom:frigate-events-card + frigate_client_id: frigate + event_count: 5 + - show_state: true + show_name: true + camera_view: live + type: picture-entity + entity: camera.birdseye + tap_action: + action: navigate + navigation_path: /lovelace/camera + - type: vertical-stack + cards: + - type: weather-forecast + show_current: true + show_forecast: true + entity: weather.pirateweather + forecast_type: hourly + secondary_info_attribute: humidity + - type: custom:clock-weather-card + entity: weather.pirateweather + sun_entity: sun.sun + temperature_sensor: sensor.pirateweather_temperature + humidity_sensor: sensor.pirateweather_humidity + weather_icon_type: fill + animated_icon: true + forecast_rows: 5 + locale: en-GB + time_pattern: HH:mm + time_format: 12 + date_pattern: DDDD + hide_today_section: true + hide_forecast_section: false + show_humidity: true + hide_clock: false + hide_date: true + hourly_forecast: false + use_browser_time: false + time_zone: null + show_decimal: false + aqi_sensor: sensor.bear_stone_common_air_quality_index + apparent_sensor: null diff --git a/config/dashboards/overview/partials/vacuum_badges.yaml b/config/dashboards/overview/partials/vacuum_badges.yaml new file mode 100644 index 00000000..8f3d031c --- /dev/null +++ b/config/dashboards/overview/partials/vacuum_badges.yaml @@ -0,0 +1,16 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - vacuum badges +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/05_vacuum.yaml key `badges`. +###################################################################### + +- type: entity + show_name: true + show_state: true + show_icon: true + entity: input_boolean.l10s_vacuum_on_demand diff --git a/config/dashboards/overview/partials/vacuum_sections.yaml b/config/dashboards/overview/partials/vacuum_sections.yaml new file mode 100644 index 00000000..3bf97663 --- /dev/null +++ b/config/dashboards/overview/partials/vacuum_sections.yaml @@ -0,0 +1,352 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - vacuum sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/05_vacuum.yaml key `sections`. +###################################################################### + +- type: grid + cards: + - type: tile + entity: input_text.l10s_vacuum_room_catalog + vertical: false + features_position: bottom + grid_options: + columns: full + - type: tile + entity: input_text.l10s_vacuum_room_queue + vertical: false + features_position: bottom + grid_options: + columns: full + - type: tile + entity: input_text.l10s_vacuum_rooms_cleaned_today + vertical: false + features_position: bottom + grid_options: + columns: full + - type: tile + grid_options: + columns: full + entity: sensor.l10s_vacuum_current_room + state_content: + - state + - room_id + - last_changed + vertical: false + features_position: bottom + - type: tile + entity: input_select.l10s_vacuum_phase + - type: tile + entity: sensor.l10s_vacuum_status + - type: markdown + content: " 14 \u2013 Kitchen \n 12 \u2013 Dining \n 10 \u2013 Living \n 7 \u2013 Master Bedroom \n 15 \u2013\ + \ Foyer \n 9 \u2013 Stacey Office \n 17 \u2013 Formal Dining \n 13 \u2013 Hallway \n 8 \u2013 Justin Bedroom\ + \ \n 6 \u2013 Paige Bedroom \n 4 \u2013 Master Bathroom \n 2 \u2013 Office \n 1 \u2013 Pool Bath \n 3 \u2013\ + \ Kids Bathroom\n" + title: Room Legend +- type: grid + cards: + - type: custom:xiaomi-vacuum-map-card + map_source: + camera: camera.l10s_vacuum_map + calibration_source: + camera: true + entity: vacuum.l10s_vacuum + vacuum_platform: Tasshack/dreame-vacuum + map_modes: + - template: vacuum_clean_zone + - template: vacuum_clean_point + - template: vacuum_clean_segment + predefined_selections: + - id: '1' + icon: + name: mdi:home-outline + x: -8100 + y: 12400 + label: + text: Pool-Bath + x: -8100 + y: 12400 + offset_y: 35 + outline: + - - -9950 + - 11350 + - - -6650 + - 11350 + - - -6650 + - 12900 + - - -9950 + - 12900 + - id: '2' + icon: + name: mdi:monitor-shimmer + x: -4650 + y: 10900 + label: + text: Office + x: -4650 + y: 10900 + offset_y: 35 + outline: + - - -6650 + - 7400 + - - -2800 + - 7400 + - - -2800 + - 12850 + - - -6650 + - 12850 + - id: '3' + icon: + name: mdi:home-outline + x: -5600 + y: 5250 + label: + text: Kids-Bathroom + x: -5600 + y: 5250 + offset_y: 35 + outline: + - - -6450 + - 4250 + - - -4750 + - 4250 + - - -4750 + - 6150 + - - -6450 + - 6150 + - id: '4' + icon: + name: mdi:home-outline + x: 7300 + y: 4100 + label: + text: Master-Bathroom + x: 7300 + y: 4100 + offset_y: 35 + outline: + - - 5450 + - 250 + - - 9400 + - 250 + - - 9400 + - 7850 + - - 5450 + - 7850 + - id: '6' + icon: + name: mdi:home-outline + x: -8450 + y: 4200 + label: + text: Paige-Bedroom + x: -8450 + y: 4200 + offset_y: 35 + outline: + - - -9900 + - 1600 + - - -6600 + - 1600 + - - -6600 + - 6100 + - - -9900 + - 6100 + - id: '7' + icon: + name: mdi:home-outline + x: 6450 + y: 10400 + label: + text: Master-Bedroom + x: 6450 + y: 10400 + offset_y: 35 + outline: + - - 3450 + - 7850 + - - 9550 + - 7850 + - - 9550 + - 12850 + - - 3450 + - 12850 + - id: '8' + icon: + name: mdi:home-outline + x: -8300 + y: 9300 + label: + text: Justin-Bedroom + x: -8300 + y: 9300 + offset_y: 35 + outline: + - - -9950 + - 6250 + - - -6650 + - 6250 + - - -6650 + - 11150 + - - -9950 + - 11150 + - id: '9' + icon: + name: mdi:home-outline + x: 7250 + y: -2200 + label: + text: Stacey-Office + x: 7250 + y: -2200 + offset_y: 35 + outline: + - - 5450 + - -4700 + - - 9450 + - -4700 + - - 9450 + - 350 + - - 5450 + - 350 + - id: '10' + icon: + name: mdi:sofa-outline + x: 2500 + y: 4800 + label: + text: Living Room + x: 2500 + y: 4800 + offset_y: 35 + outline: + - - -650 + - 750 + - - 5300 + - 750 + - - 5300 + - 8800 + - - -650 + - 8800 + - id: '11' + icon: + name: mdi:home-outline + x: -5350 + y: 2600 + label: + text: Garage-Hallway + x: -5350 + y: 2600 + offset_y: 35 + outline: + - - -6600 + - 1100 + - - -4050 + - 1100 + - - -4050 + - 4200 + - - -6600 + - 4200 + - id: '12' + icon: + name: mdi:home-outline + x: 700 + y: 8900 + label: + text: Dining-Room + x: 700 + y: 8900 + offset_y: 35 + outline: + - - -4350 + - 6000 + - - 2650 + - 6000 + - - 2650 + - 12650 + - - -4350 + - 12650 + - id: '13' + icon: + name: mdi:home-outline + x: -6200 + y: 6800 + label: + text: Hallway + x: -6200 + y: 6800 + offset_y: 35 + outline: + - - -7550 + - 6100 + - - -4350 + - 6100 + - - -4350 + - 7700 + - - -7550 + - 7700 + - id: '14' + icon: + name: mdi:chef-hat + x: -1700 + y: 3350 + label: + text: Kitchen + x: -1700 + y: 3350 + offset_y: 35 + outline: + - - -4200 + - 950 + - - -300 + - 950 + - - -300 + - 6100 + - - -4200 + - 6100 + - id: '15' + icon: + name: mdi:home-outline + x: 4050 + y: -1350 + label: + text: Foyer + x: 4050 + y: -1350 + offset_y: 35 + outline: + - - 2850 + - -3500 + - - 5450 + - -3500 + - - 5450 + - 800 + - - 2850 + - 800 + - id: '17' + icon: + name: mdi:home-outline + x: 750 + y: -1250 + label: + text: Formal-Dining + x: 750 + y: -1250 + offset_y: 35 + outline: + - - -1500 + - -3500 + - - 2950 + - -3500 + - - 2950 + - 950 + - - -1500 + - 950 + map_locked: true + two_finger_pan: true diff --git a/config/dashboards/overview/partials/water_sections.yaml b/config/dashboards/overview/partials/water_sections.yaml new file mode 100644 index 00000000..9ef79e94 --- /dev/null +++ b/config/dashboards/overview/partials/water_sections.yaml @@ -0,0 +1,117 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Overview Partial - water sections +# Reusable list extracted from a view for smaller diffs and safer edits. +# ------------------------------------------------------------------- +# Notes: Extracted from config/dashboards/overview/views/06_water.yaml key `sections`. +###################################################################### + +- cards: + - type: tile + entity: sensor.downstairs_ac_runtime_since_last_filter_change + - type: tile + entity: sensor.upstairs_ac_runtime_since_last_filter_change + - type: tile + entity: input_datetime.downstairs_last_filter_change + - type: tile + entity: input_datetime.upstairs_last_filter_change + - type: custom:power-flow-card-plus + entities: + battery: + state_of_charge: sensor.powerwall_charge + entity: sensor.powerwall_battery_power + use_metadata: false + invert_state: false + state_of_charge_unit_white_space: true + show_state_of_charge: true + grid: + secondary_info: {} + entity: sensor.powerwall_site_power + solar: + display_zero_state: true + secondary_info: {} + entity: sensor.powerwall_solar_power + icon: mdi:white-balance-sunny + color_icon: true + home: + secondary_info: {} + entity: sensor.powerwall_load_power + clickable_entities: true + display_zero_lines: + mode: grey_out + transparency: 50 + grey_color: + - 189 + - 189 + - 189 + use_new_flow_rate_model: true + w_decimals: 0 + kw_decimals: 1 + min_flow_rate: 0.75 + max_flow_rate: 4 + max_expected_power: 2000 + min_expected_power: 0.01 + watt_threshold: 1000 + transparency_zero_lines: 0 + grid_options: + columns: full + rows: auto + - type: energy-solar-graph + column_span: 1 +- type: grid + cards: + - type: tile + entity: sensor.blink_blink1_temperature + - type: tile + entity: sensor.carlo_nas01_temperature + - type: tile + entity: sensor.carlo_nvr_temperature + - type: custom:mini-graph-card + entities: + - entity: sensor.upstairs_temperature + name: Upstairs + - entity: sensor.downstairs_temperature + name: Downstairs + name: House + hours_to_show: 24 + points_per_hour: 1 +- type: grid + cards: + - type: custom:mushroom-template-card + primary: "{{ states('sensor.rheem_wh_available_hot_water') }}% - {{ state_attr('water_heater.rheem_wh', 'temperature')\ + \ }}\xB0F\n" + secondary: Hot Water Available + icon: mdi:water-alert + entity: sensor.rheem_wh_available_hot_water + icon_color: red + tap_action: + action: more-info + hold_action: + action: none + double_tap_action: + action: none + - type: tile + entity: sensor.phyn_daily_water_usage + - type: tile + entity: sensor.phyn_average_water_temperature + - type: tile + entity: sensor.rheem_wh_water_usage_today + - type: tile + entity: input_datetime.water_delivery_date + - type: custom:mushroom-template-card + primary: ReadyRefresh Login + secondary: Manage water delivery + icon: mdi:water + tap_action: + action: url + url_path: https://www.readyrefresh.com/en/login + hold_action: + action: none + double_tap_action: + action: none + layout: horizontal + fill_container: true + - type: energy-water-graph diff --git a/config/dashboards/overview/popups/.gitkeep b/config/dashboards/overview/popups/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/overview/views/01_home.yaml b/config/dashboards/overview/views/01_home.yaml new file mode 100644 index 00000000..2ef555c9 --- /dev/null +++ b/config/dashboards/overview/views/01_home.yaml @@ -0,0 +1,29 @@ +###################################################################### +# @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 - home +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.lovelace view index 1. +###################################################################### + +path: home +theme: Backend-selected +layout: + max_columns: 4 +badges: !include /config/dashboards/overview/partials/home_badges.yaml +sections: !include /config/dashboards/overview/partials/home_sections.yaml +type: sections +max_columns: 4 +icon: mdi:home +cards: [] +header: + layout: center + badges_position: bottom +visible: +- user: be280a93c9d7416e98d25d0470f414be +- user: 46a8d15eb20e4a1daf2d1d1f63180ec5 +- user: 8fc5ba22cb32430a9143beb4df70541b +- user: 19970706e7e4492c844ea2fc94a4599a diff --git a/config/dashboards/overview/views/02_family_locator.yaml b/config/dashboards/overview/views/02_family_locator.yaml new file mode 100644 index 00000000..95a082ad --- /dev/null +++ b/config/dashboards/overview/views/02_family_locator.yaml @@ -0,0 +1,17 @@ +###################################################################### +# @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 - Family Locator +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.lovelace view index 2. +###################################################################### + +type: panel +path: family_locator +subview: true +cards: !include /config/dashboards/overview/partials/family_locator_cards.yaml +icon: mdi:map-marker-radius +title: Family Locator diff --git a/config/dashboards/overview/views/03_camera.yaml b/config/dashboards/overview/views/03_camera.yaml new file mode 100644 index 00000000..535a9d1f --- /dev/null +++ b/config/dashboards/overview/views/03_camera.yaml @@ -0,0 +1,18 @@ +###################################################################### +# @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 - Camera +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.lovelace view index 3. +###################################################################### + +title: Camera +path: camera +icon: mdi:cctv +type: sections +max_columns: 4 +sections: !include /config/dashboards/overview/partials/camera_sections.yaml +badges: !include /config/dashboards/overview/partials/camera_badges.yaml diff --git a/config/dashboards/overview/views/04_cameras.yaml b/config/dashboards/overview/views/04_cameras.yaml new file mode 100644 index 00000000..234a26a1 --- /dev/null +++ b/config/dashboards/overview/views/04_cameras.yaml @@ -0,0 +1,17 @@ +###################################################################### +# @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 - Camera View +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.lovelace view index 4. +###################################################################### + +title: Camera View +path: cameras +icon: mdi:camera +theme: Backend-selected +type: panel +cards: !include /config/dashboards/overview/partials/cameras_cards.yaml diff --git a/config/dashboards/overview/views/05_vacuum.yaml b/config/dashboards/overview/views/05_vacuum.yaml new file mode 100644 index 00000000..e0ad116c --- /dev/null +++ b/config/dashboards/overview/views/05_vacuum.yaml @@ -0,0 +1,23 @@ +###################################################################### +# @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 - Vacuum +# YAML-exported Lovelace dashboard (split into view files). +# ------------------------------------------------------------------- +# Notes: Exported from config/.storage/lovelace.lovelace view index 5. +###################################################################### + +title: Vacuum +icon: mdi:robot-vacuum +type: sections +cards: [] +visible: +- user: be280a93c9d7416e98d25d0470f414be +- user: 46a8d15eb20e4a1daf2d1d1f63180ec5 +- user: 8fc5ba22cb32430a9143beb4df70541b +- user: 19970706e7e4492c844ea2fc94a4599a +sections: !include /config/dashboards/overview/partials/vacuum_sections.yaml +max_columns: 2 +badges: !include /config/dashboards/overview/partials/vacuum_badges.yaml diff --git a/config/dashboards/overview/views/06_water.yaml b/config/dashboards/overview/views/06_water.yaml new file mode 100644 index 00000000..463f7cef --- /dev/null +++ b/config/dashboards/overview/views/06_water.yaml @@ -0,0 +1,23 @@ +###################################################################### +# @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 new file mode 100644 index 00000000..0ddf6be3 --- /dev/null +++ b/config/dashboards/overview/views/07_admin.yaml @@ -0,0 +1,18 @@ +###################################################################### +# @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 diff --git a/config/dashboards/resources.yaml b/config/dashboards/resources.yaml new file mode 100644 index 00000000..c9fed94a --- /dev/null +++ b/config/dashboards/resources.yaml @@ -0,0 +1,49 @@ +###################################################################### +# @CCOSTAN - Follow Me on X +# For more info visit https://www.vcloudinfo.com/click-here +# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig +# ------------------------------------------------------------------- +# Lovelace Resources - Custom card JS resources +# YAML-managed Lovelace resources (resource_mode: yaml). +# ------------------------------------------------------------------- +# Notes: Generated from config/.storage/lovelace_resources. Edit here after migration; do not edit .storage. +###################################################################### + +- type: module + url: /hacsfiles/lovelace-card-tools/card-tools.js?hacstag=16140332811 +- type: module + url: /hacsfiles/lovelace-auto-entities/auto-entities.js?hacstag=1677445841161 +- type: module + url: /hacsfiles/button-card/button-card.js?hacstag=146194325701 +- type: module + url: /hacsfiles/frigate-hass-card/frigate-hass-card.js?hacstag=394082552651 +- type: module + url: /hacsfiles/lovelace-xiaomi-vacuum-map-card/xiaomi-vacuum-map-card.js?hacstag=193372044232 +- type: module + url: /hacsfiles/lovelace-mushroom/mushroom.js?hacstag=4443503755010 +- type: module + url: /hacsfiles/clock-weather-card/clock-weather-card.js?hacstag=522634019292 +- type: module + url: /hacsfiles/lovelace-card-mod/card-mod.js?hacstag=190927524420 +- type: module + url: /hacsfiles/Bubble-Card/bubble-card.js?hacstag=680112919311 +- type: module + url: /hacsfiles/power-flow-card-plus/power-flow-card-plus.js?hacstag=618081815026 +- type: module + url: /hacsfiles/mini-graph-card/mini-graph-card-bundle.js?hacstag=1512800620130 +- type: module + url: /hacsfiles/advanced-camera-card/advanced-camera-card.js?hacstag=3940825527260 +- type: module + url: /hacsfiles/search-card/search-card.js?hacstag=19775918002 +- type: module + url: /hacsfiles/apexcharts-card/apexcharts-card.js?hacstag=331701152223 +- type: module + url: /hacsfiles/pi-hole-card/pi-hole-card.js?hacstag=9776750790250 +- type: module + url: /hacsfiles/flex-horseshoe-card/flex-horseshoe-card.js?hacstag=20729272512 +- type: module + url: /hacsfiles/vertical-stack-in-card/vertical-stack-in-card.js?hacstag=142051833101 +- type: module + url: /hacsfiles/lovelace-layout-card/layout-card.js?hacstag=156434866247 +- type: module + url: /hacsfiles/frigate-events-card/frigate-events-card.js?hacstag=1111882479100 diff --git a/config/dashboards/shared/card_mod/.gitkeep b/config/dashboards/shared/card_mod/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/shared/partials/.gitkeep b/config/dashboards/shared/partials/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/shared/popups/.gitkeep b/config/dashboards/shared/popups/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/dashboards/shared/views/.gitkeep b/config/dashboards/shared/views/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/config/packages/vacuum.yaml b/config/packages/vacuum.yaml index 3d4c7090..7afcf2b0 100755 --- a/config/packages/vacuum.yaml +++ b/config/packages/vacuum.yaml @@ -10,7 +10,7 @@ # Notes: # - `sensor.l10s_vacuum_current_room` can change during transit; require a dwell (`for:`) before dequeuing. # - Treat 2+ minutes in a room as "being cleaned" and dequeue immediately (queue = remaining rooms). -# - Phase changes happen when the queue is reseeded after the queue hits zero and the vacuum is not actively cleaning (queue is the source of truth). +# - Phase changes happen when the queue is reseeded after the queue hits zero (queue is the source of truth). # - Avoid reissuing `dreame_vacuum.vacuum_clean_segment` while already cleaning; only send a new segment job when starting/resuming or switching phases. # - Jinja2 loop scoping: use a `namespace` when building lists (otherwise the queue can appear empty and get cleared). # - Docked + task complete only logs queue state; no auto-clearing. @@ -128,7 +128,7 @@ script: vac_state: "{{ states('vacuum.l10s_vacuum') | default('', true) | string | lower }}" vac_is_cleaning: "{{ vac_state == 'cleaning' }}" phase_ready: "{{ is_state('input_boolean.l10s_vacuum_phase_ready', 'on') }}" - advance_phase: "{{ queue_ints | length == 0 and phase_ready and not vac_is_cleaning }}" + advance_phase: "{{ queue_ints | length == 0 and phase_ready }}" reset_cycle: "{{ advance_phase and not has_next_phase }}" phase_for_seed: "{{ next_phase if advance_phase and has_next_phase else phase }}" cleaning_mode: "{{ 'sweeping_and_mopping' if 'mop_' in phase_for_seed else 'sweeping' }}" @@ -206,7 +206,20 @@ script: - stop: 'No rooms left to clean today.' default: [] - # 3. Start cleaning + # 3. Start cleaning (but don't clobber an active job) + - choose: + - conditions: + - condition: template + value_template: "{{ vac_is_cleaning }}" + sequence: + - service: script.send_to_logbook + data: + topic: "VACUUM" + message: "Vacuum is already cleaning; queue/phase updated but not issuing a new segment job." + - stop: "Already cleaning." + default: [] + + # 4. Start cleaning - service: select.select_option target: entity_id: select.l10s_vacuum_cleaning_mode @@ -394,12 +407,6 @@ automation: - condition: state entity_id: input_boolean.guest_mode state: 'off' - - condition: template - value_template: > - {{ is_state('input_boolean.l10s_vacuum_on_demand', 'on') or is_state('group.family', 'not_home') }} - - condition: template - value_template: > - true - condition: template value_template: "{{ not is_state('vacuum.l10s_vacuum', 'cleaning') }}" action: @@ -555,7 +562,7 @@ automation: - service: script.send_to_logbook data: topic: "VACUUM" - message: "Queue empty for phase {{ phase }}; waiting for task completion to advance." + message: "Queue empty for phase {{ phase }}; phase advance armed for next reseed." default: [] default: [] From 525ac7756ec53d38de597dfe0c25ccea92b7dd3a Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Sun, 8 Feb 2026 00:43:05 -0500 Subject: [PATCH 2/4] Update README files across various config directories to remove unnecessary blank lines and enhance formatting consistency. Add branding and navigation details to the dashboards README. --- config/automation/README.md | 2 - config/automation/Speech/README.md | 2 - config/automation/System/README.md | 4 +- config/automation/Timed_Triggers/README.md | 2 - config/dashboards/README.md | 33 +++++++++ config/group/README.md | 2 - config/input_boolean/README.md | 2 - config/packages/triggers/README.md | 2 - config/scene/README.md | 2 - config/script/README.md | 2 - config/sensor/README.md | 4 -- config/shell_scripts/README.md | 2 - config/sounds/README.md | 2 - config/sounds/custom/README.md | 2 - config/sounds/gf_clock/README.md | 4 +- config/sounds/speechcons/README.md | 2 - .../floorplan/images/branding/README.md | 70 +++++++------------ 17 files changed, 61 insertions(+), 78 deletions(-) diff --git a/config/automation/README.md b/config/automation/README.md index 8c70b583..a563ba0c 100755 --- a/config/automation/README.md +++ b/config/automation/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -37,7 +36,6 @@ Event-driven automations that sit outside the self-contained packages. These tie - Use these as patterns if you are migrating UI-created automations out of `automations.yaml`. - Most automations expose helpers (input booleans, scenes) so you can extend them without editing IDs. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/automation/Speech/README.md b/config/automation/Speech/README.md index 7d6d8b48..1b0c173f 100755 --- a/config/automation/Speech/README.md +++ b/config/automation/Speech/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -36,7 +35,6 @@ Speech-first automations: contextual announcements, stats briefings, guest mode - Pairs with `script/speech_engine.yaml` and `templates/speech/briefing.yaml` for reusable phrasing. - Keep announcements short; most are triggered off sensor changes or scheduled briefings. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/automation/System/README.md b/config/automation/System/README.md index 8ab57a67..fc70ff40 100755 --- a/config/automation/System/README.md +++ b/config/automation/System/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -17,7 +16,7 @@ -Meta automations that keep Home Assistant healthy—watchdogs, diagnostics, and recovery tasks for the stack itself. +Meta automations that keep Home Assistant healthy�watchdogs, diagnostics, and recovery tasks for the stack itself. ### Quick navigation - [Repo overview](../../../README.md) | [Config index](../../README.md) | [Automation home](..) | [Packages](../../packages) @@ -36,7 +35,6 @@ Meta automations that keep Home Assistant healthy - Great place to drop temporary diagnostics without touching user-facing automations. - When cloning, change `id:` fields to avoid UUID collisions. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/automation/Timed_Triggers/README.md b/config/automation/Timed_Triggers/README.md index ab5c7e40..cd6481dc 100755 --- a/config/automation/Timed_Triggers/README.md +++ b/config/automation/Timed_Triggers/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -36,7 +35,6 @@ Time-based routines for wake/sleep cycles, sunrise/sunset shifts, and nightly wa - If you add new timed routines, keep names numeric or descriptive for easy sorting. - Template your conditions to respect holidays/guests before firing loud routines. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/dashboards/README.md b/config/dashboards/README.md index b67264a3..208ecc1c 100644 --- a/config/dashboards/README.md +++ b/config/dashboards/README.md @@ -1,3 +1,21 @@ +

+ Bear Stone Smart Home +
+ Bear Stone Smart Home Documentation +

+

Be sure to :star: my configuration repo so you can keep up to date on any daily progress!

+ +
+ +[![X Follow](https://img.shields.io/static/v1?label=talk&message=3k&color=blue&logo=twitter&style=for-the-badge)](https://x.com/ccostan) +[![YouTube Subscribe](https://img.shields.io/youtube/channel/subscribers/UC301G8JJFzY0BZ_0lshpKpQ?label=VIEW&logo=Youtube&logoColor=%23DF5D44&style=for-the-badge)](https://www.youtube.com/vCloudInfo?sub_confirmation=1) +[![GitHub Stars](https://img.shields.io/github/stars/CCOSTAN/Home-AssistantConfig?label=STARS&logo=Github&style=for-the-badge)](https://github.com/CCOSTAN)
+[![HA Version Badge](https://raw.githubusercontent.com/ccostan/home-assistantconfig/master/ha-version-badge.svg)](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/.HA_VERSION) +[![Last Commit](https://img.shields.io/github/last-commit/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master) +[![Commit Activity](https://img.shields.io/github/commit-activity/y/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master) + +
+

Dashboards (Lovelace YAML)

@@ -48,3 +66,18 @@ This folder is referenced from `config/configuration.yaml` via: ### Notes - Do not edit `config/.storage` by hand. Export once, then maintain the YAML files here. - It is safe to restart Home Assistant after dashboard changes as long as a configuration check passes first. + +**All of my configuration files are tested against the most stable version of home-assistant.** + + + +**Still have questions on my Config?**
+**Message me on X :** [![Follow CCostan](https://img.shields.io/twitter/follow/CCostan)](https://www.x.com/ccostan) + +

+Buy me a coffeeYou can buy me a coffeeBuy me a coffee +
+
+ +Affiliate Disclosure +

diff --git a/config/group/README.md b/config/group/README.md index 8038609a..5810f151 100755 --- a/config/group/README.md +++ b/config/group/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -35,7 +34,6 @@ Logical groupings (doors, locks, media, motion, switches) that make automations - Use groups in conditions to reduce repetitive entity lists. - Name groups after their purpose (alerts, climate, lights) for clarity. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/input_boolean/README.md b/config/input_boolean/README.md index 5eab7217..c575f586 100755 --- a/config/input_boolean/README.md +++ b/config/input_boolean/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -35,7 +34,6 @@ Mode and trigger toggles that drive automations (guest mode, parties, presence o - Flip booleans in the UI or via scripts to steer automations without edits. - Prefix experimental toggles with the feature name to keep them organized. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/packages/triggers/README.md b/config/packages/triggers/README.md index 1fa33e0e..77b4eaf2 100755 --- a/config/packages/triggers/README.md +++ b/config/packages/triggers/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -36,7 +35,6 @@ Small, reusable trigger packages�button presses, state trackers, and helper fl - Drop these alongside your packages to keep repeated patterns DRY. - Most helpers expose booleans/entities you can hook into without editing their logic. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/scene/README.md b/config/scene/README.md index 2c2e6984..dcb2e833 100755 --- a/config/scene/README.md +++ b/config/scene/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -60,7 +59,6 @@ Reusable lighting and ambiance presets. Automations and scripts call these scene - Adjust scenes once and let all dependent automations inherit the change. - Pair with `script/monthly_color_scene.yaml` for dynamic monthly palettes. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/script/README.md b/config/script/README.md index c404aeaf..886a8711 100755 --- a/config/script/README.md +++ b/config/script/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -38,7 +37,6 @@ Reusable scripts that other automations call for notifications, lighting, and sa - Keep scripts generic�route data via `data:`/`variables:` and reuse everywhere. - If you copy a script, rename any `alias` and `id` fields to avoid duplicates. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/sensor/README.md b/config/sensor/README.md index b628fcee..b7b68009 100755 --- a/config/sensor/README.md +++ b/config/sensor/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -34,7 +33,6 @@ Standalone sensors that aren't bundled in packages - time/utility helpers and MQ - Great place for lightweight utility sensors you want everywhere. - Fold frequently used sensors into packages when they grow. - **All of my configuration files are tested against the most stable version of home-assistant.** @@ -49,5 +47,3 @@ Standalone sensors that aren't bundled in packages - time/utility helpers and MQ Affiliate Disclosure

- - diff --git a/config/shell_scripts/README.md b/config/shell_scripts/README.md index 3599d1ad..1ea04354 100755 --- a/config/shell_scripts/README.md +++ b/config/shell_scripts/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -36,7 +35,6 @@ Longer-running shell helpers referenced by automations, packages, or cron. Anyth - Make scripts executable and test them manually before wiring into HA. - Document expected env vars or secrets at the top of each script. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/sounds/README.md b/config/sounds/README.md index f75c3989..618f05b0 100755 --- a/config/sounds/README.md +++ b/config/sounds/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -30,7 +29,6 @@ Audio assets (alert tones, chimes, TTS snippets) used by automations and scripts - Subfolders hold themed or device-specific sounds. - Seasonal cuckoo clock uses `october-clock` (Halloween) and `december-clock` (Christmas) variants, falling back to `cuckoo-clock`. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/sounds/custom/README.md b/config/sounds/custom/README.md index 1f21799e..66f800ab 100755 --- a/config/sounds/custom/README.md +++ b/config/sounds/custom/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -28,7 +27,6 @@ Custom/recorded sounds for bespoke automations (alarms, alerts, gags). - Note volume expectations in the automation that plays each file. - Store lossless masters elsewhere; keep deployment files compressed. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/sounds/gf_clock/README.md b/config/sounds/gf_clock/README.md index 1ba0932d..27da883f 100755 --- a/config/sounds/gf_clock/README.md +++ b/config/sounds/gf_clock/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -26,8 +25,7 @@ Grandfather clock chimes and cues used for hourly or themed announcements. ### Tips - Pair with `automation/Timed_Triggers/` routines for on-the-hour cues. -- Normalize levels so chimes don’t spike TTS volume. - +- Normalize levels so chimes don�t spike TTS volume. **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/sounds/speechcons/README.md b/config/sounds/speechcons/README.md index ec19cb63..0caeb744 100755 --- a/config/sounds/speechcons/README.md +++ b/config/sounds/speechcons/README.md @@ -1,4 +1,3 @@ -

Bear Stone Smart Home
@@ -28,7 +27,6 @@ Speechcon/SSML-friendly sound snippets sprinkled into the speech engine for vari - Use sparingly; novelty wears off fast if played too often. - Keep filenames aligned with the SSML tags you reference. - **All of my configuration files are tested against the most stable version of home-assistant.** diff --git a/config/www/custom_ui/floorplan/images/branding/README.md b/config/www/custom_ui/floorplan/images/branding/README.md index f7b1c337..b40d3c44 100755 --- a/config/www/custom_ui/floorplan/images/branding/README.md +++ b/config/www/custom_ui/floorplan/images/branding/README.md @@ -1,60 +1,42 @@

- Bear Stone Smart Home + Bear Stone Smart Home
Bear Stone Smart Home Documentation

Be sure to :star: my configuration repo so you can keep up to date on any daily progress!

+
[![X Follow](https://img.shields.io/static/v1?label=talk&message=3k&color=blue&logo=twitter&style=for-the-badge)](https://x.com/ccostan) [![YouTube Subscribe](https://img.shields.io/youtube/channel/subscribers/UC301G8JJFzY0BZ_0lshpKpQ?label=VIEW&logo=Youtube&logoColor=%23DF5D44&style=for-the-badge)](https://www.youtube.com/vCloudInfo?sub_confirmation=1) -[![GitHub Follow](https://img.shields.io/github/stars/CCOSTAN/Home-AssistantConfig?label=sTARS&logo=Github&style=for-the-badge)](https://github.com/CCOSTAN)
+[![GitHub Stars](https://img.shields.io/github/stars/CCOSTAN/Home-AssistantConfig?label=STARS&logo=Github&style=for-the-badge)](https://github.com/CCOSTAN)
[![HA Version Badge](https://raw.githubusercontent.com/ccostan/home-assistantconfig/master/ha-version-badge.svg)](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/config/.HA_VERSION) -

- - -

+[![Last Commit](https://img.shields.io/github/last-commit/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master) +[![Commit Activity](https://img.shields.io/github/commit-activity/y/CCOSTAN/Home-AssistantConfig.svg?style=plastic)](https://github.com/CCOSTAN/Home-AssistantConfig/commits/master) +
-

Recent Commits to Bear Stone Smart Home

-
-

- - Blog - - | - - Devices - - | - - Todo List - - | - - Follow Me - - | - - Code - - | - - Diagram - - | - - Youtube - - | - - Support - -

+ +Branding assets used across dashboards, floorplan, and documentation (logos, badges, and helper images). + +### Quick navigation +- You are here: `config/www/custom_ui/floorplan/images/branding/` +- [Repo overview](../../../../../../README.md) | [Config index](../../../../../../config/README.md) | [Dashboards](../../../../../../config/dashboards/README.md) + +### Notes +- These are static images referenced by Lovelace/floorplan YAML and various READMEs. +- Keep filenames stable to avoid breaking links in older posts and docs. + +**All of my configuration files are tested against the most stable version of home-assistant.** **Still have questions on my Config?**
**Message me on X :** [![Follow CCostan](https://img.shields.io/twitter/follow/CCostan)](https://www.x.com/ccostan) - -. - + +

+Buy me a coffeeYou can buy me a coffeeBuy me a coffee +
+
+ +Affiliate Disclosure +

From 247741ac12c105ee98ef8656af391727b658b101 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Sun, 8 Feb 2026 16:50:26 -0500 Subject: [PATCH 3/4] Enhance dashboard configurations by updating card styles to use `var(--divider-color)` for borders, improving consistency across various YAML files. Remove deprecated Pi-hole card section and streamline infrastructure views by including top chip sections for better organization. Update README to clarify Lovelace resource loading and migration notes. --- .../homeassistant/motion_light.yaml | 58 ++ .../homeassistant/notify_leaving_zone.yaml | 50 ++ .../confirmable_notification.yaml | 86 +++ config/dashboards/README.md | 3 + .../infrastructure/card_mod/infra_card.yaml | 2 +- .../infrastructure/card_mod/infra_panel.yaml | 2 +- .../partials/activity_sections.yaml | 31 + .../partials/docker_containers_sections.yaml | 86 +-- .../partials/home_sections.yaml | 339 +++++---- .../partials/infra_top_chips_section.yaml | 41 ++ .../partials/mariadb_sections.yaml | 59 +- .../partials/proxmox_sections.yaml | 76 +- .../partials/vacuum_sections.yaml | 683 +++++++++--------- .../templates/button_card_templates.yaml | 124 +++- .../infrastructure/views/01_home.yaml | 1 + .../infrastructure/views/02_proxmox.yaml | 1 + .../infrastructure/views/04_vacuum.yaml | 3 +- .../views/05_activity_feed.yaml | 8 +- .../infrastructure/views/06_mariadb.yaml | 4 +- .../views/07_docker_containers.yaml | 1 + config/dashboards/overview/dashboard.yaml | 2 +- config/dashboards/resources.yaml | 1 + .../resources.yaml} | 12 +- .../03_pi_hole.yaml => ui-lovelace.yaml} | 14 +- tools/ha_ui_smoke.ps1 | 69 ++ 25 files changed, 1129 insertions(+), 627 deletions(-) create mode 100644 config/blueprints/automation/homeassistant/motion_light.yaml create mode 100644 config/blueprints/automation/homeassistant/notify_leaving_zone.yaml create mode 100644 config/blueprints/script/homeassistant/confirmable_notification.yaml create mode 100644 config/dashboards/infrastructure/partials/activity_sections.yaml create mode 100644 config/dashboards/infrastructure/partials/infra_top_chips_section.yaml rename config/{dashboards/infrastructure/partials/pi_hole_cards.yaml => lovelace/resources.yaml} (58%) rename config/{dashboards/infrastructure/views/03_pi_hole.yaml => ui-lovelace.yaml} (54%) create mode 100644 tools/ha_ui_smoke.ps1 diff --git a/config/blueprints/automation/homeassistant/motion_light.yaml b/config/blueprints/automation/homeassistant/motion_light.yaml new file mode 100644 index 00000000..11900708 --- /dev/null +++ b/config/blueprints/automation/homeassistant/motion_light.yaml @@ -0,0 +1,58 @@ +blueprint: + name: Motion-activated Light + description: Turn on a light when motion is detected. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml + author: Home Assistant + input: + motion_entity: + name: Motion Sensor + selector: + entity: + filter: + - device_class: occupancy + domain: binary_sensor + - device_class: motion + domain: binary_sensor + light_target: + name: Light + selector: + target: + entity: + domain: light + no_motion_wait: + name: Wait time + description: Time to leave the light on after last motion is detected. + default: 120 + selector: + number: + min: 0 + max: 3600 + unit_of_measurement: seconds + +# If motion is detected within the delay, +# we restart the script. +mode: restart +max_exceeded: silent + +triggers: + trigger: state + entity_id: !input motion_entity + from: "off" + to: "on" + +actions: + - alias: "Turn on the light" + action: light.turn_on + target: !input light_target + - alias: "Wait until there is no motion from device" + wait_for_trigger: + trigger: state + entity_id: !input motion_entity + from: "on" + to: "off" + - alias: "Wait the number of seconds that has been set" + delay: !input no_motion_wait + - alias: "Turn off the light" + action: light.turn_off + target: !input light_target diff --git a/config/blueprints/automation/homeassistant/notify_leaving_zone.yaml b/config/blueprints/automation/homeassistant/notify_leaving_zone.yaml new file mode 100644 index 00000000..e072aad2 --- /dev/null +++ b/config/blueprints/automation/homeassistant/notify_leaving_zone.yaml @@ -0,0 +1,50 @@ +blueprint: + name: Zone Notification + description: Send a notification to a device when a person leaves a specific zone. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml + author: Home Assistant + input: + person_entity: + name: Person + selector: + entity: + filter: + domain: person + zone_entity: + name: Zone + selector: + entity: + filter: + domain: zone + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + filter: + integration: mobile_app + +triggers: + trigger: state + entity_id: !input person_entity + +variables: + zone_entity: !input zone_entity + # This is the state of the person when it's in this zone. + zone_state: "{{ states[zone_entity].name }}" + person_entity: !input person_entity + person_name: "{{ states[person_entity].name }}" + +conditions: + condition: template + # The first case handles leaving the Home zone which has a special state when zoning called 'home'. + # The second case handles leaving all other zones. + value_template: "{{ zone_entity == 'zone.home' and trigger.from_state.state == 'home' and trigger.to_state.state != 'home' or trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}" + +actions: + - alias: "Notify that a person has left the zone" + domain: mobile_app + type: notify + device_id: !input notify_device + message: "{{ person_name }} has left {{ zone_state }}" diff --git a/config/blueprints/script/homeassistant/confirmable_notification.yaml b/config/blueprints/script/homeassistant/confirmable_notification.yaml new file mode 100644 index 00000000..0106a4e1 --- /dev/null +++ b/config/blueprints/script/homeassistant/confirmable_notification.yaml @@ -0,0 +1,86 @@ +blueprint: + name: Confirmable Notification + description: >- + A script that sends an actionable notification with a confirmation before + running the specified action. + domain: script + source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml + author: Home Assistant + input: + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + filter: + integration: mobile_app + title: + name: "Title" + description: "The title of the button shown in the notification." + default: "" + selector: + text: + message: + name: "Message" + description: "The message body" + selector: + text: + confirm_text: + name: "Confirmation Text" + description: "Text to show on the confirmation button" + default: "Confirm" + selector: + text: + confirm_action: + name: "Confirmation Action" + description: "Action to run when notification is confirmed" + default: [] + selector: + action: + dismiss_text: + name: "Dismiss Text" + description: "Text to show on the dismiss button" + default: "Dismiss" + selector: + text: + dismiss_action: + name: "Dismiss Action" + description: "Action to run when notification is dismissed" + default: [] + selector: + action: + +mode: restart + +sequence: + - alias: "Set up variables" + variables: + action_confirm: "{{ 'CONFIRM_' ~ context.id }}" + action_dismiss: "{{ 'DISMISS_' ~ context.id }}" + - alias: "Send notification" + domain: mobile_app + type: notify + device_id: !input notify_device + title: !input title + message: !input message + data: + actions: + - action: "{{ action_confirm }}" + title: !input confirm_text + - action: "{{ action_dismiss }}" + title: !input dismiss_text + - alias: "Awaiting response" + wait_for_trigger: + - trigger: event + event_type: mobile_app_notification_action + event_data: + action: "{{ action_confirm }}" + - trigger: event + event_type: mobile_app_notification_action + event_data: + action: "{{ action_dismiss }}" + - choose: + - conditions: "{{ wait.trigger.event.data.action == action_confirm }}" + sequence: !input confirm_action + - conditions: "{{ wait.trigger.event.data.action == action_dismiss }}" + sequence: !input dismiss_action diff --git a/config/dashboards/README.md b/config/dashboards/README.md index 208ecc1c..19b964b1 100644 --- a/config/dashboards/README.md +++ b/config/dashboards/README.md @@ -48,6 +48,9 @@ This folder is referenced from `config/configuration.yaml` via: - `lovelace.resources: !include dashboards/resources.yaml` - `lovelace.dashboards: ... filename: dashboards//dashboard.yaml` +Lovelace resources are loaded from: +- `config/dashboards/resources.yaml` (referenced by `lovelace.resources`) + ### Migration / Cutover Notes - During migration you may have both storage dashboards (from the UI) and YAML dashboards (from this folder) at the same time. - Do not try to create YAML dashboards with the same dashboard ID/key as an existing storage dashboard; remove/disable the storage version first in the UI. diff --git a/config/dashboards/infrastructure/card_mod/infra_card.yaml b/config/dashboards/infrastructure/card_mod/infra_card.yaml index 66beb975..dc5407b6 100644 --- a/config/dashboards/infrastructure/card_mod/infra_card.yaml +++ b/config/dashboards/infrastructure/card_mod/infra_card.yaml @@ -12,6 +12,6 @@ | ha-card { border-radius: 18px; - border: 1px solid rgba(0,0,0,0.06); + border: 1px solid var(--divider-color); box-shadow: none; } diff --git a/config/dashboards/infrastructure/card_mod/infra_panel.yaml b/config/dashboards/infrastructure/card_mod/infra_panel.yaml index f779b063..f0f6bfcb 100644 --- a/config/dashboards/infrastructure/card_mod/infra_panel.yaml +++ b/config/dashboards/infrastructure/card_mod/infra_panel.yaml @@ -12,7 +12,7 @@ | ha-card { border-radius: 18px; - border: 1px solid rgba(0,0,0,0.06); + border: 1px solid var(--divider-color); box-shadow: none; padding: 12px; } diff --git a/config/dashboards/infrastructure/partials/activity_sections.yaml b/config/dashboards/infrastructure/partials/activity_sections.yaml new file mode 100644 index 00000000..c61bf413 --- /dev/null +++ b/config/dashboards/infrastructure/partials/activity_sections.yaml @@ -0,0 +1,31 @@ +###################################################################### +# @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 - Activity sections +# Activity feed wrapped in the standard Infrastructure layout. +# ------------------------------------------------------------------- +# Notes: Uses Logbook card targeted at `sensor.activity_feed`. +###################################################################### + +- !include /config/dashboards/infrastructure/partials/infra_top_chips_section.yaml + +- type: grid + column_span: 4 + columns: 1 + square: false + 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: Activity Feed + - type: logbook + target: + entity_id: + - sensor.activity_feed + grid_options: + columns: full diff --git a/config/dashboards/infrastructure/partials/docker_containers_sections.yaml b/config/dashboards/infrastructure/partials/docker_containers_sections.yaml index 7d4b4b8c..f53196f4 100644 --- a/config/dashboards/infrastructure/partials/docker_containers_sections.yaml +++ b/config/dashboards/infrastructure/partials/docker_containers_sections.yaml @@ -9,74 +9,32 @@ # Notes: Uses Portainer entities (`binary_sensor.*_status`, `button.*_restart_container`). ###################################################################### -- type: grid - column_span: 4 - columns: 4 - square: false - cards: - - type: custom:button-card - template: bearstone_infra_chip - entity: binary_sensor.node_proxmox1_updates_packages - name: Proxmox01 - icon: mdi:server - state_display: > - [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] - - type: custom:button-card - template: bearstone_infra_chip - entity: binary_sensor.node_proxmox02_updates_packages - name: Proxmox02 - icon: mdi:server - state_display: > - [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] - - type: custom:button-card - template: bearstone_infra_chip - entity: sensor.garage_ups_status - name: Garage UPS - icon: mdi:transmission-tower - - type: custom:button-card - template: bearstone_infra_chip - entity: sensor.vcloudinfo_com - name: vCloudinfo - icon: mdi:microsoft-internet-explorer - -- type: grid - column_span: 4 - columns: 1 - square: false - cards: - - type: custom:auto-entities - show_empty: true - grid_options: - columns: full - card: - type: grid - title: Docker Containers - columns: 4 - square: false - card_param: cards - filter: - include: !include /config/dashboards/infrastructure/partials/docker_container_rows_include.yaml - exclude: - - state: unavailable - sort: - method: name +- !include /config/dashboards/infrastructure/partials/infra_top_chips_section.yaml - type: grid column_span: 4 columns: 1 square: false cards: - - type: markdown - grid_options: - columns: full - content: |- - **Tip:** Hold a container row to restart it (confirmation required). + - type: custom:vertical-stack-in-card card_mod: - style: | - ha-card { - background: transparent; - border: none; - box-shadow: none; - text-align: center; - color: var(--secondary-text-color); - } + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml + cards: + - type: custom:button-card + template: bearstone_infra_panel_header + name: Docker Containers + - type: custom:auto-entities + show_empty: true + grid_options: + columns: full + card: + type: grid + columns: 4 + square: false + card_param: cards + filter: + include: !include /config/dashboards/infrastructure/partials/docker_container_rows_include.yaml + exclude: + - state: unavailable + sort: + method: name diff --git a/config/dashboards/infrastructure/partials/home_sections.yaml b/config/dashboards/infrastructure/partials/home_sections.yaml index 09b7402f..cc2aec81 100644 --- a/config/dashboards/infrastructure/partials/home_sections.yaml +++ b/config/dashboards/infrastructure/partials/home_sections.yaml @@ -9,45 +9,48 @@ # Notes: Standardized on `custom:button-card` + `custom:mini-graph-card` with `card_mod` polish. ###################################################################### +- !include /config/dashboards/infrastructure/partials/infra_top_chips_section.yaml + - type: grid column_span: 4 columns: 4 square: false cards: - type: custom:button-card - template: bearstone_infra_chip - entity: binary_sensor.node_proxmox1_updates_packages - name: Proxmox01 - icon: mdi:server - state_display: > - [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + template: bearstone_infra_kpi + entity: sensor.total_wifi_clients + name: Wi-Fi Clients + icon: mdi:wifi - type: custom:button-card - template: bearstone_infra_chip - entity: binary_sensor.node_proxmox02_updates_packages - name: Proxmox02 - icon: mdi:server - state_display: > - [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + template: bearstone_infra_kpi + entity: sensor.garage_ups_load + name: UPS Load + icon: mdi:battery-charging-60 - type: custom:button-card - template: bearstone_infra_chip - entity: sensor.garage_ups_status - name: Garage UPS - icon: mdi:transmission-tower + 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_chip - entity: sensor.vcloudinfo_com - name: vCloudinfo - icon: mdi:microsoft-internet-explorer + template: bearstone_infra_kpi + entity: sensor.carlo_nas01_volume_1_volume_used + name: NAS Used + icon: mdi:nas - type: grid column_span: 3 - columns: 2 + columns: 3 square: false cards: - - type: vertical-stack + - type: custom:vertical-stack-in-card + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml cards: - - type: custom:mini-graph-card + - type: custom:button-card + template: bearstone_infra_panel_header name: Proxmox01 + - type: custom:mini-graph-card + name: CPU / Memory icon: mdi:server hours_to_show: 24 points_per_hour: 2 @@ -55,7 +58,7 @@ animate: true show: fill: true - legend: true + legend: false icon: true name: true state: true @@ -64,8 +67,6 @@ name: CPU - entity: sensor.node_proxmox1_memory_used_percentage name: Memory - card_mod: - style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - type: grid columns: 3 square: false @@ -101,10 +102,15 @@ button_entity: button.qemu_wireguard_104_reboot name: WireGuard - - type: vertical-stack + - type: custom:vertical-stack-in-card + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml cards: - - type: custom:mini-graph-card + - type: custom:button-card + template: bearstone_infra_panel_header name: Proxmox02 + - type: custom:mini-graph-card + name: CPU / Memory icon: mdi:server hours_to_show: 24 points_per_hour: 2 @@ -112,7 +118,7 @@ animate: true show: fill: true - legend: true + legend: false icon: true name: true state: true @@ -121,10 +127,8 @@ name: CPU - entity: sensor.node_proxmox02_memory_used_percentage name: Memory - card_mod: - style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - type: grid - columns: 3 + columns: 1 square: false cards: - type: custom:button-card @@ -138,9 +142,21 @@ button_entity: button.qemu_docker2_101_reboot name: Frigate + - 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: Pi-hole + - type: custom:pi-hole + device_id: d69637da16f7d7f3626070582be59808 + grid_options: + columns: full + - type: grid - column_span: 1 - columns: 1 + column_span: 4 + columns: 4 square: false cards: - type: custom:mini-graph-card @@ -186,22 +202,37 @@ graph: line card_mod: style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - -- type: grid - column_span: 2 - columns: 2 - square: true - cards: - type: custom:flex-horseshoe-card entities: - entity: sensor.carlo_nvr_volume_1_volume_used - name: NVR Video + name: NVR Used decimals: 1 unit: '%' - entity: sensor.carlo_nvr_volume_1_total_size name: Total decimals: 2 unit: TiB + layout: + names: + - entity_index: 0 + xpos: 50 + ypos: 22 + styles: + - font-size: 0.9em; + - opacity: 0.75; + states: + - entity_index: 0 + xpos: 50 + ypos: 54 + styles: + - font-size: 2.2em; + - font-weight: 800; + - entity_index: 1 + xpos: 50 + ypos: 76 + styles: + - font-size: 0.95em; + - opacity: 0.75; show: horseshoe_style: colorstopgradient horseshoe_scale: @@ -216,13 +247,34 @@ - type: custom:flex-horseshoe-card entities: - entity: sensor.carlo_nas01_volume_1_volume_used - name: NAS Storage + name: NAS Used decimals: 1 unit: '%' - entity: sensor.carlo_nas01_volume_1_total_size name: Total decimals: 2 unit: TiB + layout: + names: + - entity_index: 0 + xpos: 50 + ypos: 22 + styles: + - font-size: 0.9em; + - opacity: 0.75; + states: + - entity_index: 0 + xpos: 50 + ypos: 54 + styles: + - font-size: 2.2em; + - font-weight: 800; + - entity_index: 1 + xpos: 50 + ypos: 76 + styles: + - font-size: 0.95em; + - opacity: 0.75; show: horseshoe_style: colorstopgradient horseshoe_scale: @@ -235,105 +287,114 @@ card_mod: style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml -- type: grid - column_span: 2 - columns: 1 - square: false - cards: - - type: custom:mini-graph-card - name: Wi-Fi Overview - icon: mdi:wifi - hours_to_show: 24 - line_width: 2 - points_per_hour: 1 - smoothing: true - show: - graph: line - legend: true - labels: false - name: true - icon: true - state: true - entities: - - entity: sensor.total_wifi_clients - name: Total - show_state: true - show_graph: false - show_line: false - show_points: false - show_fill: false - show_legend: false - - entity: sensor.unifi_ap_office_clients - name: Office AP - show_state: true - - entity: sensor.unifi_ap_study_clients - name: Study AP - show_state: true - - entity: sensor.unifi_ap_garage_clients - name: Garage AP - show_state: true - card_mod: - style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - - type: grid column_span: 4 - columns: 3 + columns: 2 square: false cards: - - type: custom:button-card - template: bearstone_infra_device_tile - name: Garage AP - icon: mdi:access-point - entity: sensor.unifi_ap_garage_clients - label: > - [[[ return "Uptime: " + (states['sensor.unifi_ap_garage_uptime']?.state ?? 'unknown'); ]]] - variables: - button_entity: button.unifi_ap_garage_restart - name: Garage AP - - type: custom:button-card - template: bearstone_infra_device_tile - name: Office AP - icon: mdi:access-point - entity: sensor.unifi_ap_office_clients - label: > - [[[ return "Uptime: " + (states['sensor.unifi_ap_office_uptime']?.state ?? 'unknown'); ]]] - variables: - button_entity: button.unifi_ap_office_restart - name: Office AP - - type: custom:button-card - template: bearstone_infra_device_tile - name: Study AP - icon: mdi:access-point - entity: sensor.unifi_ap_study_clients - label: > - [[[ return "Uptime: " + (states['sensor.unifi_ap_study_uptime']?.state ?? 'unknown'); ]]] - variables: - button_entity: button.unifi_ap_study_restart - name: Study AP + - 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: Wi-Fi Overview + - type: custom:mini-graph-card + name: Clients + icon: mdi:wifi + hours_to_show: 24 + line_width: 2 + points_per_hour: 1 + smoothing: true + show: + graph: line + legend: false + labels: false + name: true + icon: true + state: true + entities: + - entity: sensor.total_wifi_clients + name: Total + show_state: true + show_graph: false + show_line: false + show_points: false + show_fill: false + show_legend: false + - entity: sensor.unifi_ap_office_clients + name: Office AP + show_state: true + - entity: sensor.unifi_ap_study_clients + name: Study AP + show_state: true + - entity: sensor.unifi_ap_garage_clients + name: Garage AP + show_state: true + - type: grid + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_device_tile + name: Garage AP + icon: mdi:access-point + entity: sensor.unifi_ap_garage_clients + label: > + [[[ return "Uptime: " + (states['sensor.unifi_ap_garage_uptime']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.unifi_ap_garage_restart + name: Garage AP + - type: custom:button-card + template: bearstone_infra_device_tile + name: Office AP + icon: mdi:access-point + entity: sensor.unifi_ap_office_clients + label: > + [[[ return "Uptime: " + (states['sensor.unifi_ap_office_uptime']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.unifi_ap_office_restart + name: Office AP + - type: custom:button-card + template: bearstone_infra_device_tile + name: Study AP + icon: mdi:access-point + entity: sensor.unifi_ap_study_clients + label: > + [[[ return "Uptime: " + (states['sensor.unifi_ap_study_uptime']?.state ?? 'unknown'); ]]] + variables: + button_entity: button.unifi_ap_study_restart + name: Study AP -- type: grid - column_span: 4 - columns: 3 - square: false - cards: - - type: custom:button-card - template: bearstone_infra_tile - name: docker_10 - icon: mdi:server - entity: sensor.docker_10_apt_status - label: > - [[[ return "Last update: " + (states['sensor.docker_10_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_10_apt_reboot_status']?.state ?? ''); ]]] - - type: custom:button-card - template: bearstone_infra_tile - name: docker_69 - icon: mdi:server - entity: sensor.docker_69_apt_status - label: > - [[[ return "Last update: " + (states['sensor.docker_69_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_69_apt_reboot_status']?.state ?? ''); ]]] - - type: custom:button-card - template: bearstone_infra_tile - name: docker_14 - icon: mdi:server - entity: sensor.docker_14_apt_status - label: > - [[[ return "Last update: " + (states['sensor.docker_14_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_14_apt_reboot_status']?.state ?? ''); ]]] + - 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: APT Status + - type: grid + columns: 3 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_tile + name: docker_10 + icon: mdi:server + entity: sensor.docker_10_apt_status + label: > + [[[ return "Last update: " + (states['sensor.docker_10_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_10_apt_reboot_status']?.state ?? ''); ]]] + - type: custom:button-card + template: bearstone_infra_tile + name: docker_69 + icon: mdi:server + entity: sensor.docker_69_apt_status + label: > + [[[ return "Last update: " + (states['sensor.docker_69_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_69_apt_reboot_status']?.state ?? ''); ]]] + - type: custom:button-card + template: bearstone_infra_tile + name: docker_14 + icon: mdi:server + entity: sensor.docker_14_apt_status + label: > + [[[ return "Last update: " + (states['sensor.docker_14_apt_last_update']?.state ?? 'unknown') + " | " + (states['sensor.docker_14_apt_reboot_status']?.state ?? ''); ]]] diff --git a/config/dashboards/infrastructure/partials/infra_top_chips_section.yaml b/config/dashboards/infrastructure/partials/infra_top_chips_section.yaml new file mode 100644 index 00000000..a3175442 --- /dev/null +++ b/config/dashboards/infrastructure/partials/infra_top_chips_section.yaml @@ -0,0 +1,41 @@ +###################################################################### +# @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 - Top status chips (shared) +# Common "chips row" used across Infrastructure views. +# ------------------------------------------------------------------- +# Notes: Keep this lightweight; it should render fast on every view. +###################################################################### + +type: grid +column_span: 4 +columns: 4 +square: false +cards: +- type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox1_updates_packages + name: Proxmox01 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] +- type: custom:button-card + template: bearstone_infra_chip + entity: binary_sensor.node_proxmox02_updates_packages + name: Proxmox02 + icon: mdi:server + state_display: > + [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] +- type: custom:button-card + template: bearstone_infra_chip + entity: sensor.garage_ups_status + name: Garage UPS + icon: mdi:transmission-tower +- type: custom:button-card + template: bearstone_infra_chip + entity: sensor.vcloudinfo_com + name: vCloudinfo + icon: mdi:microsoft-internet-explorer + diff --git a/config/dashboards/infrastructure/partials/mariadb_sections.yaml b/config/dashboards/infrastructure/partials/mariadb_sections.yaml index d749f138..f7cf94a2 100644 --- a/config/dashboards/infrastructure/partials/mariadb_sections.yaml +++ b/config/dashboards/infrastructure/partials/mariadb_sections.yaml @@ -6,10 +6,41 @@ # Infrastructure Partial - mariadb sections # Reusable list extracted from a view for smaller diffs and safer edits. # ------------------------------------------------------------------- -# Notes: Stitch-inspired MariaDB layout (3 panel columns). +# Notes: Stitch-inspired MariaDB layout (KPI strip + 3 panel columns). ###################################################################### -- column_span: 1 +- !include /config/dashboards/infrastructure/partials/infra_top_chips_section.yaml + +- type: grid + column_span: 4 + columns: 4 + square: false + cards: + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.database_size + name: DB Size + icon: mdi:database + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.database_tables_count + name: Tables + icon: mdi:table + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_connections + name: Conn. + icon: mdi:lan-connect + - type: custom:button-card + template: bearstone_infra_kpi + entity: sensor.mariadb_uptime + name: Uptime + icon: mdi:timer-outline + +- type: grid + column_span: 4 + columns: 3 + square: false cards: - type: custom:vertical-stack-in-card card_mod: @@ -18,16 +49,6 @@ - type: custom:button-card template: bearstone_infra_panel_header name: Database Statistics - - type: custom:button-card - template: bearstone_infra_list_row - entity: sensor.database_size - name: Database Size - icon: mdi:database - - type: custom:button-card - template: bearstone_infra_list_row - entity: sensor.database_tables_count - name: Number of Tables - icon: mdi:table - type: custom:button-card template: bearstone_infra_list_row entity: sensor.database_total_records @@ -44,8 +65,6 @@ name: Oldest Record icon: mdi:clock-start -- column_span: 1 - cards: - type: custom:vertical-stack-in-card card_mod: style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml @@ -73,24 +92,12 @@ entity: sensor.mariadb_performance name: Performance icon: mdi:chart-line - - type: custom:button-card - template: bearstone_infra_list_row - entity: sensor.mariadb_uptime - name: Uptime - icon: mdi:timer-outline - - type: custom:button-card - template: bearstone_infra_list_row - entity: sensor.mariadb_connections - name: Active Connections - icon: mdi:lan-connect - type: custom:button-card template: bearstone_infra_list_row entity: sensor.mariadb_questions name: Total Queries icon: mdi:database-search -- column_span: 1 - cards: - type: custom:vertical-stack-in-card card_mod: style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml diff --git a/config/dashboards/infrastructure/partials/proxmox_sections.yaml b/config/dashboards/infrastructure/partials/proxmox_sections.yaml index ae4a2fc5..a3d098b8 100644 --- a/config/dashboards/infrastructure/partials/proxmox_sections.yaml +++ b/config/dashboards/infrastructure/partials/proxmox_sections.yaml @@ -9,45 +9,48 @@ # Notes: Standardized on `custom:button-card` + `custom:mini-graph-card` with `card_mod` polish. ###################################################################### +- !include /config/dashboards/infrastructure/partials/infra_top_chips_section.yaml + - type: grid column_span: 4 columns: 4 square: false cards: - type: custom:button-card - template: bearstone_infra_chip - entity: binary_sensor.node_proxmox1_updates_packages - name: Proxmox01 - icon: mdi:server - state_display: > - [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + template: bearstone_infra_kpi + entity: sensor.node_proxmox1_cpu_used + name: P1 CPU + icon: mdi:cpu-64-bit - type: custom:button-card - template: bearstone_infra_chip - entity: binary_sensor.node_proxmox02_updates_packages - name: Proxmox02 - icon: mdi:server - state_display: > - [[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]] + template: bearstone_infra_kpi + entity: sensor.node_proxmox1_memory_used_percentage + name: P1 MEM + icon: mdi:memory - type: custom:button-card - template: bearstone_infra_chip - entity: sensor.garage_ups_status - name: Garage UPS - icon: mdi:transmission-tower + template: bearstone_infra_kpi + entity: sensor.node_proxmox02_cpu_used + name: P2 CPU + icon: mdi:cpu-64-bit - type: custom:button-card - template: bearstone_infra_chip - entity: sensor.vcloudinfo_com - name: vCloudinfo - icon: mdi:microsoft-internet-explorer + template: bearstone_infra_kpi + entity: sensor.node_proxmox02_memory_used_percentage + name: P2 MEM + icon: mdi:memory - type: grid column_span: 4 columns: 2 square: false cards: - - type: vertical-stack + - type: custom:vertical-stack-in-card + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml cards: - - type: custom:mini-graph-card + - type: custom:button-card + template: bearstone_infra_panel_header name: Proxmox01 + - type: custom:mini-graph-card + name: Host CPU / Memory icon: mdi:server hours_to_show: 24 points_per_hour: 2 @@ -55,7 +58,7 @@ animate: true show: fill: true - legend: true + legend: false icon: true name: true state: true @@ -64,10 +67,8 @@ name: CPU - entity: sensor.node_proxmox1_memory_used_percentage name: Memory - card_mod: - style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - type: custom:mini-graph-card - name: Proxmox01 VMs (CPU / MEM) + name: VMs CPU / Memory icon: mdi:chart-line hours_to_show: 24 points_per_hour: 2 @@ -75,7 +76,7 @@ animate: true show: fill: false - legend: true + legend: false icon: true name: true state: false @@ -92,8 +93,6 @@ name: WireGuard CPU - entity: sensor.qemu_wireguard_104_memory_used_percentage name: WireGuard MEM - card_mod: - style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - type: grid columns: 3 square: false @@ -129,10 +128,15 @@ button_entity: button.qemu_wireguard_104_reboot name: WireGuard - - type: vertical-stack + - type: custom:vertical-stack-in-card + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml cards: - - type: custom:mini-graph-card + - type: custom:button-card + template: bearstone_infra_panel_header name: Proxmox02 + - type: custom:mini-graph-card + name: Host CPU / Memory icon: mdi:server hours_to_show: 24 points_per_hour: 2 @@ -140,7 +144,7 @@ animate: true show: fill: true - legend: true + legend: false icon: true name: true state: true @@ -149,10 +153,8 @@ name: CPU - entity: sensor.node_proxmox02_memory_used_percentage name: Memory - card_mod: - style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - type: custom:mini-graph-card - name: Frigate VM (CPU / MEM) + name: Frigate VM CPU / Memory icon: mdi:video hours_to_show: 24 points_per_hour: 2 @@ -160,7 +162,7 @@ animate: true show: fill: false - legend: true + legend: false icon: true name: true state: false @@ -169,8 +171,6 @@ name: CPU - entity: sensor.qemu_docker2_101_memory_used_percentage name: MEM - card_mod: - style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml - type: grid columns: 3 square: false diff --git a/config/dashboards/infrastructure/partials/vacuum_sections.yaml b/config/dashboards/infrastructure/partials/vacuum_sections.yaml index eda04a2d..36e48c2a 100644 --- a/config/dashboards/infrastructure/partials/vacuum_sections.yaml +++ b/config/dashboards/infrastructure/partials/vacuum_sections.yaml @@ -6,339 +6,362 @@ # Infrastructure Partial - vacuum sections # Reusable list extracted from a view for smaller diffs and safer edits. # ------------------------------------------------------------------- -# Notes: Extracted from config/dashboards/infrastructure/views/03_vacuum.yaml key `sections`. +# Notes: Extracted from config/dashboards/infrastructure/views/04_vacuum.yaml key `sections`. ###################################################################### +- !include /config/dashboards/infrastructure/partials/infra_top_chips_section.yaml + - type: grid + column_span: 4 + columns: 4 + square: false cards: - - type: tile - entity: input_text.l10s_vacuum_room_catalog - vertical: false - features_position: bottom - grid_options: - columns: full - - type: tile - entity: input_text.l10s_vacuum_room_queue - vertical: false - features_position: bottom - grid_options: - columns: full - - type: tile - entity: input_text.l10s_vacuum_rooms_cleaned_today - vertical: false - features_position: bottom + - type: custom:vertical-stack-in-card grid_options: - columns: full - - type: tile + columns: 2 + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml + cards: + - type: custom:button-card + template: bearstone_infra_panel_header + name: Vacuum + - type: custom:button-card + template: bearstone_infra_list_row + entity: vacuum.l10s_vacuum + name: L10s + icon: mdi:robot-vacuum + state_display: > + [[[ return String(entity.state || 'unknown').toUpperCase(); ]]] + - type: tile + entity: input_select.l10s_vacuum_phase + vertical: false + features_position: bottom + - type: custom:button-card + template: bearstone_infra_list_row + entity: sensor.l10s_vacuum_current_room + name: Current Room + icon: mdi:map-marker + - type: custom:button-card + template: bearstone_infra_list_row + entity: input_text.l10s_vacuum_rooms_cleaned_today + name: Rooms Cleaned (Today) + icon: mdi:check-circle-outline + - type: custom:button-card + template: bearstone_infra_list_row + entity: input_text.l10s_vacuum_room_queue + name: Room Queue + icon: mdi:format-list-bulleted + - type: custom:button-card + template: bearstone_infra_list_row + entity: input_text.l10s_vacuum_room_catalog + name: Room Catalog + icon: mdi:book-open-variant + + - type: custom:vertical-stack-in-card grid_options: - columns: full - entity: sensor.l10s_vacuum_current_room - state_content: - - state - - room_id - - last_changed - vertical: false - features_position: bottom - - type: tile - entity: input_select.l10s_vacuum_phase -- type: grid - cards: - - type: custom:xiaomi-vacuum-map-card - map_source: - camera: camera.l10s_vacuum_map - calibration_source: - camera: true - entity: vacuum.l10s_vacuum - vacuum_platform: Tasshack/dreame-vacuum - map_modes: - - template: vacuum_clean_zone - - template: vacuum_clean_point - - template: vacuum_clean_segment - predefined_selections: - - id: '1' - icon: - name: mdi:home-outline - x: -8100 - y: 12400 - label: - text: Pool-Bath - x: -8100 - y: 12400 - offset_y: 35 - outline: - - - -9950 - - 11350 - - - -6650 - - 11350 - - - -6650 - - 12900 - - - -9950 - - 12900 - - id: '2' - icon: - name: mdi:monitor-shimmer - x: -4650 - y: 10900 - label: - text: Office - x: -4650 - y: 10900 - offset_y: 35 - outline: - - - -6650 - - 7400 - - - -2800 - - 7400 - - - -2800 - - 12850 - - - -6650 - - 12850 - - id: '3' - icon: - name: mdi:home-outline - x: -5600 - y: 5250 - label: - text: Kids-Bathroom - x: -5600 - y: 5250 - offset_y: 35 - outline: - - - -6450 - - 4250 - - - -4750 - - 4250 - - - -4750 - - 6150 - - - -6450 - - 6150 - - id: '4' - icon: - name: mdi:home-outline - x: 7300 - y: 4100 - label: - text: Master-Bathroom - x: 7300 - y: 4100 - offset_y: 35 - outline: - - - 5450 - - 250 - - - 9400 - - 250 - - - 9400 - - 7850 - - - 5450 - - 7850 - - id: '6' - icon: - name: mdi:home-outline - x: -8450 - y: 4200 - label: - text: Paige-Bedroom - x: -8450 - y: 4200 - offset_y: 35 - outline: - - - -9900 - - 1600 - - - -6600 - - 1600 - - - -6600 - - 6100 - - - -9900 - - 6100 - - id: '7' - icon: - name: mdi:home-outline - x: 6450 - y: 10400 - label: - text: Master-Bedroom - x: 6450 - y: 10400 - offset_y: 35 - outline: - - - 3450 - - 7850 - - - 9550 - - 7850 - - - 9550 - - 12850 - - - 3450 - - 12850 - - id: '8' - icon: - name: mdi:home-outline - x: -8300 - y: 9300 - label: - text: Justin-Bedroom - x: -8300 - y: 9300 - offset_y: 35 - outline: - - - -9950 - - 6250 - - - -6650 - - 6250 - - - -6650 - - 11150 - - - -9950 - - 11150 - - id: '9' - icon: - name: mdi:home-outline - x: 7250 - y: -2200 - label: - text: Stacey-Office - x: 7250 - y: -2200 - offset_y: 35 - outline: - - - 5450 - - -4700 - - - 9450 - - -4700 - - - 9450 - - 350 - - - 5450 - - 350 - - id: '10' - icon: - name: mdi:sofa-outline - x: 2500 - y: 4800 - label: - text: Living Room - x: 2500 - y: 4800 - offset_y: 35 - outline: - - - -650 - - 750 - - - 5300 - - 750 - - - 5300 - - 8800 - - - -650 - - 8800 - - id: '11' - icon: - name: mdi:home-outline - x: -5350 - y: 2600 - label: - text: Garage-Hallway - x: -5350 - y: 2600 - offset_y: 35 - outline: - - - -6600 - - 1100 - - - -4050 - - 1100 - - - -4050 - - 4200 - - - -6600 - - 4200 - - id: '12' - icon: - name: mdi:home-outline - x: 700 - y: 8900 - label: - text: Dining-Room - x: 700 - y: 8900 - offset_y: 35 - outline: - - - -4350 - - 6000 - - - 2650 - - 6000 - - - 2650 - - 12650 - - - -4350 - - 12650 - - id: '13' - icon: - name: mdi:home-outline - x: -6200 - y: 6800 - label: - text: Hallway - x: -6200 - y: 6800 - offset_y: 35 - outline: - - - -7550 - - 6100 - - - -4350 - - 6100 - - - -4350 - - 7700 - - - -7550 - - 7700 - - id: '14' - icon: - name: mdi:chef-hat - x: -1700 - y: 3350 - label: - text: Kitchen - x: -1700 - y: 3350 - offset_y: 35 - outline: - - - -4200 - - 950 - - - -300 - - 950 - - - -300 - - 6100 - - - -4200 - - 6100 - - id: '15' - icon: - name: mdi:home-outline - x: 4050 - y: -1350 - label: - text: Foyer - x: 4050 - y: -1350 - offset_y: 35 - outline: - - - 2850 - - -3500 - - - 5450 - - -3500 - - - 5450 - - 800 - - - 2850 - - 800 - - id: '17' - icon: - name: mdi:home-outline - x: 750 - y: -1250 - label: - text: Formal-Dining - x: 750 - y: -1250 - offset_y: 35 - outline: - - - -1500 - - -3500 - - - 2950 - - -3500 - - - 2950 - - 950 - - - -1500 - - 950 - map_locked: true - two_finger_pan: true + columns: 2 + card_mod: + style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml + cards: + - type: custom:button-card + template: bearstone_infra_panel_header + name: Map + - type: custom:xiaomi-vacuum-map-card + map_source: + camera: camera.l10s_vacuum_map + calibration_source: + camera: true + entity: vacuum.l10s_vacuum + vacuum_platform: Tasshack/dreame-vacuum + map_modes: + - template: vacuum_clean_zone + - template: vacuum_clean_point + - template: vacuum_clean_segment + predefined_selections: + - id: '1' + icon: + name: mdi:home-outline + x: -8100 + y: 12400 + label: + text: Pool-Bath + x: -8100 + y: 12400 + offset_y: 35 + outline: + - - -9950 + - 11350 + - - -6650 + - 11350 + - - -6650 + - 12900 + - - -9950 + - 12900 + - id: '2' + icon: + name: mdi:monitor-shimmer + x: -4650 + y: 10900 + label: + text: Office + x: -4650 + y: 10900 + offset_y: 35 + outline: + - - -6650 + - 7400 + - - -2800 + - 7400 + - - -2800 + - 12850 + - - -6650 + - 12850 + - id: '3' + icon: + name: mdi:home-outline + x: -5600 + y: 5250 + label: + text: Kids-Bathroom + x: -5600 + y: 5250 + offset_y: 35 + outline: + - - -6450 + - 4250 + - - -4750 + - 4250 + - - -4750 + - 6150 + - - -6450 + - 6150 + - id: '4' + icon: + name: mdi:home-outline + x: 7300 + y: 4100 + label: + text: Master-Bathroom + x: 7300 + y: 4100 + offset_y: 35 + outline: + - - 5450 + - 250 + - - 9400 + - 250 + - - 9400 + - 7850 + - - 5450 + - 7850 + - id: '6' + icon: + name: mdi:home-outline + x: -8450 + y: 4200 + label: + text: Paige-Bedroom + x: -8450 + y: 4200 + offset_y: 35 + outline: + - - -9900 + - 1600 + - - -6600 + - 1600 + - - -6600 + - 6100 + - - -9900 + - 6100 + - id: '7' + icon: + name: mdi:home-outline + x: 6450 + y: 10400 + label: + text: Master-Bedroom + x: 6450 + y: 10400 + offset_y: 35 + outline: + - - 3450 + - 7850 + - - 9550 + - 7850 + - - 9550 + - 12850 + - - 3450 + - 12850 + - id: '8' + icon: + name: mdi:home-outline + x: -8300 + y: 9300 + label: + text: Justin-Bedroom + x: -8300 + y: 9300 + offset_y: 35 + outline: + - - -9950 + - 6250 + - - -6650 + - 6250 + - - -6650 + - 11150 + - - -9950 + - 11150 + - id: '9' + icon: + name: mdi:home-outline + x: 7250 + y: -2200 + label: + text: Stacey-Office + x: 7250 + y: -2200 + offset_y: 35 + outline: + - - 5450 + - -4700 + - - 9450 + - -4700 + - - 9450 + - 350 + - - 5450 + - 350 + - id: '10' + icon: + name: mdi:sofa-outline + x: 2500 + y: 4800 + label: + text: Living Room + x: 2500 + y: 4800 + offset_y: 35 + outline: + - - -650 + - 750 + - - 5300 + - 750 + - - 5300 + - 8800 + - - -650 + - 8800 + - id: '11' + icon: + name: mdi:home-outline + x: -5350 + y: 2600 + label: + text: Garage-Hallway + x: -5350 + y: 2600 + offset_y: 35 + outline: + - - -6600 + - 1100 + - - -4050 + - 1100 + - - -4050 + - 4200 + - - -6600 + - 4200 + - id: '12' + icon: + name: mdi:home-outline + x: 700 + y: 8900 + label: + text: Dining-Room + x: 700 + y: 8900 + offset_y: 35 + outline: + - - -4350 + - 6000 + - - 2650 + - 6000 + - - 2650 + - 12650 + - - -4350 + - 12650 + - id: '13' + icon: + name: mdi:home-outline + x: -6200 + y: 6800 + label: + text: Hallway + x: -6200 + y: 6800 + offset_y: 35 + outline: + - - -7550 + - 6100 + - - -4350 + - 6100 + - - -4350 + - 7700 + - - -7550 + - 7700 + - id: '14' + icon: + name: mdi:chef-hat + x: -1700 + y: 3350 + label: + text: Kitchen + x: -1700 + y: 3350 + offset_y: 35 + outline: + - - -4200 + - 950 + - - -300 + - 950 + - - -300 + - 6100 + - - -4200 + - 6100 + - id: '15' + icon: + name: mdi:home-outline + x: 4050 + y: -1350 + label: + text: Foyer + x: 4050 + y: -1350 + offset_y: 35 + outline: + - - 2850 + - -3500 + - - 5450 + - -3500 + - - 5450 + - 800 + - - 2850 + - 800 + - id: '17' + icon: + name: mdi:home-outline + x: 750 + y: -1250 + label: + text: Formal-Dining + x: 750 + y: -1250 + offset_y: 35 + outline: + - - -1500 + - -3500 + - - 2950 + - -3500 + - - 2950 + - 950 + - - -1500 + - 950 + map_locked: true + two_finger_pan: true diff --git a/config/dashboards/infrastructure/templates/button_card_templates.yaml b/config/dashboards/infrastructure/templates/button_card_templates.yaml index 3a2dc973..f9f59c4d 100644 --- a/config/dashboards/infrastructure/templates/button_card_templates.yaml +++ b/config/dashboards/infrastructure/templates/button_card_templates.yaml @@ -21,7 +21,7 @@ bearstone_infra_base: - padding: 14px - box-shadow: none - background: var(--ha-card-background, var(--card-background-color)) - - border: 1px solid rgba(0,0,0,0.06) + - border: 1px solid var(--divider-color) - overflow: hidden grid: - grid-template-areas: "\"i n\" \"i s\"" @@ -47,10 +47,8 @@ bearstone_infra_chip: card: - border-radius: 999px - padding: 10px 12px - - border: 1px solid rgba(0,0,0,0.06) - - background: rgba(255,255,255,0.75) - - backdrop-filter: blur(6px) - - -webkit-backdrop-filter: blur(6px) + - border: 1px solid var(--divider-color) + - background: var(--ha-card-background, var(--card-background-color)) grid: - grid-template-areas: "\"i n\" \"i s\"" - grid-template-columns: 28px 1fr @@ -139,8 +137,9 @@ bearstone_infra_device_tile: - font-weight: 700 bearstone_infra_container_row: - template: bearstone_infra_list_row_running + template: bearstone_infra_list_row show_label: false + show_state: false tap_action: action: none hold_action: @@ -151,6 +150,117 @@ bearstone_infra_container_row: confirmation: text: '[[[ return "Restart container " + entity.attributes.friendly_name + "?" ]]]' icon: mdi:docker + custom_fields: + status: > + [[[ + const s = String(entity.state || '').toLowerCase(); + if (s === 'on' || s === 'running') return 'RUNNING'; + if (s === 'off' || s === 'stopped') return 'STOPPED'; + if (s === 'unavailable') return 'OFFLINE'; + if (s === 'unknown' || s === '') return 'UNKNOWN'; + return String(entity.state).toUpperCase(); + ]]] + styles: + grid: + - grid-template-areas: "\"i n status\"" + - grid-template-columns: 24px 1fr auto + - align-items: center + - column-gap: 12px + name: + - min-width: 0 + - overflow: hidden + - text-overflow: ellipsis + - white-space: nowrap + custom_fields: + status: + - justify-self: end + - align-self: center + - font-weight: 900 + - font-size: 12px + - letter-spacing: 0.04em + - padding: 4px 10px + - border-radius: 999px + - background: rgba(0,0,0,0.06) + - color: var(--secondary-text-color) + - line-height: 1.1 + state: + - value: 'on' + styles: + card: + - border-color: rgba(67,160,71,0.45) + - background: rgba(232,245,233,0.85) + icon: + - color: rgba(46,125,50,1) + custom_fields: + status: + - background: rgba(46,125,50,0.12) + - color: rgba(46,125,50,1) + - value: 'off' + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + icon: + - color: rgba(198,40,40,1) + custom_fields: + status: + - background: rgba(198,40,40,0.10) + - color: rgba(198,40,40,1) + - value: Running + styles: + card: + - border-color: rgba(67,160,71,0.45) + - background: rgba(232,245,233,0.85) + icon: + - color: rgba(46,125,50,1) + custom_fields: + status: + - background: rgba(46,125,50,0.12) + - color: rgba(46,125,50,1) + - value: running + styles: + card: + - border-color: rgba(67,160,71,0.45) + - background: rgba(232,245,233,0.85) + icon: + - color: rgba(46,125,50,1) + custom_fields: + status: + - background: rgba(46,125,50,0.12) + - color: rgba(46,125,50,1) + - value: Stopped + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + icon: + - color: rgba(198,40,40,1) + custom_fields: + status: + - background: rgba(198,40,40,0.10) + - color: rgba(198,40,40,1) + - value: stopped + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + icon: + - color: rgba(198,40,40,1) + custom_fields: + status: + - background: rgba(198,40,40,0.10) + - color: rgba(198,40,40,1) + - value: unavailable + styles: + card: + - border-color: rgba(229,57,53,0.35) + - background: rgba(255,235,238,0.85) + icon: + - color: rgba(198,40,40,1) + custom_fields: + status: + - background: rgba(198,40,40,0.10) + - color: rgba(198,40,40,1) bearstone_infra_panel_header: show_icon: false @@ -167,6 +277,8 @@ bearstone_infra_panel_header: name: - font-size: 18px - font-weight: 800 + - letter-spacing: 0.04em + - text-transform: uppercase - justify-self: start bearstone_infra_list_row: diff --git a/config/dashboards/infrastructure/views/01_home.yaml b/config/dashboards/infrastructure/views/01_home.yaml index d5ea1d7d..7c22b5a0 100644 --- a/config/dashboards/infrastructure/views/01_home.yaml +++ b/config/dashboards/infrastructure/views/01_home.yaml @@ -13,6 +13,7 @@ title: Infrastructure path: home type: sections icon: mdi:view-dashboard-variant +theme: default max_columns: 4 badges: [] sections: !include /config/dashboards/infrastructure/partials/home_sections.yaml diff --git a/config/dashboards/infrastructure/views/02_proxmox.yaml b/config/dashboards/infrastructure/views/02_proxmox.yaml index 90ff8120..e8fd3fe5 100644 --- a/config/dashboards/infrastructure/views/02_proxmox.yaml +++ b/config/dashboards/infrastructure/views/02_proxmox.yaml @@ -14,6 +14,7 @@ path: proxmox cards: [] type: sections icon: mdi:server +theme: default badges: [] sections: !include /config/dashboards/infrastructure/partials/proxmox_sections.yaml max_columns: 4 diff --git a/config/dashboards/infrastructure/views/04_vacuum.yaml b/config/dashboards/infrastructure/views/04_vacuum.yaml index bae82707..5f567369 100644 --- a/config/dashboards/infrastructure/views/04_vacuum.yaml +++ b/config/dashboards/infrastructure/views/04_vacuum.yaml @@ -11,6 +11,7 @@ title: Vacuum icon: mdi:robot-vacuum +theme: default type: sections cards: [] visible: @@ -19,5 +20,5 @@ visible: - user: 8fc5ba22cb32430a9143beb4df70541b - user: 19970706e7e4492c844ea2fc94a4599a sections: !include /config/dashboards/infrastructure/partials/vacuum_sections.yaml -max_columns: 2 +max_columns: 4 badges: !include /config/dashboards/infrastructure/partials/vacuum_badges.yaml diff --git a/config/dashboards/infrastructure/views/05_activity_feed.yaml b/config/dashboards/infrastructure/views/05_activity_feed.yaml index ec4b5286..046ae0de 100644 --- a/config/dashboards/infrastructure/views/05_activity_feed.yaml +++ b/config/dashboards/infrastructure/views/05_activity_feed.yaml @@ -9,8 +9,12 @@ # Notes: Exported from config/.storage/lovelace.dashboard_infrastructure view index 4. ###################################################################### -type: panel icon: mdi:clipboard-text-outline title: Activity path: activity -cards: !include /config/dashboards/infrastructure/partials/view_cards.yaml +type: sections +theme: default +max_columns: 4 +badges: [] +cards: [] +sections: !include /config/dashboards/infrastructure/partials/activity_sections.yaml diff --git a/config/dashboards/infrastructure/views/06_mariadb.yaml b/config/dashboards/infrastructure/views/06_mariadb.yaml index 84e79f06..f53bbe6c 100644 --- a/config/dashboards/infrastructure/views/06_mariadb.yaml +++ b/config/dashboards/infrastructure/views/06_mariadb.yaml @@ -12,7 +12,9 @@ type: sections title: MariaDB path: mariadb -max_columns: 3 +max_columns: 4 icon: mdi:database +theme: default +badges: [] sections: !include /config/dashboards/infrastructure/partials/mariadb_sections.yaml cards: [] diff --git a/config/dashboards/infrastructure/views/07_docker_containers.yaml b/config/dashboards/infrastructure/views/07_docker_containers.yaml index 4e0cac14..e68a78cb 100644 --- a/config/dashboards/infrastructure/views/07_docker_containers.yaml +++ b/config/dashboards/infrastructure/views/07_docker_containers.yaml @@ -13,6 +13,7 @@ title: Docker path: docker type: sections icon: mdi:docker +theme: default badges: [] sections: !include /config/dashboards/infrastructure/partials/docker_containers_sections.yaml max_columns: 4 diff --git a/config/dashboards/overview/dashboard.yaml b/config/dashboards/overview/dashboard.yaml index fb5ca1b2..6bb4a8a0 100644 --- a/config/dashboards/overview/dashboard.yaml +++ b/config/dashboards/overview/dashboard.yaml @@ -6,7 +6,7 @@ # Overview Dashboard - YAML entrypoint # YAML-exported Lovelace dashboard (split into view files). # ------------------------------------------------------------------- -# Notes: Entry point for dashboard key `lovelace`. Views are loaded from /config/dashboards/overview/views. +# Notes: Used by `/config/ui-lovelace.yaml` (main Lovelace UI). Views are loaded from /config/dashboards/overview/views. ###################################################################### title: Bear Stone diff --git a/config/dashboards/resources.yaml b/config/dashboards/resources.yaml index c9fed94a..46ae47be 100644 --- a/config/dashboards/resources.yaml +++ b/config/dashboards/resources.yaml @@ -7,6 +7,7 @@ # YAML-managed Lovelace resources (resource_mode: yaml). # ------------------------------------------------------------------- # Notes: Generated from config/.storage/lovelace_resources. Edit here after migration; do not edit .storage. +# Loaded by Home Assistant via `config/lovelace/resources.yaml`. ###################################################################### - type: module diff --git a/config/dashboards/infrastructure/partials/pi_hole_cards.yaml b/config/lovelace/resources.yaml similarity index 58% rename from config/dashboards/infrastructure/partials/pi_hole_cards.yaml rename to config/lovelace/resources.yaml index b74a17eb..e345720b 100644 --- a/config/dashboards/infrastructure/partials/pi_hole_cards.yaml +++ b/config/lovelace/resources.yaml @@ -3,13 +3,11 @@ # For more info visit https://www.vcloudinfo.com/click-here # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # ------------------------------------------------------------------- -# Infrastructure Partial - pi_hole cards -# Reusable list extracted from a view for smaller diffs and safer edits. +# Lovelace Resources - Custom card JS resources +# YAML-managed Lovelace resources (resource_mode: yaml). # ------------------------------------------------------------------- -# Notes: Extracted from config/dashboards/infrastructure/views/02_pi_hole.yaml key `cards`. +# Notes: This file is NOT used in this repo's wiring. +# Resources are loaded via `lovelace.resources: !include dashboards/resources.yaml` in `configuration.yaml`. ###################################################################### -- type: custom:pi-hole - device_id: d69637da16f7d7f3626070582be59808 - grid_options: - columns: full +# (Intentionally empty) diff --git a/config/dashboards/infrastructure/views/03_pi_hole.yaml b/config/ui-lovelace.yaml similarity index 54% rename from config/dashboards/infrastructure/views/03_pi_hole.yaml rename to config/ui-lovelace.yaml index 14cf420c..cfd5a351 100644 --- a/config/dashboards/infrastructure/views/03_pi_hole.yaml +++ b/config/ui-lovelace.yaml @@ -3,16 +3,10 @@ # For more info visit https://www.vcloudinfo.com/click-here # Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig # ------------------------------------------------------------------- -# Infrastructure View - Pi-Hole -# YAML-exported Lovelace dashboard (split into view files). +# Lovelace UI - Overview dashboard (YAML mode) +# Main Lovelace UI entrypoint (defined as a YAML dashboard in `configuration.yaml`). # ------------------------------------------------------------------- -# Notes: Exported from config/.storage/lovelace.dashboard_infrastructure view index 2. +# Notes: Delegates to `/config/dashboards/overview/dashboard.yaml`. ###################################################################### -type: panel -path: pi-hole -title: Pi-Hole -icon: mdi:pi-hole -visible: -- user: be280a93c9d7416e98d25d0470f414be -cards: !include /config/dashboards/infrastructure/partials/pi_hole_cards.yaml +!include /config/dashboards/overview/dashboard.yaml diff --git a/tools/ha_ui_smoke.ps1 b/tools/ha_ui_smoke.ps1 new file mode 100644 index 00000000..b1a11505 --- /dev/null +++ b/tools/ha_ui_smoke.ps1 @@ -0,0 +1,69 @@ +param( + [string]$BaseUrl = $env:HASS_PLAYWRIGHT_BASE_URL +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +if ([string]::IsNullOrWhiteSpace($BaseUrl)) { + # Canonical LAN URL for agent automation (trusted_networks bypass). + $BaseUrl = 'http://192.168.10.10:8123' +} + +$BaseUrl = $BaseUrl.TrimEnd('/') + +function Get-EffectiveUrlAndStatus { + param( + [Parameter(Mandatory = $true)] + [string]$Url + ) + + # Use curl.exe (not Invoke-WebRequest alias) so we can reliably see redirects. + $curl = (Get-Command curl.exe -ErrorAction Stop).Source + + # Follow redirects; return final URL + status code. + $out = & $curl -sS -L -o NUL -w "%{url_effective} %{http_code}" $Url 2>$null + if (-not $out) { throw "curl produced no output for $Url" } + $parts = $out -split ' ' + if ($parts.Count -lt 2) { throw "Unexpected curl output: $out" } + + [pscustomobject]@{ + EffectiveUrl = $parts[0] + StatusCode = [int]$parts[1] + } +} + +$targets = @( + '/', + '/profile', + '/dashboard-infrastructure', + '/dashboard-infrastructure/docker', + '/dashboard-infrastructure/mariadb', + '/dashboard-kiosk' +) + +$failed = $false +foreach ($path in $targets) { + $url = "$BaseUrl$path" + $r = Get-EffectiveUrlAndStatus -Url $url + + $isLogin = $r.EffectiveUrl -match '/(login|auth/authorize)\b' + $statusOk = $r.StatusCode -ge 200 -and $r.StatusCode -lt 400 + + if ($isLogin -or -not $statusOk) { + $failed = $true + Write-Host ("FAIL {0} -> {1} ({2})" -f $url, $r.EffectiveUrl, $r.StatusCode) + } else { + Write-Host ("OK {0} -> {1} ({2})" -f $url, $r.EffectiveUrl, $r.StatusCode) + } +} + +if ($failed) { + Write-Host '' + Write-Host 'Likely causes:' + Write-Host '- Base URL is external (Cloudflared/Nabu Casa) instead of LAN.' + Write-Host '- Home Assistant does not see the request IP as trusted; check `homeassistant.auth_providers.trusted_networks`.' + exit 1 +} + +exit 0 From 699e03a22a0da0573f454f9d95106ff41e7af681 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Mon, 9 Feb 2026 00:13:59 -0500 Subject: [PATCH 4/4] Dashboards: HA 2026.8 Lovelace wiring + validation --- config/configuration.yaml | 4 +- config/dashboards/README.md | 7 +- config/dashboards/SCRATCHPAD.md | 10 +- .../overview/partials/home_sections.yaml | 2 +- tools/ha_ui_smoke.ps1 | 8 +- tools/validate_dashboards.ps1 | 13 ++ tools/validate_dashboards.py | 200 ++++++++++++++++++ 7 files changed, 233 insertions(+), 11 deletions(-) create mode 100644 tools/validate_dashboards.ps1 create mode 100644 tools/validate_dashboards.py diff --git a/config/configuration.yaml b/config/configuration.yaml index 23203d8c..197e2508 100755 --- a/config/configuration.yaml +++ b/config/configuration.yaml @@ -35,10 +35,10 @@ lovelace: lovelace: mode: yaml title: "Overview" - icon: mdi:home + icon: mdi:view-dashboard show_in_sidebar: true require_admin: false - filename: dashboards/overview/dashboard.yaml + filename: ui-lovelace.yaml dashboard-infrastructure: mode: yaml title: "Infrastructure" diff --git a/config/dashboards/README.md b/config/dashboards/README.md index 19b964b1..a01c6946 100644 --- a/config/dashboards/README.md +++ b/config/dashboards/README.md @@ -46,7 +46,12 @@ This folder holds YAML-managed Home Assistant Lovelace dashboards and UI resourc This folder is referenced from `config/configuration.yaml` via: - `lovelace.resource_mode: yaml` - `lovelace.resources: !include dashboards/resources.yaml` -- `lovelace.dashboards: ... filename: dashboards//dashboard.yaml` +- `lovelace.dashboards: ...` + - Default Overview YAML dashboard: `lovelace.dashboards.lovelace.filename: ui-lovelace.yaml` + - Additional YAML dashboards: `filename: dashboards//dashboard.yaml` + +Note: +- Do not use legacy `lovelace.mode: yaml` (removed in Home Assistant 2026.8). Lovelace resources are loaded from: - `config/dashboards/resources.yaml` (referenced by `lovelace.resources`) diff --git a/config/dashboards/SCRATCHPAD.md b/config/dashboards/SCRATCHPAD.md index d4696573..a007a8a9 100644 --- a/config/dashboards/SCRATCHPAD.md +++ b/config/dashboards/SCRATCHPAD.md @@ -1,9 +1,9 @@ # Dashboards Scratchpad -## Current Working Items +Current working items: +- Keep YAML dashboards rendering (no missing includes/resources). +- Validate dashboards before restarting Home Assistant. -- (empty) +Patterns/notes: +- If a view looks like a centered skinny column, avoid `max_columns: 1`. Prefer `max_columns: 4` with a single section/card using `columns: 1`. -## Patterns / Notes - -- (empty) diff --git a/config/dashboards/overview/partials/home_sections.yaml b/config/dashboards/overview/partials/home_sections.yaml index b4673fcb..c52b8a51 100644 --- a/config/dashboards/overview/partials/home_sections.yaml +++ b/config/dashboards/overview/partials/home_sections.yaml @@ -378,7 +378,7 @@ entity: camera.birdseye tap_action: action: navigate - navigation_path: /lovelace/camera + navigation_path: /lovelace/cameras - type: vertical-stack cards: - type: weather-forecast diff --git a/tools/ha_ui_smoke.ps1 b/tools/ha_ui_smoke.ps1 index b1a11505..0f897f47 100644 --- a/tools/ha_ui_smoke.ps1 +++ b/tools/ha_ui_smoke.ps1 @@ -35,10 +35,14 @@ function Get-EffectiveUrlAndStatus { $targets = @( '/', + '/lovelace', + '/lovelace/cameras', '/profile', '/dashboard-infrastructure', + '/dashboard-infrastructure/home', + '/dashboard-infrastructure/activity', '/dashboard-infrastructure/docker', - '/dashboard-infrastructure/mariadb', + '/dashboard-infrastructure/vacuum', '/dashboard-kiosk' ) @@ -47,7 +51,7 @@ foreach ($path in $targets) { $url = "$BaseUrl$path" $r = Get-EffectiveUrlAndStatus -Url $url - $isLogin = $r.EffectiveUrl -match '/(login|auth/authorize)\b' + $isLogin = $r.EffectiveUrl -match '/(login|auth/authorize)\\b' $statusOk = $r.StatusCode -ge 200 -and $r.StatusCode -lt 400 if ($isLogin -or -not $statusOk) { diff --git a/tools/validate_dashboards.ps1 b/tools/validate_dashboards.ps1 new file mode 100644 index 00000000..d39f0b7b --- /dev/null +++ b/tools/validate_dashboards.ps1 @@ -0,0 +1,13 @@ +param() + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +$repoRoot = Split-Path -Parent $PSScriptRoot +$py = Get-Command py -ErrorAction SilentlyContinue +if (-not $py) { + throw "Python launcher 'py' not found. Install Python 3 or run tools/validate_dashboards.py with your python." +} + +py -3 "$repoRoot\tools\validate_dashboards.py" + diff --git a/tools/validate_dashboards.py b/tools/validate_dashboards.py new file mode 100644 index 00000000..9b5853b1 --- /dev/null +++ b/tools/validate_dashboards.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python3 +""" +Fast local validation for YAML-managed Lovelace dashboards. + +Goals: +- Catch missing include targets (most common cause of "Unknown error" in UI). +- Catch missing dashboard entrypoints referenced by configuration.yaml. +- Encourage a repeatable workflow before restarting Home Assistant. +""" + +from __future__ import annotations + +import os +import re +import sys +from pathlib import Path + + +RE_INCLUDE = re.compile(r"!\s*(include(?:_dir_(?:list|merge_list|named|merge_named))?)\s+([^\s#]+)") +RE_TOP_LEVEL_KEY = re.compile(r"^[A-Za-z0-9_]+:\s*$") + + +def repo_root() -> Path: + return Path(__file__).resolve().parents[1] + + +def to_local_path(root: Path, config_path: str) -> Path: + # Lovelace includes in this repo should use /config/... paths. + if config_path.startswith("/config/"): + rel = config_path[len("/config/") :] + return root / "config" / rel + # Allow relative includes (rare). Resolve from repo root. + return (root / config_path).resolve() + + +def iter_yaml_files(root: Path) -> list[Path]: + return sorted((root / "config" / "dashboards").rglob("*.yaml")) + +def extract_top_level_block(text: str, key: str) -> str | None: + lines = text.splitlines() + start = None + for i, line in enumerate(lines): + if re.match(rf"^{re.escape(key)}:\s*$", line): + start = i + break + if start is None: + return None + + end = len(lines) + for j in range(start + 1, len(lines)): + line = lines[j] + if not line or line.lstrip().startswith("#"): + continue + if line.startswith(" "): + continue + if RE_TOP_LEVEL_KEY.match(line): + end = j + break + + # Return block content excluding the ":" line itself. + return "\n".join(lines[start + 1 : end]) + "\n" + + +def validate_headers(yaml_files: list[Path]) -> list[str]: + errs: list[str] = [] + for p in yaml_files: + try: + head = p.read_text(encoding="utf-8", errors="replace").splitlines()[:3] + except OSError as e: + errs.append(f"ERROR: cannot read {p}: {e}") + continue + joined = "\n".join(head) + if "######################################################################" not in joined: + errs.append(f"ERROR: missing @CCOSTAN header block: {p}") + return errs + + +def validate_includes(root: Path, yaml_files: list[Path]) -> list[str]: + errs: list[str] = [] + for p in yaml_files: + try: + text = p.read_text(encoding="utf-8", errors="replace") + except OSError as e: + errs.append(f"ERROR: cannot read {p}: {e}") + continue + + for m in RE_INCLUDE.finditer(text): + tag = m.group(1) + target = m.group(2).strip().strip("'\"") + local = to_local_path(root, target) + if tag.startswith("include_dir_"): + if not local.exists(): + errs.append(f"ERROR: include dir missing ({tag}): {p} -> {target}") + elif not local.is_dir(): + errs.append(f"ERROR: include dir is not a directory ({tag}): {p} -> {target}") + else: + # For include_dir_list, ensure there is at least one yaml. + if tag == "include_dir_list": + found = list(Path(local).glob("*.yaml")) + if not found: + errs.append(f"ERROR: include_dir_list empty: {p} -> {target}") + else: + if not local.exists(): + errs.append(f"ERROR: include file missing ({tag}): {p} -> {target}") + elif not local.is_file(): + errs.append(f"ERROR: include file is not a file ({tag}): {p} -> {target}") + return errs + + +def validate_configuration_wiring(root: Path) -> list[str]: + errs: list[str] = [] + cfg = root / "config" / "configuration.yaml" + if not cfg.exists(): + return [f"ERROR: missing {cfg}"] + + text = cfg.read_text(encoding="utf-8", errors="replace") + if "\nlovelace:" not in text: + errs.append("ERROR: config/configuration.yaml missing `lovelace:` block (YAML dashboards wiring).") + lovelace_block = extract_top_level_block(text, "lovelace") + if lovelace_block is None: + errs.append("ERROR: config/configuration.yaml missing `lovelace:` block (YAML dashboards wiring).") + return errs + + # Legacy (pre-2026.8) style was `lovelace: { mode: yaml }`. This must not exist. + if re.search(r"(?m)^\s{2}mode:\s*yaml\s*$", lovelace_block): + errs.append( + "ERROR: config/configuration.yaml uses legacy `lovelace.mode: yaml` (removed in HA 2026.8). " + "Define the YAML Overview as a `lovelace.dashboards.lovelace` entry instead." + ) + + # New (2026.8+) style: YAML Overview is declared as a dashboard pointing at ui-lovelace.yaml. + ll_lines = lovelace_block.splitlines() + dash_i = next((i for i, l in enumerate(ll_lines) if re.match(r"^\s{2}dashboards:\s*$", l)), None) + if dash_i is None: + errs.append("ERROR: config/configuration.yaml missing `lovelace.dashboards:` block.") + else: + lov_i = next((i for i in range(dash_i + 1, len(ll_lines)) if re.match(r"^\s{4}lovelace:\s*$", ll_lines[i])), None) + if lov_i is None: + errs.append("ERROR: config/configuration.yaml missing `lovelace.dashboards.lovelace:` entry.") + else: + entry: list[str] = [] + for j in range(lov_i + 1, len(ll_lines)): + line = ll_lines[j] + if not line or line.lstrip().startswith("#"): + entry.append(line) + continue + # Next dashboard entry (same indent) or end of dashboards block. + if re.match(r"^\s{4}[A-Za-z0-9_-]+:\s*$", line): + break + if re.match(r"^\s{2}[A-Za-z0-9_-]+:\s*$", line): + break + entry.append(line) + + entry_text = "\n".join(entry) + "\n" + if not re.search(r"(?m)^\s{6}mode:\s*yaml\s*$", entry_text): + errs.append("ERROR: config/configuration.yaml missing `lovelace.dashboards.lovelace.mode: yaml`.") + if not re.search(r"(?m)^\s{6}filename:\s*ui-lovelace\.yaml\s*$", entry_text): + errs.append("ERROR: config/configuration.yaml missing `lovelace.dashboards.lovelace.filename: ui-lovelace.yaml`.") + + ui = root / "config" / "ui-lovelace.yaml" + if not ui.exists(): + errs.append("ERROR: missing config/ui-lovelace.yaml (YAML Overview entrypoint).") + + required_paths = [ + root / "config" / "dashboards" / "resources.yaml", + root / "config" / "dashboards" / "overview" / "dashboard.yaml", + root / "config" / "dashboards" / "infrastructure" / "dashboard.yaml", + root / "config" / "dashboards" / "kiosk" / "dashboard.yaml", + ] + for rp in required_paths: + if not rp.exists(): + errs.append(f"ERROR: missing required dashboard file: {rp}") + return errs + + +def main() -> int: + root = repo_root() + dashboards_dir = root / "config" / "dashboards" + if not dashboards_dir.exists(): + print(f"ERROR: missing dashboards dir: {dashboards_dir}") + return 2 + + yaml_files = iter_yaml_files(root) + errs: list[str] = [] + errs.extend(validate_configuration_wiring(root)) + errs.extend(validate_headers(yaml_files)) + errs.extend(validate_includes(root, yaml_files)) + + if errs: + for e in errs: + print(e) + print(f"FAIL ({len(errs)} issues)") + return 2 + + print(f"OK: validated {len(yaml_files)} dashboard YAML files") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())