home-hub/assets/js/817f7194.b988fcde.js

1 line
5.8 KiB
JavaScript

"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[574],{921(e,t,s){s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>d,metadata:()=>r,toc:()=>a});const r=JSON.parse('{"id":"milestones","title":"Milestones","description":"Active","source":"@site/docs/milestones.md","sourceDirName":".","slug":"/milestones","permalink":"/rob/home-hub/milestones","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"milestones","project":"home-hub","updated":"2026-02-02T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Goals","permalink":"/rob/home-hub/goals"}}');var n=s(4848),i=s(8453);const d={type:"milestones",project:"home-hub",updated:new Date("2026-02-02T00:00:00.000Z")},o="Milestones",l={},a=[{value:"Active",id:"active",level:2},{value:"M0: Audio & System Stability",id:"m0-audio--system-stability",level:4},{value:"M1: ESP32 Smart Speaker",id:"m1-esp32-smart-speaker",level:4},{value:"M2: Audio Routing & Voice Control",id:"m2-audio-routing--voice-control",level:4},{value:"Completed",id:"completed",level:2}];function c(e){const t={h1:"h1",h2:"h2",h4:"h4",header:"header",hr:"hr",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"milestones",children:"Milestones"})}),"\n",(0,n.jsx)(t.h2,{id:"active",children:"Active"}),"\n",(0,n.jsx)(t.h4,{id:"m0-audio--system-stability",children:"M0: Audio & System Stability"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Target"}),": February 2026\n",(0,n.jsx)(t.strong,{children:"Status"}),": In Progress (75%)"]}),"\n",(0,n.jsx)(t.p,{children:"Fix the audio stack so PipeWire works reliably alongside Home Assistant's hassio_audio Docker container. Ensure the system boots into a working state every time."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Status"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Diagnose and fix PipeWire audio"}),(0,n.jsx)(t.td,{children:"Done"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Permanently resolve hassio_audio conflict"}),(0,n.jsx)(t.td,{children:"Done"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Verify audio survives reboot"}),(0,n.jsx)(t.td,{children:"Done"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Document system configuration"}),(0,n.jsx)(t.td,{children:"Not Started"})]})]})]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h4,{id:"m1-esp32-smart-speaker",children:"M1: ESP32 Smart Speaker"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Target"}),": March 2026\n",(0,n.jsx)(t.strong,{children:"Status"}),": Not Started"]}),"\n",(0,n.jsx)(t.p,{children:"Build and configure the ESP32 WiFi smart speaker with ESPHome and Home Assistant voice assistant integration."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Status"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Flash ESPHome firmware to ESP32"}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Configure voice_assistant component"}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Set up Home Assistant Assist pipeline (STT/TTS)"}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Test wake word detection"}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Integrate speaker with Home Assistant"}),(0,n.jsx)(t.td,{children:"Not Started"})]})]})]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h4,{id:"m2-audio-routing--voice-control",children:"M2: Audio Routing & Voice Control"}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Target"}),": April 2026\n",(0,n.jsx)(t.strong,{children:"Status"}),": Not Started"]}),"\n",(0,n.jsx)(t.p,{children:"Enable voice commands to route audio between the laptop speakers and ESP32 smart speaker. Expose laptop as a media player entity in Home Assistant."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Deliverable"}),(0,n.jsx)(t.th,{children:"Status"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Expose laptop PipeWire as HA media player"}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Create HA automations for audio routing commands"}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:'Voice command: "play audio on system speakers"'}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:'Voice command: "send audio to speaker 1"'}),(0,n.jsx)(t.td,{children:"Not Started"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Test end-to-end voice-controlled routing"}),(0,n.jsx)(t.td,{children:"Not Started"})]})]})]}),"\n",(0,n.jsx)(t.hr,{}),"\n",(0,n.jsx)(t.h2,{id:"completed",children:"Completed"})]})}function h(e={}){const{wrapper:t}={...(0,i.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},8453(e,t,s){s.d(t,{R:()=>d,x:()=>o});var r=s(6540);const n={},i=r.createContext(n);function d(e){const t=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]);