Драйвер Telegram

Fork me on GitHub

Описание

Сервис telegram – это платформа для обмена сообщениями с акцентом на скорость и безопасность. Сервис очень простой и бесплатный. Приложения для работы с сервисом существуют для множества платформ – мобильные телефоны, планшеты, компьютеры – можно использовать telegram на всех устройствах одновременно. Так же с помощью этого сервиса простым API можно создавать ботов (виртуальных собеседников).
Драйвер telegram (Telegram Adapter) позволяет отправлять и получать сообщения, то есть обмениваться телеграммами с системой ioBroker, создав бота в сервисе telegram. Можно давать боту различные команды (включить свет, открыть ворота гаража и пр.), можно запросить какую либо информацию (температуру в доме, состояние системы отопления и пр.), бот может публиковать стоп-кадры с охранных видеокамер при срабатывании датчика движения, в общем функционал этого решения очень богат. Драйвер можно использовать совместно с адаптером text2command.

Информация

 

Актуальная версия
Необходимые условия /
Разработчик Bluefox
Ключевые слова
чат-бот, управление, команды
Github icon_link Ссылка
Платформа Javascript/Node.js
Лицензия MIT

Установка

Установка осуществляется на вкладке Драйвера странички администрирования системы. В группе драйверов Сетевые находим строчку с названием Telegram Adapter и нажимаем кнопку со значком плюса в этой строке справа.

На экране появится всплывающее окно установки драйвера, в конце установки оно автоматически закроется.

Если все прошло удачно, на вкладке Настройка драйверов появится строка telegram.0 с установленным экземпляром драйвера.

Настройка

Регистрация и создание бота

Чтобы настроить драйвер, нужно сначала создать своего бота для управления ioBroker.

Если у вас еще нет аккаунта в сервисе telegram, самое время его создать, для этого переходим по ссылке (web-client, можно и через установленное приложение) и регистрируемся. Затем создаем бота, для этого переходим по ссылке, если вы пользуетесь web-client либо в строке поиска контактов ищем пользователя с именем @BotFather и начинаем с ним диалог.

Итак, создаем нового бота, даем команду /newbot. Далее в диалоге вас попросят написать имя вашего бота – придумываем, вводим и нажимаем enter. Затем нужно придумать и указать имя пользователя, оно должно заканчиваться словом bot.  Имя пользователя должно быть уникальным, поэтому, если введенное имя уже занято, вас об этом предупредят и попросят придумать другое. Конечной целью диалога будет ключ доступа для использования API HTTP (token access HTTP API).

Теперь, для безопасности, нужно установить пароль для общения с ботом. Для этого открываем диалог с только что созданным собеседником и набираем команду /password security, где слово security – это пароль (придумайте свой).

Настройка драйвера telegram

Теперь можно открыть настройки драйвера telegram в системе ioBroker (вкладка Настройки драйверов) и вписать туда ключ, пароль и, если планируется использовать text2command, выбрать из списка экземпляр этого драйвера.

Запускаем настроенный экземпляр драйвера telegram на вкладке Настройка драйверов кнопкой Неактивно. Нажать для старта (красная кнопка со значком play).

Переходим на вкладку Лог и убеждаемся что драйвер подключился к сервису telegram и что ошибки отсутствуют.

Отлично, драйвер настроен.

Примеры использования

Работа совместно с драйвером text2command

Для работы в связке с драйвером text2command, необходимо в настройках адаптера telegram выбрать установленный экземпляр драйвера text2command, как описано выше.

Добавим несколько простых правил для примера – правило Сколько время, Как твоё имя и Температура на улице.

Всё! Теперь можно открыть диалог с ботом, авторизоваться и задавать вопросы:

Однако стоит отметить, что полностью набирать команды и вопросы боту не очень удобно, особенно на мобильных устройствах. Боту можно задать список быстрых команд для более быстрого ввода – достаточно написать символ “/” и появится список заранее заданных команд – остается только выбрать нужную. Для этого опять обратимся к пользователю @BotFather. Введем команду /setcommands, затем впишем имя созданного бота начиная с символа “@”.

