Отправляем снимок с веб-камеры в Telegram при обнаружении движения
Вариант что сами потеряли или дали кому-то и забыли отпал - больше склонялись к варианту что кто-то их взял из других сотрудников.
Идея заключалась в том чтобы камера реагировала на движения, снимала короткое видео и слала снимок в группу в Telegram.
В итоге я это реализовал и решил написать инструкцию для тех кто тоже хочет подобное.
Сразу обозначим два момента:
1. Инструкция адаптирована для варианта когда веб-камера находится физически в одном месте, а сервер - в другом, тогда нужно транслировать поток по сети.
Если у вас и камера и серверная часть будет на одном компьютере или камера изначально сетевая - можно обойтись без пунктов 1 и 2, а сразу перейти к пункту 3.
2. Подразумевается что у вас уже есть свой бот для Telegram, если нет, то вот инструкция: шаг 1 и 2
Итак, собственно сама инструкция:
1. Подключаем к компьютеру веб-камеру.
2. Устанавливаем на комп YawCam и настраиваем YawCam так:
3. Ставим на другой компьютер/сервер iSpy, добавляем камеру в качестве источника указываем MJPEG
4. Далее указываем маску детектора движения, в данном случае это дверь кабинета
5. На следующей вкладке указываем тревоги и действие которое будет обрабатываться при срабатывании тревоги
6. Указываем запись при срабатывании движения:
7. Указываем сохранять снимок с камеры в папку – далее этот снимок будет отсылаться в Telegram
8. Для того чтобы сервер не слал фото в Telegram при каждом срабатывании тревоги (открытия двери) – настраиваем расписание так чтобы оно срабатывало только до начала рабочего дня и после окончания рабочего дня, когда кабинет закрыт и никто посторонний заходить не может.
При этом запись видео и снимков все равно будет производиться при каждом срабатывании, но слаться в Telegram не будет.
9. Указываем место сохранения файлов.
10. Итог выглядит так:
11. Самое главное: скрипт отсылки снимка в Telegram.
По какой-то непонятной причине отправка фото в Telegram не срабатывает из PowerShell, приходится использовать curl:
https://chocolatey.org/packages/curl
https://winampplugins.co.uk/curl/
Используем такой скрипт:
pushd e:\Video\IT\video\IT\grabs\
for /f "tokens=*" %%a in ('dir /b /od') do set newest=%%a
popd
set bottoken="ТОКЕН_БОТА"
set chat="ЧАТ_ГРУППЫ"
set File="e:\Video\IT\video\IT\grabs\%newest%"
"c:\Program Files\curl-7.60.0-win64-mingw\bin\curl.exe" -s -X POST "https://api.telegram.org/bot%bottoken%/sendPhoto?chat_id=%25..." -F photo="@%File%" -F caption="Motion detected on IT-room!"
Где:
1. e:\Video\IT\video\IT\grabs\ - путь до снимков с камеры, которые делаются в момент срабатывания тревоги.
2. %newest% - имя самого последнего снимка с камеры, непосредственно в момент срабатывания тревоги, берется первыми тремя строчками скрипта.
3. bottoken – это токен вашего бота Telegram.
4. chat – это ID вашей группы в Telegram, если есть знак «-» то это группа, без знака «-» это ID пользователя, т.е. шлем либо в личку либо в группу.
5. %File% - переменная путь+имя файла снимка, которые и отправляются в Telegram последней командой в скрипте.
12. Итоговый результат: