Задача: При срабатывании движения хочу в Telegram получать изображения по срабатываемому триггеру. Плюс не просто по движению, а если через ПО настроена отслеживаемая маска, то только тогда мне приходит в Telegram скриншот захватываемого действия.

У меня программное обеспечение установлено, как VM внутри гипервизора на базе Debian 10 + Proxmox либо я в последнее время склоняюсь что поднимать интересующиеся меня сервисы внутри LXC-контейнера. Но это все мелочи.

Реализую свою задумку.

  • В наличии камеры D-Link DCS-2103 (она у меня в VLAN 7 и имеет адрес 192.168.7.101)
  • В наличии VM: srv-motioneye on Ubuntu 18.04 Server
  • В наличии VM внутри моей локальной сети с сервисом TOR + 3Proxy "Установить и настроить 3proxy + Tor на Zabbix 5.0" мне это нужно дабы через него соединяться с API Telegram. Я не особо верю, что провайдеры разрешают доступ к заблокированному/разблокированному. Так надежнее.

Шаг №1: Итак беру прошлую заметку "Обновленное развертывание MotionEye on Ubuntu 18.04 Server"

Шаг №2: Авторизуюсь в MotionEyE через URL-ссылку http://srv-monitoneye:8765

  • Login: admin
  • Pass: пустой

после переходу в Setting и устанавливаю пароль через настройки "General Settings"

  • Admin username: admin
  • Admin password: устанавливаю пароль, как 712mbddr@

нажимаю клавишу Enter, и нажимаю Apply для применения изменений.

Шаг №3: Добавляю камеру D-Link DCS-2103 в MotionEyE:

http://srv-motioneye:8765 — user&pass (Login: admin Password: 712mbbdr@) и нажимаю Войти, затем нажимаю на "You have not configured any camera yet. Click here to add one...", указываю параметры подключения к своей камере

  • Camera Type: Network Camera
  • URL: rtsp://172.33.7.101/live1.sdp
  • Username: Admin
  • Password: Aa1234567
  • Camera: RTSP/TCP Camera

Добавляю камеру D-Link DCS-2103 в MotionEyE

и после нажатия на OK камера, успешно добавляется в Web-интерфейс:

Камера успешно добавлена, видеопоток поступает.

Отлично!!!

Шаг №4: Теперь подключаюсь по SSH к системе Ubuntu 18.04 Server на которой у меня работает сервис Motioneye и создаю скрипт посредством которого будет вестись отправка изображения мне в Telegram.

ekzorchik@srv-dbionic:~$ ssh -l ekzorchik srv-motioneye

The authenticity of host 'srv-motioneye (172.33.33.116)' can't be established.

ECDSA key fingerprint is SHA256:dQT0Jzja8oAYogI6od1ey9lhcfzBaElTh6Bd8WiWyck.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'srv-motioneye' (ECDSA) to the list of known hosts.

ekzorchik@srv-motioneye's password:

Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-99-generic x86_64)

* Documentation: https://help.ubuntu.com

* Management: https://landscape.canonical.com

* Support: https://ubuntu.com/advantage

Last login: Sat Nov 7 12:18:55 2020 from 172.33.33.106

ekzorchik@srv-motioneye:~$

Motioneye работает от имени суперпользователя:

ekzorchik@srv-motioneye:~$ ps aux | grep motioneye

root 500 0.4 2.0 416448 41108 ? Ssl 12:54 0:06 /usr/bin/python /usr/local/bin/meyectl startserver -c /etc/motioneye/motioneye.conf

root 557 0.0 1.1 185936 23064 ? S 12:54 0:00 /usr/bin/python /usr/local/bin/meyectl startserver -c /etc/motioneye/motioneye.conf

root 1223 15.2 2.4 542212 50820 ? Sl 13:12 0:45 /usr/bin/motion -n -c /etc/motioneye/motion.conf -d 5

ekzorch+ 13608 0.0 0.0 15660 1072 pts/0 S+ 13:17 0:00 grep --color=auto motioneye

ekzorchik@srv-motioneye:~$

а значит он (суперпользователь) сможет выполнить данный скрипт из любого места какой я пропишу в Web-интерфейсе.

Итак мой скрипт воплощающий мою задумку:

ekzorchik@srv-motioneye:~$ nano telsend

#!/bin/bash

#My id Telegram Account

CHAT_ID="<MY_TELEGRAM_ID>"

#My Token_ID moego Bot'a

TOKEN="<MY_TOKEN_BOT>"

#Сделать снимок через MotionEyE и сохранить в файле

#wget -O http://srv-motioneye:8765/picture/1/current/ -O screen.jpg

curl -u 'Admin:712mbddr@' http://srv-motioneye:8765/picture/1/current/ --output screen.jpg

PHOTO="/home/ekzorchik/screen.jpg"

#My Socks Service in LAN

SOCKSIP=172.35.35.8

SOCKSPORT=50001

# команда отправки изображения

curl -x socks5://$SOCKSIP:$SOCKSPORT -s -X POST "https://api.telegram.org/bot"$TOKEN"/sendPhoto" -F chat_id="$CHAT_ID" -F photo="@$PHOTO"

