# AIHOME **Repository Path**: onmousedown/aihome ## Basic Information - **Project Name**: AIHOME - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-29 - **Last Updated**: 2026-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ๐Ÿ  AI Home - ๆ™บ่ƒฝๅฎถๅฑ…ๆŽงๅˆถ็ณป็ปŸ ๅŸบไบŽ AI ็š„ๆ™บ่ƒฝๅฎถๅฑ…ๆŽงๅˆถ็ณป็ปŸ๏ผŒๆ”ฏๆŒ่ฎพๅค‡็ฎก็†ใ€ๅœบๆ™ฏ่”ๅŠจใ€่ฏญ้ŸณๆŽงๅˆถใ€‚ ## ๐ŸŽฏ ้กน็›ฎๅฎšไฝ - **็›ฎๆ ‡็”จๆˆท**๏ผšไธชไบบ/ๅฎถๅบญไฝฟ็”จ - **ๆ ธๅฟƒไปทๅ€ผ**๏ผš็”จ AI ่ฎฉๅฎถๅฑ…่ฎพๅค‡ๆ›ดๆ™บ่ƒฝ๏ผŒ่งฃๆ”พๅŒๆ‰‹ - **ๆŠ€ๆœฏ่ทฏ็บฟ**๏ผšๅ…จๆ ˆ JavaScript๏ผŒไฝŽ้—จๆง›ๆ˜“็ปดๆŠค --- ## ๐Ÿ—๏ธ ๆ•ดไฝ“ๆžถๆž„ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ็”จๆˆทไบคไบ’ๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Web ็ซฏ โ”‚ โ”‚ ๅพฎไฟกๅฐ็จ‹ๅบ โ”‚ โ”‚ APP ็ซฏ โ”‚ โ”‚ โ”‚ โ”‚ Vue3 + โ”‚ โ”‚ UniApp + โ”‚ โ”‚ Taro + โ”‚ โ”‚ โ”‚ โ”‚ NaiveUI โ”‚ โ”‚ uView โ”‚ โ”‚ NutUI โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ†“ HTTP / WebSocket โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๅŽ็ซฏๆœๅŠกๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Express / NestJS โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ็”จๆˆท โ”‚ โ”‚ ่ฎพๅค‡ โ”‚ โ”‚ ๅœบๆ™ฏ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๆจกๅ— โ”‚ โ”‚ ๆจกๅ— โ”‚ โ”‚ ๆจกๅ— โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ่ฏญ้Ÿณ โ”‚ โ”‚ ๆ•ฐๆฎ โ”‚ โ”‚ ็ณป็ปŸ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ ๆŽงๅˆถ โ”‚ โ”‚ ็ปŸ่ฎก โ”‚ โ”‚ ้…็ฝฎ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ†“ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๆ•ฐๆฎๅญ˜ๅ‚จๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ SQLite โ”‚ โ”‚ Redis โ”‚ โ”‚ ๆ—ถๅบๆ•ฐๆฎๅบ“ โ”‚ โ”‚ โ”‚ โ”‚ (ไธปๆ•ฐๆฎ) โ”‚ โ”‚ (็ผ“ๅญ˜/้˜Ÿๅˆ—) โ”‚ โ”‚ (่ฎพๅค‡็Šถๆ€) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ†“ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ่ฎพๅค‡ๆŽฅๅ…ฅๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ MQTT ็ฝ‘ๅ…ณ โ”‚ โ”‚ HomeKit โ”‚ โ”‚ ่‡ชๅฎšไน‰ๅ่ฎฎ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„๏ผˆMonorepo๏ผ‰ ``` aihome/ โ”œโ”€โ”€ apps/ # ๅบ”็”จๅฑ‚ โ”‚ โ”œโ”€โ”€ admin/ # ็ฎก็†ๅŽๅฐ๏ผˆPC็ซฏ๏ผ‰ โ”‚ โ”‚ โ”œโ”€โ”€ src/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ views/ # ้กต้ข โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ devices/ # ่ฎพๅค‡็ฎก็† โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ scenes/ # ๅœบๆ™ฏ่”ๅŠจ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ dashboard/ # ๆ•ฐๆฎ็œ‹ๆฟ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ai/ # AI ่ฏญ้ŸณๆŽงๅˆถ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ settings/ # ็ณป็ปŸ่ฎพ็ฝฎ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ components/ # ๅ…ฌๅ…ฑ็ป„ไปถ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ api/ # ๆŽฅๅฃๅฐ่ฃ… โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ store/ # ็Šถๆ€็ฎก็† โ”‚ โ”‚ โ”œโ”€โ”€ package.json โ”‚ โ”‚ โ””โ”€โ”€ vite.config.js โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ mobile/ # ็งปๅŠจ็ซฏ H5 / ๅฐ็จ‹ๅบ โ”‚ โ”‚ โ”œโ”€โ”€ src/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ pages/ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ components/ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ store/ โ”‚ โ”‚ โ””โ”€โ”€ package.json โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ server/ # ๅŽ็ซฏๆœๅŠก โ”‚ โ”œโ”€โ”€ src/ โ”‚ โ”‚ โ”œโ”€โ”€ modules/ # ๅŠŸ่ƒฝๆจกๅ— โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ user/ # ็”จๆˆทๆจกๅ— โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ device/ # ่ฎพๅค‡ๆจกๅ— โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ scene/ # ๅœบๆ™ฏๆจกๅ— โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ai/ # AI ๆจกๅ— โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ stats/ # ็ปŸ่ฎกๆจกๅ— โ”‚ โ”‚ โ”œโ”€โ”€ middleware/ # ไธญ้—ดไปถ โ”‚ โ”‚ โ”œโ”€โ”€ utils/ # ๅทฅๅ…ทๅ‡ฝๆ•ฐ โ”‚ โ”‚ โ”œโ”€โ”€ config/ # ้…็ฝฎๆ–‡ไปถ โ”‚ โ”‚ โ””โ”€โ”€ main.js โ”‚ โ”œโ”€โ”€ prisma/ # ๆ•ฐๆฎๅบ“ ORM โ”‚ โ”‚ โ””โ”€โ”€ schema.prisma โ”‚ โ””โ”€โ”€ package.json โ”‚ โ”œโ”€โ”€ packages/ # ๅ…ฑไบซๅฑ‚ โ”‚ โ”œโ”€โ”€ shared-types/ # ็ฑปๅž‹ๅฎšไน‰ โ”‚ โ”œโ”€โ”€ shared-utils/ # ๅทฅๅ…ทๅ‡ฝๆ•ฐ โ”‚ โ””โ”€โ”€ shared-ui/ # UI ็ป„ไปถๅบ“ โ”‚ โ”œโ”€โ”€ configs/ # ้…็ฝฎๆ–‡ไปถ โ”‚ โ”œโ”€โ”€ nginx/ # Nginx ้…็ฝฎ โ”‚ โ”œโ”€โ”€ docker/ # Docker ้…็ฝฎ โ”‚ โ””โ”€โ”€ deploy/ # ้ƒจ็ฝฒ่„šๆœฌ โ”‚ โ”œโ”€โ”€ package.json โ”œโ”€โ”€ pnpm-workspace.yaml โ””โ”€โ”€ README.md ``` --- ## ๐Ÿ› ๏ธ ๆŠ€ๆœฏๆ ˆ้€‰ๅž‹ | ๅฑ‚็บง | ๆŠ€ๆœฏ้€‰ๆ‹ฉ | ้€‰ๆ‹ฉ็†็”ฑ | |------|---------|---------| | **ๅ‰็ซฏๆก†ๆžถ** | Vue 3.4 + Vite 5 | ไฝ ๆœ€็†Ÿๆ‚‰๏ผŒๅผ€ๅ‘ๆ•ˆ็އๆœ€้ซ˜ | | **UI ็ป„ไปถๅบ“** | Naive UI๏ผˆPC๏ผ‰/ uView๏ผˆๅฐ็จ‹ๅบ๏ผ‰ | ็Žฐไปฃใ€็พŽ่ง‚ใ€ๆ˜“็”จ | | **็Šถๆ€็ฎก็†** | Pinia | Vue3 ๅฎ˜ๆ–นๆŽจ่๏ผŒ็ฎ€ๅ•ๅฅฝ็”จ | | **ๅŽ็ซฏๆก†ๆžถ** | Express 4.x | ็ฎ€ๅ•ใ€่ฝป้‡ใ€็”Ÿๆ€ๅฎŒๅ–„ | | **ORM** | Prisma | ็ฑปๅž‹ๅฎ‰ๅ…จ๏ผŒๅผ€ๅ‘ไฝ“้ชŒๅฅฝ | | **ๆ•ฐๆฎๅบ“** | SQLite๏ผˆๅผ€ๅ‘๏ผ‰/ PostgreSQL๏ผˆ็”Ÿไบง๏ผ‰ | SQLite ้›ถ้…็ฝฎ๏ผŒๆ˜“ไบŽไธŠๆ‰‹ | | **ๅฎžๆ—ถ้€šไฟก** | Socket.io | WebSocket ๅฐ่ฃ…๏ผŒ่ฎพๅค‡็Šถๆ€ๅฎžๆ—ถๆŽจ้€ | | **AI ้›†ๆˆ** | OpenAI / ๅญ—่Š‚่ฑ†ๅŒ… / ้˜ฟ้‡Œ้€šไน‰ | ไธปๆตๅคงๆจกๅž‹๏ผŒๆ”ฏๆŒๅ‡ฝๆ•ฐ่ฐƒ็”จ | | **้ƒจ็ฝฒๆ–นๅผ** | Docker + Docker Compose | ไธ€้”ฎ้ƒจ็ฝฒ๏ผŒๆ˜“ไบŽ็ปดๆŠค | --- ## ๐Ÿ“ฆ ๆ ธๅฟƒๅŠŸ่ƒฝๆจกๅ— ### 1. ็”จๆˆทๆจกๅ— (`apps/server/src/modules/user/`) - โœ… ็”จๆˆทๆณจๅ†Œ/็™ปๅฝ• - โœ… JWT ่ฎค่ฏ - โœ… ็”จๆˆทไฟกๆฏ็ฎก็† - โœ… ๆƒ้™ๆŽงๅˆถ๏ผˆๅฎถๅบญ็ป„/ๆˆๅ‘˜๏ผ‰ ### 2. ่ฎพๅค‡ๆจกๅ— (`apps/server/src/modules/device/`) - โœ… ่ฎพๅค‡ๆทปๅŠ /ๅˆ ้™ค/็ผ–่พ‘ - โœ… ่ฎพๅค‡็Šถๆ€ๆŸฅ่ฏข - โœ… ่ฎพๅค‡ๆŽงๅˆถ๏ผˆๅผ€ๅ…ณใ€ไบฎๅบฆใ€้ขœ่‰ฒ็ญ‰๏ผ‰ - โœ… ่ฎพๅค‡ๅˆ†็ป„็ฎก็† - โœ… ่ฎพๅค‡็Šถๆ€ๅކๅฒ่ฎฐๅฝ• - โœ… ่ฎพๅค‡ๆŽฅๅ…ฅๅ่ฎฎ๏ผˆHTTPใ€MQTTใ€WebSocket๏ผ‰ ### 3. ๅœบๆ™ฏ่”ๅŠจๆจกๅ— (`apps/server/src/modules/scene/`) - โœ… ๅœบๆ™ฏๅˆ›ๅปบ/็ผ–่พ‘/ๅˆ ้™ค - โœ… ๅœบๆ™ฏ่งฆๅ‘ๆกไปถ้…็ฝฎ๏ผˆIFTTT๏ผ‰ - ๆ—ถ้—ด่งฆๅ‘๏ผšๆฏๅคฉ/ๆฏๅ‘จ/ๆฏๆœˆๆŒ‡ๅฎšๆ—ถ้—ด - ่ฎพๅค‡็Šถๆ€่งฆๅ‘๏ผšๆŸไธช่ฎพๅค‡็Šถๆ€ๆ”นๅ˜ - ็Žฏๅขƒ่งฆๅ‘๏ผšๆธฉๅบฆ/ๆนฟๅบฆ/ๅ…‰็…ง่พพๅˆฐ้˜ˆๅ€ผ - โœ… ๅœบๆ™ฏๆ‰ง่กŒๅŠจไฝœ้…็ฝฎ - ๆŽงๅˆถๅคšไธช่ฎพๅค‡็Šถๆ€ - ๅ‘้€้€š็Ÿฅ - ่ฐƒ็”จ็ฌฌไธ‰ๆ–น API - โœ… ๅœบๆ™ฏๆ‰‹ๅŠจ/่‡ชๅŠจๆ‰ง่กŒ ### 4. AI ่ฏญ้ŸณๆŽงๅˆถๆจกๅ— (`apps/server/src/modules/ai/`) - โœ… ่ฏญ้Ÿณ่ฝฌๆ–‡ๅญ—๏ผˆASR๏ผ‰ - โœ… ๅคงๆจกๅž‹ๆ„ๅ›พ็†่งฃ - โœ… ่ฎพๅค‡ๆŽงๅˆถๆŒ‡ไปค็”Ÿๆˆ - โœ… ๆ–‡ๅญ—่ฝฌ่ฏญ้Ÿณ๏ผˆTTS๏ผ‰ - โœ… ๅฏน่ฏๅކๅฒ่ฎฐๅฝ• ### 5. ๆ•ฐๆฎ็ปŸ่ฎกๆจกๅ— (`apps/server/src/modules/stats/`) - โœ… ่ฎพๅค‡ๅœจ็บฟๆ—ถ้•ฟ็ปŸ่ฎก - โœ… ่ฎพๅค‡ไฝฟ็”จ้ข‘็އ็ปŸ่ฎก - โœ… ่ƒฝ่€—็ปŸ่ฎก - โœ… ๅœบๆ™ฏๆ‰ง่กŒ็ปŸ่ฎก - โœ… ๆ•ฐๆฎๅฏ่ง†ๅŒ–ๅ›พ่กจ --- ## ๐Ÿ—„๏ธ ๆ•ฐๆฎๅบ“่ฎพ่ฎก๏ผˆPrisma Schema๏ผ‰ ```prisma model User { id Int @id @default(autoincrement()) username String @unique password String email String? avatar String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt devices Device[] scenes Scene[] homeId Int? home Home? @relation(fields: [homeId], references: [id]) } model Home { id Int @id @default(autoincrement()) name String members User[] devices Device[] scenes Scene[] createdAt DateTime @default(now()) } model Device { id Int @id @default(autoincrement()) name String type String // light, switch, sensor, etc. brand String? model String? status Json // ่ฎพๅค‡็Šถๆ€ JSON config Json? // ่ฎพๅค‡้…็ฝฎ online Boolean @default(false) lastOnline DateTime? homeId Int? home Home? @relation(fields: [homeId], references: [id]) userId Int user User @relation(fields: [userId], references: [id]) history DeviceHistory[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model DeviceHistory { id Int @id @default(autoincrement()) deviceId Int device Device @relation(fields: [deviceId], references: [id]) status Json eventType String // state_change, online, offline createdAt DateTime @default(now()) } model Scene { id Int @id @default(autoincrement()) name String description String? icon String? enabled Boolean @default(true) conditions Json // ่งฆๅ‘ๆกไปถๆ•ฐ็ป„ actions Json // ๆ‰ง่กŒๅŠจไฝœๆ•ฐ็ป„ lastRunAt DateTime? runCount Int @default(0) homeId Int? home Home? @relation(fields: [homeId], references: [id]) userId Int user User @relation(fields: [userId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model SceneLog { id Int @id @default(autoincrement()) sceneId Int scene Scene @relation(fields: [sceneId], references: [id]) trigger String // manual, auto, api success Boolean error String? createdAt DateTime @default(now()) } ``` --- ## ๐Ÿ”Œ API ๆŽฅๅฃ่ฎพ่ฎก ### ็”จๆˆทๆŽฅๅฃ ``` POST /api/user/register # ๆณจๅ†Œ POST /api/user/login # ็™ปๅฝ• GET /api/user/profile # ่Žทๅ–็”จๆˆทไฟกๆฏ PUT /api/user/profile # ๆ›ดๆ–ฐ็”จๆˆทไฟกๆฏ ``` ### ่ฎพๅค‡ๆŽฅๅฃ ``` GET /api/devices # ่Žทๅ–่ฎพๅค‡ๅˆ—่กจ POST /api/devices # ๆทปๅŠ ่ฎพๅค‡ GET /api/devices/:id # ่Žทๅ–่ฎพๅค‡่ฏฆๆƒ… PUT /api/devices/:id # ๆ›ดๆ–ฐ่ฎพๅค‡ DELETE /api/devices/:id # ๅˆ ้™ค่ฎพๅค‡ PUT /api/devices/:id/control # ๆŽงๅˆถ่ฎพๅค‡ GET /api/devices/:id/history # ่ฎพๅค‡ๅކๅฒ่ฎฐๅฝ• ``` ### ๅœบๆ™ฏๆŽฅๅฃ ``` GET /api/scenes # ่Žทๅ–ๅœบๆ™ฏๅˆ—่กจ POST /api/scenes # ๅˆ›ๅปบๅœบๆ™ฏ GET /api/scenes/:id # ่Žทๅ–ๅœบๆ™ฏ่ฏฆๆƒ… PUT /api/scenes/:id # ๆ›ดๆ–ฐๅœบๆ™ฏ DELETE /api/scenes/:id # ๅˆ ้™คๅœบๆ™ฏ POST /api/scenes/:id/run # ๆ‰‹ๅŠจๆ‰ง่กŒๅœบๆ™ฏ ``` ### AI ๆŽฅๅฃ ``` POST /api/ai/speech-to-text # ่ฏญ้Ÿณ่ฝฌๆ–‡ๅญ— POST /api/ai/text-command # ๆ–‡ๅญ—ๆŒ‡ไปคๅค„็† POST /api/ai/text-to-speech # ๆ–‡ๅญ—่ฝฌ่ฏญ้Ÿณ ``` --- ## ๐Ÿš€ ๅผ€ๅ‘่ทฏ็บฟๅ›พ | ้˜ถๆฎต | ๅ†…ๅฎน | ๆ—ถ้—ด้ข„ไผฐ | |------|------|---------| | **Phase 1** | ้กน็›ฎ้ชจๆžถๆญๅปบ + ็”จๆˆทๆจกๅ— + ่ฎพๅค‡็ฎก็†ๅŸบ็ก€ | 1ๅ‘จ | | **Phase 2** | ๅœบๆ™ฏ่”ๅŠจๅผ•ๆ“Ž + ่ฎพๅค‡ๆŽงๅˆถ | 1ๅ‘จ | | **Phase 3** | AI ่ฏญ้ŸณๆŽงๅˆถ้›†ๆˆ | 1ๅ‘จ | | **Phase 4** | ๆ•ฐๆฎ็ปŸ่ฎก + ๅฏ่ง†ๅŒ–็œ‹ๆฟ | 1ๅ‘จ | | **Phase 5** | ็งปๅŠจ็ซฏ H5 / ๅฐ็จ‹ๅบๅผ€ๅ‘ | 2ๅ‘จ | | **Phase 6** | ่ฎพๅค‡ๆŽฅๅ…ฅๅ่ฎฎๅฎŒๅ–„ + ็จณๅฎšๆ€งไผ˜ๅŒ– | ๆŒ็ปญ่ฟญไปฃ | --- ## ๐Ÿ“ ๅฏๅŠจๅ‘ฝไปค ```bash # ๅฎ‰่ฃ…ไพ่ต– pnpm install # ๅผ€ๅ‘ๆจกๅผ pnpm dev:admin # ๅŽๅฐๅ‰็ซฏ pnpm dev:server # ๅŽ็ซฏๆœๅŠก pnpm dev:mobile # ็งปๅŠจ็ซฏ # ็”Ÿไบงๆž„ๅปบ pnpm build:admin pnpm build:server pnpm build:mobile ``` --- ## ๐ŸŽฏ ่ฎพ่ฎกไบฎ็‚น 1. **ไฝŽ้—จๆง›ๅฏๅŠจ**๏ผšSQLite ๆ•ฐๆฎๅบ“๏ผŒๆ— ้œ€้ขๅค–ๅฎ‰่ฃ…๏ผŒๅ…‹้š†ๅฐฑ่ƒฝ่ท‘ 2. **ๅ‰ๅŽ็ซฏๅˆ†็ฆป**๏ผšๆธ…ๆ™ฐ็š„ API ๅฅ‘็บฆ๏ผŒไพฟไบŽๆ‰ฉๅฑ•ๅคš็ซฏ 3. **ๆจกๅ—ๅŒ–่ฎพ่ฎก**๏ผšๆฏไธชๅŠŸ่ƒฝ็‹ฌ็ซ‹๏ผŒไพฟไบŽ็ปดๆŠคๅ’Œ่ฟญไปฃ 4. **AI ๅŽŸ็”Ÿ**๏ผšๆทฑๅบฆ้›†ๆˆๅคงๆจกๅž‹๏ผŒ่ฏญ้ŸณๆŽงๅˆถๆ˜ฏๆ ธๅฟƒ็ซžไบ‰ๅŠ› 5. **ๅฏๆ‰ฉๅฑ•ๆžถๆž„**๏ผš่ฎพๅค‡ๆŽฅๅ…ฅๅฑ‚ๆŠฝ่ฑก๏ผŒๆ–นไพฟๅฏนๆŽฅๅ„็งๅ่ฎฎ 6. **ไฝ ็†Ÿๆ‚‰็š„ๆŠ€ๆœฏๆ ˆ**๏ผšๅ…จ้‡ Vue + Node.js ็”Ÿๆ€๏ผŒๆ— ็ผไธŠๆ‰‹ --- **Next Step๏ผš** ็กฎ่ฎค่ฟ™ไธชๆžถๆž„ๅฏไปฅ๏ผŒๆˆ‘็ซ‹ๅณๅผ€ๅง‹ๅ†™ไปฃ็ ๆŠŠ้กน็›ฎ้ชจๆžถๆญๅ‡บๆฅ๏ผ