69 lines
1.7 KiB
Markdown
69 lines
1.7 KiB
Markdown
# video-surveillance-portal — Session Handoff
|
|
|
|
**Last Session:** 2026-05-12_162235_video-surveillance-portal
|
|
**Model:** deepseek-v4-pro
|
|
**Status:** in-progress
|
|
**Updated:** 2026-05-12T16:22:35.809084
|
|
|
|
## Summary
|
|
Video surveillance portal: 4 Docker containers. ONVIF event polling, multi-channel alerts, ANPR via PlateRecognizer API, phone camera via WebRTC WHIP, live view grid, PTZ control, HTTPS for mobile.
|
|
|
|
## Key Decisions
|
|
- Skip local AI (Celeron N4000 too weak)
|
|
- ONVIF PullPoint for events
|
|
- PlateRecognizer Cloud API
|
|
- Phone via WebRTC WHIP
|
|
- HTTPS self-signed cert
|
|
- SQLite instead of PostgreSQL
|
|
- MediaMTX host network
|
|
|
|
## Pending Tasks
|
|
- [ ] Test with real ICSee ONVIF camera
|
|
- [ ] Configure Twilio/SMTP/Telegram
|
|
- [ ] Configure PlateRecognizer token
|
|
- [ ] Test phone from Samsung S22
|
|
|
|
## Files Touched
|
|
- `docker-compose.yml`
|
|
- `Dockerfile`
|
|
- `requirements.txt`
|
|
- `Makefile`
|
|
- `config/nginx.conf`
|
|
- `config/mediamtx.yml`
|
|
- `src/main.py`
|
|
- `src/config.py`
|
|
- `src/api/cameras.py`
|
|
- `src/api/alerts.py`
|
|
- `src/api/plates.py`
|
|
- `src/api/streams.py`
|
|
- `src/onvif_client/events.py`
|
|
- `src/onvif_client/ptz.py`
|
|
- `src/onvif_client/snapshot.py`
|
|
- `src/alerts/dispatcher.py`
|
|
- `src/alerts/emailer.py`
|
|
- `src/alerts/sms.py`
|
|
- `src/alerts/telegram.py`
|
|
- `src/anpr/plate_client.py`
|
|
- `src/recording/recorder.py`
|
|
- `src/db/database.py`
|
|
- `src/db/models.py`
|
|
- `frontend/index.html`
|
|
|
|
## Docker
|
|
```json
|
|
{
|
|
"containers": [
|
|
"vsp-nginx",
|
|
"vsp-app",
|
|
"vsp-redis",
|
|
"vsp-mediamtx"
|
|
],
|
|
"ports": {
|
|
"http": 8081,
|
|
"https": 8444
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
*Auto-generated from session `2026-05-12_162235_video-surveillance-portal`. Run `python3 .codex/save-session.py --handoff video-surveillance-portal` to regenerate.* |