Cambot — это Telegram-бот, который позволяет авторизованным пользователям получать снимки с IP-камер, проверять их доступность и просматривать список камер. Поддерживает несколько типов камер (Hikvision, Dahua, Axis и пользовательские URL) и развертывается с помощью Docker для простоты настройки.
- Получение снимков: Используйте команды
/1
,/2
, ...,/92
для получения снимков с конкретных камер. - Список камер: Просмотрите доступные камеры с помощью
/list
(с пагинацией, 10 камер на страницу). - Проверка недоступных камер: Используйте
/offline
для определения камер, которые не отвечают. - Отображение времени: Узнайте текущее серверное время с помощью
/time
. - Авторизация: Доступ ограничен для указанных Telegram ID.
- Логирование: Подробные логи запросов к камерам и ошибок.
- Контейнеризация: Простое развертывание через Docker и Docker Compose.
- Docker и Docker Compose установлены на сервере.
- Токен Telegram-бота от BotFather.
- IP-камеры, доступные с сервера (поддерживающие HTTP-запросы для снимков).
- Python 3.10 (если запуск без Docker).
cambot/
├── bot.py # Основной скрипт бота
├── Dockerfile # Конфигурация Docker-образа
├── docker-compose.yaml # Конфигурация Docker Compose
├── requirements.txt # Зависимости Python
├── .env.example # Пример переменных окружения
├── ip_cam.txt # Файл конфигурации камер
└── README.md # Этот файл
git clone https://github.com/hoolea/cambot.git
cd cambot
Скопируйте пример файла окружения и заполните необходимые значения:
cp .env.example .env
nano .env
Пример .env:
TELEGRAM_TOKEN=your_bot_token
CAMERA_LOGIN=admin
CAMERA_PASSWORD=your_camera_password
CAMERA_FILE=/app/ip_cam.txt
AUTHORIZED_USERS=123456789,987654321
TELEGRAM_TOKEN: Токен вашего Telegram-бота от BotFather.
CAMERA_LOGIN и CAMERA_PASSWORD: Учетные данные для доступа к камерам.
CAMERA_FILE: Путь к файлу конфигурации камер (по умолчанию: /app/ip_cam.txt в Docker).
AUTHORIZED_USERS: Telegram ID пользователей, которым разрешен доступ, через запятую. Узнайте свой ID, отправив /start боту (он ответит вашим ID, если вы не авторизованы).
Отредактируйте ip_cam.txt для указания ваших камер:
nano ip_cam.txt
Пример ip_cam.txt:
1,10.10.0.1,Ж/Д вокзал ул. Привокзальная пл. 4,hikvision
2,10.10.0.2,Вход вокзала,dahua
3,10.10.0.3,Парковка,axis
4,10.10.0.4,Склад,http://{login}:{password}@{ip}/custom/snapshot.jpg
Формат: номер,ip,название,тип
Значение | Описание |
---|---|
Номер: | ID камеры (1–99) |
Ip: | IP-адрес камеры |
Название: | Описательное имя (например, "Парковка") |
Тип: | Тип камеры (hikvision, dahua, axis или пользовательский HTTP URL). Пользовательские URL должны содержать заполнители {login}, {password}, {ip} |
Поддерживаемые типы камер:
Название | URL |
---|---|
hikvision: | http://{login}:{password}@{ip}/ISAPI/Streaming/channels/101/picture |
dahua: | http://{login}:{password}@{ip}/cgi-bin/snapshot.cgi |
axis: | http://{login}:{password}@{ip}/axis-cgi/jpg/image.cgi?camera=1 |
Пользовательский: | Любой HTTP URL с заполнителями (например, http://{login}:{password}@{ip}/custom/snapshot.jpg). |
Соберите Docker-образ и запустите бот:
docker-compose build --no-cache
docker-compose up -d
Это создаст контейнер telegram-bot, работающий в фоновом режиме.
Проверьте логи бота для отладки:
docker logs -f telegram-bot
Пример логов:
2025-04-15 15:XX:XX,XXX - INFO - Загружено 4 камер
2025-04-15 15:XX:XX,XXX - INFO - Бот запущен
2025-04-15 15:XX:XX,XXX - INFO - Запрос снимка с камеры 1 (Ж/Д вокзал ул. Привокзальная пл. 4)
2025-04-15 15:XX:XX,XXX - INFO - Запрос изображения с камеры: http://admin:****@10.10.0.1/ISAPI/Streaming/channels/101/picture
Для остановки и удаления контейнера:
docker-compose down
Взаимодействуйте с ботом в Telegram:
/start: Получите приветственное сообщение и список команд.
/list: Просмотрите список камер с пагинацией (нажмите на камеру для получения снимка).
/1, /2, ..., /92: Запросите снимок с указанной камеры.
/offline: Проверьте, какие камеры недоступны (на основе пинга).
/time: Узнайте текущие дату и время сервера.
Доступ имеют только пользователи, указанные в AUTHORIZED_USERS. Неавторизованные пользователи получают сообщение с их ID чата.
Бот не отвечает:
-
Проверьте TELEGRAM_TOKEN в .env.
-
Просмотрите логи: docker logs telegram-bot.
-
Убедитесь, что ваш Telegram ID указан в AUTHORIZED_USERS.
Снимки не загружаются:
-
Проверьте ip_cam.txt на правильность IP-адресов и типов камер.
-
Тестируйте доступ к камере:
docker exec telegram-bot curl -I "http://admin:your_password@10.10.0.1/ISAPI/Streaming/channels/101/picture"
- Убедитесь, что камеры доступны из контейнера Docker. Если нет, добавьте network_mode: host в docker-compose.yaml:
services:
telegram-bot:
# ...
network_mode: host
python-telegram-bot: Взаимодействие с Telegram API.
requests: HTTP-запросы к камерам.
ping3: Проверка доступности камер.
python-dotenv: Загрузка переменных окружения.
Подробности в requirements.txt.
Приветствуются любые предложения и улучшения! Открывайте issues или присылайте pull requests. Идеи новых функций (например, потоковое видео, уведомления о статусе камер) также приветствуются.
MIT License (LICENSE)