📱 Transform spare Android smartphones into dedicated, high-performance smart surveillance cameras.
將閒置舊 Android 手機化身為專業、低功耗、支援安全內網穿透的專用智慧監控節點。
Warning
本專案目前仍處於密集開發與實驗階段,所有功能皆不穩定且可能隨時變動。請勿使用於高度關鍵性或高風險安防場景。歡迎提出 Issue、回報 Bug 與參與測試!
Important
🔒 100% 無中央伺服器・極致隱私保障 (Zero Central Server / Decentralized)
OcularNode 絕無架設任何外部中央雲端伺服器!
所有即時影像、錄影檔案與雙向對講音訊,完全僅在您的家庭區域網路 (LAN) 內直連傳輸,或透過自建之端到端加密 VPN (如 Tailscale WireGuard®) 安全傳送。所有監控資料絕不上傳任何第三方雲端中繼站,由您掌握 100% 的數位主權與隱私!
- 🛡️ 無中央伺服器與零雲端中繼 (100% Local & Decentralized):
- 不依賴任何廠商雲端平台或中繼伺服器,無帳號訂閱費、無雲端外洩風險。
- 監控端 (Viewer) 與相機端 (Node) 採 P2P / 本地直連架構,離線斷網亦可在區網內 100% 正常運作。
- 🌐 雙連線模式 (區域網路直連 + 遠端安全穿透):
- 🪄 Device Owner 專用設備部署精靈 (Zero-Touch Provisioning):
- 支援專用 QR Code 掃描快速配網。
- 支援注入 Tailscale Auth Key 自動配置並啟用 VPN(需已安裝 Tailscale)。
- 鎖定 Kiosk 模式、開機自啟動、自訂省電黑屏監控。
- ⚡ 雙模式架構 (Dual-Mode Architecture):
- Camera (節點模式):低功耗後台 MJPEG HTTP 串流服務、雙向即時對講、鏡頭自動夜視切換。
- Viewer (監控端模式):多鏡頭即時預覽牆、低延遲 MJPEG 播放、遠端鏡頭設定與即時廣播。
- 🧠 邊緣 AI 動態偵測 (Edge AI Motion Detection):
- 像素級畫面動態差分分析。
- Google ML Kit 物件識別過濾(人、動物、車輛等智慧分類)。
- 自動錄製前置緩衝 + 事件短片 (Pre-record buffer)。
- 📲 Telegram 即時推播 (Telegram Bot Alerts):
- 動態觸發即時傳送照片快照與短片通知。
- 支援市電斷電/復電警報與低電量預警。
- 支援高溫過熱 (45°C) 降頻保護告警與低溫恢復通知。
- 支援 Tailscale VPN 異常中斷與 180 天金鑰可能過期之預警通知。
- 🔄 靜默 OTA 自動更新 (Silent OTA Update):直接對接 GitHub Releases,自動檢查最新版並於背景無縫完成更新。
graph TD
A[CameraStreamService] --> B[BatteryPowerMonitor]
A --> C[ScheduleManager]
A --> D[StorageCleanupManager]
A --> E[MotionPipelineManager]
A --> F[RemoteCommandHandler]
E --> G[ML Kit AI Filter]
E --> H[EventVideoRecorder]
E --> I[TelegramNotifier]
E --> J[Room AppDatabase]
F --> K[MjpegHttpServer / Web API]
F --> L[CameraManagerHelper]
- 狀態與資料持久化:Jetpack DataStore + EncryptedSharedPreferences (MasterKey 加密保護憑證) + Room (安全增量 Migration)。
- UI 介面:Jetpack Compose + Material 3 Design System (全域統一語義色彩 Token)。
Tailscale 具備兩套不同的安全時效機制,兩者各司其職:
| 項目 | 時效 | 作用說明 | 對相機運作的影響 |
|---|---|---|---|
| API Access Token / Auth Key | 最長 90 天 | 用於 App 部署掃碼、向 Tailscale 註冊新裝置或呼叫 API 管理控制台。 | 無影響。90 天到期後僅代表「不能再用同一個金鑰註冊新手機」;已加入連線的舊手機鏡頭不受任何影響。 |
| 裝置節點連線 (Node Key Expiry) | 預設 180 天 | Tailscale 官方基於安全考量,預設會讓已加入的設備每 180 天斷線重新驗證。 | 需停用。若未停用,舊手機在運作滿 180 天後會斷線。 |
- 使用 API Key 部署(最推薦):在 OcularNode 觀看端列表畫面中,系統會自動偵測相機過期狀態,並提供「⚡ 一鍵停用 180 天過期」按鈕,App 內一鍵完成永久授權!
- 手動於 Tailscale 網頁停用:
- 打開 Tailscale 控制台裝置清單 (Machines)。
- 找到您的相機裝置,點擊右側的
...(選單)。 - 點選 「Disable Key Expiry」 (停用金鑰過期),相機即可 365 天永久常駐連線不中斷!
- 自動過期告警:若未停用過期且相機滿 180 天斷線,OcularNode 監控服務會在 Wi-Fi 正常連線時透過 Telegram 即時發送過期與重新授權提醒。
- Android Studio: Ladybug / Meerkat (或最新版本)
- JDK: Java 17+ (推薦使用 Android Studio 內建 JBR)
- Min SDK: API 24 (Android 7.0)
- Target SDK: API 36 (Android 16)
# 執行單元測試
./gradlew testArmDebugUnitTest
# 編譯 Debug APK (ARM 架構)
./gradlew assembleArmDebug
# 編譯 Release APK
./gradlew assembleRelease- 無中央伺服器 (Zero Central Server):本專案為完全去中心化架構,絕不設立任何集中式雲端伺服器或轉發站。
- 區網與 VPN 保護 (LAN-Only / VPN Encryption):所有影音串流預設僅在本地 Wi-Fi 區域網路內廣播;遠端存取則透過加密 VPN (Tailscale WireGuard®) 建立私有網路傳輸,全程點對點加密保護。
- HTTP PIN 碼安全鑑權:內建 HTTP PIN 授權保護,防止區網內未授權設備存取串流、下載錄影或監聽麥克風。
- 憑證硬體級加密:Telegram Bot Token 與 Tailscale Auth Key 一律由 Android Jetpack
EncryptedSharedPreferences配合 Android KeyStore 硬體金鑰加密儲存。 - 防範資料外洩:全域停用
allowBackup,杜絕未授權的 ADB 實體備份提取私密資料。 - 零追蹤器與廣告:絕無任何第三方商業廣告、分析統計或後門 SDK,保障 100% 純淨隱私。
- 軟體授權條款:GNU General Public License v3.0
- 隱私權政策與使用條款:PRIVACY.md