Видеонаблюдение через телеграм

На камерах 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 секунды,
  • сообщение после обработки удаляется в корзину.
Отправить
Поделиться
Твитнуть
Запинить