Перейти к основному содержимому
  • iRidium studio 2019
  • Инструменты для создания собственных драйверов

Инструменты для создания собственных драйверов

Драйвер в iRidium реализует протокол (правила) обмена данными с оборудованием на базе транспорта – конкретного способа передачи данных (TCP, UDP, HTTP, Serial).

HowItWorksTCP.png

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

В iRidium pro доступно создание нескольких драйверов-транспортов. Рассмотрим их особенности и назначение:

Выбор драйвера AV & Custom Systems

Добавьте драйвер AV & Custom Systems для вашей задачи:

  • TCP, UDP, Serial (RS232) . Чтобы подключиться к у удаленному ресурсу по протоколу TCP, UDP или RS232:
    • Драйвер "AV & Custom Systems" в i3 pro или iRidium server
    • Укажите в настройках драйвера параметр "Protocol" – тип транспорта: TCP, UDP или Serial (RS232)
  • HTTP . Чтобы подключиться к у удаленному ресурсу по протоколу HTTP, HTTPs:
    • Драйвер "AV & Custom Systems (HTTP)" в i3 pro или iRidium server
  • TCP сервер . Чтобы принимать подключения от удаленных ресурсов по протоколу TCP:
    • JavaScript реализация TCP сервера, драйвер не добавляется в дерево устройств
  • Общий транспорт . Чтобы несколько логических устройств могли работать через одно TCP/UDP подключение, используя раздельные данные в скриптах и раздельное обращение к командам и фидбекам
    • Драйвер "AV & Custom TCP/UDP Network" в i3 pro или iRidium server
    • Драйвер "AV & Custom HTTP Network" в i3 pro или iRidium server

AVCS1.png

Настройки подключения

Когда драйвер добавлен, укажите его параметры подключения:

AV & Custom Systems, TCP

Драйвер AV & Custom Systems, Protocol: TCP . Параметры подключения:

  • Host - IP-адрес или доменное имя
  • Port - TCP порт подключения
  • Mode - режим подключения:
    • Always Connected - постоянно подключен
    • Connect when Sending - подключен только на момент отправки команды. В этом режиме не работает обратная связь, но команды можно отправлять, не занимая соединение постоянно
  • SSL - включить/выключить SSL шифрование
  • Auth type - тип аутентификации:
    • Basic - использует незашифрованную кодировку base64,
    • Digest - шифрование учетных данных;
  • Script Mode - режим проброса команд в скрипты:
    • Direct and Script - сразу отправлять команду оборудованию и дублировать ее в скрипт
    • Script Only - отправлять команду только в скрипт (при нажатии на кнопку, призванная к ней команда будет обработана в скриптах iRidium, но не отправится оборудованию, как это обычно происходит)
  • Disable Queue - выключить очередь команд в iRidium. Очередь "копит" команды, которые не были по какой-то причине отправлены, и отправляет при восстановлении соединения
  • Send Command Attempts - сколько раз пытаться отправить команду из очереди, которую впервые не удалось отправить. 0 - не повторять отправку
  • Wait for Connection (мс) – время ожидания связи (иначе подключаемся еще раз)
  • Wait for Data (мс) – время ожидания ответа от оборудования (иначе повторяем команду и проверяем связь). Поставьте 0, если нужно, чтобы драйвер не отключался от оборудования при отсутствии обмена данными

AV & Custom Systems, UDP

Драйвер AV & Custom Systems, Protocol: UDP . Параметры подключения:

  • Host - IP-адрес или доменное имя
  • Port - UDP порт подключения
  • Auth type - тип аутентификации:
    • Basic - использует незашифрованную кодировку base64,
    • Digest - шифрование учетных данных;
  • Script Mode - режим проброса команд в скрипты:
    • Direct and Script - сразу отправлять команду оборудованию и дублировать ее в скрипт
    • Script Only - отправлять команду только в скрипт (при нажатии на кнопку, призванная к ней команда будет обработана в скриптах iRidium, но не отправится оборудованию, как это обычно происходит)
  • Local Port - UDP порт, который будет открыт на стороне iRidium: сюда будут приходить данные от оборудования. Может отличаться от порта, открытого на стороне оборудования
  • Multicast - использовать режим мультикаст-соединения
    • Group - мультикастная группа, например 224.0.0.1

AV & Custom Systems, Serial (RS232)

