parent
6aa91cabd6
commit
fc7ce35e04
@ -0,0 +1,462 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Systems Partial - Home Water
|
||||
# Protection, live use, hot water, maintenance, outdoor water, and trends.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: NAS, NVR, and unrelated house-temperature cards are omitted; refrigerator temperature stays with home safety.
|
||||
# Notes: Maintenance rows reuse existing reset scripts through safe more-info flows.
|
||||
# Notes: Active Phyn leak alerts are shown; the integration's stale latest-test leak flag is not an operator alert.
|
||||
# Notes: Daily usage uses change on the same sum-only statistic configured in Energy.
|
||||
######################################################################
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Water health strip (mandatory first full-width wrapper)
|
||||
# -------------------------------------------------------------------
|
||||
- type: grid
|
||||
column_span: 4
|
||||
columns: 1
|
||||
square: false
|
||||
cards:
|
||||
- type: custom:layout-card
|
||||
grid_options:
|
||||
columns: full
|
||||
layout_type: custom:grid-layout
|
||||
layout:
|
||||
grid-template-columns: repeat(6, 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_status_kpi
|
||||
entity: switch.phyn_autoshutoff_enabled
|
||||
name: Auto Shutoff
|
||||
icon: mdi:shield-water-outline
|
||||
variables:
|
||||
ok_state: 'on'
|
||||
healthy_text: ACTIVE
|
||||
alert_text: 'OFF'
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_status_kpi
|
||||
entity: binary_sensor.garage_phyn_leak_alert
|
||||
name: Active Leak
|
||||
icon: mdi:pipe-leak
|
||||
variables:
|
||||
ok_state: 'off'
|
||||
healthy_text: CLEAR
|
||||
alert_text: LEAK
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_status_kpi
|
||||
entity: valve.phyn_shutoff_valve
|
||||
name: Main Valve
|
||||
icon: mdi:valve
|
||||
variables:
|
||||
ok_state: open
|
||||
healthy_text: OPEN
|
||||
alert_text: CLOSED
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: sensor.phyn_average_water_flow_rate
|
||||
name: Flow Rate
|
||||
icon: mdi:waves-arrow-right
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: sensor.rheem_wh_available_hot_water
|
||||
name: Hot Water
|
||||
icon: mdi:water-thermometer
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: sensor.phyn_daily_water_usage
|
||||
name: Used Today
|
||||
icon: mdi:water-outline
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Home maintenance and outdoor water
|
||||
# -------------------------------------------------------------------
|
||||
- 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(3, 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: Home Maintenance
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.blink_blink1_temperature
|
||||
name: Refrigerator Temperature
|
||||
icon: mdi:fridge-outline
|
||||
state:
|
||||
- operator: '>'
|
||||
value: 60
|
||||
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
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.downstairs_ac_runtime_since_last_filter_change
|
||||
name: Downstairs Filter Runtime
|
||||
icon: mdi:air-filter
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(0)} / 350 h` : 'NO DATA';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: input_datetime.downstairs_last_filter_change
|
||||
name: Downstairs Filter Changed
|
||||
icon: mdi:calendar-check-outline
|
||||
tap_action:
|
||||
action: more-info
|
||||
entity: script.reset_downstairs_filter
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.upstairs_ac_runtime_since_last_filter_change
|
||||
name: Upstairs Filter Runtime
|
||||
icon: mdi:air-filter
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(0)} / 450 h` : 'NO DATA';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: input_datetime.upstairs_last_filter_change
|
||||
name: Upstairs Filter Changed
|
||||
icon: mdi:calendar-check-outline
|
||||
tap_action:
|
||||
action: more-info
|
||||
entity: script.reset_upstairs_filter
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.hvac_condenser_lines_days_since_cleaned
|
||||
name: Condenser Lines
|
||||
icon: mdi:pipe-wrench
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(0)} / 360 DAYS` : 'NO DATA';
|
||||
]]]
|
||||
tap_action:
|
||||
action: more-info
|
||||
entity: script.reset_hvac_condenser_lines_cleaned
|
||||
|
||||
- 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: Water Delivery & Softener
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.water_softener_salt_last_summary
|
||||
name: Last Salt Refill
|
||||
icon: mdi:shaker
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.water_softener_salt_average_days_between_refills
|
||||
name: Typical Salt Interval
|
||||
icon: mdi:calendar-sync-outline
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /dashboard-infrastructure/salt-trends
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: input_datetime.water_delivery_date
|
||||
name: Next Water Delivery
|
||||
icon: mdi:truck-delivery-outline
|
||||
state_display: >
|
||||
[[[
|
||||
const raw = String(entity?.state ?? '');
|
||||
const value = raw ? new Date(`${raw}T00:00:00`) : null;
|
||||
if (!(value instanceof Date) || Number.isNaN(value.getTime())) return 'NO DATE';
|
||||
const today = new Date();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const formatted = value.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }).toUpperCase();
|
||||
return value < today ? `OVERDUE · ${formatted}` : formatted;
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
name: Manage ReadyRefresh
|
||||
icon: mdi:open-in-new
|
||||
show_state: false
|
||||
tap_action:
|
||||
action: url
|
||||
url_path: https://www.readyrefresh.com/en/login
|
||||
|
||||
- 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: Outdoor Water
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.rachio_controller_status
|
||||
name: Sprinkler Controller
|
||||
icon: mdi:sprinkler-variant
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /dashboard-infrastructure/sprinklers
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.rachio_active_zone
|
||||
name: Active Zone
|
||||
icon: mdi:sprinkler
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: switch.carlo_rachio_rain_delay
|
||||
name: Rain Delay
|
||||
icon: mdi:weather-rainy
|
||||
tap_action:
|
||||
action: more-info
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.rachio_last_run_summary
|
||||
name: Last Sprinkler Run
|
||||
icon: mdi:history
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Water protection and hot water
|
||||
# -------------------------------------------------------------------
|
||||
- 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: Water Protection
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: valve.phyn_shutoff_valve
|
||||
name: Main Shutoff Valve
|
||||
icon: mdi:valve
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row_running
|
||||
entity: switch.phyn_autoshutoff_enabled
|
||||
name: Automatic Shutoff
|
||||
icon: mdi:shield-water-outline
|
||||
tap_action:
|
||||
action: more-info
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: switch.phyn_scheduled_leak_test_enabled
|
||||
name: Scheduled Leak Tests
|
||||
icon: mdi:calendar-search
|
||||
state_display: >
|
||||
[[[
|
||||
return entity?.state === 'on' ? 'ENABLED' : 'OFF';
|
||||
]]]
|
||||
tap_action:
|
||||
action: more-info
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: binary_sensor.phyn_leak_test_running
|
||||
name: Leak Test Activity
|
||||
icon: mdi:water-search
|
||||
state_display: >
|
||||
[[[
|
||||
return entity?.state === 'on' ? 'RUNNING' : 'IDLE';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.phyn_average_water_flow_rate
|
||||
name: Current Flow Rate
|
||||
icon: mdi:water-pump
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.phyn_current_water_pressure
|
||||
name: Water Pressure
|
||||
icon: mdi:gauge
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.phyn_average_water_temperature
|
||||
name: Supply Temperature
|
||||
icon: mdi:thermometer-water
|
||||
|
||||
- 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: Hot Water System
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.rheem_wh_available_hot_water
|
||||
name: Available Hot Water
|
||||
icon: mdi:water-percent
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: binary_sensor.rheem_wh_running
|
||||
name: Heat Pump
|
||||
icon: mdi:heat-pump-outline
|
||||
state_display: >
|
||||
[[[
|
||||
return entity?.state === 'on' ? 'RUNNING' : 'IDLE';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.rheem_wh_running_state
|
||||
name: Operating State
|
||||
icon: mdi:state-machine
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.rheem_wh_tank_health
|
||||
name: Tank Health
|
||||
icon: mdi:shield-check-outline
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.rheem_wh_alert_count
|
||||
name: Active Alerts
|
||||
icon: mdi:alert-circle-outline
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: water_heater.rheem_wh
|
||||
name: Water Heater Controls
|
||||
icon: mdi:water-boiler
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Thirty-day water trends
|
||||
# -------------------------------------------------------------------
|
||||
- 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: Daily Water Use - 30 Days
|
||||
|
||||
# Fallback card: change uses the same sum-only long-term statistic as Energy.
|
||||
- type: statistics-graph
|
||||
chart_type: bar
|
||||
days_to_show: 30
|
||||
period: day
|
||||
stat_types:
|
||||
- change
|
||||
entities:
|
||||
- entity: sensor.phyn_daily_water_usage
|
||||
name: Daily Usage
|
||||
|
||||
- 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: Lowest Hot Water - 30 Days
|
||||
|
||||
# Fallback card: daily minimum shows whether household demand is outrunning recovery.
|
||||
- type: statistics-graph
|
||||
chart_type: line
|
||||
days_to_show: 30
|
||||
period: day
|
||||
stat_types:
|
||||
- min
|
||||
entities:
|
||||
- entity: sensor.rheem_wh_available_hot_water
|
||||
name: Available Hot Water
|
||||
@ -0,0 +1,383 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Systems Partial - Vacuum
|
||||
# Current state, today's cleaning plan, controls, and maintenance health.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Full interactive map remains available as a production drill-down.
|
||||
# Notes: Monotonic cleaning totals are shown as facts, not misleading trends.
|
||||
# Notes: Consumable rows require a confirmed hold before the native reset button is pressed.
|
||||
######################################################################
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Current cleaning strip (mandatory first full-width wrapper)
|
||||
# -------------------------------------------------------------------
|
||||
- type: grid
|
||||
column_span: 4
|
||||
columns: 1
|
||||
square: false
|
||||
cards:
|
||||
- type: custom:layout-card
|
||||
grid_options:
|
||||
columns: full
|
||||
layout_type: custom:grid-layout
|
||||
layout:
|
||||
grid-template-columns: repeat(6, 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: vacuum.l10s_vacuum
|
||||
name: Robot
|
||||
icon: mdi:robot-vacuum
|
||||
state_display: >
|
||||
[[[
|
||||
return String(entity?.state ?? 'NO DATA').replaceAll('_', ' ').toUpperCase();
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: sensor.l10s_vacuum_battery_level
|
||||
name: Battery
|
||||
icon: mdi:battery
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: sensor.l10s_vacuum_current_room
|
||||
name: Current Room
|
||||
icon: mdi:map-marker-radius-outline
|
||||
state_display: >
|
||||
[[[
|
||||
const raw = String(entity?.state ?? 'NO DATA');
|
||||
return ['unknown', 'unavailable', 'none', ''].includes(raw.toLowerCase())
|
||||
? 'NO DATA'
|
||||
: raw.replaceAll('-', ' ');
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: input_text.l10s_vacuum_room_queue
|
||||
name: Remaining
|
||||
icon: mdi:playlist-play
|
||||
state_display: >
|
||||
[[[
|
||||
const ids = String(entity?.state ?? '').match(/\d+/g) ?? [];
|
||||
return ids.length ? `${ids.length} ROOMS` : 'COMPLETE';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: sensor.l10s_vacuum_error
|
||||
name: Error
|
||||
icon: mdi:robot-vacuum-alert
|
||||
state_display: >
|
||||
[[[
|
||||
const raw = String(entity?.state ?? '').toLowerCase();
|
||||
if (['no_error', 'no error', 'none'].includes(raw)) return 'CLEAR';
|
||||
if (['unknown', 'unavailable', ''].includes(raw)) return 'NO DATA';
|
||||
return raw.replaceAll('_', ' ').toUpperCase();
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: sensor.l10s_vacuum_low_water_warning
|
||||
name: Mop Water
|
||||
icon: mdi:water-check-outline
|
||||
state_display: >
|
||||
[[[
|
||||
const raw = String(entity?.state ?? '').toLowerCase();
|
||||
if (['no_warning', 'no warning', 'none'].includes(raw)) return 'READY';
|
||||
if (['unknown', 'unavailable', ''].includes(raw)) return 'NO DATA';
|
||||
return raw.replaceAll('_', ' ').toUpperCase();
|
||||
]]]
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Today's plan and native device controls
|
||||
# -------------------------------------------------------------------
|
||||
- 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: Today's Cleaning
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: input_boolean.l10s_vacuum_on_demand
|
||||
name: On-Demand Cycle
|
||||
icon: mdi:play-circle-outline
|
||||
state_display: >
|
||||
[[[
|
||||
return entity?.state === 'on' ? 'ACTIVE' : 'OFF';
|
||||
]]]
|
||||
tap_action:
|
||||
action: toggle
|
||||
confirmation:
|
||||
text: Start or stop the on-demand cleaning cycle?
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: input_select.l10s_vacuum_phase
|
||||
name: Current Phase
|
||||
icon: mdi:playlist-check
|
||||
state_display: >
|
||||
[[[
|
||||
return String(entity?.state ?? 'NO DATA').replaceAll('_', ' ').toUpperCase();
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: input_text.l10s_vacuum_room_queue
|
||||
name: Rooms Remaining
|
||||
icon: mdi:format-list-numbered
|
||||
state_display: >
|
||||
[[[
|
||||
const roomNames = {
|
||||
'1': 'Pool Bath', '2': 'Office', '3': 'Kids Bath', '4': 'Primary Bath',
|
||||
'6': 'Paige', '7': 'Primary Bed', '8': 'Justin', '9': 'Stacey Office',
|
||||
'10': 'Living', '12': 'Dining', '13': 'Hallway', '14': 'Kitchen',
|
||||
'15': 'Foyer', '17': 'Formal Dining'
|
||||
};
|
||||
const ids = String(entity?.state ?? '').match(/\d+/g) ?? [];
|
||||
if (!ids.length) return 'COMPLETE';
|
||||
const names = ids.map((id) => roomNames[id] ?? id);
|
||||
return names.length > 3 ? `${names.slice(0, 3).join(', ')} +${names.length - 3}` : names.join(', ');
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: input_text.l10s_vacuum_rooms_cleaned_today
|
||||
name: Cleaned Today
|
||||
icon: mdi:check-all
|
||||
state_display: >
|
||||
[[[
|
||||
const rooms = String(entity?.state ?? '').split(',').map((value) => value.trim()).filter(Boolean);
|
||||
return rooms.length ? `${rooms.length} ROOMS` : 'NONE YET';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: camera.l10s_vacuum_map
|
||||
name: Open Full Vacuum Map
|
||||
icon: mdi:map-outline
|
||||
state_display: OPEN
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /dashboard-infrastructure/vacuum-map
|
||||
|
||||
- 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: Vacuum Controls
|
||||
|
||||
# Fallback card: native entities preserve safe vacuum and select controls.
|
||||
- type: entities
|
||||
show_header_toggle: false
|
||||
entities:
|
||||
- entity: vacuum.l10s_vacuum
|
||||
name: Vacuum
|
||||
- entity: select.l10s_vacuum_cleaning_mode
|
||||
name: Cleaning Mode
|
||||
- entity: select.l10s_vacuum_suction_level
|
||||
name: Suction
|
||||
- entity: select.l10s_vacuum_mop_pad_humidity
|
||||
name: Mop Moisture
|
||||
- entity: select.l10s_vacuum_auto_empty_frequency
|
||||
name: Auto-Empty
|
||||
- entity: switch.l10s_vacuum_auto_dust_collecting
|
||||
name: Auto Dust Collection
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Consumables and last-run evidence
|
||||
# -------------------------------------------------------------------
|
||||
- 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: Consumables - Hold a Row to Reset
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_filter_left
|
||||
name: Filter
|
||||
icon: mdi:air-filter
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
service: button.press
|
||||
service_data:
|
||||
entity_id: button.l10s_vacuum_reset_filter
|
||||
confirmation:
|
||||
text: Reset the vacuum filter life to 100%?
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_main_brush_left
|
||||
name: Main Brush
|
||||
icon: mdi:brush
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
service: button.press
|
||||
service_data:
|
||||
entity_id: button.l10s_vacuum_reset_main_brush
|
||||
confirmation:
|
||||
text: Reset the main brush life to 100%?
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_side_brush_left
|
||||
name: Side Brush
|
||||
icon: mdi:brush-variant
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
service: button.press
|
||||
service_data:
|
||||
entity_id: button.l10s_vacuum_reset_side_brush
|
||||
confirmation:
|
||||
text: Reset the side brush life to 100%?
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_sensor_dirty_left
|
||||
name: Sensors
|
||||
icon: mdi:radar
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
service: button.press
|
||||
service_data:
|
||||
entity_id: button.l10s_vacuum_reset_sensor
|
||||
confirmation:
|
||||
text: Reset the vacuum sensor-cleaning life to 100%?
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_mop_pad_left
|
||||
name: Mop Pads
|
||||
icon: mdi:water-sync
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
service: button.press
|
||||
service_data:
|
||||
entity_id: button.l10s_vacuum_reset_mop_pad
|
||||
confirmation:
|
||||
text: Reset the mop pad life to 100%?
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_detergent_left
|
||||
name: Detergent
|
||||
icon: mdi:bottle-tonic-outline
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: call-service
|
||||
service: button.press
|
||||
service_data:
|
||||
entity_id: button.l10s_vacuum_reset_detergent
|
||||
confirmation:
|
||||
text: Reset the detergent life to 100%?
|
||||
|
||||
- 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: Cleaning Evidence
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_cleaning_count
|
||||
name: Completed Runs
|
||||
icon: mdi:counter
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_total_cleaned_area
|
||||
name: Lifetime Area
|
||||
icon: mdi:ruler-square
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_cleaning_history
|
||||
name: Last Cleaning Record
|
||||
icon: mdi:history
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_dust_collection
|
||||
name: Dust Collection
|
||||
icon: mdi:delete-sweep-outline
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_task_status
|
||||
name: Last Task Status
|
||||
icon: mdi:clipboard-check-outline
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.l10s_vacuum_error
|
||||
name: Current Error
|
||||
icon: mdi:alert-circle-outline
|
||||
@ -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
|
||||
# -------------------------------------------------------------------
|
||||
# Infrastructure Partial - WAN Detail
|
||||
# Immediate outage detection, sustained degradation, and 14-day trends.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Near-zero throughput or 90% packet loss alerts immediately.
|
||||
# Notes: Other threshold breaches must remain continuous for 6 hours.
|
||||
######################################################################
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# WAN evaluation ribbon
|
||||
# -------------------------------------------------------------------
|
||||
- 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_status_kpi
|
||||
entity: binary_sensor.infra_wan_quality_degraded
|
||||
name: WAN
|
||||
icon: mdi:wan
|
||||
variables:
|
||||
ok_state: 'off'
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_status_kpi
|
||||
entity: binary_sensor.infra_wan_outage
|
||||
name: Immediate Outage
|
||||
icon: mdi:lan-disconnect
|
||||
variables:
|
||||
ok_state: 'off'
|
||||
healthy_text: CLEAR
|
||||
alert_text: OUTAGE
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_status_kpi
|
||||
entity: binary_sensor.infra_wan_sustained_degradation
|
||||
name: Sustained Performance
|
||||
icon: mdi:timer-alert-outline
|
||||
variables:
|
||||
ok_state: 'off'
|
||||
healthy_text: CLEAR
|
||||
alert_text: DEGRADED
|
||||
state_display: >
|
||||
[[[
|
||||
const raw = String(entity?.state ?? '').toLowerCase();
|
||||
if (['unknown', 'unavailable', 'none', ''].includes(raw)) return 'OBSERVING';
|
||||
return raw === 'on' ? 'DEGRADED' : 'CLEAR';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_kpi
|
||||
entity: binary_sensor.infra_wan_sustained_degradation
|
||||
name: Evaluation Window
|
||||
icon: mdi:timer-sand
|
||||
state_display: >
|
||||
[[[ return '6 HOURS'; ]]]
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Current values and explicit alert rules
|
||||
# -------------------------------------------------------------------
|
||||
- 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: Current WAN Signals
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.speedtest_download
|
||||
name: Download
|
||||
icon: mdi:download-network-outline
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(1)} Mbit/s` : 'NO DATA';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.speedtest_upload
|
||||
name: Upload
|
||||
icon: mdi:upload-network-outline
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(1)} Mbit/s` : 'NO DATA';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.speedtest_ping
|
||||
name: Speedtest Latency
|
||||
icon: mdi:speedometer
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(1)} ms` : 'NO DATA';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.infra_wan_latency_ms
|
||||
name: Continuous Latency
|
||||
icon: mdi:wan
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(1)} ms` : 'NO DATA';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.infra_wan_packet_loss
|
||||
name: Packet Loss
|
||||
icon: mdi:chart-bell-curve-cumulative
|
||||
state_display: >
|
||||
[[[
|
||||
const value = Number(entity?.state);
|
||||
return Number.isFinite(value) ? `${value.toFixed(1)}%` : 'NO DATA';
|
||||
]]]
|
||||
|
||||
- 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: Why WAN Would Alert
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: binary_sensor.infra_wan_quality_degraded
|
||||
name: Current Threshold Breach
|
||||
icon: mdi:alert-decagram-outline
|
||||
state_display: >
|
||||
[[[
|
||||
const invalid = (value) => ['unknown', 'unavailable', 'none', ''].includes(String(value ?? '').toLowerCase());
|
||||
const numeric = (id) => invalid(states[id]?.state) ? null : Number(states[id]?.state);
|
||||
const download = numeric('sensor.speedtest_download');
|
||||
const upload = numeric('sensor.speedtest_upload');
|
||||
const latency = numeric('sensor.infra_wan_latency_ms');
|
||||
const loss = numeric('sensor.infra_wan_packet_loss');
|
||||
const reasons = [];
|
||||
if ([download, upload, latency, loss].some((value) => value === null || !Number.isFinite(value))) reasons.push('NO DATA');
|
||||
if (download !== null && download < 300) reasons.push('DOWNLOAD');
|
||||
if (upload !== null && upload < 300) reasons.push('UPLOAD');
|
||||
if (latency !== null && latency > 80) reasons.push('LATENCY');
|
||||
if (loss !== null && loss > 5) reasons.push('PACKET LOSS');
|
||||
return reasons.length ? reasons.join(' · ') : 'NONE';
|
||||
]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: binary_sensor.infra_wan_outage
|
||||
name: Immediate Outage Rule
|
||||
icon: mdi:lan-disconnect
|
||||
state_display: >
|
||||
[[[ return '≤1 Mbit/s OR ≥90% LOSS'; ]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: binary_sensor.infra_wan_sustained_degradation
|
||||
name: Performance Persistence
|
||||
icon: mdi:timer-alert-outline
|
||||
state_display: >
|
||||
[[[ return '6 CONTINUOUS HOURS'; ]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.speedtest_download
|
||||
name: Throughput Rule
|
||||
icon: mdi:speedometer-slow
|
||||
state_display: >
|
||||
[[[ return '<300 / 300 Mbit/s'; ]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.infra_wan_latency_ms
|
||||
name: Latency Rule
|
||||
icon: mdi:timer-outline
|
||||
state_display: >
|
||||
[[[ return '>80 ms'; ]]]
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_list_row
|
||||
entity: sensor.infra_wan_packet_loss
|
||||
name: Packet Loss Rule
|
||||
icon: mdi:chart-bell-curve-cumulative
|
||||
state_display: >
|
||||
[[[ return '>5%'; ]]]
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Multi-day trend and alert history
|
||||
# -------------------------------------------------------------------
|
||||
- type: grid
|
||||
column_span: 4
|
||||
columns: 1
|
||||
square: false
|
||||
cards:
|
||||
- type: custom:vertical-stack-in-card
|
||||
grid_options:
|
||||
columns: full
|
||||
card_mod:
|
||||
style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml
|
||||
cards:
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_panel_header
|
||||
name: WAN Trends - 7 Days
|
||||
|
||||
- type: custom:layout-card
|
||||
layout_type: custom:grid-layout
|
||||
layout:
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||
grid-auto-flow: row
|
||||
grid-auto-rows: min-content
|
||||
grid-gap: 12px
|
||||
margin: 0
|
||||
mediaquery:
|
||||
"(max-width: 900px)":
|
||||
grid-template-columns: repeat(1, minmax(0, 1fr))
|
||||
cards:
|
||||
- type: custom:mini-graph-card
|
||||
name: Download - 7 Days
|
||||
icon: mdi:download-network-outline
|
||||
entities:
|
||||
- entity: sensor.speedtest_download
|
||||
name: Download
|
||||
hours_to_show: 168
|
||||
points_per_hour: 1
|
||||
line_width: 2
|
||||
smoothing: true
|
||||
show:
|
||||
fill: false
|
||||
legend: false
|
||||
labels: false
|
||||
name: true
|
||||
icon: true
|
||||
state: true
|
||||
card_mod:
|
||||
style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml
|
||||
|
||||
- type: custom:mini-graph-card
|
||||
name: Upload - 7 Days
|
||||
icon: mdi:upload-network-outline
|
||||
entities:
|
||||
- entity: sensor.speedtest_upload
|
||||
name: Upload
|
||||
hours_to_show: 168
|
||||
points_per_hour: 1
|
||||
line_width: 2
|
||||
smoothing: true
|
||||
show:
|
||||
fill: false
|
||||
legend: false
|
||||
labels: false
|
||||
name: true
|
||||
icon: true
|
||||
state: true
|
||||
card_mod:
|
||||
style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml
|
||||
|
||||
- type: custom:mini-graph-card
|
||||
name: Continuous Latency - 7 Days
|
||||
icon: mdi:wan
|
||||
entities:
|
||||
- entity: sensor.infra_wan_latency_ms
|
||||
name: Latency
|
||||
hours_to_show: 168
|
||||
points_per_hour: 1
|
||||
line_width: 2
|
||||
smoothing: true
|
||||
show:
|
||||
fill: false
|
||||
legend: false
|
||||
labels: false
|
||||
name: true
|
||||
icon: true
|
||||
state: true
|
||||
card_mod:
|
||||
style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml
|
||||
|
||||
- type: custom:mini-graph-card
|
||||
name: Packet Loss - 7 Days
|
||||
icon: mdi:chart-bell-curve-cumulative
|
||||
entities:
|
||||
- entity: sensor.infra_wan_packet_loss
|
||||
name: Packet Loss
|
||||
hours_to_show: 168
|
||||
points_per_hour: 1
|
||||
line_width: 2
|
||||
smoothing: false
|
||||
show:
|
||||
fill: false
|
||||
legend: false
|
||||
labels: false
|
||||
name: true
|
||||
icon: true
|
||||
state: true
|
||||
card_mod:
|
||||
style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml
|
||||
|
||||
# Core history-graph is required for binary outage/degradation timelines.
|
||||
- type: history-graph
|
||||
title: WAN Alert Timeline - 14 Days
|
||||
hours_to_show: 336
|
||||
entities:
|
||||
- entity: binary_sensor.infra_wan_outage
|
||||
name: Immediate Outage
|
||||
- entity: binary_sensor.infra_wan_sustained_degradation
|
||||
name: Sustained Degradation
|
||||
card_mod:
|
||||
style: !include /config/dashboards/infrastructure/card_mod/infra_card.yaml
|
||||
@ -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 - WAN Detail
|
||||
# Current diagnostics, alert rules, and multi-day internet trends.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Hidden drill-down reached from the combined Network view.
|
||||
######################################################################
|
||||
|
||||
title: WAN Details
|
||||
path: wan
|
||||
type: sections
|
||||
subview: true
|
||||
back_path: /dashboard-infrastructure/network
|
||||
theme: default
|
||||
max_columns: 4
|
||||
dense_section_placement: true
|
||||
badges: []
|
||||
sections: !include /config/dashboards/infrastructure/partials/wan_detail_sections.yaml
|
||||
cards: []
|
||||
@ -0,0 +1,34 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Systems Subview - Vacuum Map
|
||||
# Full interactive Dreame map for zone, point, and room cleaning.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Specialized map card is retained because native cards do not expose interactive vacuum-map cleaning.
|
||||
# Notes: Panel view is intentional so the single interactive map can use the full available canvas.
|
||||
######################################################################
|
||||
|
||||
title: Vacuum Map
|
||||
path: vacuum-map
|
||||
subview: true
|
||||
back_path: /dashboard-infrastructure/vacuum
|
||||
type: panel
|
||||
icon: mdi:map-outline
|
||||
theme: default
|
||||
cards:
|
||||
# Fallback card: the installed vacuum map card provides device-specific interactive map controls.
|
||||
- type: custom:xiaomi-vacuum-map-card
|
||||
grid_options:
|
||||
columns: full
|
||||
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
|
||||
@ -1,29 +0,0 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview 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: ''
|
||||
@ -1,359 +0,0 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview Partial - home sections
|
||||
# Reusable list extracted from a view for smaller diffs and safer edits.
|
||||
# -------------------------------------------------------------------
|
||||
# Related Issue: 1584
|
||||
# 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%)
|
||||
Justin Dorm: grayscale(10%) opacity(50%)
|
||||
Paige Home: grayscale(10%) opacity(50%)
|
||||
Joyce 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%)
|
||||
Justin Dorm: grayscale(10%) opacity(50%)
|
||||
Paige Home: grayscale(10%) opacity(50%)
|
||||
Joyce 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 Home: grayscale(10%) opacity(50%)
|
||||
Joyce Home: grayscale(100%) 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 Home: grayscale(10%) opacity(50%)
|
||||
Joyce Home: grayscale(100%) 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:
|
||||
entity: sensor.carlo_location_display
|
||||
name: Carlo Location
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: person.stacey
|
||||
state_not: home
|
||||
row:
|
||||
entity: sensor.stacey_location_display
|
||||
name: Stacey Location
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: person.justin
|
||||
state_not: home
|
||||
row:
|
||||
entity: sensor.justin_location_display
|
||||
name: Justin Location
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: person.paige
|
||||
state_not: home
|
||||
row:
|
||||
entity: sensor.paige_location_display
|
||||
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
|
||||
# Core map cards are required to show each person's location history.
|
||||
- type: map
|
||||
entities:
|
||||
- person.justin
|
||||
hours_to_show: 48
|
||||
aspect_ratio: '4:3'
|
||||
theme_mode: auto
|
||||
card_mod: &person_location_map_style
|
||||
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.paige
|
||||
hours_to_show: 48
|
||||
aspect_ratio: '4:3'
|
||||
theme_mode: auto
|
||||
card_mod: *person_location_map_style
|
||||
- type: map
|
||||
entities:
|
||||
- person.carlo
|
||||
- person.stacey
|
||||
hours_to_show: 48
|
||||
aspect_ratio: '4:3'
|
||||
theme_mode: auto
|
||||
card_mod: *person_location_map_style
|
||||
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: custom:mushroom-template-card
|
||||
entity: climate.upstairs
|
||||
primary: Upstairs
|
||||
secondary: >-
|
||||
{% set current = state_attr('climate.upstairs', 'current_temperature') %}
|
||||
{% set target = state_attr('climate.upstairs', 'temperature') %}
|
||||
{% set humidity = states('sensor.upstairs_humidity') %}
|
||||
{% set current_text = ((current | float) | round(0) | int) ~ ' °F' if current is number else 'Current n/a' %}
|
||||
{% set target_text = ((target | float) | round(0) | int) ~ ' °F' if target is number else 'Target n/a' %}
|
||||
{% set humidity_text = ((humidity | float) | round(0) | int) ~ '% humidity' if is_number(humidity) else 'Humidity n/a' %}
|
||||
{{ current_text }} · {{ target_text }} · {{ humidity_text }}
|
||||
icon: mdi:thermostat
|
||||
icon_color: >-
|
||||
{% set mode = states('climate.upstairs') %}
|
||||
{% if mode == 'cool' %}blue{% elif mode == 'heat' %}orange{% elif mode == 'off' %}grey{% else %}green{% endif %}
|
||||
tap_action:
|
||||
action: more-info
|
||||
hold_action:
|
||||
action: more-info
|
||||
double_tap_action:
|
||||
action: none
|
||||
multiline_secondary: false
|
||||
- type: custom:search-card
|
||||
max_results: 10
|
||||
- type: custom:mini-graph-card
|
||||
name: Sleep Score Trend
|
||||
icon: mdi:heart-pulse
|
||||
entities:
|
||||
- entity: sensor.sleepnumber_carlo_carlo_sleep_score
|
||||
name: Carlo
|
||||
show_state: true
|
||||
- entity: sensor.sleepnumber_carlo_stacey_sleep_score
|
||||
name: Stacey
|
||||
show_state: true
|
||||
hours_to_show: 168
|
||||
points_per_hour: 1
|
||||
line_width: 3
|
||||
graph: line
|
||||
smoothing: true
|
||||
lower_bound: 0
|
||||
upper_bound: 100
|
||||
show:
|
||||
graph: line
|
||||
name: true
|
||||
icon: true
|
||||
state: true
|
||||
fill: false
|
||||
points: false
|
||||
legend: false
|
||||
labels: false
|
||||
height: 90
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/health
|
||||
hold_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/health
|
||||
grid_options:
|
||||
columns: full
|
||||
rows: 3
|
||||
- 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: '#ovw-living-room'
|
||||
button_action:
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: '#ovw-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: '#ovw-lights'
|
||||
button_action:
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: '#ovw-lights'
|
||||
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: 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
|
||||
- !include /config/dashboards/overview/popups/living_room.yaml
|
||||
- !include /config/dashboards/overview/popups/lights.yaml
|
||||
- cards:
|
||||
- type: custom:frigate-events-card
|
||||
frigate_client_id: frigate
|
||||
event_count: 5
|
||||
video: true
|
||||
video_on_hover: true
|
||||
- show_state: true
|
||||
show_name: true
|
||||
camera_view: live
|
||||
type: picture-entity
|
||||
entity: camera.birdseye
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/cameras
|
||||
- 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
|
||||
@ -1,352 +0,0 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview 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
|
||||
@ -1,228 +0,0 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview Partial - water sections
|
||||
# Reusable list extracted from a view for smaller diffs and safer edits.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Extracted from config/dashboards/overview/views/07_water.yaml key `sections`.
|
||||
# Notes: Includes water and home utility telemetry (filters, power, hot water).
|
||||
# Video: HVAC maintenance dashboard - https://youtu.be/nScl2JxYSB8
|
||||
# Video: Water softener salt tracking - https://youtu.be/_OqTv9i-jAs
|
||||
# Blog: https://www.vcloudinfo.com/2026/07/home-assistant-water-softener-salt-automation.html
|
||||
# Notes: Sprinkler overview links to config/dashboards/overview/views/10_sprinklers.yaml.
|
||||
######################################################################
|
||||
|
||||
- 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
|
||||
tap_action:
|
||||
action: more-info
|
||||
entity: script.reset_downstairs_filter
|
||||
- type: tile
|
||||
entity: input_datetime.upstairs_last_filter_change
|
||||
tap_action:
|
||||
action: more-info
|
||||
entity: script.reset_upstairs_filter
|
||||
- type: custom:mushroom-template-card
|
||||
primary: HVAC Condenser Lines
|
||||
secondary: >-
|
||||
{% set days = states('sensor.hvac_condenser_lines_days_since_cleaned') | int(0) -%}
|
||||
{% set raw = states('input_datetime.hvac_condenser_lines_last_cleaned') -%}
|
||||
{%- set when = as_datetime(raw).strftime('%b %d, %Y') | replace(' 0', ' ') if raw not in ['unknown', 'unavailable', 'none', ''] else 'unknown' -%}
|
||||
{%- if days < 1 -%}Cleaned today{%- elif days == 1 -%}1 day since {{ when }}{%- else -%}{{ days }} days since {{ when }}{%- endif -%}
|
||||
icon: mdi:calendar-clock
|
||||
entity: input_datetime.hvac_condenser_lines_last_cleaned
|
||||
icon_color: blue
|
||||
tap_action:
|
||||
action: more-info
|
||||
entity: script.reset_hvac_condenser_lines_cleaned
|
||||
hold_action:
|
||||
action: none
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
- 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
|
||||
# Fallback card: Mushroom matches the existing Home Maintenance overview tile style.
|
||||
- type: custom:mushroom-template-card
|
||||
primary: >-
|
||||
{% set status = states('sensor.rachio_controller_status') %}
|
||||
{% set active = states('sensor.rachio_active_zone') %}
|
||||
{% if status == 'watering' %}
|
||||
Sprinklers: {{ active }}
|
||||
{% elif status == 'rain_delay' %}
|
||||
Sprinklers: rain delay
|
||||
{% elif status == 'standby' %}
|
||||
Sprinklers: standby
|
||||
{% elif status == 'unavailable' %}
|
||||
Sprinklers: unavailable
|
||||
{% else %}
|
||||
Sprinklers: ready
|
||||
{% endif %}
|
||||
secondary: >-
|
||||
{% set zone = states('sensor.rachio_last_run_summary') %}
|
||||
{% set completed = state_attr('sensor.rachio_last_run_summary', 'completed_at') %}
|
||||
{% set duration = state_attr('sensor.rachio_last_run_summary', 'duration_min') %}
|
||||
{% if zone not in ['unknown', 'unavailable', 'none', ''] and completed not in ['unknown', 'unavailable', 'none', '', none] %}
|
||||
{% set when = as_datetime(completed).strftime('%b %d, %I:%M %p') | replace(' 0', ' ') %}
|
||||
Last run: {{ zone }}{% if duration not in ['unknown', 'unavailable', 'none', '', none] %}, {{ duration }} min{% endif %} at {{ when }}
|
||||
{% else %}
|
||||
{{ state_attr('sensor.rachio_controller_status', 'schedule_summary') | default('No completed run captured yet.', true) }}
|
||||
{% endif %}
|
||||
icon: mdi:sprinkler-variant
|
||||
entity: sensor.rachio_controller_status
|
||||
icon_color: >-
|
||||
{% set status = states('sensor.rachio_controller_status') %}
|
||||
{% if status == 'watering' %}
|
||||
green
|
||||
{% elif status in ['rain_delay', 'standby'] %}
|
||||
blue
|
||||
{% elif status == 'unavailable' %}
|
||||
red
|
||||
{% else %}
|
||||
teal
|
||||
{% endif %}
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/sprinklers
|
||||
hold_action:
|
||||
action: more-info
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
- type: tile
|
||||
entity: switch.carlo_rachio_rain_delay
|
||||
name: Sprinkler rain delay
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/sprinklers
|
||||
hold_action:
|
||||
action: more-info
|
||||
- type: custom:mushroom-template-card
|
||||
primary: >-
|
||||
{% set days = states('sensor.water_softener_salt_days_since_last_add') | float(0) -%}
|
||||
{%- if days < 1 -%}Last refill: today{%- elif days == 1 -%}Last refill: 1 day ago{%- else -%}Last refill: {{ days | round(1) }} days ago{%- endif -%}
|
||||
secondary: "{{ states('sensor.water_softener_salt_last_summary') }}"
|
||||
icon: mdi:shaker
|
||||
entity: sensor.water_softener_salt_days_since_last_add
|
||||
icon_color: blue
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/salt-trends
|
||||
hold_action:
|
||||
action: more-info
|
||||
double_tap_action:
|
||||
action: none
|
||||
layout: horizontal
|
||||
fill_container: true
|
||||
- type: tile
|
||||
entity: sensor.water_softener_salt_average_days_between_refills
|
||||
name: Salt typically lasts
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/salt-trends
|
||||
hold_action:
|
||||
action: more-info
|
||||
- type: energy-water-graph
|
||||
@ -0,0 +1,118 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview Section - priority ribbon and daily controls
|
||||
# Systems first, then frequent doors, climate, and vacuum access.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Equal-width pills keep the whole ribbon compact and consistent.
|
||||
######################################################################
|
||||
|
||||
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(6, minmax(0, 1fr))
|
||||
grid-auto-flow: row
|
||||
grid-auto-rows: min-content
|
||||
align-items: center
|
||||
grid-gap: 10px
|
||||
margin: 0
|
||||
mediaquery:
|
||||
"(max-width: 900px)":
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr))
|
||||
cards:
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_ribbon_control
|
||||
entity: sensor.infra_dashboard_active_issue_count
|
||||
name: Systems
|
||||
icon: mdi:home-cog-outline
|
||||
variables:
|
||||
ok_states:
|
||||
- '0'
|
||||
state_labels:
|
||||
'0': ALL CLEAR
|
||||
raw_suffix: ACTIVE
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /dashboard-infrastructure/home
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_ribbon_control
|
||||
entity: cover.large_garage_door
|
||||
name: Large Garage
|
||||
icon: mdi:garage
|
||||
variables:
|
||||
ok_states:
|
||||
- closed
|
||||
warning_states:
|
||||
- opening
|
||||
- closing
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_ribbon_control
|
||||
entity: lock.front_door
|
||||
name: Front Door
|
||||
icon: mdi:door-closed-lock
|
||||
variables:
|
||||
ok_states:
|
||||
- locked
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_ribbon_control
|
||||
entity: climate.downstairs
|
||||
name: Downstairs
|
||||
icon: mdi:thermostat
|
||||
variables:
|
||||
display_mode: climate
|
||||
humidity_entity: sensor.downstairs_humidity
|
||||
ok_states:
|
||||
- auto
|
||||
- cool
|
||||
- dry
|
||||
- fan_only
|
||||
- heat
|
||||
- heat_cool
|
||||
- 'off'
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_ribbon_control
|
||||
entity: climate.upstairs
|
||||
name: Upstairs
|
||||
icon: mdi:thermostat
|
||||
variables:
|
||||
display_mode: climate
|
||||
humidity_entity: sensor.upstairs_humidity
|
||||
ok_states:
|
||||
- auto
|
||||
- cool
|
||||
- dry
|
||||
- fan_only
|
||||
- heat
|
||||
- heat_cool
|
||||
- 'off'
|
||||
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_ribbon_control
|
||||
entity: vacuum.l10s_vacuum
|
||||
name: Vacuum
|
||||
icon: mdi:robot-vacuum
|
||||
variables:
|
||||
ok_states:
|
||||
- docked
|
||||
active_states:
|
||||
- cleaning
|
||||
- paused
|
||||
- returning
|
||||
state_labels:
|
||||
docked: READY
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /dashboard-infrastructure/vacuum
|
||||
@ -0,0 +1,216 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview Section - family presence and compact maps
|
||||
# Special-home overlays stay visible while Bear Stone home stays clean.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Core picture and map cards preserve person images and route history.
|
||||
# Notes: Mobile search sits before maps so entity lookup remains near the top.
|
||||
######################################################################
|
||||
|
||||
cards:
|
||||
# Fallback card: picture-entity provides native person images and state filters.
|
||||
- square: true
|
||||
type: grid
|
||||
columns: 4
|
||||
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%)
|
||||
Justin Dorm: grayscale(10%) opacity(50%)
|
||||
Paige Home: grayscale(10%) opacity(50%)
|
||||
Joyce 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%)
|
||||
Justin Dorm: grayscale(10%) opacity(50%)
|
||||
Paige Home: grayscale(10%) opacity(50%)
|
||||
Joyce 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: true
|
||||
show_name: false
|
||||
card_mod:
|
||||
style: |
|
||||
.footer {
|
||||
display: {% if is_state('person.justin', 'Justin Dorm') %}block{% else %}none{% endif %};
|
||||
padding: 4px 2px !important;
|
||||
font-size: 11px !important;
|
||||
line-height: 14px !important;
|
||||
}
|
||||
state_filter:
|
||||
home: none
|
||||
not_home: grayscale(100%) opacity(50%)
|
||||
Justin Dorm: grayscale(10%) opacity(50%)
|
||||
Paige Home: grayscale(10%) opacity(50%)
|
||||
Joyce Home: grayscale(100%) opacity(50%)
|
||||
gym: grayscale(100%) opacity(50%)
|
||||
driving: grayscale(100%) opacity(50%)
|
||||
|
||||
- type: picture-entity
|
||||
entity: person.paige
|
||||
name: Paige
|
||||
show_state: true
|
||||
show_name: false
|
||||
card_mod:
|
||||
style: |
|
||||
.footer {
|
||||
display: {% if is_state('person.paige', 'Paige Home') %}block{% else %}none{% endif %};
|
||||
padding: 4px 2px !important;
|
||||
font-size: 11px !important;
|
||||
line-height: 14px !important;
|
||||
}
|
||||
state_filter:
|
||||
home: none
|
||||
not_home: grayscale(100%) opacity(50%)
|
||||
paige_work: grayscale(100%) opacity(50%)
|
||||
Justin Dorm: grayscale(10%) opacity(50%)
|
||||
Paige Home: grayscale(10%) opacity(50%)
|
||||
Joyce Home: grayscale(100%) opacity(50%)
|
||||
gym: grayscale(100%) opacity(50%)
|
||||
driving: grayscale(100%) opacity(50%)
|
||||
|
||||
# Fallback card: conditional rows explain away locations and collapse when empty.
|
||||
- type: conditional
|
||||
conditions:
|
||||
- condition: or
|
||||
conditions:
|
||||
- condition: state
|
||||
entity: person.carlo
|
||||
state_not: home
|
||||
- condition: state
|
||||
entity: person.stacey
|
||||
state_not: home
|
||||
- condition: and
|
||||
conditions:
|
||||
- condition: state
|
||||
entity: person.justin
|
||||
state_not: home
|
||||
- condition: state
|
||||
entity: person.justin
|
||||
state_not: Justin Dorm
|
||||
- condition: and
|
||||
conditions:
|
||||
- condition: state
|
||||
entity: person.paige
|
||||
state_not: home
|
||||
- condition: state
|
||||
entity: person.paige
|
||||
state_not: Paige Home
|
||||
card:
|
||||
type: entities
|
||||
state_color: false
|
||||
entities:
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: person.carlo
|
||||
state_not: home
|
||||
row:
|
||||
entity: sensor.carlo_location_display
|
||||
name: Carlo Location
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: person.stacey
|
||||
state_not: home
|
||||
row:
|
||||
entity: sensor.stacey_location_display
|
||||
name: Stacey Location
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: person.justin
|
||||
state_not: home
|
||||
- entity: person.justin
|
||||
state_not: Justin Dorm
|
||||
row:
|
||||
entity: sensor.justin_location_display
|
||||
name: Justin Location
|
||||
- type: conditional
|
||||
conditions:
|
||||
- entity: person.paige
|
||||
state_not: home
|
||||
- entity: person.paige
|
||||
state_not: Paige Home
|
||||
row:
|
||||
entity: sensor.paige_location_display
|
||||
name: Paige Location
|
||||
|
||||
# Fallback card: screen condition moves shared search ahead of maps on mobile.
|
||||
- type: conditional
|
||||
conditions:
|
||||
- condition: screen
|
||||
media_query: "(max-width: 900px)"
|
||||
card: !include /config/dashboards/overview/partials/entity_search.yaml
|
||||
|
||||
- type: custom:mushroom-template-card
|
||||
primary: Zoom Map
|
||||
icon: mdi:map-marker
|
||||
fill_container: true
|
||||
layout: horizontal
|
||||
grid_options:
|
||||
columns: full
|
||||
rows: 1
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/family_locator
|
||||
hold_action:
|
||||
action: none
|
||||
double_tap_action:
|
||||
action: none
|
||||
|
||||
# Fallback cards: map preserves each person's 24-hour location path.
|
||||
- type: map
|
||||
entities:
|
||||
- person.justin
|
||||
hours_to_show: 24
|
||||
aspect_ratio: '16:9'
|
||||
theme_mode: auto
|
||||
card_mod: &person_location_map_style
|
||||
style:
|
||||
ha-map $ ha-entity-marker $: |
|
||||
.marker {
|
||||
border: 3px solid var(--primary-color) !important;
|
||||
border-radius: 50% 50% 50% 0 !important;
|
||||
transform: rotate(-45deg) translate(50%, -50%);
|
||||
overflow: visible !important;
|
||||
}
|
||||
.entity-picture {
|
||||
transform: rotate(45deg);
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
- type: map
|
||||
entities:
|
||||
- person.paige
|
||||
hours_to_show: 24
|
||||
aspect_ratio: '16:9'
|
||||
theme_mode: auto
|
||||
card_mod: *person_location_map_style
|
||||
|
||||
- type: map
|
||||
entities:
|
||||
- person.carlo
|
||||
- person.stacey
|
||||
hours_to_show: 24
|
||||
aspect_ratio: '16:9'
|
||||
theme_mode: auto
|
||||
card_mod: *person_location_map_style
|
||||
|
||||
column_span: 1
|
||||
@ -0,0 +1,177 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview Section - search, sleep, and frequent lighting
|
||||
# Puts entity search first for fast mobile access, then daily controls.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: The strong SQL-backed summary links to detailed Health trends.
|
||||
######################################################################
|
||||
|
||||
cards:
|
||||
# Fallback card: screen condition keeps shared search atop desktop column two.
|
||||
- type: conditional
|
||||
conditions:
|
||||
- condition: screen
|
||||
media_query: "(min-width: 901px)"
|
||||
card: !include /config/dashboards/overview/partials/entity_search.yaml
|
||||
|
||||
- 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: /dashboard-infrastructure/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: 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: Sleep Score - 14-Day Average
|
||||
- type: grid
|
||||
columns: 2
|
||||
square: false
|
||||
cards:
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_sleep_summary
|
||||
entity: sensor.sleep_score_14_day_averages
|
||||
name: Carlo
|
||||
state_display: >
|
||||
[[[
|
||||
const score = Number(entity?.state);
|
||||
return Number.isFinite(score) ? score.toFixed(1) : 'n/a';
|
||||
]]]
|
||||
label: >
|
||||
[[[
|
||||
const nights = Number(entity?.attributes?.carlo_nights ?? 0);
|
||||
return `${nights} ${nights === 1 ? 'night' : 'nights'}`;
|
||||
]]]
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/health
|
||||
hold_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/health
|
||||
- type: custom:button-card
|
||||
template: bearstone_overview_sleep_summary
|
||||
entity: sensor.sleep_score_14_day_averages
|
||||
name: Stacey
|
||||
variables:
|
||||
score_attribute: stacey
|
||||
state_display: >
|
||||
[[[
|
||||
const score = Number(entity?.attributes?.stacey);
|
||||
return Number.isFinite(score) ? score.toFixed(1) : 'n/a';
|
||||
]]]
|
||||
label: >
|
||||
[[[
|
||||
const nights = Number(entity?.attributes?.stacey_nights ?? 0);
|
||||
return `${nights} ${nights === 1 ? 'night' : 'nights'}`;
|
||||
]]]
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/health
|
||||
hold_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/health
|
||||
grid_options:
|
||||
columns: full
|
||||
rows: 3
|
||||
|
||||
- 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: '#ovw-living-room'
|
||||
button_action:
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: '#ovw-living-room'
|
||||
grid_options:
|
||||
columns: 6
|
||||
rows: 1
|
||||
card_layout: large
|
||||
|
||||
- type: custom:bubble-card
|
||||
card_type: button
|
||||
button_type: switch
|
||||
entity: sensor.number_of_lights_on
|
||||
name: Lights On
|
||||
icon: mdi:lightbulb-on-outline
|
||||
show_state: true
|
||||
show_name: true
|
||||
show_attribute: false
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: '#ovw-lights'
|
||||
button_action:
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: '#ovw-lights'
|
||||
grid_options:
|
||||
columns: 6
|
||||
rows: 1
|
||||
card_layout: large
|
||||
|
||||
- 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
|
||||
|
||||
- !include /config/dashboards/overview/popups/living_room.yaml
|
||||
- !include /config/dashboards/overview/popups/lights.yaml
|
||||
|
||||
column_span: 1
|
||||
@ -0,0 +1,60 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview Section - camera and weather awareness
|
||||
# Keeps security views and outdoor context together in one column.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Camera cards retain existing navigation and live behavior.
|
||||
# Notes: Hourly and daily forecasts remain complementary at a glance.
|
||||
######################################################################
|
||||
|
||||
cards:
|
||||
- type: custom:frigate-events-card
|
||||
frigate_client_id: frigate
|
||||
event_count: 5
|
||||
video: true
|
||||
video_on_hover: true
|
||||
|
||||
- type: picture-entity
|
||||
entity: camera.birdseye
|
||||
show_state: true
|
||||
show_name: true
|
||||
camera_view: live
|
||||
tap_action:
|
||||
action: navigate
|
||||
navigation_path: /lovelace/cameras
|
||||
|
||||
- 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
|
||||
|
||||
column_span: 1
|
||||
@ -1,24 +0,0 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Overview View - Home Maintenance
|
||||
# YAML-exported Lovelace dashboard (split into view files).
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Exported from config/.storage/lovelace.lovelace view index 7.
|
||||
# Notes: Keep path as `water` to preserve existing links and automations.
|
||||
######################################################################
|
||||
|
||||
title: Home Maintenance
|
||||
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
|
||||
Loading…
Reference in new issue