Вводим команды в формате:

команда - описание

  • команда – короткое имя команды, пишется в одно слово без пробелов (можно через знак нижнего подчеркивания)
  • описание – кратное описание команды

Каждая команда с новой строки, в приложении используем сочетание клавиш Ctrl+Enter.

Теперь надо немного подредактировать правила, чтобы ключевые слова команд подходили:

Теперь можно в чате с ботом набрать символ выбора команды “/” и на экране отобразиться список.

Удаленная перезагрузка сервера

Рассмотрим пример посложнее.

Предположим, что необходимо создать команду, которая воспринималась бы ботом и перезагружала сервер. Для этого понадобиться установленные и настроенные драйвера telegram, text2command и javascript.

В экземпляре драйвера javascript.0 создадим скрипт с названием t2c_restartSystem и следующим содержимым:

createState('t2c_restartSystem.restart_command', '');
on({id: 'javascript.0.t2c_restartSystem.restart_command', change: 'any'}, function (obj) {
  if (obj.newState.val === true || obj.newState.val === 'true'){
      log('Command reboot');
      setState('javascript.0.t2c_restartSystem.restart_command', 'false');
      exec ('reboot');
  }
});

В скрипте создаем переменную javascript.0.t2c_restartSystem.restart_command и подписываемся на нее. По условию нового значения true, выдаем в лог сообщение, сбрасываем значение переменной в false и выполняем команду перезагрузки.

Добавим новое правило в драйвер text2command:

Теперь в telegram диалоге с пользователем @BotFather добавим команду /restart_iobroker (на самом деле нужно не добавлять команду, а прописывать все возможные, то есть вновь вписать ранее созданные).

Все, можно проверить как работает только что созданная команда:

Публикация стоп-кадров IP-камеры по датчику движения

Помимо выполнения команд, бот может по какому либо событию слать сообщения или картинки/фото. Итак, задача следующая:

  • Имеется IP-камера D-Link DSC-900, адрес в сети 192.168.69.81, адрес потока mjpeg http://192.168.69.81/mjpeg.cgi, адрес для захвата изображения – http://192.168.69.81/image.jpg
  • В охранную зону камеры смотрит датчик движения, подключенный к контроллеру на базе arduino MEGA + Ethernet shield, передача данных по протоколу MQTT, переменная mqtt.0.arduino56.PIR2 принимает значения true (есть движение), false (нет движения)
  • При срабатывании датчика движения, необходимо в телеграмм отправлять изображения в моменты времени 0, 10, 20 секунд после срабатывания датчика.

Пишем скрипт следующего содержания:

var request = require('request'); //для запроса изображения с камеры
var fs = require('fs'); //для временного сохранения изображения в виде файла

//Функция, которая запрашивает изображение с камеры, сохраняет его во временный файл и отправляет его в драйвер telegram
function sendImage() {
  request.get({url: 'http://192.168.69.81/image.jpg', encoding: 'binary'}, function (err, response, body) {
    fs.writeFile("/tmp/snapshot.jpg", body, 'binary', function(err) {
      if (err) {
        console.error(err);
      } else {
        sendTo('telegram.0', '/tmp/snapshot.jpg');
      }
    });
  });
}
//Подписываемся на переменную mqtt.0.arduino56.PIR2, как только значение true, отправляем текущее изображение и еще два с периодом 10сек
on({id: 'mqtt.0.arduino56.PIR2', change: 'any'}, function (obj) {
  if (obj.newState.val === true || obj.newState.val === 'true'){
    console.log('Оbserved the movement! Snapshot sent to telegram');
    sendTo('telegram.0', 'Внимание! Движение! Публикую изображение.');
    sendImage();
    setTimeout(sendImage, 10000);
    setTimeout(sendImage, 20000);
  }
});

Результат должен быть примерно таким: