Как с контроллера modbus передать сообщения telegram

от admin

Kincony KC868-A4: ультимативный гайд. Часть 3: управление контроллером через Telegram-бота

В предыдущей статье цикла о Kincony KC868-A4 было рассмотрено «атомарное» программирование компонентов этого контроллера, в этой статье будем разбирать более продвинутый пример работы с KC868-A4 — управление вашей (IoT) системой через интернет.

Способов управления контроллером через интернет существует множество, сегодня мы поговорим об управлении при помощи популярного мессенджера Telegram. Если у вас на смартфоне установлен Telegram, то вы сможете очень удобно получать информационные сообщения от вашей системы и отдавать ей управляющие команды, где бы вы ни находились.

Ну и, конечно, когда вы добавите к основной функциональности вашего контроллера ещё и удалённое управление, то возможности вашей системы выйдут на совсем другой, более высокий, уровень.

▍ Как устроено управление через Telegram

Для непосвящённого человека такая вещь, как «управление контроллером через Telegram» выглядит чем-то не совсем понятным, сродни магии. Тем более управление Ардуино-контроллером через Telegram — что и как там работает, на первый взгляд, совершенно непонятно. На самом деле всё довольно просто — смартфон и контроллер обмениваются информацией, а Telegram в этой схеме выступает посредником между ними.

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

Telegram, как система, имеет множество возможностей, одной из которых являются так называемые «боты». Бот — это программный робот, который может взаимодействовать с пользователями через интерфейс Telegram и в данном случае мы будем использовать такого бота для организации управления контроллером Kincony KC868-A4.

Условно, вышеприведённую схему можно представить так:

Всё взаимодействие Telegram и контроллера (Kincony KC868-A4) скрыто от пользователя, он на экране своего смартфона видит только реакцию бота на свои действия. Тут важный момент, который нужно хорошо понимать: интерфейс бота обеспечивает Telegram, а вот специфическую «контроллерную» реакцию (действия, ассоциированные с контроллером) обеспечивает сам контроллер (в нашем случае Kincony KC868-A4).

Примечание. Кстати, в более привычных для вас случаях различных (публичных) ботов в Telegram, там, где у нас на схеме присутствует контроллер, находятся различные «взрослые» компьютерные системы, которые и обеспечивают функциональность этих ботов.

Если вы внимательно прочитали всё вышеизложенное, то вам должно стать в целом понятно как работает подобное управление через мессенджер Telegram (или любой другой). Теперь перейдём к разбору различных нюансов работы этой схемы.

▍ Безопасность

Взаимодействие между сервисом Telegram и вашим смартфоном является безопасным по умолчанию — разработчики в первую очередь позаботились об этом, поскольку мессенджер с небезопасным соединением не нужен никому.

А вот что касается соединения Telegram–Контроллер, то тут не всё так просто — это взаимодействие (через небезопасный интернет) нужно как-то защитить. И тут возникает два аспекта проблемы:

1. Нужно защитить само соединение. Поскольку мы используем микроконтроллер, то по умолчанию используются незащищённые соединения. Для решения этой проблемы нужно использовать специальную защищённую версию клиента (библиотеки).

2. Нужно идентифицировать наш контроллер , чтобы никто, кроме нашего контроллера, не смог управлять ботом. Эта проблема решается путём получения токена (специального уникального кода) в Telegram для доступа к нашему боту.

Далее мы более подробно остановимся на тонкостях обеспечения безопасности нашего Telegram–бота, а сейчас переходим от теории к практическим действиям и начнём мы с создания Telegram-бота, который будет управлять нашим контроллером.

▍ Создаём Telegram-бота

Чтобы создать бота для управления нашим контроллером, нам нужно воспользоваться услугами «папы» всех ботов в Telegram (BotFather). Для этого в строке поиска набираем «bot», находим BotFather и выбираем его.

При запуске BotFather предлагает небольшую справку и ссылки на подробную документацию и описание функций.

Сейчас нас эти подробности не очень интересуют и мы просто вводим первую команду «/start», на что BotFather отвечает списком управляющих команд.

