Содержание

Система наблюдения и Telegram-бот

Про то, что я уже пытался настроить некое подобие удобной системы видео-наблюдения у тебя дома, мне кажется я уже писал. Совсем недавно эта история получила новую жизнь, заодно получив бонусом telegram-бота, который всем этим помогает управлять…

Несмотря на то, что в начале я уже сообщил, что по моим ощущениям это уже не первая статья на эту тему, сразу отвечу на вопрос «зачем»:

Видеонаблюдение

Итак, что же это за новая жизнь? Для начала напомню, что когда-то у меня подобная система работала на YawCam, потом на motion, а затем снова вернулась на YawCam.

Совсем недавно один из коллег мне рассказал про свой опыт создания дачной системы видеонаблюдения, где упомянут про утилиту ContaCam. Забавно, но про данную программу я ранее вообще не слышал, при этом она оказалась настолько хороша, что побудила меня на опыты не только с ней, но и дельнейшее развитие концепции «умного дома». :-)

Чем же так хороша ContaCam:

Так как веб-сервер (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.