Отправка уведомлений из умного дома Z-Way (Z-Wave.me) в Telegram

Если вы используете Умный Дом (УД) Z-Wave на движке Z-Way от российской компании Z-Wave.me, например, Z-Wave.me Hub или RaZberry, то вам наверняка захочется быть в курсе всех, а уж тем более критических событий, без необходимости заглядывания в раздел Events веб-интерфейса УД.
Для этой цели хорошо подойдет интеграция с мессенджером Telegram.
Сейчас я расскажу, как их связать и какие есть варианты.

Итак, цель:
— иметь телеграм канал, куда будут отправляться абсолютно все сообщения УД. Канал можно перенести в Архив Телеграма и заходить в него раз в неделю, чтоб убедиться, все с УД все ок.
— иметь телеграм канал, куда будут отправляться только экстренные сообщения (протечка, дым и пр.). Сделать этому каналу приоритетные уведомления, добавить всех членов семьи, чтобы при повлении там сообщений производить экстренные действия.

 

Хочу пояснить, почему лучше отправлять сообщения именно в телеграм-канал, а не в личку:
— наверняка у вас есть жена или девушка, которая живет вместе с вами и ей тоже будет полезно узнавать о критических ситуациях. Если отправлять уведомления в личку, то пришлось бы дублировать настройки, а так вы просто добавляете ее в группу. Если же вы живете один, то в эту группу будет полезно добавить ваших родителей или друзей, чтобы в случае ЧП они убедились бы, что вы увидели эти уведомления, да и вообще, что вы живы.
— уведомления с критичных датчиков — не единственный источник важной информации. У меня в эту группу отправляются также уведомления от Mikrotik о сетевой недоступности важных устройств (домашнего сервера, Wi-Fi точек доступа, IP камер видеонаблюдения и сетевого видерегистратора). Также туда шлет уведомления NodeRed, который проверяет доступность видеокамер и Z-Way по API, т.к. я уже ловил ситуации, когда по сети они пингуются, но на http запросы не отвечают, а значит и не работают; в этом случае их приходится перезагружать по питанию автоматом в эл.щитке

 

Начнем с неподходящих способов, чтобы вы как минимум знали про них, а как максимум, не теряли на их настройку свое время (как это сделал я). Можно установить через функционал Apps следующие приложения:

HTTPGet

Плюсы:
— позволяет отправлять вообще все события УД в телеграм, не надо указывать конкретные устройства. Все, что есть — все отправит.
— позволяет отправить конкретное значение: on, off, число

Минусы:
— Отправляет данные в человеко-НЕудобном формате, вроде «ZWayVDev_zway_92-3-49-1 = 51.81»

Настройка: в единственном поле указываете http запрос на отправку сообщения от уже созданного бота в уже созданную группу, например: https://api.telegram.org/bot12345678:TokenTokenToken/sendMessage?chat_id=-0000000000&text=%DEVICE% = %VALUE%

Вердикт: подходит для автоматической отправки всех событий в удаленную БД или иную систему, но для наших целей не походит.

 

HTTP Bridge

Плюсы:
— Позволяет отправлять все события по конкретному устройству. Какие устройства вручную укажете — такие и будет отправлять

Минусы:
— Если у вас изменится список устройств, то вам надо будет менять и настройки приложения. Добавили датчик в сеть — добавьте его в приложение. Забыли добавить — не получите уведомления.
— Приложение НЕ позволяет передавать конкретное значение (on / off/ число), лишь сам факт изменения.

Настройка:
— в поле URL указываете http запрос на отправку сообщения от уже созданного бота в уже созданную группу, например: https://api.telegram.org/bot12345678:TokenTokenToken/sendMessage?chat_id=-0000000000&text=Smoke detected!
— добавляете датчики, при любой сработке которых будет отправляться это сообщение. Например, можно добавить все датчики дыма. А затем создать другое правило, изменить «smoke» на «leakage» и добавить все датчики протечки.

Вердикт: позволяет указать устройства, но не пересылает конкретные значения с них, поэтому для наших нужд не подходит

 

Теперь переключимся на рабочие способы, но сперва я подскажу, как создать и настроить телеграм бота и группу.

  1. Создаем телеграм бота. Находим бота @BotFather, кнопками выбираем создание нового бота, дважды вводим его имя (оно должно быть уникальным в Телеграме) и в итоге получаем токен нашего нового бота вида bot12345678:TokenToken. Запишите и никому не говорите это значение.
  2. Создаем телеграм Группу (а не Канал). В приложении в меню выбираем соответствующую кнопку, вводим название Группы, добавляем в нее нашего нового бота. Затем заходим в настройки и делаем этого бота админом Группы, убирая все галочки и оставляя лишь те, которые заблокированы для отключения.
  3. Узнаем ID нашего канала. Пишем в канал от своего имени любой текст, например, «123». Затем открываем в браузере ссылку вида https://api.telegram.org/bot12345678:TokenToken/getUpdates, где bot12345678:TokenToken — наш токен из п.1. В открывшейся странице ищем значение ID с минусом, например, «-1234567890» — это и есть ID нашей группы (да, прям с минусом). Запишите и никому не говорите это значение.
  4. Повторите шаги 2 и 3 для создания второго канала, чтобы отделять критичные события от некритичных
  5. Не забудьте настроить группе с критичными событиями приоритетные уведомления, максимальную громкость мелодии и долгую вибрацию.

 

