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