Files

46 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sentinel-home-ai 项目长期记忆
## 项目概况
- 家庭多模态智能监控系统,仓库 `http://192.168.50.64:3000/ericwyuan/sentinel-home-ai`Gitea 内网)
- 本地 `/Users/ericwyuan/Desktop/Work/sentinel-home-ai`monorepofam-core NAS 端 + fam-edge Oracle 端 + fam-ui Vue3 前端)
## 架构 v32026-08-22 定稿:运动事件驱动)
- **不再分析整段视频**。Google Drive --rclone--> Oracle gdrive_videos整段素材保留
Oracle 按 NAS 推送的 `ss_motion_events`start_time/durationUnix epochffmpeg 分割运动片段
`-c:v copy -c:a aac` 保留音频,产物 `/opt/fam-edge/motion_clips/`**只分析运动片段**。
- **Drive 中转是跨境提速设计(非仅 NAT 原因)**:中国→海外裸 HTTP/SCP 直传 Oracle 很难(跨境单 TCP 流
丢包掉速);改走 GoogleCloudSync 分块并发 + 断点续传,抗抖动)→ Oracle rclone 每 5min 拉取
海外数据中心互联Gbps。**不要轻易提议砍掉 Drive 改 NAS 直连 Oracle**。
- NAS MotionNotifier 轮询 SS `EventCenter.Event.List`60scamera_ids=2, event_types=10推送
/api/ss/motion游标 MariaDB 续用 + 失败批次不前进 + 心跳。Webhook 端点保留为可选补充。
- **SS duration=0 = 动作进行中**(结束才回填真实时长),分割只处理已结束事件。
- 前端fam-ui Vue3不改/api/ui/videos|stats|people|attention-events|... 契约保持;
事件帧图 /api/proxy/frame 用绝对 ts event_start_time 偏移取帧,运动片段天然兼容。
## 服务器与部署
- NAS (192.168.50.64)SSH 2222, ericwyuan/iLoveJava5fam-core 代码 `/volume1/web/sentinel-home-ai`
venv `fam-core/venv``start_core.sh` source .env重启 = kill gunicorn + `setsid bash start_core.sh`
NAS 无 systemd 守护)。
- **Oracle云服务器 129.146.26.249**SSH key `~/.ssh/oracle_new`fam-edge 由 **systemd
`fam-edge.service` 守护Restart=always**——部署代码后必须 `sudo systemctl restart fam-edge`
手动 setsid 会端口冲突venv `/opt/fam-edge/venv`;库 `/opt/fam-edge/data/oracle.db`
素材 `/opt/fam-edge/gdrive_videos`logs 目录 ubuntu 可写。
**前端亦托管于此机 Caddy :80**fam-ui SPA + /api 反代回 NAS fam-core :8000 经 frp 隧道);旧机 129.146.203.203 已退役。
- **登录2026-08-31 起)**fam-core 不再自己校验密码,登录全权走 auth-hub 统一登录
OAuth2 Auth Code + PKCE / OIDC`http://129.146.26.249:5300`。fam-core client
`a2PJTZuKQYxt1oGh`,回调 `:8000/api/auth/callback`auth-hub 侧注册了 :80 和 :8000 两个回调)。
NAS `.env``AUTH_HUB_ISSUER/CLIENT_ID/CLIENT_SECRET/REDIRECT_URI`(缺任一 fail closed
账号:`ericwyuan / iLoveJava5`hub 端。NAS venv 需 PyJWT + cryptographyRS256 验签)。
- 部署:本地 git 提交 push Gitea → tar 管道NAS 直接解包Oracle `--strip-components=1` 到临时目录再 cp避免动 data/venv
- **NAS 部署坑2026-08-29 踩过)**:拷贝 `.py` 会带旧 mtime`.pyc``.py`Python 加载陈旧字节码
(旧逻辑上线,曾导致 1062 假象)。部署后必须 `find src -name __pycache__ -exec rm -rf {} +` 再重启;
`pkill -f` 会匹配 SSH 自身命令导致断连(用 PID 文件或精确 pattern
- **镜像表键设计2026-08-29 定稿)**`sync_identity_map` 不再以 Oracle `person_identity_map.id` 作主键
Oracle 库重建会复用 id改 NAS 本地自增 `id` + 唯一键 `(video_id, raw_uid)`Oracle id 落 `oracle_id` 列溯源;
同批 upsert 的 UPDATE 子句不改写键列,避免 uq 二次冲突 1062。sync_videos/events/model_calls 同理(风险低未改)。
## 提交规范(强制)
- 格式 `[阶段X.Y子任务号] 子任务名称 - 完成内容简述`Bug 修复 `fix(模块): 问题简述`
- 一任务一 commit开工先 `git pull --rebase`;阻塞先 commit 加 `[WIP]`
- 禁止 `git push --force``--no-verify`