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

REDMOND

Отправка фото с модуля ESP32-CAM в телеграмм канал.

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

Настройка телеграмм:

Для начала создадим телеграмм канал. Для этого введем в поиске “botfather” и начнем чат с данным ботом, нажав кнопку старт:

Данный бот позволяет создать собственного бота для своих нужд. Для этого ему в чат напишем покмнду “/newbot”

И сразу после ввода данной команды бот предложит придумать имя нашему боту:

Я назвал бота upavlatemp. Далее бот просит создать пользователя:

После ввода имени нам выдаст уникальный токен, его мы сохраняем. Его мы будем использовать в скетче.

токен закрашен красным.

Далее ищем еще одного бота под названием “idbot”

После чего вводим команду “/getid” и то что получим тоже сохраняем. Тоже понадобится для работы скетча.

Ну и все. Настройки с телеграммом закончены. Теперь давайте перейдем к самому скетчу.

Схема подключения для прошивки:

Тут все стандартно как и раньше, необходимо для прошивки замкнуть IO0 и GND. А после прошивки отключить данные пины.

Также необходимо помнить, что данная плата особенно с этой прошивкой очень прожорливая. И рекомендуют питание 5вольт 2 ампера. ПО этому если у Вас не работает камера, то для начала посмотрите в эту сторону.

Подготовка скетча:

Для начала нам нужно установить все необходимые библиотеки.

Работает с версией данной библиотеки 6.15.2 (Если пройдет много лет и Вы наткнетесь на данную статью и скетч будет ругаться на эту библиотеку. То попробуйте установить именно эту версию).

ArduinoJson можно найти в “управлении библиотеками”

Следующая библиотека это:

Теперь открываем скетч. Его можно скачать отсюда:

Нас интересуют строчки:

const char* ssid = “test”;
const char* password = “test”;

Тут мы вводим SSID и пароль нашей wi-fi сети.

#define CHAT_ID “XXXXXXXXX”

Тут вводим chatid который мы получили в телеграмме.

#define BOTtoken “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXX”

А тут вводим токен который получили в телеграмме.

Команда на которую будет посылаться фото в телеграмм – это /photo

А команда на включение светодиода /flash

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

Ну а так выглядит фото днем моего “кабинета”)

А вот фото которые сделаны в полной темноте. Первое фото без светодиода, а второе с включенным светодиодом.

Конечно светодиод не очень то и помог в темноте, как ожидалось. Но всеравно что-то разглядеть можно.

REDMOND

Настройка Telegram-бота на контроллере Wiren Board

Для настройки Telegram-бота на контроллере Wiren Board нам понадобится установленный Node-RED, настроенный модуль WB Nodes и созданный Telegram-бот.

Настройка делается через встроенный в Node-Red веб-интерфейс, который доступен по адресу http://wb-ip-address:1880, например, http://192.168.42.1:1880.

В примерах мы будем создавать флоу (flows) — это блок-схемы процесса.

Создание бота

