Система наблюдения и Telegram-бот
Про то, что я уже пытался настроить некое подобие удобной системы видео-наблюдения у тебя дома, мне кажется я уже писал. Совсем недавно эта история получила новую жизнь, заодно получив бонусом telegram-бота, который всем этим помогает управлять…
Несмотря на то, что в начале я уже сообщил, что по моим ощущениям это уже не первая статья на эту тему, сразу отвечу на вопрос «зачем»:
- Изначально «просто так, весело и интересно»
- Потом для «наблюдать за котом, пока в отпуске»
- Сейчас, всё чаще, для «посмотреть, что делает ребёнок пока мы в другой комнате/в магазине»
Видеонаблюдение
Итак, что же это за новая жизнь? Для начала напомню, что когда-то у меня подобная система работала на YawCam, потом на motion, а затем снова вернулась на YawCam.
- YawCam, в принципе, вполне себе удобная, на по «джавовски» неповолотливая утилита. Плюс ко всему не умеет работать с ip-камерами
- motion насколько стабильна, настолько же и аскетична. В целом настроил и забыл, но… Всегда были какие-то но
Совсем недавно один из коллег мне рассказал про свой опыт создания дачной системы видеонаблюдения, где упомянут про утилиту ContaCam. Забавно, но про данную программу я ранее вообще не слышал, при этом она оказалась настолько хороша, что побудила меня на опыты не только с ней, но и дельнейшее развитие концепции «умного дома».
Чем же так хороша ContaCam:
- В новых версиях она умеет работать с RTSP-потоком напрямую, т.к. позволяет подключаться к большинству IP-камер без каких-либо «танцев с бубном»
- Имеет собственный веб-сервер с возможностью сортировки и просмотра записей с камер (моим старым лайфхаком было подключение библиотеки камеры к Plex, откуда их можно было просматривать и даже удалять записи… теперь это доступно «из коробки»)
- Меня удивила общая продуманность программы. Как-то всё в неё работает удобно и логично
Так как веб-сервер (mapache
) доступен только вместе с запущенным сервисом ContaCam, а в домашних условиях он чаще выключен, всего лишь одним легким движением руки можно решить эту задачу запуском веб-сервера отдельно (в моём случае тоже службой, которой удобно управлять):
mapache -f "путь к файлу httpd_conf.txt" -n "имя сервиса" -k install
Telegram-бот
Вот здесь началось самое интересное. Переписывая свои скрипты под работу с ContaCam я задумался, а не прокачать ли мне свой powershell-скрипт, который только и делал, что отправлял мне сообщения в Telegram:
- SendTo-Telegram.ps1
function SendTo-Telegram { [CmdletBinding()] param( [string]$chat_id, [string]$text, [string]$token, [switch]$nomarkdown, [switch]$nopreview, [int]$replyto ) if (!$token) { $token = "ваш_token" } if($nopreview) { $preview_mode = "True" } if($nomarkdown) {$markdown_mode = ""} else { $markdown_mode = "Markdown" } $payload = @{ "chat_id" = $chat_id; "text" = $text; "parse_mode" = $markdown_mode; "disable_web_page_preview" = $preview_mode; "reply_to_message_id" = $replyto; } Invoke-WebRequest ` -Uri ("https://api.telegram.org/bot{0}/sendMessage" -f $tgm_token) ` -Method Post ` -ContentType "application/json;charset=utf-8" ` -Body (ConvertTo-Json -Depth 4 -Compress -InputObject $payload) }
# пример использования SendTo-Telegram -token "ваш_token" -chat_id "id_чата_в_который_писать" -text "текст_сообщения"
Да, знаю, на python можно найти готовые фреймворки, но мне стало интересно сделать что-то своё, да ещё и на Powershell. Пример общения с ботом:
Сейчас бот умеет сообщать кто дома, работать с камерами (получать скрин и гифку с крайним зафиксированным движением), управлять частью сервисов и… пока всё. Как-то так. Здесь я пожалуй закончу (да и доча проснулась). Похвастался и хватит. ))) В перспективе, может осилю ещё пару постов именно про бот на powershell, плюс в плане, если он получится более или менее рабочим, опубликовать код на github.