SmartestHome/docs/project-plan.md

12 KiB
Raw Permalink Blame History

AI-Managed Smart Home — Full Build Plan (v2)

Local-first, open-source stack: Home Assistant + RuView presence + Bermuda BLE identity + local LLM (Ollama) + Zigbee sensors/lighting + Frigate (peephole face recognition) + Grocy kitchen kiosk + Nextcloud calendar sync + Node-RED glue logic.


1. Hardware

1.1 Already in your possession

Item Use in this build
Framework 12 (primary) Dev machine, dotfiles/Claude Code work
ThinkPad T440p (secondary) Spare compute, webcam presence daemon testing
Nextcloud instance Calendar backend (CalDAV sync target)
"Scraps" x86 machine Candidate for LLM host (CPU-only tier) or Proxmox host
Haozee Zigbee USB dongle (CC2652P + CH340C) Zigbee coordinator — USB passthrough into container, adapter type zstack

1.2 Core AI / HA hosts

Item Est. Price (EUR) Notes
Mini PC / SFF for Home Assistant + attached services (Raspberry Pi 5, 8GB) €80 Runs HA Core (Container), Mosquitto, Zigbee2MQTT, Frigate, Grocy, Node-RED, monitoring
SSD for boot (USB3, 128GB+) €20 Avoid SD card for reliability
Official Pi 5 PSU + case €25
Used RTX 3060 12GB €200250 LLM inference host (Qwen2.5-14B Q4)
Cheap SFF/tower host for GPU (spare PCIe x16 slot, 170W+ on 12V rail) €4060 Only needs to feed the GPU
(Fallback: skip GPU) Use existing "scraps" x86 box, CPU-only Ollama €0 Slower (510 tok/s), fine to validate before buying GPU

Subtotal (with GPU tier): ~€365435 | Subtotal (CPU-only fallback): ~€125

1.3 Zigbee backbone

Already covered — using your existing Haozee CC2652P USB dongle. No coordinator purchase needed. Contingency: if Zigbee2MQTT can't establish a network, the dongle may need CC2652P coordinator firmware reflashed (generic-branded gateways sometimes ship with non-coordinator firmware).

1.4 Zigbee sensors (price per unit — multiply by room count)

Item Est. Price/unit Suggested qty Notes
innr RB 285 C (Zigbee RGBWW bulb) €1520 1 per AI-managed room Tunable 2200K6500K, acts as Zigbee router
Sonoff SNZB-02P (temp/humidity) €1012 1 per room Avoid older Aqara — mesh drop issues
Sonoff SNZB-06P (presence/illuminance) or Aqara Light Sensor €1215 1 per room needing lux data Feeds LLM brightness decisions
Sonoff SNZB-04P (door/window contact) €1315 1 per door/window of interest Gates automations
IKEA Vindstyrka (air quality, optional) ~€30 12 Requires Zigbee2MQTT

1.5 BLE identity layer (Bermuda)

Item Est. Price/unit Suggested qty Notes
ESP32 board (D1 Mini32 or similar — no CSI needed, just BT+WiFi) €510 1 per room for identity resolution Runs ESPHome bluetooth_proxy, separate hardware from RuView nodes
Fixed-MAC BLE tag per household member (optional but recommended) €58 1 per person More reliable anchor than phone MAC (which randomizes on iOS/Android); Bermuda + HA's Private BLE Device can also resolve phones via IRK if you skip this

1.6 RuView presence mesh

Item Est. Price/unit Suggested qty Notes
ESP32-S3 dev board €812 1 per room/zone needing CSI presence Runs RuView firmware — separate boards from the Bermuda BLE proxies above (one chip = one firmware)

1.7 Door-spy / peephole camera

