Enhance dashboard configurations by updating card styles to use `var(--divider-color)` for borders, improving consistency across various YAML files. Remove deprecated Pi-hole card section and streamline infrastructure views by including top chip sections for better organization. Update README to clarify Lovelace resource loading and migration notes.
parent
ebe7c6f091
commit
a9f1314026
@ -0,0 +1,58 @@
|
||||
blueprint:
|
||||
name: Motion-activated Light
|
||||
description: Turn on a light when motion is detected.
|
||||
domain: automation
|
||||
source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml
|
||||
author: Home Assistant
|
||||
input:
|
||||
motion_entity:
|
||||
name: Motion Sensor
|
||||
selector:
|
||||
entity:
|
||||
filter:
|
||||
- device_class: occupancy
|
||||
domain: binary_sensor
|
||||
- device_class: motion
|
||||
domain: binary_sensor
|
||||
light_target:
|
||||
name: Light
|
||||
selector:
|
||||
target:
|
||||
entity:
|
||||
domain: light
|
||||
no_motion_wait:
|
||||
name: Wait time
|
||||
description: Time to leave the light on after last motion is detected.
|
||||
default: 120
|
||||
selector:
|
||||
number:
|
||||
min: 0
|
||||
max: 3600
|
||||
unit_of_measurement: seconds
|
||||
|
||||
# If motion is detected within the delay,
|
||||
# we restart the script.
|
||||
mode: restart
|
||||
max_exceeded: silent
|
||||
|
||||
triggers:
|
||||
trigger: state
|
||||
entity_id: !input motion_entity
|
||||
from: "off"
|
||||
to: "on"
|
||||
|
||||
actions:
|
||||
- alias: "Turn on the light"
|
||||
action: light.turn_on
|
||||
target: !input light_target
|
||||
- alias: "Wait until there is no motion from device"
|
||||
wait_for_trigger:
|
||||
trigger: state
|
||||
entity_id: !input motion_entity
|
||||
from: "on"
|
||||
to: "off"
|
||||
- alias: "Wait the number of seconds that has been set"
|
||||
delay: !input no_motion_wait
|
||||
- alias: "Turn off the light"
|
||||
action: light.turn_off
|
||||
target: !input light_target
|
||||
@ -0,0 +1,50 @@
|
||||
blueprint:
|
||||
name: Zone Notification
|
||||
description: Send a notification to a device when a person leaves a specific zone.
|
||||
domain: automation
|
||||
source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml
|
||||
author: Home Assistant
|
||||
input:
|
||||
person_entity:
|
||||
name: Person
|
||||
selector:
|
||||
entity:
|
||||
filter:
|
||||
domain: person
|
||||
zone_entity:
|
||||
name: Zone
|
||||
selector:
|
||||
entity:
|
||||
filter:
|
||||
domain: zone
|
||||
notify_device:
|
||||
name: Device to notify
|
||||
description: Device needs to run the official Home Assistant app to receive notifications.
|
||||
selector:
|
||||
device:
|
||||
filter:
|
||||
integration: mobile_app
|
||||
|
||||
triggers:
|
||||
trigger: state
|
||||
entity_id: !input person_entity
|
||||
|
||||
variables:
|
||||
zone_entity: !input zone_entity
|
||||
# This is the state of the person when it's in this zone.
|
||||
zone_state: "{{ states[zone_entity].name }}"
|
||||
person_entity: !input person_entity
|
||||
person_name: "{{ states[person_entity].name }}"
|
||||
|
||||
conditions:
|
||||
condition: template
|
||||
# The first case handles leaving the Home zone which has a special state when zoning called 'home'.
|
||||
# The second case handles leaving all other zones.
|
||||
value_template: "{{ zone_entity == 'zone.home' and trigger.from_state.state == 'home' and trigger.to_state.state != 'home' or trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}"
|
||||
|
||||
actions:
|
||||
- alias: "Notify that a person has left the zone"
|
||||
domain: mobile_app
|
||||
type: notify
|
||||
device_id: !input notify_device
|
||||
message: "{{ person_name }} has left {{ zone_state }}"
|
||||
@ -0,0 +1,86 @@
|
||||
blueprint:
|
||||
name: Confirmable Notification
|
||||
description: >-
|
||||
A script that sends an actionable notification with a confirmation before
|
||||
running the specified action.
|
||||
domain: script
|
||||
source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml
|
||||
author: Home Assistant
|
||||
input:
|
||||
notify_device:
|
||||
name: Device to notify
|
||||
description: Device needs to run the official Home Assistant app to receive notifications.
|
||||
selector:
|
||||
device:
|
||||
filter:
|
||||
integration: mobile_app
|
||||
title:
|
||||
name: "Title"
|
||||
description: "The title of the button shown in the notification."
|
||||
default: ""
|
||||
selector:
|
||||
text:
|
||||
message:
|
||||
name: "Message"
|
||||
description: "The message body"
|
||||
selector:
|
||||
text:
|
||||
confirm_text:
|
||||
name: "Confirmation Text"
|
||||
description: "Text to show on the confirmation button"
|
||||
default: "Confirm"
|
||||
selector:
|
||||
text:
|
||||
confirm_action:
|
||||
name: "Confirmation Action"
|
||||
description: "Action to run when notification is confirmed"
|
||||
default: []
|
||||
selector:
|
||||
action:
|
||||
dismiss_text:
|
||||
name: "Dismiss Text"
|
||||
description: "Text to show on the dismiss button"
|
||||
default: "Dismiss"
|
||||
selector:
|
||||
text:
|
||||
dismiss_action:
|
||||
name: "Dismiss Action"
|
||||
description: "Action to run when notification is dismissed"
|
||||
default: []
|
||||
selector:
|
||||
action:
|
||||
|
||||
mode: restart
|
||||
|
||||
sequence:
|
||||
- alias: "Set up variables"
|
||||
variables:
|
||||
action_confirm: "{{ 'CONFIRM_' ~ context.id }}"
|
||||
action_dismiss: "{{ 'DISMISS_' ~ context.id }}"
|
||||
- alias: "Send notification"
|
||||
domain: mobile_app
|
||||
type: notify
|
||||
device_id: !input notify_device
|
||||
title: !input title
|
||||
message: !input message
|
||||
data:
|
||||
actions:
|
||||
- action: "{{ action_confirm }}"
|
||||
title: !input confirm_text
|
||||
- action: "{{ action_dismiss }}"
|
||||
title: !input dismiss_text
|
||||
- alias: "Awaiting response"
|
||||
wait_for_trigger:
|
||||
- trigger: event
|
||||
event_type: mobile_app_notification_action
|
||||
event_data:
|
||||
action: "{{ action_confirm }}"
|
||||
- trigger: event
|
||||
event_type: mobile_app_notification_action
|
||||
event_data:
|
||||
action: "{{ action_dismiss }}"
|
||||
- choose:
|
||||
- conditions: "{{ wait.trigger.event.data.action == action_confirm }}"
|
||||
sequence: !input confirm_action
|
||||
- conditions: "{{ wait.trigger.event.data.action == action_dismiss }}"
|
||||
sequence: !input dismiss_action
|
||||
@ -0,0 +1,31 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Infrastructure Partial - Activity sections
|
||||
# Activity feed wrapped in the standard Infrastructure layout.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Uses Logbook card targeted at `sensor.activity_feed`.
|
||||
######################################################################
|
||||
|
||||
- !include /config/dashboards/infrastructure/partials/infra_top_chips_section.yaml
|
||||
|
||||
- type: grid
|
||||
column_span: 4
|
||||
columns: 1
|
||||
square: false
|
||||
cards:
|
||||
- type: custom:vertical-stack-in-card
|
||||
card_mod:
|
||||
style: !include /config/dashboards/infrastructure/card_mod/infra_panel.yaml
|
||||
cards:
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_panel_header
|
||||
name: Activity Feed
|
||||
- type: logbook
|
||||
target:
|
||||
entity_id:
|
||||
- sensor.activity_feed
|
||||
grid_options:
|
||||
columns: full
|
||||
@ -0,0 +1,41 @@
|
||||
######################################################################
|
||||
# @CCOSTAN - Follow Me on X
|
||||
# For more info visit https://www.vcloudinfo.com/click-here
|
||||
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
|
||||
# -------------------------------------------------------------------
|
||||
# Infrastructure Partial - Top status chips (shared)
|
||||
# Common "chips row" used across Infrastructure views.
|
||||
# -------------------------------------------------------------------
|
||||
# Notes: Keep this lightweight; it should render fast on every view.
|
||||
######################################################################
|
||||
|
||||
type: grid
|
||||
column_span: 4
|
||||
columns: 4
|
||||
square: false
|
||||
cards:
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_chip
|
||||
entity: binary_sensor.node_proxmox1_updates_packages
|
||||
name: Proxmox01
|
||||
icon: mdi:server
|
||||
state_display: >
|
||||
[[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]]
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_chip
|
||||
entity: binary_sensor.node_proxmox02_updates_packages
|
||||
name: Proxmox02
|
||||
icon: mdi:server
|
||||
state_display: >
|
||||
[[[ return entity.state === 'on' ? 'Updates pending' : 'Up to date'; ]]]
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_chip
|
||||
entity: sensor.garage_ups_status
|
||||
name: Garage UPS
|
||||
icon: mdi:transmission-tower
|
||||
- type: custom:button-card
|
||||
template: bearstone_infra_chip
|
||||
entity: sensor.vcloudinfo_com
|
||||
name: vCloudinfo
|
||||
icon: mdi:microsoft-internet-explorer
|
||||
|
||||
@ -0,0 +1,69 @@
|
||||
param(
|
||||
[string]$BaseUrl = $env:HASS_PLAYWRIGHT_BASE_URL
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($BaseUrl)) {
|
||||
# Canonical LAN URL for agent automation (trusted_networks bypass).
|
||||
$BaseUrl = 'http://192.168.10.10:8123'
|
||||
}
|
||||
|
||||
$BaseUrl = $BaseUrl.TrimEnd('/')
|
||||
|
||||
function Get-EffectiveUrlAndStatus {
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Url
|
||||
)
|
||||
|
||||
# Use curl.exe (not Invoke-WebRequest alias) so we can reliably see redirects.
|
||||
$curl = (Get-Command curl.exe -ErrorAction Stop).Source
|
||||
|
||||
# Follow redirects; return final URL + status code.
|
||||
$out = & $curl -sS -L -o NUL -w "%{url_effective} %{http_code}" $Url 2>$null
|
||||
if (-not $out) { throw "curl produced no output for $Url" }
|
||||
$parts = $out -split ' '
|
||||
if ($parts.Count -lt 2) { throw "Unexpected curl output: $out" }
|
||||
|
||||
[pscustomobject]@{
|
||||
EffectiveUrl = $parts[0]
|
||||
StatusCode = [int]$parts[1]
|
||||
}
|
||||
}
|
||||
|
||||
$targets = @(
|
||||
'/',
|
||||
'/profile',
|
||||
'/dashboard-infrastructure',
|
||||
'/dashboard-infrastructure/docker',
|
||||
'/dashboard-infrastructure/mariadb',
|
||||
'/dashboard-kiosk'
|
||||
)
|
||||
|
||||
$failed = $false
|
||||
foreach ($path in $targets) {
|
||||
$url = "$BaseUrl$path"
|
||||
$r = Get-EffectiveUrlAndStatus -Url $url
|
||||
|
||||
$isLogin = $r.EffectiveUrl -match '/(login|auth/authorize)\b'
|
||||
$statusOk = $r.StatusCode -ge 200 -and $r.StatusCode -lt 400
|
||||
|
||||
if ($isLogin -or -not $statusOk) {
|
||||
$failed = $true
|
||||
Write-Host ("FAIL {0} -> {1} ({2})" -f $url, $r.EffectiveUrl, $r.StatusCode)
|
||||
} else {
|
||||
Write-Host ("OK {0} -> {1} ({2})" -f $url, $r.EffectiveUrl, $r.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
if ($failed) {
|
||||
Write-Host ''
|
||||
Write-Host 'Likely causes:'
|
||||
Write-Host '- Base URL is external (Cloudflared/Nabu Casa) instead of LAN.'
|
||||
Write-Host '- Home Assistant does not see the request IP as trusted; check `homeassistant.auth_providers.trusted_networks`.'
|
||||
exit 1
|
||||
}
|
||||
|
||||
exit 0
|
||||
Loading…
Reference in new issue