Особенности моделей для разных протоколов
MQTT
Параметры
В случае MQTT источник данных для параметра – это топик, по которому устройство отправляет значение этого параметра.
Возможные варианты формирования источника из пакета данных:
- Топик известен заранее, в данных приходит только значение нужного параметра.
В этом случае в Источник указывается топик. Например, если устройство отправляет значение влажности в пакете с топиком
base/state/humidity, то именно этот топик необходимо указать в качестве источника в данном параметре.
- Топик известен заранее, данные приходят в формате JSON.
Для того чтобы отправить несколько параметров в одном пакете, при формировании payload данные часто организуют в
структуру формата JSON. Например, могут приходить две координаты в одном пакете данных с топиком
base/state/pos, где
payload сформирован в виде {"lat":55.55,"lon":33.33}.В этом случае необходимо использовать параметр с типом данных Объект:
- Создайте параметр с типом данных Объект, в источнике укажите тот топик, по которому ожидаете данные – в данном
случае
base/state/pos. Задайте некоторый идентификатор – например,pos.
- Создайте еще два параметра – под каждое поле из JSON. В данном случае это узлы для широты и долготы. У каждого из этих параметров укажите тип данных, соответствующий типу этих значений в JSON. В нашем пакете координаты передаются как числа, поэтому укажите тип данных Число.
- Источник у каждого из параметров сформируйте в виде
<идентификатор_узла_с_типом_объект>.<нужное_поле_из_json>. Для координат из примера источники получаются следующие:pos.latиpos.lon.
Если параметры для полей из JSON вы укажете на уровень ниже параметра-объекта, тогда параметр-объект выступит в роли
узла и отображаться в интерфейсе не будет.

Если же параметры для полей из JSON находятся на одном уровне с параметром-объектом, тогда в интерфейсе объекта
отобразятся как параметры для полей (в данном случае в виде чисел), так и параметр для объекта (в виде строки JSON).

- В топике присутствует значение другого параметра.
Бывают ситуации, когда в топике присутствуют динамические составляющие, которые могут незначительно отличаться у разных
объектов. Например, есть два устройства, которые присылают данные с топиком, в котором присутствует идентификатор
объекта:
device1/base/state/led – топик для данных от первого объекта,device2/base/state/led – топик для данных от второго объекта, гдеdevice1 – это MQTT Client ID первого объекта, а device2 – MQTT Client ID второго.При этом в остальном устройства могут быть полностью идентичны.
Чтобы не делать в этом случае разные модели под каждое устройство, в качестве источника можно указать топик, в котором
присутствует переменная вида
{{object.id}} – параметр из API объектов, который будет равен device1 и device2 для
объектов соответственно.
Аналогично можно использовать в топике и любые другие параметры объекта. В общем случае синтаксическая конструкция с
фигурными скобками имеет вид
{{object.<...>.id_of_parameter}}, где<...> – уровни вложенности, в которых находится параметр, указываются через точку,id_of_parameter - идентификатор параметра.Тогда источник для топика, в котором используется значение из конфигурации объекта, может быть следующего вида
data/{{object.config.params.place}}/tempДоступные для использования параметры можно посмотреть по ссылке API link объекта.

Действия
В случае MQTT при заполнении действия в поле Отправить выберите PUBLISH
(Опубликовать). После этого укажите, с какими параметрами необходимо
опубликовать сообщение:
- Topic (Топик) – топик, с которым передается команда в виде сообщения на устройство;
- Payload (Данные) - полезная нагрузка, содержащая текст передаваемого сообщения;
- Ответить в - топик, при получении пакета с которым команда считается выполненной. Например, можно создать команду
для получения состояния устройства и указать в поле Ответить в топик, по которому устройство отправляет свое
состояние –
leds/state. Тогда при отправке этой команды, даже если вы получите от устройства Ack (PUBACK – Publish acknowledgement) или какие-то пакеты с другими топиками, команда не будет считаться выполненной до тех пор, пока не придет пакет именно с указанным топикомleds/state. Если поле Ответить в не заполнено, то команда будет считаться выполненной при получении Ack от устройства.

