В качестве предисловия
Программа Дом от компании Apple позволяет нам получать уведомления от определенных датчиков, где текст уведомления уже заложен Apple и нам остается использовать заложенные функции "как есть", либо не использовать. Многие уже пишут более сложные автоматизации и, соответственно, возникает вопрос о передаче уведомлений, которые не предусмотрены Apple или используют Андроид, где этого вообще не предусмотрено.
В качестве наглядного примера рассмотрим получение уведомления о показаниях температуры, влажности и давления каждый час, и сообщения о том, что входная дверь не закрыта.
Установка Telegram
Если Вы читаете статью, то скорее всего, мессенджер у Вас уже установлен и нужно установить своего собственного бота.
Находим в телеграмме @BotFather и запускаем. Вводим команду /newbot, далее задаем имя своего бота, после задаем имя пользователя, которое должно оканчиваться на _bot. Если имя уже занято, надо ввести другое уникальное имя. В сообщении об успешном создании Вы найдете токен и кликнув на ссылку t.me/"Имя вашего бота" запускаете его, после чего он появится в списке ваших контактов.
Через вкладку manage palette устанавливаем плагин node-red-contrib-telegrambot. Открываем пустое флоу и добавляем две ноды Telegram и ноду debug, как на картинке снизу. Она нам понадобится для получения значения chatId, необходимого для формирования отправляемого сообщения.
Заходим в ноду Sender, выбираем add new telegram bot и заполняем поля Имя бота, Токен бота, update mode - polling, polling interval - 1000. Если хотите использовать Socks5, то поставьте галочку и введите необходимые данные. Далее в ноде Receiver выбираем тоже имя бота, которое ввели в ноде Sender. После чего делаем deploy.
Теперь можно отправить сообщение с вашего Мессенджера и вы должны получить ответ в качестве эха, причем в debag ноде будет цифровое значение chatId, которое надо будет ввести в функции Telegramm, ссылка на тестовое флоу. Принцип работы этой функции прост - она посылает текстовое сообщение, которое вы сформируете в msg.payload и перешлете на вход этой функции.
Пример работы с сообщениями
Так выглядит тестовое флоу для работы с сообщениями. Левый верхний угол занимает установка глобальных данных погоды при старте Node-Red, на тот случай, если у Вас нет датчика Aqara или вы его не пробросили в Node-Red. Правая часть - это, собственно, проброс датчика Aqara через Deconz с записью показаний в глобальные данные. Выход данных функций можно смело заводить прямо на Китовые ноды, но при этом надо помнить, что давление в Кит здесь проброшено как датчик освещенности.
Средняя часть - работа датчика открытия двери с возможностью симуляции, если пока датчика нет в наличии. Нода inject "Переключатель" меняет состояние каждый раз на противоположное. Ноды change содержат в себе необходимый текст. И конечно, если вы открыли дверь и не закрыли в течении 30 секунд, то получите сообщение о незакрытой двери.
Нижняя часть - непосредственно работа с Telegram. На вход функции Telegramm отправляете все необходимые сообщения в текстовом формате, предварительно не забываем исправить номер chatId на ваш собственный. Более детально остановлюсь на функции Weather. Ее необходимость возникла при отправке не только текстовых данных, но и числовых значений, а также если я хочу отправить несколько предложений одним блоком. Она считывает показатели Температуры, влажности и давления и формирует блок данных, можно также добавлять эмоджи в текстовое поле, предварительно их скопировав. Если воспользоваться нодой inject "Погода", то получите сообщение одним блоком. Эта же нода настроена на отправку данных каждый час. Switch TelegrammIn позволяет пропускать события, если будет отправлено сообщение "Погода" с вашего бота и как результат, вы получите сообщение, сформированное функцией Weather. Обязательно загрузите тестовое флоу, там много комментариев, среди которых Вы найдете возможность надежно отправлять сообщения, а также можно сразу тестировать альтернативный способ доставки сообщений и управления через мессенджер.
В дополнение ко всему сказанному: если у Вас нет желания получать сообщения при определенных условиях (Вы дома, временной интервал или что-то еще) вы всегда можете воспользоваться логическими нодами, которые будут пропускать или не пропускать сообщения по вашему желанию. Если очень нужно, то можете пробросить в HomeKit виртуальный переключатель, который будет включать/выключать отправку сообщений. Как работать с логическими нодами и глобальными данными Вы найдете в статье по ссылке.
Правда одно замечание :) перед экспортом желательно все параметры серверов деконза и т.п. устанавливать в "Add new server" а то приезжают серверы с настройками автора и потом система постоянно на них ругается
Опа, а я и не знал что так можно. Учту на будущее.
Кроме телеграмма (в семье (не без урода) я один им пользуюсь) вообще есть халявный способ слать уведомления в другие месенджеры?
Например, Slack. Пока нашему РКН не интересен, поэтому работает без бубнов.
Телеграмм интересен еще тем, что можно организовать управление устройствами через него с менюшками, как резервный канал. Получать информацию по запросу.
Ubuntu Docker Node RED. Вечер потрачен впустую. Не удалось завести сие чудо. И сокс через прокси пробовал. Глушняк полный! Были проскоки сообщений в обратку(пару раз), но чаще горит Polling error. Tor порт слушал, нода не коннектится. Думаю это все Ростелеком.
Polling = 1000
Спасибо за труд. Чтобы всё это заработало пришлось изучить еще тему поднятия VPN и SOCKS сервера))
Теперь очень жду продолжения с темой Telegram команд, inline keyboard и т.д. В чате уже проскакивают примеры и поэтому хочется уже построить свое взаимодействие через Telegram
Внутри флоу подсказка😀
Я видел подсказку. Скажите, а у вас HA в Docker или на PI шке?
Здравствуйте.
у меня постоянная ошибка на обоих нодах "polling error". в поле
Polling установлено значение 1000
Подскажите в чем может быть проблема...
Приветствую!
Огромное спасибо, за труд!
Подскажите, пожалуйста, у меня возникла проблема (а точнее - не понял) куда именно нужно
chatId? Вставил в настройках бота в поле
ChatIds, но Дебагер выдает:
msg : string[27]"msg.payload.chatId is empty" Или проблема в другом? Не могу получить простое уведомление о срабатывании датчика...
return msg; и я ответ получаю а вот как динамически изменять chatId для другого человека? дверь открывается беззвучно и хотелось бы слать ответ любому chatId