"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[413],{6785(e,s,n){n.r(s),n.d(s,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"overview","title":"Home Hub","description":"Entertainment system with Home Assistant, smart speakers, and voice control","source":"@site/docs/overview.md","sourceDirName":".","slug":"/","permalink":"/rob/home-hub/","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"slug":"/","sidebar_position":1},"sidebar":"docs","next":{"title":"Home Hub TODOs","permalink":"/rob/home-hub/todos"}}');var r=n(4848),t=n(8453);const o={slug:"/",sidebar_position:1},d="Home Hub",a={},c=[{value:"Overview",id:"overview",level:2},{value:"Hardware",id:"hardware",level:2},{value:"Architecture",id:"architecture",level:2},{value:"Features",id:"features",level:2},{value:"Quick Start",id:"quick-start",level:2},{value:"Key Decisions",id:"key-decisions",level:2},{value:"Related Projects",id:"related-projects",level:2}];function l(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.header,{children:(0,r.jsx)(s.h1,{id:"home-hub",children:"Home Hub"})}),"\n",(0,r.jsx)(s.p,{children:"Entertainment system with Home Assistant, smart speakers, and voice control"}),"\n",(0,r.jsx)(s.h2,{id:"overview",children:"Overview"}),"\n",(0,r.jsx)(s.p,{children:"Home Hub is a Dell Inspiron 14 5420 laptop repurposed as a living room entertainment center and smart home controller. It runs Debian 12 with a Cinnamon desktop and combines:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Media playback"})," \u2014 YouTube, Netflix, and web browsing via Brave browser"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Home Assistant Supervised"})," \u2014 Orchestrating smart home devices and automations"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Custom ESP32 WiFi smart speaker"})," \u2014 Voice-controlled audio routing and assistant capabilities"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"PipeWire audio"})," \u2014 Managing audio output between laptop speakers and networked devices"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"hardware",children:"Hardware"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Component"}),(0,r.jsx)(s.th,{children:"Detail"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Machine"}),(0,r.jsx)(s.td,{children:"Dell Inspiron 14 5420"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Audio"}),(0,r.jsx)(s.td,{children:"Intel sof-hda-dsp (ALSA card 0) via PipeWire"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"OS"}),(0,r.jsx)(s.td,{children:"Debian 12 (Bookworm)"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Desktop"}),(0,r.jsx)(s.td,{children:"Cinnamon / LightDM"})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:"Docker"}),(0,r.jsx)(s.td,{children:"Home Assistant Supervised"})]})]})]}),"\n",(0,r.jsx)(s.h2,{id:"architecture",children:"Architecture"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{children:"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Home Hub (Laptop) \u2502\n\u2502 \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n\u2502 \u2502 Brave \u2502 \u2502 Home Assistant \u2502 \u2502\n\u2502 \u2502 Browser \u2502 \u2502 (Docker/Supervised) \u2502 \u2502\n\u2502 \u2502 \u2502 \u2502 \u2502 \u2502\n\u2502 \u2502 YouTube \u2502 \u2502 Assist Pipeline \u2502 \u2502\n\u2502 \u2502 Netflix \u2502 \u2502 (STT/TTS) \u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n\u2502 \u2502 \u2502 \u2502\n\u2502 \u250c\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502\n\u2502 \u2502 PipeWire Audio \u2502 \u2502\n\u2502 \u2514\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502\n\u2502 \u2502 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u25bc (WiFi)\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 ESP32 \u2502\n \u2502 Smart \u2502\n \u2502 Speaker \u2502\n \u2502 (ESPHome) \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n"})}),"\n",(0,r.jsx)(s.h2,{id:"features",children:"Features"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Reliable audio"})," \u2014 PipeWire audio stack with hassio_audio conflict permanently resolved via systemd service"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Home Assistant Supervised"})," \u2014 Full HA installation with ESPHome addon for ESP32 firmware management"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"hassio_audio isolation"})," \u2014 Custom systemd service uses nsenter to mask ",(0,r.jsx)(s.code,{children:"/dev/snd"})," inside the container, keeping the supervisor happy while freeing ALSA for PipeWire"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"ESP32 smart speaker"})," (planned) \u2014 WiFi-based voice assistant using ESPHome's ",(0,r.jsx)(s.code,{children:"voice_assistant"})," component"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Voice-controlled audio routing"})," (planned) \u2014 Route audio between laptop speakers and ESP32 via voice commands"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"quick-start",children:"Quick Start"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:'# SSH into Home Hub\nssh rob@192.168.0.166\n\n# Check audio status\nwpctl status\n\n# Check Home Assistant containers\nsudo docker ps --format "table {{.Names}}\\t{{.Status}}"\n\n# Verify hassio_audio is neutered\nsudo systemctl status disable-hassio-audio.service\n\n# Access Home Assistant web UI\n# http://192.168.0.166:8123\n'})}),"\n",(0,r.jsx)(s.h2,{id:"key-decisions",children:"Key Decisions"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"PipeWire over PulseAudio"})," \u2014 Better ALSA integration and lower latency"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"hassio_audio disabled"})," \u2014 Home Assistant's audio container locks ALSA devices; ESP32 speaker communicates over WiFi instead"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"ESPHome for ESP32"})," \u2014 Native Home Assistant integration via ",(0,r.jsx)(s.code,{children:"voice_assistant"})," component"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.strong,{children:"Browser-based streaming"})," \u2014 No dedicated media server needed for initial setup"]}),"\n"]}),"\n",(0,r.jsx)(s.h2,{id:"related-projects",children:"Related Projects"}),"\n",(0,r.jsx)(s.p,{children:"This project is part of the development ecosystem:"}),"\n",(0,r.jsxs)(s.ul,{children:["\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://pages.brrd.tech/rob/CmdForge/",children:"CmdForge"})," - AI-powered CLI tool builder"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://pages.brrd.tech/rob/CascadingDev/",children:"CascadingDev"})," - Cascading Development Framework"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://pages.brrd.tech/rob/orchestrated-discussions/",children:"Orchestrated Discussions"})," - AI Discussion Framework"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://pages.brrd.tech/rob/artifact-editor/",children:"Artifact Editor"})," - Code Artifact Editor"]}),"\n",(0,r.jsxs)(s.li,{children:[(0,r.jsx)(s.a,{href:"https://pages.brrd.tech/rob/ramble/",children:"Ramble"})," - Voice Note Transcription"]}),"\n"]})]})}function h(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},8453(e,s,n){n.d(s,{R:()=>o,x:()=>d});var i=n(6540);const r={},t=i.createContext(r);function o(e){const s=i.useContext(t);return i.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function d(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),i.createElement(t.Provider,{value:s},e.children)}}}]);