InduSoft, тревоги и их квитирование через Telegram. | Первая миля, оптовые поставщик компонентов промышленной автоматизации. 8 (495) 960-31-59

InduSoft, тревоги и их квитирование через Telegram.

Вебинар по Dream Report, 11 Сентября 2017.
05.09.2017
Обновление прайс-листа VIPA c 01.11.2017
26.10.2017

Indusoft Web Studio. Отправка сообщений о тревогах и квитирование в Telegram, JSON-парсер, HTTP-запросы в IWS

В Indusoft Web Studio есть несколько различных типов «тонких клиентов», включая Mobile Access для удаленного доступа к SCADA с различных мобильных устройств с использованием технологии HTML5. Но потенциал IWS не ограничивается только встроенными «тонкими клиентами». При желании можно интегрировать в IWS и сторонние технологии удаленной связи, до которых еще не добрались производители SCADA, например клиенты обмена мгновенными сообщениями (мессенджеры) для мобильных платформ/смартфонов. Важной особенностью мессенджеров является оперативность доставки сообщений адресату, которому не нужно постоянно запрашивать обновляемую информацию (Web-страницы), получение новых входящих сообщений сопровождается развитой световой и звуковой сигнализацией на смартфонах и планшетах. Таким образом можно повысить мобильность сотрудников, обслуживающих SCADA и освободить их от рутинного сидения перед экраном монитора и вглядывания в неизменные экранные формы, не потеряв в оперативности реагирования на тревоги и аварии.

Как раз об одной такой системе обмена быстрыми сообщениями, а точнее об интеграции ее в Indusoft Web Studio и пойдет речь. Автором была выбрана система мгновенных сообщений Telegram (https://telegram.org/), как бесплатная, имеющая несколько клиентов для разных платформ, включая настольный Windows, и обладающая развитым и хорошо документированный API. Для интеграции в IWS был выбран тип подключения Telegram bot, который не требует специальной привязки к телефонному номеру и ориентирован на компьютерные системы. Т.е. bot — это автоматический обработчик удаленных обращений, наделенный полноценными функциями клиента мессенджера Telegram.

Обмен сообщениями в Telegram построен на запросах/ответах HTTP, методами POST и GET, и формате обмена JSON. Таким образом от Indusoft Web Studio потребовалась прежде всего поддержка HTTP POST и GET запросов для Web и затем парсинг JSON во внутреннее представление IWS. Эти требования успешно соблюдены, благодаря использования в IWS VBScript с поддержкой COM объектов. Так для HTTP использовался API объекта MSXML2.XMLHTTP:

Dim oHTTP : Set oHTTP = CreateObject(«MSXML2.XMLHTTP»)

А для парсинга JSON был использован сторонний класс VbsJson  (http://demon.tw, https://github.com/eklam/VbsJson):

Set json = New VbsJson

Set oj = json.Decode(oHTTP.responseText)

Кроме того для преобразование строк VBScipt в UTF-8 (кодировки обмена в Telegram) использовался объект Stream (ADO):

Dim stream : Set stream = CreateObject(«ADODB.Stream»)

 

В итоге был создан demo-проект JSONTelegramBotAlarm, с которым Вы можете ознакомиться.

В этом проекте bot  умеет отсылать сообщения о новых тревогах и авариях (alarms), зафиксированных SCADA, есть функция удаленного квитирования этих тревог на базе встраиваемых кнопок Telegram (inline_keyboard), написана машина состояний, обслуживающая HTTP запросы к API Telegram и парсинг JSON. Таким образом реализован двусторонний оперативный обмен сообщениями и командами в Telegram полностью в рамках Indusoft Web Studio, что дает представление о развитых возможностях Indusoft Web Studio.

Настройки проекта и комментарии к коду

Мы не будем подробно описывать процедуру создания Telegram bot. Этому посвящено огромное кол-во статей в Internet. Bot создается непосредственно в клиенте Telegram, и на выходе несложной процедуры будет получен Token (ключ), который необходимо прописать в проекте в стартовом скрипте:

Dim Token : Token = «NNNNNNNN:AAB_aa»

 

Кроме того потребуется еще chat id — персональный код подписанного на bot клиента. Его можно получить из запроса в браузере:

https://api.telegram.org/bot<NNNNNNNN:AAB_aa>/getUpdates?

где  <NNNNNNNN:AAB_aa> — Token

 

Предварительно нужно послать боту хотя бы одно сообщение, чтобы ответ в формате JSON включал chat id. Пример ответа, из которого можно извлечь chat id (подчеркнут красным):

 

{«ok»:true,»result»:[{«update_id»:137543156,

«message»:{«message_id»:5,»from»:{«id»:3322332233,»is_bot»:false,»first_name»:»Alex»,»last_name»:»B»,»language_code»:»ru-RU»},»chat»:{«id»:3322332233,»first_name»:»Alex»,»last_name»:»B»,»type»:»private»},»date»:1504602120,»text»:»1″}}]}

 

Соответственно в стартовом скрипте проекта добавляем:

Dim chat_id : chat_id = «3322332233»

 

Код машины состояний бота можно найти в скрипте TelegramPolling, необходимые функции и классы объявлены в стартовом скрипте.

 

Для удобства была написана функция Function POST(ByRef URL, ByRef Data), которая выполняет POST запрос с передачей параметров к API Telegram в формате application/x-www-form-urlencoded.

 

Также написан класс TON, описывающий работу таймера-задержки для формирования неблокирующих скрипт задержек.

 

Функция класса VbsJson Decode() «распарсивает» JSON-строку в объекты словарей (вложенные словари и массивы) VBScript. Чтобы добраться до полей JSON структуры в таком представлении, используется следующий синтаксис:  oj(«имя параметра JSON» или индекс массива)( «имя вложенного параметра JSON» или вложенный индекс массива)…, например:

oj(«result»)(0)(«message»)(«text»))

Команда для приведенного выше выражения JSON вернет: «1»

 

oj(«result»)(0)(«update_id»)

Команда для приведенного выше выражения JSON вернет: «137543156»

 

Более подробно узнать о технологии можно, обратившись в компанию ЗАО «Первая миля», официальный дистрибьютор InduSoft Web Studio в РФ.