Далее, воспользовавшись подсказкой BotFather, вводим команду для создания нового бота «/newbot».

Затем, на просьбу указать название нового бота, вводим название тестового бота для управления нашим контроллером KC868-A4 — «a4testbot».

И последний шаг — вводим username бота и получаем уникальный токен для управления им (на скриншоте сам токен скрыт, по понятным соображениям).

Собственно — всё, бота для управления контроллером Kincony KC868-A4 мы создали, теперь осталось только получить ваш ID пользователя Telegram для того, чтобы только вы могли управлять вашим контроллером (и никто другой).

▍ Получаем ID пользователя

Для того чтобы получить ID пользователя Telegram, нам нужно воспользоваться ещё одним ботом — IDBot. Находим его аналогично вышеописанному способу для BotFather и получаем следующее приветствие.

Вводим команду «/start» и получаем ваш ID пользователя для дальнейшего использования при программировании бота.

Теперь действительно всё, и мы можем переходить непосредственно к программированию нашего бота управления контроллером Kincony KC868-A4.

▍ Программирование

Это уже 3-я статья цикла о контроллере Kincony KC868-A4 и в предыдущих статьях мы подробно разбирали настройку среды программирования (Arduino) и рассматривали примеры «атомарного» программирования различных компонентов KC868-A4, поэтому перед дальнейшим чтением рекомендуем ознакомиться с предыдущими статьями этого цикла 1-я часть, 2-я часть (если вы ещё с ними не знакомы).

Для работы с API Telegram мы будем использовать специализированную библиотеку Universal-Arduino-Telegram-Bot, которая возьмёт на себя львиную долю трудозатрат по обеспечению взаимодействия нашего кода с сервисом Telegram и значительно облегчит и упростит нам задачу программирования нашего бота управления контроллером Kincony KC868-A4.

Нам также понадобится вспомогательная библиотека ArduinoJson, которая содержит необходимые функции работы с данными в формате Json.

На этом вступительную часть по программированию можно завершить и далее мы переходим непосредственно к составлению и разбору работы скетча нашего Telegram-бота.

▍ Скетч Telegram-бота

В качестве тестового примера управления контроллером Kincony KC868-A4 при помощи Telegram-бота мы будем реализовывать самый простой и наглядный сценарий работы — включение и выключение одного из реле контроллера командами в интерфейсе Telegram и запрос текущего статуса этого реле (ON/OFF).

Ниже приведён полный код нашего Telegram-бота, в котором вы должны изменить пустые данные на ваши реальные пароли, токены, названия Wi-Fi точек доступа и т. п., чтобы всё работало. Сначала вы должны внести в скетч ваши SSID и пароль от Wi-Fi.

Затем токен для управления ботом, получение которого мы рассмотрели выше.

И ваш идентификатор в Telegram, получение которого мы тоже рассмотрели ранее.

Также нам нужно сделать некоторые дополнительные настройки в скетче. Задаём номер пина одного из четырёх реле Kincony KC868-A4 (см. схему и распиновку контроллера в предыдущих статьях).

И сам код нашего Telegram-бота:

Теперь кратко разберём основные части этого скетча. На функциях setup() и loop() мы останавливаться не будем — там всё стандартно и тривиально — в функции setup() производится инициализация и подключение к сети Wi-Fi, а в функции loop() производится постоянный мониторинг поступления новых сообщений от сервиса Telegram (от вас, как пользователя).

Основная функциональность бота реализуется в функции handleNewMessages(int numNewMessages), где в цикле обрабатываются поступившие сообщения.

Производится проверка легитимности вашего подключения и игнорирование неавторизованных пользователей (с другими ID).

Далее выводится приветственное сообщение и подсказка по доступным командам нашего бота.

Затем задаётся реакция на команды включения/выключения реле.

И реакция на запрос текущего статуса реле.

Стоит ещё заметить, что для коммуникации с сервисом Telegram используется защищённая версия Wi-Fi клиента, чтобы обеспечить безопасность работы бота и управления контроллером.