Драйвер AV & Custom Systems, Protocol: Serial (RS232). Параметры подключения:

  • Host - номер СОМ-порта, к которому подключено управляемое устройство. Например: \.\COM1
  • Baud Rate - скорость обмена данными
  • Data Bits - число информационных разрядов в кадре
  • Parity - контроль четности
  • Stop Bits - cтоповый бит в кадре
  • В веб интерфейсе стоповые биты отображаются как:
10
1,51
22
  • Auth type - тип аутентификации:
    • Basic - использует незашифрованную кодировку base64,
    • Digest - шифрование учетных данных;
  • Script Mode - режим проброса команд в скрипты:
    • Direct and Script - сразу отправлять команду оборудованию и дублировать ее в скрипт
    • Script Only - отправлять команду только в скрипт (при нажатии на кнопку, призванная к ней команда будет обработана в скриптах iRidium, но не отправится оборудованию, как это обычно происходит)

AV & Custom Systems (HTTP), HTTP

Драйвер AV & Custom Systems (HTTP). Параметры подключения:

  • Host - IP адрес или доменное имя
  • Port - TCP порт подключения (обычно 80)
  • Login, Password - логин и пароль для аутентификации, в зависимости от заданного Auth type
  • SSL - включить/выключить SSL шифрование
  • User Agent - идентификационная строка клиентского приложения iRidi
  • Auth type - тип аутентификации:
    • Basic - использует незашифрованную кодировку base64,
    • Digest - шифрование учетных данных;
  • Script Mode - режим проброса команд в скрипты:
    • Direct and Script - сразу отправлять команду оборудованию и дублировать ее в скрипт
    • Script Only - отправлять команду только в скрипт (при нажатии на кнопку, призванная к ней команда будет обработана в скриптах iRidium, но не отправится оборудованию, как это обычно происходит)
  • Disable Queue - выключить очередь команд в iRidium. Очередь "копит" команды, которые не были по какой-то причине отправлены, и отправляет при восстановлении соединения
  • Send Command Attempts - сколько раз пытаться отправить команду из очереди, которую впервые не удалось отправить. 0 - не повторять отправку
  • Wait for Connection (мс) – время ожидания связи (иначе подключаемся еще раз)
  • Wait for Data (мс) – время ожидания ответа от оборудования (иначе повторяем команду и проверяем связь). Поставьте 0, если нужно, чтобы драйвер не отключался от оборудования при отсутствии обмена данными

Примеры формирования команд

Строки, символы, числа и их последовательности для TCP, UDP, Serial

Для отправки оборудованию некой последовательности данных по TCP, UDP, или через COM-порт, нужно: создать команду (Command) в драйвере "AV & Custom Systems" с соответствующим транспортом, и внести данные в поле Data созданной команды.

Вызывая команду с любым значением Value, вы будете отправлять внесенные данные оборудованию.

В процессе работы iRidium, нельзя менять содержимое команды, оформленной таким образом (это константа). Переменные значения необходимо формировать в скриптах (см. методы .Set и .Send).

Правила оформления данных:

  • Строку (STRING ) оформите 'одинарными кавычками', несколько строк оформите кавычками и разделите запятыми. Оформление переноса строки (CR или LF) см. ниже
  • Шестнадцатеричные (HEX ) символы разделите запятыми, перед каждым символом поставьте значок $ или 0x (другие не поддерживаются)
  • Десятичные (DEC ) числа разделите запятыми
  • В конце данных добавьте, согласно указаниям вашего API, один из символов конца строки (или оба символа):
    • ,13 - возврат каретки (CR, carriage return). Этот же символ в iRidium можно записать как ,$0D или ,0x0D
    • ,10 - подача строки (LF, line feed). Этот же символ в iRidium можно записать как ,$0A или ,0x0A
    • некоторые устройства принимают только CR, некоторые CR+LF, а некоторые и вовсе не нуждаются в указании на конец строки, но указание чаще требуется; опирайтесь на ваш API и не пренебрегайте этой надстройкой!

Примеры: * Последовательность шестнадцатеричных символов + конец строки:
0x16,0x8A,0xFF,0x81,13 или
0x16,0x8A,0xFF,0x81,0x0D * Последовательность десятичных чисел + конец строки:
01,255,255,15,13 * Строка + конец строки:
'PWR 01',13 * Смешанные данные + конец строки:
0,255,'PWR 01',0x00,0xFF,13

AVCS2.png

