Видеонаблюдение через телеграм
На камерах Hikvision можно сделать простое видеонаблюдение через телеграм.
Когда в камере срабатывает датчик движения, камера отправляет на телеграм фотографию что произошло.
Отправляются три изображения с интервалом 2 секунды, от момента срабатывания датчика
По умолчанию, мы не можем отправлять изображения в телеграм, можем только на почту.
Настройки детектора движения: «Настройки» → «По событию» → «События» → «Детектор движения». Настраиваем зону срабатывания и событие отправки на электронную почту.
Отправлять события нужно на гугл почту. В гугле есть App Script, с помощью которого можно пересылать почту в телеграм.
Настройки видеокамеры для отправки на электронную почту: «Настройки» → «Сеть» → «Доп. настройки» → «Email»
Если все настроено правильно, в почту гугл начнут приходить письма с фотографиями.
На гитхабе выложен пример скрипта, для отправки вложенных в письма фотографий в телеграм
Нам, остается немного его доработать, так как скрипт отправляет первое вложение в телеграм.
Присваиваем всем нашим письмам ярлык — CAMERA, скрипт проверяет или все письма или по определенным параметрам, например, ярлык.
Если правильно настроено правило, ярлыки появляются у каждого нового письма с камеры
Дальше в апп скрипте вставляем наш скрипт, запускаем, тестирует, занимаемся отладкой.
Ставим запуск скрипта раз в минуту. То есть почта будет проверяться раз в минуту и при соответвии условиям отправляться.
Мой скрипт:
// The token of your Telegram bot
var TOKEN = "token bot";
// Name of the Telegram channel which bot is added into
var CHANNEL = "id канала";
// Name of the Gmail Label which need to search for
var LABEL = "CAMERA"
function processEmails() {
// Search unread emails with specified label
var search = "label:" + LABEL + " is:unread";
Logger.log('Search: ' + search);
var threads = GmailApp.search(search, 0, 10);
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
Logger.log('Number of emails found: ' + messages.length);
for (var j = 0; j < messages.length; j++) {
var m = messages[j];
if (!m.isInTrash() && m.isUnread()) {
if (m.getAttachments().length > 0) {
// Get the first attachment (image jpeg file)
// and send to telegram bot
sendPhoto(m.getAttachments()[0].copyBlob());
Logger.log('фото: ' + '1');
Utilities.sleep(500);// pause in the loop for 500 milliseconds
sendPhoto(m.getAttachments()[1].copyBlob());
Logger.log('фото: ' + '2');
Utilities.sleep(500);// pause in the loop for 500 milliseconds
sendPhoto(m.getAttachments()[2].copyBlob());
Logger.log('фото: ' + '3');
Utilities.sleep(500);// pause in the loop for 500 milliseconds
}
m.markRead();
m.moveToTrash(); // Where I would need a delete forever trigger;
}
}
}
}
function sendPhoto(photo) {
var payload = {
'chat_id': CHANNEL,
'photo': photo
};
var options = {
'method': 'post',
'payload': payload
};
UrlFetchApp.fetch("https://api.telegram.org/bot" + TOKEN + "/sendPhoto", options);
}Из правок:
- отправляются 1,2,3 вложения,
- между отправкой пауза 0,5 секунды,
- сообщение после обработки удаляется в корзину.