Item Est. Price Notes
Peephole IP camera (ONVIF/RTSP, color, "-IR" variant only if hallway is dark) €5065 Isolate on its own VLAN, block WAN egress
(You're handling the physical mounting yourself) €0

1.8 Frigate acceleration (optional)

Item Est. Price Notes
Hailo-8L (Raspberry Pi 5 AI kit) €70 Only if CPU/iGPU isn't keeping up with more cameras later
(Default: none needed for 1 camera — use CPU or Intel iGPU/OpenVINO) €0

1.9 Kitchen inventory kiosk (camera + touchscreen)

Item Est. Price Notes
Raspberry Pi 3B+ or 4 (24GB) €3550 Chromium kiosk + camera decode
7" official/compatible touchscreen €3040
USB webcam w/ macro focus €1015 Barcode scanning via Grocy's browser PWA
Case/mount for kitchen wall or cupboard €1015

Subtotal: ~€85120

1.10 Deferred / out of scope for now

  • Projector + camera tabletop AI surface — genuinely interesting but high-effort (projector-camera calibration, fingertip touch detection is an active CV research problem, poor legibility with ambient light). If pursued, treat as an isolated experimental side project, not wired into critical automations. Not included in this plan's budget or phases.

2. Software (all open source / self-hosted)

Layer Software Purpose
Home automation core Home Assistant (Container install) Central hub, automations, dashboards
Zigbee Zigbee2MQTT + Mosquitto Broadest device compatibility, USB passthrough to your CC2652P dongle
BLE identity Bermuda (HACS) + ESPHome (bluetooth_proxy) + HA's Private BLE Device Room-level BLE presence, resolves randomized MACs via IRK, feeds person.* entities
Automation glue Node-RED Visual flows for cross-system logic — home for the face↔MAC identity-correlation logic, easy iteration/debugging
LLM runtime Ollama Serves Qwen2.5-14B-Instruct (GPU tier) or Qwen2.5-7B/3B (CPU tier)
Conversation agent HA Ollama conversation integration Ties LLM into Assist + AI Task
Voice STT/TTS Wyoming faster-whisper + Piper Local speech pipeline
Presence (CSI) RuView (ESP32-S3 firmware + server) Anonymous room-level presence, feeds gating automations
Presence (webcam) Your custom daemon (dotfiles repo) Desktop-specific, not tied to HA sensors directly
Camera NVR / face recognition Frigate (0.16+) Native face recognition, object detection, peephole cam ingest
Identity store Small dict/table (SQLite or JSON) — name, face label, associated MACs, confidence Built up conversationally via LLM tool calls (propose_person_link, confirm_person, rename_person); merges require confirmation, never silent
Container runtime Docker + Docker Compose Hosts all of the above
Inventory / shopping list Grocy Self-hosted stock + shopping list, native browser barcode scanning
Meal planning (optional) Mealie Recipe manager + shopping list + meal-plan calendar
Calendar backend Nextcloud Calendar (already running) Source of truth for household schedule
Calendar bridge HA CalDAV integration Read/write bridge, calendar.create_event supported; keep recurring events created in Nextcloud directly
Monitoring Netdata Consistent with your existing Ansible-fleet monitoring evaluation
Dashboard Homepage or Homarr Single landing page for HA / Grocy / Frigate / Zigbee2MQTT / Node-RED UIs
Container management Portainer (optional) GUI over the Docker host
Notifications ntfy Self-hosted push, replaces relying on a phone OS's proprietary push channel
Long-term stats (optional) InfluxDB + Grafana Only if you want history beyond HA's default recorder retention
Backup restic Scheduled encrypted backups of all stateful volumes
Kiosk browser Chromium (kiosk mode) Displays Grocy PWA on the kitchen touchscreen

3. Implementation Plan

Phase 0 — Infrastructure prep

  1. Decide: Proxmox host (if virtualizing) vs. bare-metal. Given your homelab habits, Proxmox with HAOS/container-host as VMs/LXCs is reasonable.
  2. Set up a dedicated camera VLAN (peephole cam + future cameras), no WAN egress, firewalled from the main LAN.
  3. Provision the container host (Debian 12 or Raspberry Pi OS Lite).

Phase 1 — Core containers + Zigbee

  1. Docker + Compose stack: Home Assistant, Mosquitto, Zigbee2MQTT (USB passthrough to the Haozee dongle), Node-RED.
  2. Pair Zigbee sensors room by room: bulb → temp/humidity → illuminance → door/window contact.
  3. Confirm entities populate correctly in HA.

Phase 2 — Presence: RuView + Bermuda, in parallel

  1. Deploy RuView ESP32-S3 nodes per room (dedicated CSI firmware).
  2. Separately, flash plain ESP32 boards with ESPHome (bluetooth_proxy), install Bermuda via HACS, configure Private BLE Device for phone IRK resolution, and/or distribute fixed-MAC BLE tags per person.
  3. Build plain HA automations: presence (RuView) on → light on at neutral default; off (with delay) → light off. Validate this works with the LLM host powered off — this is your safety-net baseline.

Phase 3 — LLM host + conversation agent

  1. Stand up the GPU host (or CPU fallback) with Ollama, pull Qwen2.5-14B-Instruct (or 7B/3B for CPU).
  2. Add the Ollama integration in HA, point it at the LLM host over LAN.
  3. Set up Wyoming faster-whisper + Piper, configure an Assist pipeline.
  4. Test open-ended conversation and basic tool-calling before wiring into presence logic.

Phase 4 — AI-managed brightness/color

  1. Script triggered after the presence-automation light-on event, calling ai_task.generate_data with room/time/occupancy context, requesting structured JSON (brightness, rgb_color).
  2. Apply via light.turn_on; fallback to neutral default on timeout/error.
  3. Feed illuminance sensor data into the LLM's exposed-entity list.

Phase 5 — Peephole camera + Frigate

  1. Mount your color camera (your own work), isolate on the camera VLAN.
  2. Deploy Frigate, add the RTSP stream, enable native face recognition.
  3. Enroll known faces; automation for known vs. unknown at the door.
  4. Set conservative confidence thresholds given the narrow FOV/low light.

Phase 6 — Identity correlation (face ↔ MAC ↔ name)

  1. Build the correlation logic as a Node-RED flow first: listen to Frigate face-recognition MQTT events + Bermuda/BLE MQTT topics, tally co-occurrence, apply a confidence threshold.
  2. Expose LLM tool calls (propose_person_link, confirm_person, rename_person) so the LLM can name people conversationally and propose merges — never auto-commit a merge silently, require confirmation.
  3. Once the logic stabilizes, consider porting to a small Python service if it outgrows Node-RED's comfort zone (git/test-ability).

Phase 7 — Kitchen inventory kiosk

  1. Deploy Grocy via Compose.
  2. Pi + touchscreen running Chromium kiosk mode pointed at Grocy's PWA.
  3. Attach USB webcam, test in-browser barcode scanning (Open Food Facts lookup).
  4. Use Grocy's own add/consume UI — no extra hardware/logic needed for the "in vs. out" problem.

Phase 8 — Nextcloud calendar sync

  1. Add HA's CalDAV integration, point at Nextcloud's CalDAV URL.
  2. Confirm read + write (calendar.create_event) both work.
  3. Expose the calendar entity to the LLM's tool list.
  4. Gate delete/move actions behind a confirmation step; create recurring events directly in Nextcloud, not via HA.

Phase 9 — Observability, dashboard, backup

  1. Deploy Netdata (or your team's eventual choice from the Netdata/Checkmk evaluation) for container/host monitoring.
  2. Deploy Homepage/Homarr as a single landing page across all service UIs.
  3. Deploy ntfy for local push notifications (door alerts, automation failures).
  4. Set up restic scheduled backups of all stateful volumes (HA config, Zigbee2MQTT device DB, Grocy data, Frigate face embeddings, Node-RED flows).

Phase 10 — Optional expansion

  1. Mealie for meal-plan-aware shopping lists.
  2. InfluxDB + Grafana if you want longer-term historical dashboards than HA's recorder retains.
  3. Additional RuView/Bermuda nodes as more rooms are covered.
  4. Dedicated Frigate accelerator (Hailo-8L) only if you expand beyond 12 cameras.

Testing checklist before calling any phase "done"

  • Does the reactive path (presence → light on) work with the LLM host powered off? (It must.)
  • Does a bad/slow LLM response ever block a light switch? (It must not.)
  • Are cameras verified to have zero WAN egress?
  • Does the calendar integration survive a Nextcloud restart without orphaning entities?
  • Does an identity merge ever get auto-committed without confirmation? (It must not.)