Ну и наглядный результат работы нашего Telegram-бота в виде скриншота. Обратите внимание на последнюю команду «/state», которая не возымела никакого действия — это происходит при выключении (или недоступности по какой-либо причине) Arduino-контроллера — бот просто перестаёт отвечать на ваши команды в интерфейсе Telegram.

Как вы можете заметить, благодаря библиотеке Universal-Arduino-Telegram-Bot создание Arduino-ботов для управления вашими IoT системами через Telegram превращается в невероятно простое и доступное занятие — код предельно прост и прозрачен.

Отсюда следует и ещё один очень позитивный вывод: для того чтобы расширить базовую функциональность нашего тестового бота, вам не понадобятся какие-то особые познания в программировании — это сможет сделать даже начинающий любитель программирования и микроконтроллеров.

▍ Заключение

В этой статье мы рассмотрели продвинутый пример управления контроллером Kincony KC868-A4 через интернет при помощи Telegram-бота и выяснили, что это совсем несложно и доступно даже для начинающих любителей Arduino.

В следующей статье мы, наконец, доберёмся до «тяжёлой артиллерии» и познакомимся с примерами работы Kincony KC868-A4 под управлением комплексных ESP32-прошивок наподобие Tasmota, ESPhome или специализированной версии AMS.

У компании Kincony есть Youtube-канал со множеством интересных примеров программирования и использования её продукции, в одном из роликов на этом канале описывается (правда, на английском языке и немного сумбурно) создание Telegram-бота.

Управление через Telegram и Viber: Вопросы и ответы

1. Как начать работу с контроллером через Telegram?

Установите приложение Telegram на смартфон.

Включите настройку Привязка номера телефона к боту разрешена на странице конфигуратора Инженерное меню.

Настройте контроллер для работы через Интернет и выведите его в онлайн.

С помощью строки поиска Telegram найдите бот ccurobot.

Начните диалог с ботом и выполните привязку телефонного номера в соответствии с подсказками.

2. Как начать работу с контроллером через Viber?

Установите приложение Viber на смартфон.

Включите настройку Привязка номера телефона к боту разрешена на странице конфигуратора Инженерное меню.

Настройте контроллер для работы через Интернет и выведите его в онлайн.

viber ccurobot qr

Начните диалог с ботом и выполните привязку телефонного номера в соответствии с подсказками.

3. Как войти в конфигуратор CCU Shell без ввода имени пользователя и пароля?

Войдите в меню бота Контроллеры и выберите нужный контроллер.

Выберите пункт меню CCU Shell .

Дождитесь ответа со ссылкой для входа в CCU Shell и нажмите на нее.

bot ccu shell

4. Как добавить в бот еще один контроллер?

В новом контроллере добавьте свой номер телефона на странице конфигуратора Соединения.

Данный номер телефона должен быть привязан к боту.

Выведите контроллер в онлайн.

Контроллер автоматически появится в боте в меню Контроллеры.

5. Что означает сообщение Вы находитесь в списке контроллеров?

Если вы находитесь в боте в меню контроллера (не в списке контроллеров), и данный контроллер выходит из сети, то бот присылает сообщение: Вы находитесь в списке контроллеров. Фактически происходит принудительный выход из меню отключившегося от сети контроллера. Данное поведение изменить нельзя.

6. Что означают сообщения Контроллер в сети / Контроллер не в сети?

Сообщения в сети / не в сети означают, что по каким-то причинам происходит отключение и подключение контроллера к Интернету. В нормальных условиях данные сообщения редки. Как правило, их получение может быть связано с техническими работами на стороне сотового оператора. В Telegram эти сообщения беззвучны. Viber не имеет возможности отправки беззвучных сообщений. Если контроллер успевает быстро подключиться после отключения, то бот не пришлет сообщения.

Если сообщения в сети / не в сети стали приходить слишком часто, можно предпринять следующие действия:

Выяснить, SIM-карта какого сотового оператора вставлена в контроллер.

Проверить тариф для данной SIM-карты. Убедиться, что тариф не предназначен только для планшетов.

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

Попробовать использовать выносную GSM-антенну.

Вставить в контроллер SIM-карту другого сотового оператора.

