From 29b23ab8f6f4266dfb9d9d1e589df96f3efce3df Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Sat, 11 Apr 2026 12:34:24 -0400 Subject: [PATCH] Add PowerShell script for Home Assistant config checks in Docker and Supervisor modes --- .../brands/integrations/backup/icon.png | Bin 7363 -> 3737 bytes config/packages/vacuum.yaml | 11 +- config/www/onenote-launch.html | 120 +++++++++++++----- tools/ha_check_config.ps1 | 80 ++++++++++++ 4 files changed, 169 insertions(+), 42 deletions(-) create mode 100644 tools/ha_check_config.ps1 diff --git a/config/.cache/brands/integrations/backup/icon.png b/config/.cache/brands/integrations/backup/icon.png index a60580fb806823f9801835403bcc8c119ed68c79..199cec4291bcf147cf79a6243add538fc7dd8178 100644 GIT binary patch literal 3737 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 literal 7363 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 UN$E77L*QcRY8q-(so6#R2ZOuK-T(jq diff --git a/config/packages/vacuum.yaml b/config/packages/vacuum.yaml index 853a0835..8ca0bc55 100755 --- a/config/packages/vacuum.yaml +++ b/config/packages/vacuum.yaml @@ -12,7 +12,7 @@ # - Treat 2+ minutes in a room as "being cleaned" and dequeue immediately (queue = remaining rooms). # - Phase changes happen only after verified completion at dock (`task_status: completed`). # - Guarded fallback: if docked with empty queue for 10 minutes but no `completed`, advance with `fallback_advance` log. -# - Use `dreame_vacuum.vacuum_clean_segment` with the integration's segment ids. +# - This installed Dreame build still needs native `dreame_vacuum.vacuum_clean_segment`; do not rely on HA `vacuum.clean_area`. # - Jinja2 loop scoping: use a `namespace` when building lists (otherwise the queue can appear empty and get cleared). # - If docked+completed still has queue entries, treat queue as stale and clear it before phase advance. # - Mop phases use `sweeping_and_mopping` instead of mop-only. @@ -133,8 +133,6 @@ script: {{ bath_ids }} {% endif %} segments_to_clean: "{{ queue_ints if queue_ints | length > 0 else phase_segments }}" - segment_ids: "{{ segments_to_clean | list }}" - # 0. Reseed the current phase when queue is empty. - choose: - conditions: @@ -178,11 +176,11 @@ script: - service: script.send_to_logbook data: topic: "VACUUM" - message: "Vacuum is already cleaning; queue/phase updated but not issuing a new segment clean action." + message: "Vacuum is already cleaning; queue/phase updated but not issuing a new segment-clean action." - stop: "Already cleaning." default: [] - # 4. Start cleaning + # 4. Start cleaning with the native Dreame segment service. - service: select.select_option target: entity_id: select.l10s_vacuum_cleaning_mode @@ -197,8 +195,7 @@ script: target: entity_id: vacuum.l10s_vacuum data: - # Clean the queued room segments directly. - segments: "{{ segment_ids }}" + segments: "{{ segments_to_clean }}" ## 3. Automations diff --git a/config/www/onenote-launch.html b/config/www/onenote-launch.html index b422dcc8..804e8b47 100644 --- a/config/www/onenote-launch.html +++ b/config/www/onenote-launch.html @@ -8,82 +8,116 @@ :root { color-scheme: light; } body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; - background: linear-gradient(180deg, #f5f7fb 0%, #e8eef8 100%); - color: #122033; + font-family: "Segoe UI", -apple-system, BlinkMacSystemFont, sans-serif; + background: + radial-gradient(circle at top left, rgba(126, 34, 206, 0.16), transparent 28rem), + radial-gradient(circle at bottom right, rgba(22, 101, 52, 0.14), transparent 26rem), + linear-gradient(180deg, #eef2ff 0%, #f6f8fc 48%, #eef6f2 100%); + color: #18243a; } main { - max-width: 32rem; + max-width: 36rem; margin: 0 auto; min-height: 100vh; - padding: 2rem 1.25rem; + padding: 2rem 1.25rem 2.5rem; display: flex; flex-direction: column; justify-content: center; - gap: 1rem; } .card { - background: rgba(255, 255, 255, 0.94); - border: 1px solid rgba(18, 32, 51, 0.08); - border-radius: 18px; - box-shadow: 0 18px 40px rgba(18, 32, 51, 0.12); - padding: 1.25rem; + background: rgba(255, 255, 255, 0.92); + border: 1px solid rgba(126, 34, 206, 0.14); + border-radius: 24px; + box-shadow: 0 22px 55px rgba(24, 36, 58, 0.14); + padding: 1.5rem; + backdrop-filter: blur(10px); + } + .eyebrow { + display: inline-flex; + align-items: center; + padding: 0.35rem 0.7rem; + border-radius: 999px; + background: rgba(126, 34, 206, 0.1); + color: #6b21a8; + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; + margin-bottom: 0.9rem; } h1 { margin: 0 0 0.5rem; - font-size: 1.35rem; - line-height: 1.2; + font-size: clamp(1.6rem, 5vw, 2rem); + line-height: 1.1; } p { margin: 0; - line-height: 1.5; + line-height: 1.55; } .title { - margin-top: 0.75rem; - font-size: 0.95rem; - color: #41556f; + margin-top: 1rem; + padding: 0.95rem 1rem; + border-radius: 16px; + background: linear-gradient(180deg, rgba(126, 34, 206, 0.06), rgba(255, 255, 255, 0.92)); + border: 1px solid rgba(126, 34, 206, 0.12); + font-size: 0.98rem; + color: #4a5670; word-break: break-word; } .actions { display: flex; flex-direction: column; - gap: 0.75rem; - margin-top: 1rem; + gap: 0.85rem; + margin-top: 1.15rem; } .button { display: block; text-decoration: none; text-align: center; - padding: 0.9rem 1rem; - border-radius: 12px; - font-weight: 600; + padding: 1rem 1.1rem; + border-radius: 16px; + font-weight: 700; + letter-spacing: 0.01em; + transition: transform 120ms ease, box-shadow 120ms ease, opacity 120ms ease; + box-shadow: 0 10px 24px rgba(24, 36, 58, 0.1); + } + .button:hover { + transform: translateY(-1px); } .button.primary { - background: #166534; + background: linear-gradient(135deg, #7c3aed 0%, #5b21b6 100%); color: #fff; } .button.secondary { background: #fff; - color: #122033; - border: 1px solid rgba(18, 32, 51, 0.14); + color: #18243a; + border: 1px solid rgba(24, 36, 58, 0.12); + } + .button.muted { + background: rgba(255, 255, 255, 0.7); + color: #52627d; + border: 1px dashed rgba(24, 36, 58, 0.18); + box-shadow: none; } .hint { - font-size: 0.88rem; - color: #5c708a; + margin-top: 1rem; + font-size: 0.9rem; + color: #5f6f87; }
+
OneNote launch

Opening OneNote

-

Joanna is handing this note to the OneNote app now.

+

Joanna found the note and prepared the cleanest handoff path.

-

If the app does not open automatically in a second or two, tap the OneNote button.

+

If the desktop app is available, it will open automatically. Otherwise use the button above.