Как понять , что данные оформлены верно:

  • В оконном режиме просмотра Data, нижняя часть окна показывает команду, приведенную к формату HEX (так ее отправит драйвер). Если вы видите, что в нижней части окна нет символов вообще, или количество символов сверху и снизу явно не совпадает, значит, вы допустили ошибку оформления данных. Проверьте правильность расстановки запятых, кавычек, оформление HEX символов.
  • Если первая часть данных оформлена верно, а последняя - нет, то последняя часть будет отброшена, поэтому следите за совпадением количества символов в верхней и нижней части окна

GET, POST, PUT запросы по HTTP

Для отправки оборудованию HTTP-запроса, нужно: создать команду (Command) в драйвере "AV & Custom Systems (HTTP)" и внести данные в поле URI созданной команды. POST и PUT запросы позволяют отпралять дополнительные данные в поле Data .

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

В процессе работы iRidium, нельзя менять содержимое запроса, оформленного таким образом (это константа). Переменные значения необходимо формировать в скриптах (метод .SendEx).

Правила оформления GET-запросов :

Запрос состоит из тела запроса URI - это данные, указанные в HTTP-запросе после IP-адреса или доменного имени. Данные нужно копировать в поле URI, начиная с символа / (слэш), без кавычек: * пример 1: http://iridi.com/support

    • /support - это тело запроса, которое нужно поместить в поле URI
    • iridi.com - адрес отправки, указывается в поле Host в настройках драйвера

порт по умолчанию (80) указывается в настройках драйвера * пример 2: httр://192.168.0.100:81/do?cmd=ir_code=B748BF00

    • /do?cmd=ir_code=B748BF00 - это тело запроса, которое нужно поместить в поле URI
    • 192.168.0.100 - адрес отправки, указывается в поле Host в настройках драйвера
    • 81 - порт, указывается в настройках драйвера

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

AVCS3.png

Правила оформления POST и PUT-запросов :
Запрос состоит из тела запроса URI - это данные, указанные в HTTP-запросе после IP-адреса или доменного имени и дополнительных данных, которые указываются в поле Data. URI указывается без кавычек, Data - как массив строк, в кавычках (см. правила оформления строк для TCP, UDP, Serial).

Пример:

POST /YamahaRemoteControl/ctrl HTTP/1.1

Accept: */*
Referer: http://192.168.10.102/
Content-Type: text/xml; charset=UTF-8
Host: 192.168.10.100
Content-Length: 105
Cache-Control: no-cache

<YAMAHA_AV cmd="PUT"><System><Power>Standby</Power></System></YAMAHA_AV>
  • /YamahaRemoteControl/ctrl - (без HTTP 1.1) это тело запроса, которое нужно поместить в поле URI
  • 'Standby' - это ополнительные данные, которое нужно целиком взять в кавычки и поместить в поле Data

Остальные данные - это заголовки, которые драйвер формирует автоматически * Вы можете использовать сркиптовый метод .SendEx для формирования запросов, данных, заголовков, и для обработки ответов, полученных на эти запросы

AVCS4.png

Примеры обработки входящих данных

Обработка входящих данных всегда производится в скриптах.

С любыми транспортами вы можете подписаться на событие IR.EVENT_RECEIVE_TEXT или IR.EVENT_RECEIVE_DATA и обрабатывать данные, полученные слушателями от драйвера.

В случае с HTTP , лучше всего для обработки данных подходит метод .SendEx – он позволяет сформировать и отправить запрос, дождаться ответа, и сразу же обработать ответ, пришедший именно на этот запрос. Это избавляет вас от необходимости определять, к чему относится тот или иной ответ, как при работе с событийной системой драйвера.

Пример TCP-сервера с обработкой входящих данных.

Пример использования SendEx:

function Login() {
IR.GetDevice("Server REST").SendEx({
Type: "POST",
Url: "/html/login",
Data: ["Password=2007&name=auth&Login=admin"],
Headers: {"Content-Type": "application/x-www-form-urlencoded"},

cbReceiveKey: function(key,value)
{
if (key == "set-cookie")
{
cookie = value.match(/=.+;/);
if (cookie) {
IR.Log("ir-session-id" + cookie);
Volume80();
}
}
}
});
}

function Volume80() {
IR.GetDevice("Server REST").SendEx({
Type: "GET",
Url: "/json/ok/server/channel/set?name=Sender%20Hotel.FM%20Volume?value=80",
Headers: {"Cookie":"ir-session-id" + cookie},

cbReceiveText: function(text, code, headers) {
IR.Log("cbReceiveText code: " + code); IR.Log("cbReceiveText text: " + text);
}
});
}

IR.AddListener(IR.EVENT_START, 0, function() {
Login();
});

Пример TCP-сервера

Пример: TCP-сервер для i3 pro