Особенности моделей для разных протоколов

MQTT

Параметры

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

  1. В топике присутствует значение другого параметра.
Бывают ситуации, когда в топике присутствуют динамические составляющие, которые могут незначительно отличаться у разных объектов. Например, есть два устройства, которые присылают данные с топиком, в котором присутствует идентификатор объекта:
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 объекта.
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 GPSnavigation.timeДата и время
Latitudenavigation.latitudeШирота
Longitudenavigation.longitudeДолгота
Speednavigation.speedСкорость
Anglenavigation.angleКурс
Heightnavigation.heightВысота
Satellitesnavigation.sat-countКоличество спутников
HDOPhdopСнижение точности
InputsinputsЦифровые входы, каждый бит числа соответствует одному входу, начиная с младшего
OutputsoutputsЦифровые выходы, каждый бит числа соответствует одному выходу, начиная с младшего
ADCadcАналоговые входы
iButtonibuttonКод ключа водителя
Если из параметра по указанному адресу нужно взять только определенный бит, то укажите далее номер бита через точку: .<номер бита>. Например, 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 из вложенного JSON jsonKey;
Для числового параметра
  • для второго элемента числового массива someArray из вложенного JSON jsonKey.
Для элемента массива

Действия

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

Galileosky

Параметры

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

Действия

В случае Galileosky при заполнении действия в поле Отправить выберите Текстовая команда. После этого укажите в поле Текст команду, которую нужно отправить на устройство.
Параметры команды
💡
Список доступных команд зависит от типа оборудования. Список всех команд с описанием и примерами составления можно посмотреть на сайте производителя в разделе Cписок команд.

Teltonika

Параметры

В случае Teltonika источник данных для параметра – это адрес параметра в соответствии с протоколом обмена. Он формируется по следующему принципу: in_out_<номер параметра в протоколе (Property ID in AVL packet)>.

Property
Все GPS-параметры, соответствующие возможностям протокола, в шаблонной модели уже представлены (navigation.latitude, navigation.speed и т.д.).

ИмяИсточникОписание
Longitudenavigation.longitudeДолгота
Latitudenavigation.latitudeШирота
Altitudenavigation.heightВысота в метрах над уровнем моря
Anglenavigation.angleУгол в градусах от севера по часовой стрелке
Satellitesnavigation.sat-countКоличество видимых спутников
Speednavigation.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"
    }
  }
}
В этом случае необходимо использовать параметр с типом данных Объект:
  1. Создайте параметр с типом данных Объект, в источнике укажите тот путь, по которому ожидаете данные – в данном случае state/telemetry1. Задайте некоторый идентификатор – например, telemetry1.
    Объект
  2. Создайте дополнительные параметры – под каждое поле из JSON. В данном случае получается 9 элементов:
    1. Параметр для поля stringKey
    2. Параметр для поля booleanKey
    3. Параметр для поля doubleKey
    4. Параметр для поля longKey
    5. Параметр для поля someNumber из вложенного JSON jsonKey
    6. Параметр для первого элемента массива поля someArray из вложенного JSON jsonKey
    7. Параметр для второго элемента массива поля someArray из вложенного JSON jsonKey
    8. Параметр для третьего элемента массива поля someArray из вложенного JSON jsonKey
    9. Параметр для поля key из вложенного JSON someNestedObject из вложенного в свою очередь JSON jsonKey

Параметры
У каждого из этих параметров укажите тип данных, соответствующий типу этих значений в 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 формате. Спецификация >>>
Пример
READ Server

{
  "method": "GET",
  "path": "/1"
}
Read
  • Write – обновить значения. Данные для записи должны быть представлены в Plain Text формате. Спецификация >>>
Пример
WRITE 31024/10/1

{
  "method": "PUT",
  "path": "/31024/10/1",
  "data": 254
}
Write
Пример
EXECUTE 31024/10/2

{
  "method": "POST",
  "path": "/31024/10/2"
}
Execute
  • Create – создать экземпляр объекта. Данные для записи должны быть представлены в SenML JSON формате. Спецификация >>>
Пример
CREATE 31024/11

{
  "method": "POST",
  "path": "/31024",
  "data": [
    {
      "bn": "/31024/",
      "n": "11/1",
      "v": 8
    }
  ]
}
Create
Пример
DELETE 31024/11

{
  "method": "DELETE",
  "path": "/31024/11"
}
Delete
Пример
WRITE periods 31024/10/1

{
  "method": "PUT",
  "path": "/31024/10/1?pmin=5&pmax=60"
}
Write-Attributes
  • Discover – получить список всех поддерживаемых объектов, экземпляров объектов и ресурсов. Ответ от клиента должен быть представлен в CoRE Link Format формате. Спецификация >>>
Пример
DISCOVER Server

{
  "method": "GET",
  "path": "/1",
  "data": "discover"
}
Discover
  • Observe – установить наблюдение. Ответ от клиента должен быть представлен в SenML JSON формате. Спецификация >>>
Пример
OBSERVE Battery level

{
  "method": "GET",
  "path": "/3/0/9",
  "data": "observe"
}
Observe
Пример
CANCEL Observe Battery level

{
  "method": "GET",
  "path": "/3/0/9",
  "data": "cancel"
}
Cancel Observation