# 🏠 Home Assistant Configuration This document covers all Home Assistant instances across the homelab, including automations, integrations, and configurations. ## Overview | Instance | Location | Hardware | HA Version | Purpose | |----------|----------|----------|------------|---------| | **HA Green** | Honolulu, HI | Home Assistant Green | 2026.1.3 | Hawaii smart home control | | **HA NUC** | Concord, CA | Intel NUC6i3SYB | TBD | Primary home automation hub | --- ## 🌺 Honolulu Instance (Home Assistant Green) ### Hardware Details - **Device**: Home Assistant Green - **CPU**: ARM Cortex-A55 (4-core) - **RAM**: 4GB LPDDR4 - **Storage**: 32GB eMMC (8.2GB used, 31%) - **Network**: 192.168.12.202/24 - **OS**: Home Assistant OS 6.12.63-haos ### Add-ons Installed | Add-on | Purpose | |--------|---------| | **Matter Server** | Matter/Thread smart home protocol support | | **Advanced SSH & Web Terminal** | Remote shell access | ### Custom Components (HACS) | Component | Purpose | |-----------|---------| | **HACS** | Home Assistant Community Store | | **Oura** | Oura Ring health/sleep tracking integration | | **Tapo Control** | TP-Link Tapo camera PTZ control | --- ### πŸ€– Automations #### 1. Hawaii Living Room - Motion Lights On **Purpose**: Automatically turn on living room lights when motion is detected in the evening. ```yaml id: '1767509760079' alias: Hawaii Living Room Camera Motion Turn On Lights triggers: - type: motion device_id: b598fe803597a6826c0d1be292ea6990 entity_id: 600ef0e63bf50b958663b6602769c43d domain: binary_sensor trigger: device conditions: - condition: time after: '16:00:00' before: '01:00:00' weekday: [sun, mon, tue, wed, thu, fri, sat] actions: - action: light.turn_on target: entity_id: - light.hawaii_cocina_white_fan_2_bulbs - light.hawaii_lightstrip - light.hawaii_white_fan_1_bulb_2 - light.hawaii_pineapple_light_l535e - light.hawaii_white_fan_1_bulb_2_2 mode: single ``` | Setting | Value | |---------|-------| | **Trigger** | Living room camera motion sensor | | **Time Window** | 4:00 PM - 1:00 AM | | **Days** | Every day | | **Lights Controlled** | 5 (fan bulbs, lightstrip, pineapple lamp) | --- #### 2. Hawaii Living Room - No Motion Lights Off **Purpose**: Turn off living room lights after 20 minutes of no motion. ```yaml id: '1767511914724' alias: Hawaii Living Room Camera No Motion Turn Off Lights triggers: - type: no_motion device_id: 6977aea8e1b5d86fa5fdb01618568353 entity_id: a00adebc3cff7657057b84e983f401e3 domain: binary_sensor trigger: device for: hours: 0 minutes: 20 seconds: 0 conditions: [] actions: - action: light.turn_off target: entity_id: - light.hawaii_cocina_white_fan_2_bulbs - light.hawaii_lightstrip - light.hawaii_pineapple_light_l535e - light.hawaii_white_fan_1_bulb_2_2 - light.hawaii_white_fan_1_bulb_2 mode: single ``` | Setting | Value | |---------|-------| | **Trigger** | No motion for 20 minutes | | **Time Window** | Always active | | **Lights Controlled** | 5 (same as above) | --- #### 3. Hawaii Bedroom - Motion Lights On **Purpose**: Turn on bedroom lights when motion is detected in the evening. ```yaml id: '1767514792077' alias: Hawaii Bedroom Camera Motion Turn On Lights triggers: - type: motion device_id: 6977aea8e1b5d86fa5fdb01618568353 entity_id: 9e71062255147ddd4a698a593a343307 domain: binary_sensor trigger: device conditions: - condition: time after: '18:00:00' before: '23:00:00' weekday: [sun, mon, tue, wed, thu, fri, sat] actions: - action: light.turn_on target: entity_id: - light.hawaii_bedroom_palm_lights - light.hawaii_pink_rose_dimmer_plug mode: single ``` | Setting | Value | |---------|-------| | **Trigger** | Bedroom camera motion sensor | | **Time Window** | 6:00 PM - 11:00 PM | | **Days** | Every day | | **Lights Controlled** | 2 (palm lights, rose dimmer) | --- ### πŸ“Š Automation Summary ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ HAWAII AUTOMATION FLOW β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ LIVING ROOM BEDROOM β”‚ β”‚ ════════════ ═══════ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Tapo Camera β”‚ β”‚ Tapo Camera β”‚ β”‚ β”‚ β”‚ Motion Sensorβ”‚ β”‚ Motion Sensorβ”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Motion β”‚ β”‚ Motion β”‚ β”‚ β”‚ β”‚ Detected? β”‚ β”‚ Detected? β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ YES β”‚ NO (20min) YES β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ 4PM - 1AM? β”‚ β”‚ 6PM - 11PM? β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ πŸ’‘ Turn ON β”‚ β”‚ πŸ’‘ Turn OFF β”‚ β”‚ πŸ’‘ Turn ON β”‚ β”‚ β”‚ β”‚ β€’ Fan bulbs β”‚ β”‚ All lights β”‚ β”‚ β€’ Palm lightsβ”‚ β”‚ β”‚ β”‚ β€’ Lightstrip β”‚ β”‚ β”‚ β”‚ β€’ Rose dimmerβ”‚ β”‚ β”‚ β”‚ β€’ Pineapple β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### πŸ”Œ Device Inventory (Hawaii) #### Lights | Entity ID | Device | Location | |-----------|--------|----------| | `light.hawaii_cocina_white_fan_2_bulbs` | Ceiling fan bulbs | Kitchen/Living | | `light.hawaii_lightstrip` | LED strip | Living room | | `light.hawaii_white_fan_1_bulb_2` | Ceiling fan bulb | Living room | | `light.hawaii_white_fan_1_bulb_2_2` | Ceiling fan bulb | Living room | | `light.hawaii_pineapple_light_l535e` | Pineapple lamp (Tapo L535E) | Living room | | `light.hawaii_bedroom_palm_lights` | Palm tree lights | Bedroom | | `light.hawaii_pink_rose_dimmer_plug` | Rose lamp (dimmer plug) | Bedroom | #### Cameras (Tapo) | Device | Location | Features | |--------|----------|----------| | Living Room Camera | Living room | Motion detection, PTZ | | Bedroom Camera | Bedroom | Motion detection | --- ## 🏠 Concord Instance (Intel NUC) - Verified 2026-04-19 ### Hardware Details - **Hostname**: vish-concord-nuc - **Device**: Intel NUC6i3SYB - **CPU**: Intel Core i3-6100U (2-core/4-thread, 2.3GHz) - **RAM**: 16GB DDR4 - **Storage**: 240GB Toshiba VX500 SSD (67% used) - **OS**: Ubuntu 24.04.3 LTS - **Network**: `eth0` 192.168.68.100/22 β€” deliberately on a separate LAN from 192.168.0.0/24 homelab (see mDNS / Thread BR notes in [gl-s200-integration.md](gl-s200-integration.md)) - **Tailscale**: 100.72.55.21 (internal_url set to this) ### Deployment - **Type**: Docker container, `network_mode: host` - **Image**: `ghcr.io/home-assistant/home-assistant:stable` β€” HA 2026.4.3 - **Config Path**: `/home/vish/docker/homeassistant/` (version-controlled at [`hosts/physical/concord-nuc/homeassistant/`](../../../hosts/physical/concord-nuc/homeassistant/)) - **Compose**: [`concord_nuc/homeassistant.yaml`](../../../hosts/physical/concord-nuc/homeassistant.yaml) β€” includes homeassistant + matter-server + piper + whisper + openwakeword ### 9 Custom Dashboards (YAML mode, in-repo) | Dashboard | File | Content | |---|---|---| | **Home** | [`home.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/home.yaml) | Time-aware greeting, chip strip (weather/Oura/Plex/AdGuard/speedtest), persons, Oura gauges, weather forecast, 5-room nav with live state templates, quick scenes, homelab strip | | **Living Room** | [`livingroom.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/livingroom.yaml) | Weather (daily+hourly), TV media, network gauges (speedtest), PG&E billing, AdGuard stats | | **Kitchen** | [`kitchen.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/kitchen.yaml) | 5 TL135 bulbs + scene buttons (Cooking / Dim / All) | | **Bathroom** | [`bathroom.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/bathroom.yaml) | 6 TL135 bulbs + Relax scene | | **Bedroom** | [`bedroom.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/bedroom.yaml) | 3 lights, Tapo 4K PTZ camera, 3 media players, Guava-TrueNAS power plug, full Oura Ring section (4 gauges + sleep breakdown + 14d trends + vitals) | | **Cameras** | [`cameras.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/cameras.yaml) | Live camera grid + motion-event logbook | | **Homelab** | [`homelab.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/homelab.yaml) | **Multi-tab dashboard** β€” 4 subviews: Overview / Media / Servers / Monitoring (see Tabbed Homelab Views below) | | **Homelab Web** | [`homelab_web.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/homelab_web.yaml) | Full-page iframe embedding `http://homelab.tail.vish.gg:3100/` | | **Crista** | [`crista.yaml`](../../../hosts/physical/concord-nuc/homeassistant/dashboards/crista.yaml) | Full-page iframe embedding `https://crista.love` (replaces the old iframe card on the default Overview dashboard) | ### Tabbed Homelab Views The Homelab dashboard is split into 4 subviews (tabs at top of page): | Tab | URL path | Content | |---|---|---| | **Overview** | `/homelab-view/homelab` | Calendar (Baikal + Radarr upcoming), Kuma summary chips, library totals (Movies/TV/Anime/Music/Ebooks), Quick Launch 12-button grid | | **Media** | `/homelab-view/media` | Plex now-playing + library, Sonarr/Radarr (queue/shows/movies/upcoming/wanted), Bazarr + Prowlarr, Books (ABS + LazyLib), SABnzbd (speed/queue/details + pause/resume buttons) | | **Servers** | `/homelab-view/servers` | Atlantis NAS (8-bay, wide), Calypso NAS + Setillo NAS (compact rails, Setillo includes Surveillance Home Mode switch), Guava TrueNAS Scale (pools/services/VM/disks, wide), Proxmox VE (gauges + PVE host + start/stop/restart actions) | | **Monitoring** | `/homelab-view/monitoring` | Kuma live chips (total/down/avg-ms/certs<30d), Core Infrastructure entity list (NAS/Proxmox/HA/Authentik/Headscale/CrowdSec/NPM/Portainer), Apps & Services (Jellyfin/Ollama/Gitea/Grafana/Homarr/Bitwarden/Paperless/Immich/Seafile), SSL Certificates expiry watch list | ### 4 Themes (all with Google-fonts auto-loaded via `www/fonts-loader.js`) | Theme | Aesthetic | Font | |---|---|---| | **glass_exo** | Cool glassmorphism, purple + pink on deep navy | Exo 2 | | **cyberpunk** | Neon pink + cyan + yellow on near-black | Orbitron / Rajdhani | | **steampunk** | Brass + copper on aged leather | Playfair Display / Cormorant Garamond | | **samurai** | Imperial red + gold on sumi-ink black | Noto Serif JP / Shippori Mincho | Each theme overrides `--mdc-select-*` + `--mdc-text-field-*` + `--mdc-theme-surface` so dialogs and dropdowns stay readable across all aesthetics. ### HACS Frontend Cards (installed + registered) - `mushroom` (v5.1.1) β€” touch-friendly tiles (template/chips/person/light) - `card-mod` (v4.2.1) β€” CSS-in-theme overrides - `bubble-card` (v3.1.6) β€” mobile bottom-nav - `advanced-camera-card`, `calendar-card-pro`, `rgb-light-card`, `lovelace-entity-progress-card`, `lovelace-navbar-card` (pre-existing) ### Integrations Summary | Domain | Title | Role | |---|---|---| | `matter` Γ— 2 | Matter BETA | Thread/Matter (awaiting GL-S200 Thread BR β€” [gl-s200-integration.md](gl-s200-integration.md)) | | `thread` | Thread | Thread credentials | | `oura` (HACS) | admin@thevish.io | Oura Ring β€” 64 sensors (sleep/readiness/activity/HRV/VO2/steps/etc.) | | `plex` | Atlantis | 9 entities β€” now-playing + 6 library counts (Movies 246 / TV 2711 / Anime 8131 / Music 116k) | | `ollama` | Atlantis Ollama | `conversation.jarvis` β†’ llama3.2:3b on Atlantis CPU, default voice pipeline | | `local_openai` | Local LLM Server | ⏸ disabled β€” shinku-ryuu LM Studio endpoint (enable when PC on) | | `tplink` Γ— 20+ | TL135 bulbs, P110 energy plug, C260 4K camera, hubs | Rooms | | `tplink_deco` | http://192.168.68.1 | Deco mesh WiFi + device_trackers | | `tapo_control` | 192.168.68.67 | Bedroom 4K PTZ control, motion/person detection | | `icloud` | your-email@example.com | iPhone + iPad device trackers | | `spotify` | Vish Khemraj | Music media player + song-attr sensors | | `adguard` | 192.168.68.100 | Local DNS blocker on NUC β€” stats | | `opower` | PG&E | Electric + gas billing + cost | | `wyoming` Γ— 3 | piper / faster-whisper / openwakeword | Voice-assist pipeline | | `caldav` | vish | Baikal calendar β†’ calendar-card-pro | | `cast` | Google Cast | Chromecast / bedroom display | | `speedtestdotnet` | SpeedTest | Network gauges | | `syncthing` | 192.168.68.100 | File sync stats | | `met` | Home | Weather forecast | | `sonarr` | 100.83.230.112 | Native β€” queue/shows/upcoming/wanted/disk_space + commands | | `radarr` | Radarr | Native β€” queue/movies/disk_space + health + `calendar.radarr` | | `sabnzbd` | 100.83.230.112 | Native β€” speed/queue/left/free_disk + daily/weekly/monthly totals + pause/resume/speedlimit controls | | `synology_dsm` Γ— 3 | atlantis, calypso, setillo | 158+48+40 entities β€” CPU/mem/temp/volumes/drives/NICs, Setillo also has `camera.estudio` + Surveillance Home Mode switch | | `proxmoxve` | 100.87.12.28 | 18 entities β€” host CPU/mem/disk/uptime + backup status + start/stop/restart/suspend buttons (token auth: `vish@pam!homarr`) | | `uptime_kuma` | 100.77.151.40:3001 | **1324 entities** across 112 monitors β€” status, response_time, 35 certificate_expiry sensors | | `truenas` (HACS tomaae) | Guava (100.75.252.64) | 64 entities β€” system/pools/services/disks/apps/VMs/datasets. Local patch in `coordinator.py:846` guards None VM memory (TrueNAS 25.04 quirk) | ### Voice Assist Pipeline **Jarvis (default)** β€” `conversation.jarvis` ← Ollama @ `http://100.83.230.112:11434` (Atlantis, ~11 tok/s on CPU). Wake word: **"Ok Nabu"** via openWakeword. `prefer_local_intents: true` β€” HA's built-in matcher handles light/scene commands; Ollama kicks in for ambiguous queries. ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ openWakeword β”‚β†’ β”‚ whisper β”‚β†’ β”‚ HA built-in intents β”‚β†’ β”‚ Ollama β”‚β†’ β”‚ piper β”‚ β”‚ (NUC) β”‚ β”‚ (NUC, STT)β”‚ β”‚ (if unmatched β†’) β”‚ β”‚ (atlantis) β”‚ β”‚ (NUC,TTS)β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### REST sensors β€” live homelab telemetry Defined in [`sensors.yaml`](../../../hosts/physical/concord-nuc/homeassistant/sensors.yaml), API keys in [`secrets.yaml`](../../../hosts/physical/concord-nuc/homeassistant/secrets.yaml). Covers Prowlarr, Bazarr, LazyLibrarian, Audiobookshelf. Sonarr/Radarr/SABnzbd/Plex migrated to native HA integrations. All REST sensors have `homelab_rest_*` unique_ids. ### Energy Dashboard (built-in, configured) - **Grid**: `sensor.current_bill_electric_usage_to_date` + `sensor.current_bill_electric_cost_to_date` (opower/PG&E) - **Gas**: `sensor.current_bill_gas_usage_to_date` + `sensor.current_bill_gas_cost_to_date` - **Device**: Guava-TrueNAS plug β€” `sensor.guava_energy_today_s_consumption` ### Automations πŸ“­ **None configured** β€” `automations.yaml` is still empty. Planned: lights-off when no one home, bedtime routine triggered by `binary_sensor.oura_ring_rest_mode`, Movie Mode on Plex play detection. ### Co-located Services (Same NUC Host) | Service | Port | |---|---| | Matter Server | host network | | Plex | 32400 | | AdGuard Home | 53, 3000 | | WireGuard (wg-easy) | 51820 | | Syncthing | 8384 | | Invidious / Materialious | 3000 / 3001 | | YourSpotify | 4000 | | Piper / Whisper / OpenWakeword | 10200 / 10300 / 10400 | | Watchtower, Node Exporter, Dozzle agent, Diun | β€” | --- ## πŸ”§ Open work ### Concord - **Plex integration**: added via UI 2026-04-19 β€” 6 library sensors enabled (were `disabled_by=integration` by default) - **Frigate NVR**: deferred β€” see [FRIGATE_PLAN.md](../../../hosts/physical/concord-nuc/homeassistant/FRIGATE_PLAN.md) for full deployment plan - **Automations**: empty; user building these manually - **opower reauth**: PG&E integration flagged reauth β€” needed to refresh bill/cost data ### Honolulu 1. **Add Bedroom "No Motion" Automation** (auto-off after 15-20 min) 2. **Add Tailscale Add-on** for remote access without Cloudflare tunnel 3. **Consider**: phone-presence detection, sunrise/sunset-based timing, time-of-day brightness --- ## πŸ“ Related Documentation - [GL-S200 Thread Border Router Integration Plan](gl-s200-integration.md) - Planned Thread BR for Concord instance - [Hardware Inventory](../infrastructure/hardware-inventory.md) - HA Green specs - [Network Topology](../diagrams/network-topology.md) - Network layout - [Tailscale Mesh](../diagrams/tailscale-mesh.md) - VPN connectivity