Особенности моделей для разных протоколов
MQTT
Аргументы
В случае MQTT источник данных для аргумента - это топик, по которому устройство отправляет значение этого параметра.
Например, если устройство отправляет значение влажности в пакете с топиком
base/state/humidity
, то именно этот топик необходимо указать в качестве
источника в данном параметре.
Для того чтобы отправить несколько параметров в одном пакете, воспользуйтесь
форматом JSON при построении payload. Например, отправить две координаты в одном
пакете можно, указав топик как base/state/pos
, a payload в виде
{ "lat": 55.55, "lon": 33.33 }
Как же разобрать такой сложный пакет по модели? На помощь приходит параметр с типом данных Объект:
- Создайте аргумент с типом данных Объект, в источнике укажите тот топик, по которому ожидаете данные - в данном случае base/state/pos. Задайте некоторый идентификатор - например, pos.
-
Создайте еще два узла - под каждое поле из JSON. В данном случае это узлы для широты и долготы. У каждого из этих параметров укажите тип данных, соответствующий типу этих значений в JSON. В нашем пакете координаты передаются как числа, поэтому укажите тип данных Число.
-
Источник у каждого из узлов сформируйте в виде <идентификатор_узла_с_типом_объект>.<нужное_поле_из_json>. Для координат из примера источники получаются следующие: pos.lat и pos.lon.
Если аргументы для полей из JSON вы укажете на уровень ниже аргумента-объекта, тогда аргумент-объект выступит как подсистема и отображаться в интерфейсе не будет.
Если же аргументы для полей из JSON находятся на одном уровне с аргументом-объектом, тогда в интерфейсе объекта отобразятся как аргументы для полей (в данном случае в виде чисел), так и аргумент для объекта (в виде строки JSON).
Действия
В случае MQTT при заполнении действия в поле Отправить выберите PUBLISH (Опубликовать). После этого укажите, с какими параметрами необходимо опубликовать сообщение:
-
Topic (Топик), с которым передается команда в виде сообщения на устройство;
-
Payload (Данные) - полезная нагрузка, содержащая текст передаваемого сообщения;
-
Ответить в - топик, при получении пакета с которым команда считается выполненной. Как вариант, можно создать команду для получения состояния устройства и указать в поле Ответить в топик, по которому устройство отправляет свое состояние - например,
leds/state
. Тогда при отправке этой команды, даже если вы получите от устройства Ack (PUBACK – Publish acknowledgement) или какие-то пакеты с другими топиками, команда не будет считаться выполненной до тех пор, пока не придет пакет именно с указанным нами топиком leds/state. Если поле Ответить в не заполнено, то команда будет считаться выполненной при получении Ack от устройства.
Wialon IPS
Аргументы
В случае Wialon IPS есть два вида аргументов:
-
базовые параметры: всегда присутствуют в пакете с данными, для них источники в шаблонной модели заранее определены;
-
дополнительные параметры: любые параметры, которые можно дополнительно определить в устройстве. В пакете Wialon IPS каждый такой параметр представляет собой конструкцию
NAME:TYPE:VALUE
, где:- NAME – произвольная строка, длиной не более 15 байт
- TYPE – тип параметра, 1 –int/long long, 2 – double, 3 – string
- VALUE – значение в зависимости от типа
В источнике для таких пользовательских параметров укажите то, что находится в поле NAME, то есть название параметра.
Все базовые параметры, соответствующие возможностям протокола, в шаблонной модели уже представлены (navigation.latitude, navigation.speed и т.д.)
Имя | Источник | Описание |
---|---|---|
Time GPS | navigation.time | Дата и время |
Latitude | navigation.latitude | Широта |
Longitude | navigation.longitude | Долгота |
Speed | navigation.speed | Скорость |
Angle | navigation.angle | Курс |
Height | navigation.height | Высота |
Satellites | navigation.sat-count | Количество спутников |
HDOP | hdop | Снижение точности |
Inputs | inputs | Цифровые входы, каждый бит числа соответствует одному входу, начиная с младшего |
Outputs | outputs | Цифровые выходы, каждый бит числа соответствует одному выходу, начиная с младшего |
ADC | adc | Аналоговые входы |
iButton | ibutton | Код ключа водителя |
Если из параметра по указанному адресу нужно взять только определенный бит, то укажите далее номер бита через точку: .<номер бита>. Например, inputs.2 — значение третьего цифрового входа (отсчет от нуля).
Аналогично получайте отдельные элементы из массива. Например, параметры аналоговых входов приходят в массиве adc. Тогда, чтобы вывести значение ADC2, укажите в соответствующем параметре в качестве источника adc.1 (не забывайте про отсчет от нуля).
Действия
В случае Wialon IPS при заполнении действия в поле Отправить выберите Текстовая команда. После этого укажите в поле Текст команду, которую нужно отправить на устройство.
Список доступных команд зависит от типа оборудования. Например, для оборудования компании Вега-Абсолют у каждого устройства на сайте (opens in a new tab) есть раздел Загрузки, в котором находится Описание протокола обмена. В нем перечислены команды Wialon IPS, поддерживаемые выбранным оборудованием.
Galileosky
Аргументы
В случае Galileosky источник данных для аргумента - это номер используемого тега в соответствии с протоколом обмена. Он формируется по следующему принципу: tag_<тег параметра из протокола>. Если из параметра по указанному тегу нужно взять только определенный бит, укажите далее номер бита через точку: .<номер бита>. Например, tag_40.2 — третий бит (отсчет от нуля) в параметре 40.
Все теги из протокола уже имеются в шаблонной модели, но они могут быть скрыты в интерфейсе. Воспользуйтесь функцией поиска по модели, чтобы найти нужный параметр. Отредактировать параметр проще, чем создавать новый!
Действия
В случае Galileosky при заполнении действия в поле Отправить выберите Текстовая команда. После этого укажите в поле Текст команду, которую нужно отправить на устройство.
Список доступных команд зависит от типа оборудования. Список всех команд с описанием и примерами составления можно посмотреть на сайте производителя в разделе Cписок команд (opens in a new tab).
Teltonika
Аргументы
В случае Teltonika источник данных для аргумента - это адрес параметра в
соответствии с протоколом обмена. Он формируется по следующему принципу:
in_out_
<номер параметра в протоколе (Property ID in AVL packet)>.
Все GPS-параметры, соответствующие возможностям протокола, в шаблонной модели уже представлены (navigation.latitude, navigation.speed и т.д.).
Имя | Источник | Описание |
---|---|---|
Longitude | navigation.longitude | Долгота |
Latitude | navigation.latitude | Широта |
Altitude | navigation.height | Высота в метрах над уровнем моря |
Angle | navigation.angle | Угол в градусах от севера по часовой стрелке |
Satellites | navigation.sat-count | Количество видимых спутников |
Speed | navigation.speed | Скорость в км/ч, рассчитанная по GPS (при ошибке GPS возвращается значение 0x0000) |
Действия
В случае Teltonika при заполнении действия в поле Отправить выберите Текстовая команда. После этого укажите в поле Текст команду, которую нужно отправить на устройство.
Список доступных команд зависит от типа оборудования. Например, для оборудования серии FMB список команд можно найти на сайте производителя (opens in a new tab).
Все команды, кроме управления реле, задавайте в текстовом виде, указанном в документации протокола.
Для создания команды управления внутренним реле устройств Teltonika используйте команду setdigout с добавлением ключа, введенного через пробел. Ключ - это набор символов 1 и 0, отражающих включение или выключение реле. Количество этих символов должно соответствовать количеству реле терминала. Таким образом, ключ отражает необходимое состояние всех реле устройства, однако, если управлять каким-то реле в данный момент не требуется, его состояние обозначьте знаком вопроса “?”.
Например,
- для включения третьего реле из четырех возможных отправьте команду:
setdigout ??1?
- для выключения:
setdigout ??0?
- если реле всего два, то команда включения второго реле выглядит так:
setdigout ?1
- если нужно включить оба реле:
setdigout 11
Если количество реле неизвестно, воспользуйтесь командой getio
. В ответ на
нее устройство отправит информацию об имеющихся входах и выходах. Количество
параметров DO в поле response означает число реле в подключенном устройстве.
При необходимости укажите длительность замыкания реле. Через пробелы пропишите время включения для нужного реле (также позиционно). Для реле, которые не должны изменять своего состояния (то есть отмечены “?”), необходимо поставить 0. Время необходимо передавать для каждого реле.
Например, команда для включения четвертого реле на 5 секунд выглядит как setdigout ???1 0 0 0 5
Navtelecom (Flex)
Аргументы
В случае Navtelecom все параметры, которые приходят в телематических пакетах версии FLEX 1.0 и 2.0 присутствуют в модели. Параметры для разбора пакетов версии FLEX 3.0 добавляйте в модель самостоятельно, формируя источник по принципу tag_<номер параметра в протоколе>. Если из параметра по указанному номеру нужно взять только определенный бит, укажите далее номер бита через точку: .<номер бита>. Например, tag_139.2 — третий бит (отсчет от нуля) в параметре 139.
Действия
В случае Navtelecom в разделе команд базовой модели уже созданы все возможные к отправке команды разного назначения:
- Системные
-
Запрос модели и версии устройства
-
Запрос информации о версии прошивки GPS приёмника
-
Команда перезапуска устройства
- Выходные линии
-
Команда включения выходной линии 1
-
Команда выключения выходной линии 1
-
Команда включения выходной линии 2
-
Команда выключения выходной линии 2
-
Команда включения выходной линии 3
-
Команда выключения выходной линии 3
-
Команда включения выходной линии 4
-
Команда выключения выходной линии 4
- Входные линии
-
Команда блокировки входной линии
-
Команда разблокировки входной линии
- Режимы работы устройства
-
Команда постановки на охрану
-
Команда снятия с охраны
-
Постановка в профиль охраны 2
LoRaWAN
Аргументы
В случае LoRaWAN никакие источники у параметров заполнять не нужно. По умолчанию при отправке устройством данных в модели автоматически заполняются следующие параметры:
-
DevAddr - адрес конечного устройства;
-
FPort - номер порта фрейма;
-
FCnt - номер фрейма;
-
Payload - полезная нагрузка фрейма, то есть данные от устройства.
Payload приходит на платформу в формате Base64. Там может находиться любая структура с данными разных типов. Для разбора данных по модели используйте обработчики.
Действия
Возможность отправки команд на устройство, работающее по LoRaWAN, не предусмотрена.
CoAP
Аргументы
Чтобы опубликовать данные телеметрии по CoAP, отправьте запрос POST по следующему URL-адресу:
coap://dev.rightech.io:5683/api/v1/objects/:id/:path
где
- id - идентификатор объекта на платформе;
- path - путь, по которому устройство отправляет значение параметра.
В случае CoAP источник данных для аргумента - это путь расположения параметра, указанный после id в запросе.
Например, устройство отправляет значение влажности в POST запросе со следующим URL
coap://dev.rightech.io:5683/api/v1/objects/:id/base/state/humidity
Тогда в качестве источника в данном параметре необходимо указать base/state/humidity.
Для того чтобы отправить несколько параметров в одном пакете, воспользуйтесь форматом JSON при построении пакета данных. Например, отправить много данных в одном пакете можно, указав URL как
coap://dev.rightech.io:5683/api/v1/objects/:id/state/telemetry1
a данные в виде
{
"stringKey": "value1",
"booleanKey": true,
"doubleKey": 3.1415,
"longKey": 73,
"jsonKey": {
"someNumber": 42,
"someArray": [1, 2, 3],
"someNestedObject": {
"key": "value"
}
}
}
Как же разобрать такой сложный пакет по модели? На помощь приходит параметр с типом данных Объект:
- Создайте аргумент с типом данных Объект, в источнике укажите тот путь, по
которому ожидаете данные - в данном случае
state/telemetry1
. Задайте некоторый идентификатор - например,telemetry1
. - Создайте дополнительные узлы - под каждое поле из JSON. В данном случае получается 9 узлов:
- Аргумент для поля
stringKey
- Аргумент для поля
booleanKey
- Аргумент для поля
doubleKey
- Аргумент для поля
longKey
- Аргумент для поля
someNumber
из вложенного JSONjsonKey
- Аргумент для первого элемента массива поля
someArray
из вложенного JSONjsonKey
- Аргумент для второго элемента массива поля
someArray
из вложенного JSONjsonKey
- Аргумент для третьего элемента массива поля
someArray
из вложенного JSONjsonKey
- Аргумент для поля key из вложенного JSON
someNestedObject
из вложенного в свою очередь JSONjsonKey
- Аргумент для поля
У каждого из этих параметров укажите тип данных, соответствующий типу этих значений в JSON. Источник у каждого из узлов сформируйте в виде <идентификатор_узла_с_типом_объект>.<нужное_поле_из_json>. Если из массива нужно взять только элемент, укажите далее его порядковый номер через точку: .<номер элемента массива>. Например, someArray.2 — третий элемент массива в поле someArray (отсчет от нуля).
Примеры:
- для строкового параметра stringKey;
- для числового параметра someNumber из вложенного JSON jsonKey;
- для второго элемента числового массива someArray из вложенного JSON jsonKey.
Действия
Возможность отправки команд на устройство, работающее по CoAP, не предусмотрена.
LwM2M
Аргументы
В случае LwM2M источник данных для аргумента - это путь в виде чисел,
сгруппированные в виде /ObjectId/ObjectInstance/ResourceID
, где
-
ObjectId - номер объекта, то есть какого-то компонента устройства, например, датчика;
-
ObjectInstance - номер экземпляра объекта. Например, в устройстве есть два датчика температуры и три датчика атмосферного давления. Тогда объектами являются датчик температуры и датчик давления, а экземплярами объектов являются конкретные экземпляры датчиков температуры и давления;
-
ResourceID - номер ресурса. Например, для датчика это может быть значение величины и единица измерения.
Действия
В случае LwM2M при заполнении действия в поле Отправить выберите CoAP command. После этого укажите:
- Method - GET/PUT/POST/DELETE;
- Path - путь, который фомируется так же, как в источнике для аргументов, однако здесь параметры ObjectInstance и ResourceID опциональны;
- Data - данные, которые можно указать в зависимости от типа LwM2M команды.
LwM2M команды:
- Read - прочитать данные из единичного ресурса, экземпляра объекта или объекта целиком. Ответ от клиента должен быть представлен в SenML JSON формате. Спецификация (opens in a new tab)
Пример READ Server
:
{
"method": "GET",
"path": "/1"
}
- Write - обновить значения. Данные для записи должны быть представлены в Plain Text формате. Спецификация (opens in a new tab)
Пример WRITE 31024/10/1
:
{
"method": "PUT",
"path": "/31024/10/1",
"data": 254
}
- Execute - инициировать выполнение действий на ресурсе. Спецификация (opens in a new tab)
Пример EXECUTE 31024/10/2
:
{
"method": "POST",
"path": "/31024/10/2"
}
- Create - создать экземпляр объекта. Данные для записи должны быть представлены в SenML JSON формате. Спецификация (opens in a new tab)
Пример CREATE 31024/11
:
{
"method": "POST",
"path": "/31024",
"data": [
{
"bn": "/31024/",
"n": "11/1",
"v": 8
}
]
}
- Delete - удалить экземпляр объекта. Спецификация (opens in a new tab)
Пример DELETE 31024/11
:
{
"method": "DELETE",
"path": "/31024/11"
}
- Write-Attributes - изменить значения атрибутов. Спецификация (opens in a new tab)
Пример WRITE periods 31024/10/1
:
{
"method": "PUT",
"path": "/31024/10/1?pmin=5&pmax=60"
}
- Discover - получить список всех поддерживаемых объектов, экземпляров объектов и ресурсов. Ответ от клиента должен быть представлен в CoRE Link Format формате. Спецификация (opens in a new tab)
Пример DISCOVER Server
:
{
"method": "GET",
"path": "/1",
"data": "discover"
}
- Observe - установить наблюдение. Ответ от клиента должен быть представлен в SenML JSON формате. Спецификация (opens in a new tab)
Пример OBSERVE Battery level
:
{
"method": "GET",
"path": "/3/0/9",
"data": "observe"
}
- Cancel Observation - завершить наблюдение. Спецификация (opens in a new tab)
Пример CANCEL Observe Battery level
:
{
"method": "GET",
"path": "/3/0/9",
"data": "cancel"
}
WebSocket
Аргументы
Чтобы подключиться по WebSocket, укажите идентификатор объекта в URL-адресе:
ws://ws.dev.rightech.io:80/api/v1/objects/:id/connect
В случае WebSocket данные, передаваемые в теле запроса, должны быть в формате JSON. Источник данных для аргумента в модели - это ключ поля из полученного JSON.
Например, отправить данные можно в таком виде
{
"stringKey": "value1",
"booleanKey": true,
"doubleKey": 3.1415,
"longKey": 73,
"jsonKey": {
"someNumber": 42,
"someArray": [1, 2, 3],
"someNestedObject": {
"key": "value"
}
}
}
Для того чтобы разобрать такой пакет данных по модели, в поле Источник укажите ключ из JSON интересующего вас поля.
Примеры:
- для строкового параметра
stringKey
;
- для числового параметра
someNumber
из вложенного JSONjsonKey
;
- для второго элемента числового массива
someArray
из вложенного JSONjsonKey
.
Действия
В случае WebSocket при заполнении действия в поле Отправить выберите Текстовая команда. После этого укажите в поле Текст тело запроса, которое нужно отправить на устройство.