Если вопрос с плохой сотовой связью решить сложно, то можно включить запрет событий в сети / не в сети на странице конфигуратора Соединения. После чего данные сообщения приходить не будут. Но в этом случае могут возникнуть сложности с использованием контроллера в боте, так как он может оказаться не в сети в нужный момент времени. Это крайняя мера для опытных пользователей.

Читать:
Как отписаться от канала в телеграмме

Что такое Modbus и RS-485 — максимально просто

Изучая оборудование систем Умный Дом и вообще почти любой автоматики и диспетчеризации мы постоянно сталкиваемся с упоминанием протокола Modbus и порта RS-485.

Например, у контроллера EasyHomePLC есть два порта RS-485 и два порта RS-232, у контроллера Wiren Board есть два порта RS-485, у контроллера Beckhoff CX-8080 есть порт RS-485 и порт RS-232. У различного оборудования есть возможность управления по протоколу Modbus: кондиционеры, вентустановки, модули ввода-вывода. А ещё программное обеспечение EasyHome связывается с контроллером по протоколу Modbus TCP. Что всё это означает? Значит ли это, что если у контроллера есть интерфейс Modbus, и у устройства есть такой интерфейс, они сразу заработают вместе? Многие так считают, но это неверно. Объясню максимально просто и понятно.

Что такое RS-485

RS-485 — это стандарт физического уровня. Что это означает? Он определяет следующие параметры общения устройств:

  • связь кабелем «витая пара» по двум жилам
  • максимальная длина кабеля 1200 метров
  • дискретные сигналы (либо 1, либо 0)
  • если напряжение жилы А больше напряжения жилы В более, чем на 200 милливольт, то сигнал считается единицей. Если наоборот, то нулем
  • скорость общения может быть до 1 мегабита в секунду по одной витой паре и до 10 мегабит по двум витым парам
  • максимальный ток в шине 250 миллиампер
  • напряжение от -7 до +12 вольт постоянного тока
  • в один момент времени может передавать информацию только одно устройство в сети

То есть, стандарт подразумевает, что на 2-проводную шину (одну витую пару) можно подключить множество устройств. Он не описывает никакой язык общения оборудования.

Что такое RS-232

Другой стандарт, тоже по кабелю «витая пара». Не буду перечислять все параметры стандарта, он используется достаточно мало сейчас. В частности, все помнят мышки, которые подключались к компьютеру через широкий COM-порт, вот это как раз была связь по RS-232. К контроллерам EasyHomePLC и Beckhoff подключается GSM модем для приёма и отправки смс как раз через порт RS-232. Длина кабеля совсем небольшая.

Существуют переходники с RS-232 на RS-485 и обратно. Мы получаем возможность подключить на порт RS-232 что-то, что подключается по RS-485 или сделать длинную линию связи для устройств RS-232, поставив в начале линии переходник на 485, а в конце обратно.

Что такое Modbus

Переходим к более интересной вещи. Modbus — это уже протокол. Он определяет правила общения устройств. Например, он говорит, что одно устройство должно быть ведущим (master), а остальные ведомыми (slave). Ведущее посылает в шину связи сообщение определённого формата, в котором либо указан адрес нужного slave устройства, либо сообщение предназначено для всех устройств. Устройство slave, на которое отправлено сообщение, может ответить мастеру. Протокол регламентирует формат сообщения, его длину, возможные значения элементов сообщения. Есть также контрольная сумма, которая нужна для проверки того, что сообщение дошло неискажённым.

Но протокол Modbus не регламентирует, какими могут быть сами команды и какая среда передачи данных используется. Есть Modbus serial — это работа по RS-485 или RS-232, то есть, по одной перевитой паре кабелей. Есть Modbus TCP — это работа в компьютерной сети TCP/IP, где у каждого устройства есть IP адрес и порт.

Можно привести аналогию с человеческим общением. Среда передачи данных — это обычно звук. Стандарт подразумевает, что есть минимальная громкость и максимальная громкость, и громкость речи находится в этом диапазоне. Можно говорить по очереди, а можно одновременно. Есть некий диапазон скоростей передачи звуков, который может использоваться. Есть также диапазон частот звуков. Есть максимальное расстояние, на которое можно передавать звук. А можно общаться не звуком, а световыми вспышками, текстом, хлопками в ладоши или жестами. На каждый способ общения есть некий набор правил. Вот что определяет стандарт.

