← На главную

Собрал видеонаблюдение CheapSecurity на Linux с Telegram-управлением

26.07.2026 15:53 · hackernews

CheapSecurity — это самодостаточная система видеонаблюдения для Linux‑одноплатников и обычных USB‑вебкамер. Проект ставит приватность во главу угла: вся запись остаётся на локальном диске, никакие облачные подписки не нужны, а данные не покидают вашу сеть. В качестве железа сгодится любой завалявшийся SBC вроде Raspberry Pi или Orange Pi и дешёвая USB‑камера. Код написан так, чтобы не нагружать слабые процессоры, и сочетает живой MJPEG‑поток с веб‑панелью, детектор движения на разнице кадров и автоматическую запись с предбуфером: несколько секунд до срабатывания сохраняются в ролик.

Как только детектор замечает движение, система может отправить email со снимком, а если настроен Telegram — автоматически загрузить туда видео. При этом бот поддерживает команды /snapshot, /video <секунды> и /help, так что кадр или короткий ролик можно запросить в любой момент из чата. Предусмотрен ночной режим: софтовое улучшение CLAHE на Light‑канале плюс программный буст яркости и контраста; правда большинство USB‑камер не отдают управление ISO и выдержкой через V4L2, поэтому настоящая ночная съёмка потребует IR‑подсветки.

Все сохранённые клипы видны на веб‑дашборде вместе с информацией о разрешении, FPS и текущем состоянии. Записи можно отмечать чекбоксами и выполнять массовые действия: отправить в Telegram, скачать ZIP‑архивом или удалить. Очисткой хранилища занимается планировщик: файлы старше max_age_days или при превышении max_size_gb удаляются, а при критически малом свободном месте срабатывает аварийная очистка по параметрам emergency_free_space_gb и emergency_delete_count.

Для работы нужен Python 3.10 или новее, OpenCV с поддержкой V4L2 и любая вебкамера (по умолчанию ожидается /dev/video0). На ARM‑платах рекомендуют ставить системный пакет OpenCV — для Odroid XU4 и похожих, а на x86‑машинах проще использовать opencv-python-headless из pip. После создания виртуального окружения копируется config.json.example в config.json, где задаются параметры камеры, чувствительность движения, кодеки (MJPG для низкой нагрузки на CPU, mp4v для компактности), настройки оповещений и Telegram‑бота. Токен для бота получают через BotFather, а chat ID — через getUpdates. Для Gmail‑уведомлений потребуется App Password, поскольку обычный пароль больше не подходит; соединение идёт по SMTP_SSL на порт 465.

Продакшен‑запуск выполняется через systemd‑юнит, который стартует Gunicorn с одним воркером и четырьмя потоками — камера должна открываться одним процессом, поэтому воркер один. Без дополнительного реверс‑прокси с HTTPS выставлять сервис наружу не стоит; внутри сети можно оставить встроенную HTTP‑Basic‑аутентификацию. В комплекте есть диагностический скрипт diagnose.py, а типичная проблема «не пишется» решается снижением motion.min_area. Весь код распространяется под GNU AGPLv3, репозиторий собран в чистой структуре: исходники в src/cheapsecurity/, шаблоны в templates/, статика в static/, тесты в tests/, а записи попадают в папку recordings/.

Читать оригинал →