Skip to content

hoolea/cambot

Repository files navigation

Cambot: Telegram-бот для получения снимков с IP-камер

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           # Этот файл

Установка

1. Клонирование репозитория

git clone https://github.com/hoolea/cambot.git
cd cambot

2. Настройка переменных окружения

Скопируйте пример файла окружения и заполните необходимые значения:

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, если вы не авторизованы).

3. Настройка камер

Отредактируйте 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).

4. Сборка и запуск с Docker

Соберите Docker-образ и запустите бот:

docker-compose build --no-cache
docker-compose up -d

Это создаст контейнер telegram-bot, работающий в фоновом режиме.

5. Просмотр логов

Проверьте логи бота для отладки:

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

6. Остановка бота

Для остановки и удаления контейнера:

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)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published