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