Протокол общения — это ещё не язык, нет. Протокол даёт нам такие понятия как то, что сообщение состоит из слов, разделяемых тишиной. Слова состоят из слогов. А ещё то, что в начале общения надо здороваться, а в конце прощаться. Говорить может только один в один момент времени. Как-то так.

И вот мы подошли к главному вопросу. У нас контроллер имеет порт (он же разъём, он же шлюз) RS-485 и в него программно заложена возможность общения по Modbus. Также у нас есть кондиционер, у которого также есть физический разъём RS-485 и в паспорте указана возможность работы по Modbus. Что это для нас значит? Это значит, что устройства теоретически могут работать совместно.
Как люди, имеющие возможность говорить, теоретически могут общаться. Для нас такая возможность подразумевает полноценное управление и контроль обратной связи. Но заставить их работать вместе не так просто. Нужно в контроллере написать драйвер для работы именно с этим устройством. Для этого в инструкции к устройству надо найти карту регистров, то есть, описание возможных команд устройства. Вот пример некоторых регистров для вентмашины:

[Request0]
Direction=read
Type=bit
Baudrate=115200
Address=1
Period=100
var0=3800#bool#SCo_Зима/

Мест
var2=3802#bool#SCo_Таймер
var3=3803#bool#SCo_Блокировка
var4=3804#bool#SCo_Пуск/

Пуск/Стоп var6=3806#bool#SCoРежимR2 var7=3807#bool#SCoРежимR3 var8=3808#bool#SCoРежимR4 var9=3809#bool#SCoРежимR5 var10=380a#bool#SCoРежим_R6

Чем сложнее устройство, тем вариантов команд больше. В вентмашине или кондиционере их может быть до сотни. Также по протоколу RS-485 мы можем общаться с инфракрасными приёмопередатчиками, генераторами, конвекторами, электрокарнизами, кондиционерами, термостатами, датчиками и различными элементами расширения контроллера на DIN рейку: модулями входов и выходов, диммерами.

Написать драйвер связи теоретически несложно, но это большая работа. Нужно предусмотреть нюансы работы техники, придумать удобный интерфейс управления и получения обратной связи, прописать в драйвере возможные коды ошибок. После подключения реального устройства может потребоваться доналадка, если не всё было учтено в инструкции или в драйвере. Стоимость этой работы может быть достаточно высокой, поэтому стоит обращать внимание на то, какие драйверы уже присутствуют в программном обеспечении, прилагаемом к контроллеру.

Например, в программном обеспечении EasyHome есть поддержка ИК-передатчиков ICPDas и Insyte, модулей связи с кондиционерами Mitsubishi и Daikin, конвекторов Varmann, счётчиков электричества Delta, блоков расширения Овен, Razumdom, Bolid, вентмашин Komfovent и ещё много чего. Нужно смотреть конкретные поддерживаемые модели, у разных моделей разные спецификации команд.

Есть устройства с поддержкой Modbus TCP, там нужно, чтобы оно было включено в локальную сеть, отдельный порт RS-485 контроллера не нужен.

К системам на Z-Wave напрямую ничего по Modbus не подключить, там нет такой возможности. Только используя промежуточный контроллер, который поддерживает и Modbus, и Z-Wave, например, Wiren Board.

Есть важная особенность работы устройств по Modbus. У Modbus есть устройство-мастер (это контроллер) и устройство-слейв (то, что к нему подключается). Слейв не может сам инициировать передачу данных, поэтому мастер постоянно опрашивает все подключенные к нему слейвы на предмет их состояния. Если у нас датчик подключен к дискретному входу устройства Овен МВ, то при изменении состояния датчика меняется состояние входа, но модуль не может сразу же сообщить об этом контроллеру, так как не может сам инициировать связь. Нужно дождаться, пока контроллер опросит этот модуль, тогда модуль отправит ему в ответ своё состояние и контроллер поймёт, что датчик изменил состояние и что-то сделает.