ekzorchik@srv-motioneye:~$ chmod +x telsend

В скрипте фигурирует URL адрес вида: http://srv-motioneye:8765/picture/1/current/ — это строка берется если зайти в свойства добавленной камеры в MotionEyE — Video Streaming — Useful URLs

  • Snapshot URL — линк формата http://ip:порт motioneye/picture/номер камеры/current/, делает скриншот текущего изображения по запросу (удобно использовать для телеграм бота);
    • http://srv-motioneye:8765/picture/1/current/
  • Streaming URL — линк формата http://ip:порт камеры/, позволяет по данной ссылке просматривать камеры real-time (тоже можно использовать для телеграм бота в некоторых случаях);
    • http://srv-motioneye:8081
  • Embed URL — линк формата http://ip:порт камеры/picture/номер камеры/frame/, позволяет по данной ссылке встраивать в web камеры real-time (можно, например, встроить в Home Assistant через iFrame в lovelace).
    • http://srv-motioneye:8765/picture/1/frame/

Проверяю, как работает скрипт если запустить его вручную сейчас:

ekzorchik@srv-motioneye:~$ ./telsend

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 47276 100 47276 0 0 45.0M 0 --:--:-- --:--:-- --:--:-- 45.0M

{"ok":true,"result":{"message_id":762,"from":{"id":<BOT_ID>,"is_bot":true,"first_name":"<name_bot>","username":"<name_bot>"},"chat":{"id":<my_id>,"first_name":"ekzorchik","username":"aka_ekzorchik","type":"private"},"date":1604776167,"photo":[{"file_id":"AgACAgIAAxkDAAIC-l-m8Oee6uM98rHHTnzaHQe87KPiAAIvsjEb6W04SdUckajeve7sXNFemi4AAwEAAwIAA20AA2aDAAIeBA","file_unique_id":"AQADXNFemi4AA2aDAAI","file_size":16476,"width":320,"height":240},{"file_id":"AgACAgIAAxkDAAIC-l-m8Oee6uM98rHHTnzaHQe87KPiAAIvsjEb6W04SdUckajeve7sXNFemi4AAwEAAwIAA3gAA2eDAAIeBA","file_unique_id":"AQADXNFemi4AA2eDAAI","file_size":47126,"width":640,"height":480}]}}

ekzorchik@srv-motioneye:~$

Тем временем на мой смартфон Honor 9X в Telegram Client приходит сообщение от моего бота:

Скриншот с камеры отправленный от бота Telegram мне на клиент

Делаю вывод скрипт работает.

Шаг №5: Перехожу в MotionEyE и прописываю настройки для добавленной камеры D-Link DCS-2103

Video Device:

  • Automatic Brightness: ON
  • Video Resolution: 640x480
  • Video Rotation: 0
  • Frame Rate: 0

Motion Detection:

  • Motion Gap: 5
  • Captured Before: 1
  • Captured After: 1
  • Minimum Motion Frames: 1
  • Mask: ON
  • Mask Type: Editable

нажимаю на Edit Mask

у MotionEye необходимо отмечать зоны, в которых не надо определять движение. Мышкой маркируются красным именно те участки, где не требуется определение движения.

и отмечаю левой кнопкой мыши квадраты

Можно зажать левую кнопку мыши и беспорядочно водить по изображению исключаю область(и).

Определяю зоны, в которых не надо определять движение

После нажимаю Save Mask

На заметку:

  • Motion Gap — это промежуток в секундах, который система ждет после прекращения предыдущей сработки на движение, и перед началом новой.
  • Minimum Motion Frames — параметр, указывающий количество кадров, изменений в которых достаточно для того, чтобы понять, что происходит движение. Так как нам нужна скорость реакции, то цифра тоже маленькая и равняется 5 кадрам.

Motion Notifications:

  • Run A Command: ON
  • Command: прописываю /home/ekzorchik/telsend

выглядит это так:

Прописываю путь до скрипта

И для внесенения изменений нужно нажать Apply

Шаг №6: Проверяю, если поднести руку на то место которое я отметил квадратами, то мне в Telegram клиент придет сообщение от моего бота со скриншотом:

вот на примере второй камеры, в ее роли выступает Смартфон Honor 9X где опираясь на заметку я поставил на него приложение и завел в MotionEyE

строка в скрипте для создания скриншота для второй камеры:

#curl -u 'ekzorchik:712mbddr@' http://srv-motioneye:8765/picture/2/current/ --output /home/ekzorchik/screen.jpg

PHOTO="/home/ekzorchik/screen.jpg"

Отметка зон для второй камеры

Снимок со второй камеры отправленный в Telegram мне

Вот только из всего проделанного выше, как-то уже тормознуто срабатывает триггер по маске на действие или скорее всего у меня такие тугие камеры. Нужна нормальная современная.

По-сути можно средствами Web-интерфейса камеры настроить зоны за которыми вести наблюдение и уже скриптом на основе датчика движения делать скриншот и отправлять в Telegram.

А так заметка имеет право на существование.

На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.