💡
Команды отправляются с уровнем QOS=1
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 при заполнении действия в поле Отправить выберите
Текстовая команда. После этого укажите в поле Текст команду, которую
нужно отправить на устройство.

💡
Список доступных команд зависит от типа оборудования. Например, для оборудования компании Вега-Абсолют у каждого блока
мониторинга есть раздел Загрузки, в котором находится Описание протоколов обмена.
В нем перечислены команды Wialon IPS, поддерживаемые выбранным оборудованием.
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 при заполнении действия в поле Отправить выберите
Текстовая команда. После этого укажите в поле Текст тело запроса,
которое нужно отправить на устройство.

Galileosky
Параметры
В случае Galileosky источник данных для параметра – это номер используемого тега в соответствии с протоколом обмена. Он
формируется по следующему принципу:
tag_<тег параметра из протокола>. Если из параметра по указанному тегу нужно взять
только определенный бит, укажите далее номер бита через точку: .<номер бита>. Например, tag_40.2 — третий бит (отсчет от
нуля) в параметре 40.
💡
Все теги из протокола уже имеются в шаблонной модели, но они могут быть скрыты в интерфейсе. Воспользуйтесь функцией
поиска по модели, чтобы найти нужный параметр. Отредактировать параметр проще, чем создавать новый!
Действия
В случае Galileosky при заполнении действия в поле Отправить выберите
Текстовая команда. После этого укажите в поле Текст команду, которую
нужно отправить на устройство.

💡
Список доступных команд зависит от типа оборудования. Список всех команд с
описанием и примерами составления можно посмотреть на сайте производителя в
разделе Cписок команд.
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
или TST100 список команд можно
найти на сайте производителя.
Все команды, кроме управления реле, задавайте в текстовом виде, указанном в
документации протокола.
Для создания команды управления внутренним реле устройств 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 при заполнении действия в поле Отправить выберите Текстовая команда. После этого укажите в поле
Текст команду, которую нужно отправить на устройство.

💡
Список доступных команд зависит от типа оборудования. Список всех команд с описанием и примерами составления можно
посмотреть на сайте производителя в разделе Команды и запросы.
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из вложенного JSONjsonKey;

- для второго элемента числового массива
someArrayиз вложенного JSONjsonKey.

Действия
Возможность отправки команд на устройство, работающее по 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формате. Спецификация >>>
Пример
READ Server{
"method": "GET",
"path": "/1"
}
Write– обновить значения. Данные для записи должны быть представлены вPlain Textформате. Спецификация >>>
Пример
WRITE 31024/10/1{
"method": "PUT",
"path": "/31024/10/1",
"data": 254
}
Execute– инициировать выполнение действий на ресурсе. Спецификация >>>
Пример
EXECUTE 31024/10/2{
"method": "POST",
"path": "/31024/10/2"
}
Create– создать экземпляр объекта. Данные для записи должны быть представлены вSenML JSONформате. Спецификация >>>
Пример
CREATE 31024/11{
"method": "POST",
"path": "/31024",
"data": [
{
"bn": "/31024/",
"n": "11/1",
"v": 8
}
]
}
Delete– удалить экземпляр объекта. Спецификация >>>
Пример
DELETE 31024/11{
"method": "DELETE",
"path": "/31024/11"
}
Write-Attributes– изменить значения атрибутов. Спецификация >>>
Пример
WRITE periods 31024/10/1{
"method": "PUT",
"path": "/31024/10/1?pmin=5&pmax=60"
}
Discover– получить список всех поддерживаемых объектов, экземпляров объектов и ресурсов. Ответ от клиента должен быть представлен вCoRE Link Formatформате. Спецификация >>>
Пример
DISCOVER Server{
"method": "GET",
"path": "/1",
"data": "discover"
}
Observe– установить наблюдение. Ответ от клиента должен быть представлен вSenML JSONформате. Спецификация >>>
Пример
OBSERVE Battery level{
"method": "GET",
"path": "/3/0/9",
"data": "observe"
}
Cancel Observation– завершить наблюдение. Спецификация >>>
Пример
CANCEL Observe Battery level{
"method": "GET",
"path": "/3/0/9",
"data": "cancel"
}