Что произойдёт, если на вход Овен МВ пришёл сигнал о сработке датчика, а потом датчик изменил состояние на первоначальное, а контроллер не успел его опросить? В программе модуля МВ есть счётчики количества сработок каждого входа, вот их-то контроллер и считывает, и видит, что было изменение.

Скорость опроса модулей контроллером ограничена, поэтому контроллер не мгновенно узнаёт о событии, это зависит от того, какая скорость опроса, насколько она оптимизирована, и сколько модулей расширения подключено к контроллеру. Если у нас очень много модулей, которых контроллер по очереди опрашивает, то весь цикл опроса занимает некоторое время, пока очередь нужного нам модуля не подойдёт, об изменении состояния мы не узнаем. А потом контроллер должен будет отправить нужную команду соответствующему модулю реле для изменения его состояния. У EasyHomePLC при количестве модулей расширения не более 5 максимальная задержка отрабатывания события не превышает 1.5 секунды, что достаточно быстро. Зависит от того, что опрашивалось в момент изменения состояния входа. У контроллеров Beckhoff связь между модулями расширения происходит по собственному протоколу связи, там независимо от количества модулей всё отрабатывает мгновенно.

Версии Modbus — TCP и RTU

Ещё раз обозначим разницу между версиями связи по ModBus.

Modbus RTU, он же Modbus Serial — работа по RS-485 или RS-232. Подключение устройств по витой паре, где контроллер мастер, а остальные устройства — слейвы, которые не могут сами инициировать связь. Самый распространённый вариант связи.

Modbus TCP или Modbus TCP/IP — общение устройств происходит по обычной компьютерной сети TCP/IP, включающей работу через интернет и через Wi-Fi. То есть, возможна связь между устройствами на любом расстоянии, когда оба подключены к интернету.

Есть ещё несколько разновидностей: Modbus RTU/IP (отличается от TCP наличием контрольной суммы), Modbus over UDP, Modbus Plus (собственный протокол фирмы Schneider Electric, в сети могут быть несколько мастеров).

Ещё небольшая статья про работу устройств по протоколу Modbus в системах Умный Дом: RS-485 Modbus в системах Умного Дома.

Как с контроллера modbus передать сообщения telegram

Проблема решена, но остались вопросы и хочется бОльшего понимания о процессах происходящих внутри Trim5.
Требуется обеспечить общение с устройством на линии 485 с произвольным адресом.
Изначально была выстроена схема как на рисунке 1.

Устанавливаются параметры связи, после чего, в произвольном порядке, обеспечивается загрузка группы данных по адресу 10 или чтение группы регистров с адреса 20.
В ходе работы получается так: если первым идет запрос на запись данных, то на линии идут последовательно команды записи группы (16) с адреса 10, потом чтение группы (3) с адреса 10. Так же адекватными идут все последующие запросы общения с устройством, чтение группы (3) с адреса 20.
Но, если первым запросом идет команда чтение (3) с адреса 20, то на линии modbus идет сначала команда записи группы (16) с адреса 10 (контрольный запрос на чтение с адреса 10 не производится) и уже следом идет команда на чтение с адреса 20. Такая ситуация проявляется один раз после холодного старта или после загрузки программы. Не выявлено зависимости от порядка расположения элементов на поляне или устанавливаемых значений, есть зависимость только от последовательности действий. Неконтролируемая команда групповой записи происходит с holding регистрами карты modbus, которые имеют подключение к другим элементам схемы. Т.е. если отключить управление отправки регистра, то он отправляться не будет.

Проблема решилась установкой инвертирующего элемента в цепи управления командой записи, рисунок 2.

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

Хочется узнать, это особенность программы/среды/панели или какая то моя принципиальная ошибка построения схемы.

Вообще, всё должно быть как раз наоборот: вторая схема должна давать ложную запись.

Мне нужна ваша программа и информация о версии SMLogix и версий софта внутри панели.

__________________
Добро всегда побеждает зло. Кто победил — тот и добрый.

Похожие статьи