parent
872a3ea2f8
commit
33a2a09eb5
@ -0,0 +1,354 @@
|
|||||||
|
######################################################################
|
||||||
|
# @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 - Joanna Activity
|
||||||
|
# Latest 12 dispatches from BearClaw's rolling 24-hour runtime history.
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Notes: Rows intentionally read the dispatchActivity status attribute so the count and detail share one source of truth.
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Dispatch summary
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
- type: grid
|
||||||
|
column_span: 4
|
||||||
|
columns: 1
|
||||||
|
square: false
|
||||||
|
cards:
|
||||||
|
- type: custom:layout-card
|
||||||
|
grid_options:
|
||||||
|
columns: full
|
||||||
|
layout_type: custom:grid-layout
|
||||||
|
layout:
|
||||||
|
grid-template-columns: repeat(4, minmax(0, 1fr))
|
||||||
|
grid-auto-flow: row
|
||||||
|
grid-auto-rows: min-content
|
||||||
|
grid-gap: 12px
|
||||||
|
margin: 0
|
||||||
|
mediaquery:
|
||||||
|
"(max-width: 900px)":
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||||
|
cards:
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_kpi
|
||||||
|
entity: sensor.joanna_all_dispatches_24h
|
||||||
|
name: All Jobs · 24H
|
||||||
|
icon: mdi:robot
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_kpi
|
||||||
|
entity: sensor.joanna_ha_dispatches_24h
|
||||||
|
name: HA Jobs · 24H
|
||||||
|
icon: mdi:home-automation
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_kpi
|
||||||
|
entity: sensor.joanna_queue_pending
|
||||||
|
name: Queue
|
||||||
|
icon: mdi:playlist-clock
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: sensor.joanna_ha_errors_24h
|
||||||
|
name: HA Errors · 24H
|
||||||
|
icon: mdi:alert-circle-outline
|
||||||
|
variables:
|
||||||
|
ok_state: '0'
|
||||||
|
healthy_text: NONE
|
||||||
|
raw_suffix: ERRORS
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Recent dispatches
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
- type: grid
|
||||||
|
column_span: 4
|
||||||
|
columns: 1
|
||||||
|
square: false
|
||||||
|
cards:
|
||||||
|
- type: custom:layout-card
|
||||||
|
grid_options:
|
||||||
|
columns: full
|
||||||
|
layout_type: custom:grid-layout
|
||||||
|
layout:
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||||
|
grid-auto-flow: row
|
||||||
|
grid-auto-rows: min-content
|
||||||
|
grid-gap: 12px
|
||||||
|
margin: 0
|
||||||
|
mediaquery:
|
||||||
|
"(max-width: 900px)":
|
||||||
|
grid-template-columns: repeat(1, minmax(0, 1fr))
|
||||||
|
cards:
|
||||||
|
- type: custom:vertical-stack-in-card
|
||||||
|
card_mod:
|
||||||
|
style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml
|
||||||
|
cards:
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_panel_header
|
||||||
|
name: Most Recent Dispatches
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 0
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No dispatches in 24 hours';
|
||||||
|
return String(item.source || 'unknown')
|
||||||
|
.replace(/^home_assistant_automation\./, 'HA · ')
|
||||||
|
.replace(/^scheduler_/, 'Scheduled · ')
|
||||||
|
.replace(/^manual_/, 'Manual · ')
|
||||||
|
.replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 1
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 2
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 3
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 4
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 5
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- 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: Earlier Today
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 6
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 7
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 8
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 9
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 10
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_list_row
|
||||||
|
entity: sensor.bearclaw_status_telemetry
|
||||||
|
icon: mdi:robot-outline
|
||||||
|
variables:
|
||||||
|
activity_index: 11
|
||||||
|
name: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'No additional dispatches';
|
||||||
|
return String(item.source || 'unknown').replace(/^home_assistant_automation\./, 'HA · ').replace(/^scheduler_/, 'Scheduled · ').replace(/^manual_/, 'Manual · ').replaceAll('_', ' ');
|
||||||
|
]]]
|
||||||
|
state_display: >
|
||||||
|
[[[
|
||||||
|
const item = entity?.attributes?.dispatchActivity?.items?.[variables?.activity_index];
|
||||||
|
if (!item) return 'NO ACTIVITY';
|
||||||
|
const state = String(item.state || 'queued').replaceAll('_', ' ').toUpperCase();
|
||||||
|
const when = item.dispatchedAt ? new Date(item.dispatchedAt).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' }) : 'N/A';
|
||||||
|
return `${state} · ${when}`;
|
||||||
|
]]]
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
######################################################################
|
||||||
|
# @CCOSTAN - Follow Me on X
|
||||||
|
# For more info visit https://www.vcloudinfo.com/click-here
|
||||||
|
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Infrastructure Subview - Joanna Activity
|
||||||
|
# Latest runtime dispatches from the same 24-hour source as the counters.
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Notes: Hidden drill-down reached from the Joanna Dispatch Trend card.
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
title: Joanna Activity
|
||||||
|
path: joanna-activity
|
||||||
|
type: sections
|
||||||
|
subview: true
|
||||||
|
back_path: /dashboard-infrastructure/joanna
|
||||||
|
theme: default
|
||||||
|
max_columns: 4
|
||||||
|
dense_section_placement: true
|
||||||
|
badges: []
|
||||||
|
sections: !include /config/dashboards/infrastructure/partials/joanna_activity_sections.yaml
|
||||||
|
cards: []
|
||||||
@ -0,0 +1,290 @@
|
|||||||
|
######################################################################
|
||||||
|
# @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 - GPIO entry points
|
||||||
|
# Related Issue: 1843
|
||||||
|
# Perimeter summary and all MQTT-backed entry-point contacts.
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Notes: Contact tiles follow group.entry_points and open more-info history.
|
||||||
|
# Notes: MQTT health is global; per-NodeMCU freshness is not currently exposed.
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Perimeter summary (mandatory first full-width wrapper)
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
- type: grid
|
||||||
|
column_span: 4
|
||||||
|
columns: 1
|
||||||
|
square: false
|
||||||
|
cards:
|
||||||
|
- type: custom:layout-card
|
||||||
|
grid_options:
|
||||||
|
columns: full
|
||||||
|
layout_type: custom:grid-layout
|
||||||
|
layout:
|
||||||
|
grid-template-columns: repeat(4, minmax(0, 1fr))
|
||||||
|
grid-auto-flow: row
|
||||||
|
grid-auto-rows: min-content
|
||||||
|
align-items: stretch
|
||||||
|
grid-gap: 10px
|
||||||
|
margin: 0
|
||||||
|
mediaquery:
|
||||||
|
"(max-width: 900px)":
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||||
|
cards:
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_panel_header
|
||||||
|
name: Perimeter Summary
|
||||||
|
view_layout:
|
||||||
|
grid-column: 1 / -1
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: group.entry_points
|
||||||
|
name: GPIO Contacts
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables:
|
||||||
|
ok_state: 'off'
|
||||||
|
healthy_text: SECURE
|
||||||
|
alert_text: OPEN
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mqtt_broker_problem
|
||||||
|
name: MQTT Broker
|
||||||
|
icon: mdi:message-check-outline
|
||||||
|
variables:
|
||||||
|
ok_state: 'off'
|
||||||
|
healthy_text: CONNECTED
|
||||||
|
alert_text: PROBLEM
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: lock.front_door
|
||||||
|
name: Front Lock
|
||||||
|
icon: mdi:door-closed-lock
|
||||||
|
variables:
|
||||||
|
ok_state: locked
|
||||||
|
healthy_text: LOCKED
|
||||||
|
alert_text: UNLOCKED
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: group.garage_doors
|
||||||
|
name: Garage Doors
|
||||||
|
icon: mdi:garage-variant
|
||||||
|
variables:
|
||||||
|
ok_state: closed
|
||||||
|
healthy_text: CLOSED
|
||||||
|
alert_text: OPEN
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Entry doors and sliders
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
- type: grid
|
||||||
|
column_span: 4
|
||||||
|
columns: 1
|
||||||
|
square: false
|
||||||
|
cards:
|
||||||
|
- type: custom:layout-card
|
||||||
|
grid_options:
|
||||||
|
columns: full
|
||||||
|
layout_type: custom:grid-layout
|
||||||
|
layout:
|
||||||
|
grid-template-columns: repeat(4, minmax(0, 1fr))
|
||||||
|
grid-auto-flow: row
|
||||||
|
grid-auto-rows: min-content
|
||||||
|
align-items: stretch
|
||||||
|
grid-gap: 10px
|
||||||
|
margin: 0
|
||||||
|
mediaquery:
|
||||||
|
"(max-width: 900px)":
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||||
|
cards:
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_panel_header
|
||||||
|
name: Entry Doors and Sliders
|
||||||
|
view_layout:
|
||||||
|
grid-column: 1 / -1
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu1_gpio5
|
||||||
|
name: Front Door
|
||||||
|
icon: mdi:door-closed
|
||||||
|
variables: &contact_status
|
||||||
|
ok_state: 'off'
|
||||||
|
healthy_text: CLOSED
|
||||||
|
alert_text: OPEN
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu1_gpio12
|
||||||
|
name: Interior Garage Door
|
||||||
|
icon: mdi:door-closed
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu2_gpio5
|
||||||
|
name: Back Door
|
||||||
|
icon: mdi:door-closed
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu2_gpio9
|
||||||
|
name: Master Slider
|
||||||
|
icon: mdi:door-sliding
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu2_gpio12
|
||||||
|
name: Main Slider
|
||||||
|
icon: mdi:door-sliding
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Common-area windows
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
- type: grid
|
||||||
|
column_span: 4
|
||||||
|
columns: 1
|
||||||
|
square: false
|
||||||
|
cards:
|
||||||
|
- type: custom:layout-card
|
||||||
|
grid_options:
|
||||||
|
columns: full
|
||||||
|
layout_type: custom:grid-layout
|
||||||
|
layout:
|
||||||
|
grid-template-columns: repeat(4, minmax(0, 1fr))
|
||||||
|
grid-auto-flow: row
|
||||||
|
grid-auto-rows: min-content
|
||||||
|
align-items: stretch
|
||||||
|
grid-gap: 10px
|
||||||
|
margin: 0
|
||||||
|
mediaquery:
|
||||||
|
"(max-width: 900px)":
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||||
|
cards:
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_panel_header
|
||||||
|
name: Common-Area Windows
|
||||||
|
view_layout:
|
||||||
|
grid-column: 1 / -1
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu1_gpio10
|
||||||
|
name: Dining Room Windows
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu1_gpio13
|
||||||
|
name: Front Den Windows
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu1_gpio14
|
||||||
|
name: Office Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu2_gpio4
|
||||||
|
name: Dinette Windows
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu2_gpio10
|
||||||
|
name: Master Bathroom Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Bedroom windows
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
- type: grid
|
||||||
|
column_span: 4
|
||||||
|
columns: 1
|
||||||
|
square: false
|
||||||
|
cards:
|
||||||
|
- type: custom:layout-card
|
||||||
|
grid_options:
|
||||||
|
columns: full
|
||||||
|
layout_type: custom:grid-layout
|
||||||
|
layout:
|
||||||
|
grid-template-columns: repeat(4, minmax(0, 1fr))
|
||||||
|
grid-auto-flow: row
|
||||||
|
grid-auto-rows: min-content
|
||||||
|
align-items: stretch
|
||||||
|
grid-gap: 10px
|
||||||
|
margin: 0
|
||||||
|
mediaquery:
|
||||||
|
"(max-width: 900px)":
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||||
|
cards:
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_panel_header
|
||||||
|
name: Bedroom Windows
|
||||||
|
view_layout:
|
||||||
|
grid-column: 1 / -1
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu1_gpio4
|
||||||
|
name: Paige Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu2_gpio13
|
||||||
|
name: Upstairs Bedroom Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu2_gpio14
|
||||||
|
name: Justin Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu3_gpio4
|
||||||
|
name: Stacey Bedroom Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu3_gpio5
|
||||||
|
name: Carlo Bedroom Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu3_gpio10
|
||||||
|
name: Master Bedroom Window
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
|
|
||||||
|
- type: custom:button-card
|
||||||
|
template: bearstone_infra_status_kpi
|
||||||
|
entity: binary_sensor.mcu3_gpio14
|
||||||
|
name: Upstairs Windows
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
variables: *contact_status
|
||||||
@ -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 - GPIO entry points
|
||||||
|
# Related Issue: 1843
|
||||||
|
# Window, door, and slider contacts with perimeter and MQTT context.
|
||||||
|
# -------------------------------------------------------------------
|
||||||
|
# Notes: The Home Windows ribbon is the canonical entry point for this subview.
|
||||||
|
######################################################################
|
||||||
|
|
||||||
|
title: Windows
|
||||||
|
path: windows
|
||||||
|
subview: true
|
||||||
|
icon: mdi:window-closed-variant
|
||||||
|
theme: Backend-selected
|
||||||
|
type: sections
|
||||||
|
max_columns: 4
|
||||||
|
dense_section_placement: true
|
||||||
|
badges: []
|
||||||
|
sections: !include /config/dashboards/overview/partials/entry_points_sections.yaml
|
||||||
|
cards: []
|
||||||
Loading…
Reference in new issue