Node-RED Telegram: различия между версиями
(не показано 48 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Настройка Telegram-бота на контроллере Wiren Board }} | {{DISPLAYTITLE: Настройка Telegram-бота на контроллере Wiren Board }} | ||
{{Draft}} | |||
== Подготовка == | == Подготовка == | ||
Для настройки Telegram-бота на контроллере Wiren Board нам понадобится установленный [[Node-Red | Node-RED] и настроенный плагин [[Node-Red#WB_Nodes |WB Nodes]] и созданный Telegram-бот. | |||
Для настройки Telegram-бота на контроллере | |||
Настройка делается через встроенный в Node-Red веб-интерфейс, который доступен по адресу '''http://wb-ip-address:1880''', например, http://192.168.42.1:1880. | |||
== Создание бота == | |||
Если у вас нет телеграм-бота, то создайте его: | Если у вас нет телеграм-бота, то создайте его: | ||
# Установите | # Установите клиента [https://telegram.org Telegram] и зарегистрируйте аккаунт. | ||
# Найдите в Telegram бота '''@BotFather''' и запустите его. | # Найдите в Telegram бота '''@BotFather''' и запустите его. | ||
# | # Теперь создайте нового бота и настройте его: | ||
#* введите команду <code>/newbot</code>, | #* введите команду <code>/newbot</code>, | ||
#* задайте название бота | #* задайте название бота | ||
#* придумайте и напишите имя бота, оно должно заканчиваться на | #* придумайте и напишите имя бота, оно должно заканчиваться на ''_bot''. | ||
# В сообщении об успешном создании нового бота: | # В сообщении об успешном создании нового бота: | ||
#* скопируйте API-токен для подключения к боту, | #* скопируйте API-токен для подключения к боту, | ||
Строка 32: | Строка 20: | ||
Всё, теперь мы готовы настраивать его на контроллере Wiren Board. | Всё, теперь мы готовы настраивать его на контроллере Wiren Board. | ||
== Установка | == Установка плагина == | ||
Чтобы Node-RED смог работать с Telegram, установите | Чтобы Node-RED смог работать с Telegram, установите плагин <code>node-red-contrib-telegrambot</code>: | ||
Зайдите в веб-интерфейс Node-RED. | |||
# В правом верхнем углу вызовите меню. | |||
# Выберите пункт ''Настройки'' (Settings). | |||
# В открывшемся окне выберите вкладку '''Палитра''' (Palette). | |||
# Перейдите на вкладку '''Установка''' (Install), введите в поле поиска '''node-red-contrib-telegrambot'''. | |||
# Установите пакет с названием node-red-contrib-telegrambot. | |||
# Закройте окно с настройками. Установка плагина завершена. | |||
После установки, в левой панели появится | После установки, в левой панели появится вкладка telegram. | ||
== Создание ноды для бота == | == Создание ноды для бота == | ||
Перед тем, как передавать данные из контроллера в чат с ботом, нам нужно настроить ноду нашего бота: | Перед тем, как передавать данные из контроллера в чат с ботом, нам нужно настроить ноду нашего бота: | ||
# Перетяните в рабочую область ноду '''sender'''. | # Перетяните в рабочую область ноду '''sender'''. | ||
Строка 60: | Строка 51: | ||
== Пересылка принятых сообщений == | == Пересылка принятых сообщений == | ||
Добавьте ноду, которая будет принимать сообщения, отправленные в чат с ботом: | Добавьте ноду, которая будет принимать сообщения, отправленные в чат с ботом: | ||
Строка 78: | Строка 67: | ||
# Перетяните в рабочую область ноду '''function'''. | # Перетяните в рабочую область ноду '''function'''. | ||
# Дважды кликните на ней — откроется окно '''Edit function node'''. | # Дважды кликните на ней — откроется окно '''Edit function node'''. | ||
# На вкладке обработчика | # На вкладке обработчика onMessage должна быть написана строка | ||
#:<syntaxhighlight lang="javascript"> | #:<syntaxhighlight lang="javascript"> | ||
return msg; | return msg; | ||
Строка 86: | Строка 75: | ||
После настройки всех трёх нод, соедините их между собой: | После настройки всех трёх нод, соедините их между собой: | ||
# Верхний выход ноды '''receiver''' соедините | # Верхний выход ноды '''receiver''' соедините со входом функции. | ||
# Выход функции соедините | # Выход функции соедините со входом ноды '''sender'''. | ||
После настройки нод и соединений между ними, опубликуйте изменения нажатием на кнопку '''Deploy''' в правой верхней части веб-интерфейса Node-RED. | После настройки нод и соединений между ними, опубликуйте изменения нажатием на кнопку '''Deploy''' в правой верхней части веб-интерфейса Node-RED. | ||
Строка 93: | Строка 82: | ||
Теперь перейдите в чат к боту и отправьте ему произвольное сообщение, если бот прислал это же сообщение вам в ответ, то всё настроено правильно и можно переходить к более сложным задачам. | Теперь перейдите в чат к боту и отправьте ему произвольное сообщение, если бот прислал это же сообщение вам в ответ, то всё настроено правильно и можно переходить к более сложным задачам. | ||
== Запрос информации с | == Запрос информации с контроллера == | ||
Чтобы Node-RED мог общаться с MQTT-брокером контроллера, у вас должен быть настроен плагин [[Node-Red#WB_Nodes |WB Nodes]]. | Чтобы Node-RED мог общаться с MQTT-брокером контроллера, у вас должен быть настроен плагин [[Node-Red#WB_Nodes |WB Nodes]]. | ||
Настроим бота так, чтобы он присылал температуру процессора контроллера Wiren Board в ответ на команду <code>/cputemp</code>. | Настроим бота так, чтобы он присылал температуру процессора контроллера Wiren Board в ответ на команду <code>/cputemp</code>. | ||
{{note|info|Перед | {{note|info|Перед настройкой бота очистите рабочее поле — это исключит ложные срабатывания на команду из чата. При очистке все настройки соединения с контроллером и телеграм-ботом сохранятся.}} | ||
=== ChatId === | === ChatId === | ||
ChatId — это идентификатор чата с ботом, он нужен, чтобы бот понимал куда ему отвечать. | ChatId — это идентификатор чата с ботом, он нужен, чтобы бот понимал куда ему отвечать. | ||
В предыдущем примере chatId был в принятом сообщении, | В предыдущем примере chatId был в принятом сообщении, поэтому указывать его не было нужно. В этом примере, мы будем формировать своё сообщение, поэтому нам нужно знать кто запросил данные. | ||
Так как chatId есть в любом принятом сообщении, то мы можем его сохранить в момент получения команды, а потом подставить при формировании ответа: | |||
# Добавьте ноду приёма сообщений: | # Добавьте ноду приёма сообщений: | ||
#* Перетяните в рабочую область ноду '''receiver'''. | #* Перетяните в рабочую область ноду '''receiver'''. | ||
#* Дважды кликните на ней — откроется окно '''Edit receiver node'''. | #* Дважды кликните на ней — откроется окно '''Edit receiver node'''. | ||
#* Выберите в поле '''Bot''' созданную раньше ноду бота. | #* Выберите в поле '''Bot''' созданную раньше ноду бота. | ||
#* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | #* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | ||
# Добавьте ноду, которая будет сохранять chatId: | # Добавьте ноду, которая будет сохранять chatId: | ||
#* Перетяните в рабочую область ноду '''function'''. | #* Перетяните в рабочую область ноду '''function'''. | ||
#* Дважды кликните на ней — откроется окно '''Edit function node'''. | #* Дважды кликните на ней — откроется окно '''Edit function node'''. | ||
#* На вкладке обработчика | #* На вкладке обработчика onMessage удалите содержимое поля ввода и введите строку: | ||
#*:<syntaxhighlight lang="javascript"> | #*:<syntaxhighlight lang="javascript"> | ||
flow.set("chatId",msg.payload.chatId); | flow.set("chatId",msg.payload.chatId); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
#*: это значит, что функция | #*: это значит, что функция сохранить chatId из поступившего сообщения в глобальную переменную chatId. | ||
#* Сохраните настройки, нажатием на кнопку '''Done'''. | #* Сохраните настройки, нажатием на кнопку '''Done'''. | ||
=== Обработка команды === | === Обработка команды === | ||
В предыдущем примере бот реагировал на любое входящее сообщение — теперь мы научим его понимать команды. | |||
В предыдущем примере бот реагировал на любое входящее сообщение — теперь мы научим его понимать команды | |||
# Добавьте реакцию на команду <code>/cputemp</code>: | # Добавьте реакцию на команду <code>/cputemp</code>: | ||
#* Перетяните в рабочую область ноду '''command'''. | #* Перетяните в рабочую область ноду '''command'''. | ||
#* Дважды кликните на ней — откроется окно '''Edit command node'''. | #* Дважды кликните на ней — откроется окно '''Edit command node'''. | ||
#* Выберите в поле '''Bot''' ноду | #* Выберите в поле '''Bot''' созданную раньше ноду бота. | ||
#* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | #* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | ||
# Добавьте запрос температуры процессора контроллера: | # Добавьте запрос температуры процессора контроллера: | ||
#* Перетяните в рабочую область ноду '''get''', она находится в разделе Wiren Board. | #* Перетяните в рабочую область ноду '''get''', она находится в разделе Wiren Board. | ||
#* Дважды кликните на ней — откроется окно '''Edit get node'''. | #* Дважды кликните на ней — откроется окно '''Edit get node'''. | ||
#* Выберите в поле '''Server''' созданное | #* Выберите в поле '''Server''' созданное раньше соединение с контроллером. | ||
#* В поле '''Channel''' откройте список каналов и найдите там '''CPU Temperature'''. | #* В поле '''Channel''' откройте список каналов и найдите там '''CPU Temperature'''. | ||
#* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | #* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | ||
Строка 147: | Строка 126: | ||
#* Перетяните в рабочую область ноду '''function'''. | #* Перетяните в рабочую область ноду '''function'''. | ||
#* Дважды кликните на ней — откроется окно '''Edit function node'''. | #* Дважды кликните на ней — откроется окно '''Edit function node'''. | ||
#* На вкладке обработчика | #* На вкладке обработчика onMessage удалите содержимое поля ввода и введите строки: | ||
#*:<syntaxhighlight lang="javascript"> | #*:<syntaxhighlight lang="javascript"> | ||
msg.payload = { | msg.payload = { | ||
Строка 163: | Строка 142: | ||
#* Выберите в поле '''Bot''' ноду бота. | #* Выберите в поле '''Bot''' ноду бота. | ||
#* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | #* Чтобы сохранить настройки, нажмите кнопку '''Done'''. | ||
# Опубликуйте флоу нажатием на кнопку '''Deploy'''. Возле нод '''receiver''' и '''sender''' должны появится надписи ''connected''. | # Опубликуйте флоу нажатием на кнопку '''Deploy'''. Возле нод '''receiver''' и '''sender''' должны появится надписи ''connected''. | ||
Строка 181: | Строка 155: | ||
61.414 | 61.414 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Версия 10:06, 4 августа 2021
Это черновик страницы. Последняя правка сделана 04.08.2021 пользователем A.Degtyarev.
Подготовка
Для настройки Telegram-бота на контроллере Wiren Board нам понадобится установленный [[Node-Red | Node-RED] и настроенный плагин WB Nodes и созданный Telegram-бот.
Настройка делается через встроенный в Node-Red веб-интерфейс, который доступен по адресу http://wb-ip-address:1880, например, http://192.168.42.1:1880.
Создание бота
Если у вас нет телеграм-бота, то создайте его:
- Установите клиента Telegram и зарегистрируйте аккаунт.
- Найдите в Telegram бота @BotFather и запустите его.
- Теперь создайте нового бота и настройте его:
- введите команду
/newbot
, - задайте название бота
- придумайте и напишите имя бота, оно должно заканчиваться на _bot.
- введите команду
- В сообщении об успешном создании нового бота:
- скопируйте API-токен для подключения к боту,
- нажмите на ссылку
t.me/имя_вашего_бота
, откроется диалог с ботом — запустите его командой/start
Всё, теперь мы готовы настраивать его на контроллере Wiren Board.
Установка плагина
Чтобы Node-RED смог работать с Telegram, установите плагин node-red-contrib-telegrambot
:
Зайдите в веб-интерфейс Node-RED.
- В правом верхнем углу вызовите меню.
- Выберите пункт Настройки (Settings).
- В открывшемся окне выберите вкладку Палитра (Palette).
- Перейдите на вкладку Установка (Install), введите в поле поиска node-red-contrib-telegrambot.
- Установите пакет с названием node-red-contrib-telegrambot.
- Закройте окно с настройками. Установка плагина завершена.
После установки, в левой панели появится вкладка telegram.
Создание ноды для бота
Перед тем, как передавать данные из контроллера в чат с ботом, нам нужно настроить ноду нашего бота:
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- В поле Bot нажмите на кнопку с карандашом, откроется окно Edit telegram bot node.
- В открывшемся окне заполните поля:
- Bot-Name — произвольное имя
- Token — API-токен, который вы получили при создании бота в мессенджере Telegram.
- Users — имена telegram-пользователей, которые смогут отправлять боту команды и получать данные.
- Update Mode — выберите Pooling
- Poll Interval — установите 1000.
- Сохраните настройки нажатием кнопки Done.
- Вы вернётесь в окно Edit sender node, в котором нажмите Cancel.
Создание ноды бота завершено, теперь мы можем использовать её для соединения с telegram-ботом.
Пересылка принятых сообщений
Добавьте ноду, которая будет принимать сообщения, отправленные в чат с ботом:
- Перетяните в рабочую область ноду receiver.
- Дважды кликните на ней — откроется окно Edit receiver node.
- Выберите в поле Bot созданную раньше ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
Добавьте ноду, которая будет отправлять сообщения в чат с ботом:
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- Выберите в поле Bot ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
Дальше нам нужно добавить логику обработки входящих сообщений. Настройте пересылку входящих сообщений обратно в чат:
- Перетяните в рабочую область ноду function.
- Дважды кликните на ней — откроется окно Edit function node.
- На вкладке обработчика onMessage должна быть написана строка
return msg;
- это значит, что функция возвращает целиком сообщение, которое пришло на её вход.
- Сохраните настройки, нажатием на кнопку Done.
После настройки всех трёх нод, соедините их между собой:
- Верхний выход ноды receiver соедините со входом функции.
- Выход функции соедините со входом ноды sender.
После настройки нод и соединений между ними, опубликуйте изменения нажатием на кнопку Deploy в правой верхней части веб-интерфейса Node-RED.
Теперь перейдите в чат к боту и отправьте ему произвольное сообщение, если бот прислал это же сообщение вам в ответ, то всё настроено правильно и можно переходить к более сложным задачам.
Запрос информации с контроллера
Чтобы Node-RED мог общаться с MQTT-брокером контроллера, у вас должен быть настроен плагин WB Nodes.
Настроим бота так, чтобы он присылал температуру процессора контроллера Wiren Board в ответ на команду /cputemp
.
Перед настройкой бота очистите рабочее поле — это исключит ложные срабатывания на команду из чата. При очистке все настройки соединения с контроллером и телеграм-ботом сохранятся.
ChatId
ChatId — это идентификатор чата с ботом, он нужен, чтобы бот понимал куда ему отвечать.
В предыдущем примере chatId был в принятом сообщении, поэтому указывать его не было нужно. В этом примере, мы будем формировать своё сообщение, поэтому нам нужно знать кто запросил данные.
Так как chatId есть в любом принятом сообщении, то мы можем его сохранить в момент получения команды, а потом подставить при формировании ответа:
- Добавьте ноду приёма сообщений:
- Перетяните в рабочую область ноду receiver.
- Дважды кликните на ней — откроется окно Edit receiver node.
- Выберите в поле Bot созданную раньше ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Добавьте ноду, которая будет сохранять chatId:
- Перетяните в рабочую область ноду function.
- Дважды кликните на ней — откроется окно Edit function node.
- На вкладке обработчика onMessage удалите содержимое поля ввода и введите строку:
flow.set("chatId",msg.payload.chatId);
- это значит, что функция сохранить chatId из поступившего сообщения в глобальную переменную chatId.
- Сохраните настройки, нажатием на кнопку Done.
Обработка команды
В предыдущем примере бот реагировал на любое входящее сообщение — теперь мы научим его понимать команды.
- Добавьте реакцию на команду
/cputemp
:- Перетяните в рабочую область ноду command.
- Дважды кликните на ней — откроется окно Edit command node.
- Выберите в поле Bot созданную раньше ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Добавьте запрос температуры процессора контроллера:
- Перетяните в рабочую область ноду get, она находится в разделе Wiren Board.
- Дважды кликните на ней — откроется окно Edit get node.
- Выберите в поле Server созданное раньше соединение с контроллером.
- В поле Channel откройте список каналов и найдите там CPU Temperature.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Теперь настройте формирование ответного сообщения:
- Перетяните в рабочую область ноду function.
- Дважды кликните на ней — откроется окно Edit function node.
- На вкладке обработчика onMessage удалите содержимое поля ввода и введите строки:
msg.payload = { chatId: flow.get("chatId"), type: 'message', content: msg.payload }; return msg;
- здесь мы создали ответное сообщение типа message, заполнили chatId и в содержимом передали поступившую из ноды get информацию.
- Сохраните настройки, нажатием на кнопку Done.
- Добавьте ноду, которая отправит наше сообщение в чат с ботом:
- Перетяните в рабочую область ноду sender.
- Дважды кликните на ней — откроется окно Edit sender node.
- Выберите в поле Bot ноду бота.
- Чтобы сохранить настройки, нажмите кнопку Done.
- Опубликуйте флоу нажатием на кнопку Deploy. Возле нод receiver и sender должны появится надписи connected.
Настройка бота завершена.
Запрос данных в телеграм-чате с ботом
Теперь проверим работу нашего бота:
- Перейдите в мессенджер Telegram.
- Откройте чат с ботом.
- Введите команду
/cputemp
, бот должен прислать ответ:/cputemp 61.414