Если у вас нет телеграм-бота, то создайте его:

  1. Установите клиент Telegram и зарегистрируйте аккаунт.
  2. Найдите в Telegram бота @BotFather и запустите его.
  3. Создайте нового бота и настройте его:
    • введите команду /newbot ,
    • задайте название бота,
    • придумайте и напишите имя бота, оно должно заканчиваться на _bot .
    • В сообщении об успешном создании нового бота:
      • скопируйте API-токен для подключения к боту,
      • нажмите на ссылку t.me/имя_вашего_бота , откроется диалог с ботом — запустите его командой /start

      Всё, теперь мы готовы настраивать его на контроллере Wiren Board.

      Установка модуля

      Чтобы Node-RED смог работать с Telegram, установите модуль node-red-contrib-telegrambot :

      1. Зайдите в веб-интерфейс Node-RED.
      2. В правом верхнем углу вызовите меню.
      3. В открывшемся окне выберите вкладку Менеджер палитр (Manager palette).
      4. Перейдите на вкладку Установка (Install), введите в поле поиска telegrambot и нажмите на клавиатуре Enter.
      5. Установите пакет с названием node-red-contrib-telegrambot.
      6. Закройте окно с настройками. Установка модуля завершена.

      После установки, в левой панели появится секция telegram.

      Создание ноды для бота

      Перед тем, как передавать данные из контроллера в чат с ботом, нам нужно настроить ноду нашего бота:

      1. Перетяните в рабочую область ноду sender.
      2. Дважды кликните на ней — откроется окно Edit sender node.
      3. В поле Bot нажмите на кнопку с карандашом, откроется окно Edit telegram bot node.
      4. В открывшемся окне заполните поля:
        • Bot-Name — произвольное имя
        • Token — API-токен, который вы получили при создании бота в мессенджере Telegram.
        • Users — имена telegram-пользователей, которые смогут отправлять боту команды и получать данные.
        • Update Mode — выберите Pooling
        • Poll Interval — установите 1000.
        • Сохраните настройки нажатием кнопки Done.
        • Вы вернётесь в окно Edit sender node, в котором нажмите Cancel.

        Создание ноды бота завершено, теперь мы можем использовать её для соединения с telegram-ботом.

        Пересылка принятых сообщений

        Добавьте ноду, которая будет принимать сообщения, отправленные в чат с ботом:

        1. Перетяните в рабочую область ноду receiver.
        2. Дважды кликните на ней — откроется окно Edit receiver node.
        3. Выберите в поле Bot созданную раньше ноду бота.
        4. Чтобы сохранить настройки, нажмите кнопку Done.

        Добавьте ноду, которая будет отправлять сообщения в чат с ботом:

        1. Перетяните в рабочую область ноду sender.
        2. Дважды кликните на ней — откроется окно Edit sender node.
        3. Выберите в поле Bot ноду бота.
        4. Чтобы сохранить настройки, нажмите кнопку Done.

        Дальше нам нужно добавить логику обработки входящих сообщений. Настройте пересылку входящих сообщений обратно в чат:

        1. Перетяните в рабочую область ноду function.
        2. Дважды кликните на ней — откроется окно Edit function node.
        3. На вкладке обработчика onMessage должна быть написана строка

        После настройки всех трёх нод, соедините их между собой:

        1. Верхний выход ноды receiver соедините с входом функции.
        2. Выход функции соедините с входом ноды sender.

        После настройки нод и соединений между ними, опубликуйте изменения нажатием на кнопку Deploy в правой верхней части веб-интерфейса Node-RED.

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

        Запрос информации с датчиков контроллера

        Чтобы Node-RED мог общаться с MQTT-брокером контроллера, у вас должен быть настроен плагин WB Nodes.

        Настроим бота так, чтобы он присылал температуру процессора контроллера Wiren Board в ответ на команду /cputemp .

        Перед созданием нового флоу очистите рабочее поле — это исключит ложные срабатывания на команду из чата. При очистке все настройки соединения с контроллером и телеграм-ботом сохранятся.

        ChatId

        ChatId — это идентификатор чата с ботом, он нужен, чтобы бот понимал куда ему отвечать.

        В предыдущем примере chatId был в принятом сообщении, которое мы пересылали — поэтому указывать его не было нужно. Сейчас мы будем формировать своё сообщение, поэтому нам нужно знать — кто запросил данные.

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

        Сохраните chatId в глобальной переменной флоу:

        1. Добавьте ноду приёма сообщений:
          • Перетяните в рабочую область ноду receiver.
          • Дважды кликните на ней — откроется окно Edit receiver node.
          • Выберите в поле Bot созданную раньше ноду бота.
          • Задайте в поле Name имя Save chatId.
          • Чтобы сохранить настройки, нажмите кнопку Done.
          • Добавьте ноду, которая будет сохранять chatId:
            • Перетяните в рабочую область ноду function.
            • Дважды кликните на ней — откроется окно Edit function node.
            • На вкладке обработчика onMessage удалите содержимое поля ввода и введите строку:

            Обработка команды

            В предыдущем примере бот реагировал на любое входящее сообщение — теперь мы научим его понимать команды:

            1. Добавьте реакцию на команду /cputemp :
              • Перетяните в рабочую область ноду command.
              • Дважды кликните на ней — откроется окно Edit command node.
              • Выберите в поле Bot ноду нашего бота.
              • Чтобы сохранить настройки, нажмите кнопку Done.
              • Добавьте запрос температуры процессора контроллера:
                • Перетяните в рабочую область ноду get, она находится в разделе Wiren Board.
                • Дважды кликните на ней — откроется окно Edit get node.
                • Выберите в поле Server созданное на этапе настройки WB Nodes соединение с контроллером.
                • В поле Channel откройте список каналов и найдите там CPU Temperature.
                • Чтобы сохранить настройки, нажмите кнопку Done.
                • Теперь настройте формирование ответного сообщения:
                  • Перетяните в рабочую область ноду function.
                  • Дважды кликните на ней — откроется окно Edit function node.
                  • На вкладке обработчика onMessage удалите содержимое поля ввода и введите строки:
                  • Перетяните в рабочую область ноду sender.
                  • Дважды кликните на ней — откроется окно Edit sender node.
                  • Выберите в поле Bot ноду бота.
                  • Чтобы сохранить настройки, нажмите кнопку Done.
                  • верхний выход ноды receiver соедините с нодой Save chatId;
                  • верхний выход ноды command соедините со входом ноды (WB)get;
                  • выход ноды (WB)get соедините со входом function, где формируется сообщение;
                  • выход новы function соедините со входом ноды sender.

                  Настройка бота завершена.

                  Запрос данных в телеграм-чате с ботом

                  Теперь проверим работу нашего бота:

                  1. Перейдите в мессенджер Telegram.
                  2. Откройте чат с ботом.
                  3. Введите команду /cputemp , бот должен прислать ответ:

                  Как с контроллера 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 и версий софта внутри панели.

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

                  REDMOND

                  Добавить комментарий

                  Ваш адрес email не будет опубликован. Обязательные поля помечены *