Теперь настроим отправку только критичных событий УД.
Под критичными я понимаю события, требующие немедленной реакции владельцев жилья, например, сработку датчиков протечки и дыма. Также у меня туда отправляется состояние сирен, т.к. их включение означает сработку датчиков движения\открытия в режиме охраны дома.

Через функционал Apps устанавливаем приложение Sensor Values Logging и настраиваем его таким образом:
— Name = Название датчика
— Sensor to log = Выберите датчик, о сработке которого вы хотите отправлять сообщение в телеграм-группу
— How to store = HTTPGet
— HTTP Request = https://api.telegram.org/bot12345678:TokenToken/sendMessage?chat_id=-1234567890&text=ДЫМ КУХНЯ = ${value}

где:
bot12345678:TokenToken — токен созданного вами недавно бота
-1234567890 — Chat ID созданного вами недавно телеграм-канала
ДЫМ КУХНЯ — название выбранного вами датчика. Для удобства восприятия в текст можно добавить эмоджи, например, ? или ?. Полный список можно найти тут: https://getemoji.com 
${value} — переменная, в которую автоматически будет подставлено значение с указанного вами выше датчика, например, on, off или числовое значение

В результате, страница настройки приложения должна выглядеть примерно так:

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

В результате, в случае сработки экстренных датчиков в вашем доме, вы узнаете об этом так:

 

Теперь настроим отправку вообще всех событий УД в телеграм-группу

Находим в функционале Apps приложение Telegram notifications, устанавливаем его, активируем и настраиваем таким образом:

Name — как вам будет удобно
Token — токен телеграм-бота, который мы создавали выше, вида «12345678:TokenToken»
Chat ID — идентификатор вашей телеграм-группы, который мы узнавали выше, вида «-1234567890» (да, прям с минусом)
User — здесь можно привязать этот канал к определенному пользователю УД, чтобы он числился за ним наравне с почтой или пушами

После заполнения этих полей мы научили Z-Way, в какую телеграм-группу и от лица какого бота можно отправлять сообщения.

Теперь настроим логику отправки сообщений. Находим в функционале Apps приложение Notification Filtering, активируем его и заполняем поля:

Name — как вам будет удобно
Recipient — A specific communication channel
Channel — выбираем строчку с нашим Chat ID
Global notifications — ставим все галочки (all error messages, all warnings, all notifications)
Убеждаемся, что у нас не выбраны конкретные устройства, а также оставляем 2 нижние галочки (Generate rules и Normalize rules) активированными.

Готово! Если хотите, можете продублировать первое приложение и расширить второе, чтобы отправлять в критичную телеграм-группу все errors и warnings, но тогда будьте готовы просыпаться по ночам, чтоб увидеть сообщения, вроде «Connection lost to Z-Wave device ID: 10» или «Failed to load module because dependency was not instanciated: [DEP]::[MODUL] = Presence» Я лично считаю такую информацию важной, но не срочной, поэтому отправляю её в почту.

 

Будет важно упомянуть и недостатки этого метода:
— если вы добавите новый экстренный датчик, то вам придется создать под него и свою копию приложения Sensor Values Logging
— этим способом мне не удалось отправлять в телеграм уведомления о низком заряде батареек в датчиках. Это очень печальный факт, учитывая, что батарейки в датчиках обычно живут всего примерно 1 год, а это значит, что примерно раз в год критичный функционал УД будет превращаться в тыкву, а вы об этом никак не узнаете. Я думаю, это скорее недоработка самого движка Z-Way или настроек приложения.
— API Телеграма ограничивает отправку сообщений от имени бота в группу частотой 20 сообщений в минуту. Если у вас много датчиков или они часто срабатывают, то вы вполне можете поймать эти ограничения. В этом случае подумайте о сокращении отправок статусов с датчиков, это не только улучшит работу всего УД, но и увеличит срок службы батареек.
— после каждой перезагрузки контроллера УД он инициализирует состояние датчиков как off, что вызывает отправку в телеграм-группу соответствующего сообщения. Это немного отвлекает от жизни и раздражает нереальностью угрозы, но зато позволяет узнавать о факте перезагрузки контроллера (а точнее, о его успешной загрузке после перезагрузки. Если он просто выключится, вам ничего не придет — для отслеживания таких ситуаций контролировать состояние контроллера УД надо сторонним устройством, например, роутером Mikrotik).
У меня эта ложная сработка выглядит так:

 

Надеюсь, эта статья была вам полезна. Если вам есть что добавить, обязательно напишите это в комментариях

Leave a Comment

You must be logged in to post a comment.