Недавно Центр Интернета вещей Azure (версия 2020-09-30) был публично включен для IoT Plug and Play, где модель устройства является связующим звеном между устройством и сторонами, обращенными к службе. Подробнее об этой концепции см. здесь. Двойник устройства был расширен за счет нового свойства, такого как modelId, которое представляет собой идентификатор модели pnp в репозитории. Подробнее см. здесь.
После заполнения modelId в двойнике устройства устройство знает все ожидаемые прямые методы, включая их схемы запроса/ответа, обмен сообщениями c2d, сообщаемые и желаемые свойства и данные телеметрии. С другой стороны, например на стороне службы, инициатор знает, как вызвать прямой метод на устройстве и т. д.
Ниже приведен пример короткой модели pnp с одними данными телеметрии (Temperature) и одной командой для вызова прямого метода SetTemp на устройстве в синхронном режиме (без c2d сообщение). Он был создан в приложении IoT Central:
модель pnp (modelId = dtmi:rk2021iotcfree:Test6vj;1):
{
"@id": "dtmi:rk2021iotcfree:Test6vj;1",
"@type": "Interface",
"contents": [
{
"@id": "dtmi:rk2021iotcfree:Test6vj:Temperature;1",
"@type": [
"Telemetry",
"Temperature"
],
"displayName": {
"en": "Temperature"
},
"name": "Temperature",
"schema": "double",
"unit": "degreeCelsius"
},
{
"@id": "dtmi:rk2021iotcfree:Test6vj:SetTemp;1",
"@type": "Command",
"commandType": "synchronous",
"displayName": {
"en": "SetTemp"
},
"name": "SetTemp",
"request": {
"@id": "dtmi:rk2021iotcfree:Test6vj:SetTemp:__request:temp;1",
"@type": "CommandPayload",
"displayName": {
"en": "temp"
},
"name": "temp",
"schema": "double"
}
}
],
"displayName": {
"en": "Test"
},
"@context": [
"dtmi:iotcentral:context;2",
"dtmi:dtdl:context;2"
]
}
На основе modelId смоделированное device10 было подключено как pnp-устройство к Azure IoT Hub, а фрагмент экрана показывает полученное сообщение по прямому методу SetTemp. вызывается из инструмента Azure IoT Explorer:
![введите здесь описание изображения](https://i.stack.imgur.com/BRM4t.png)
![введите здесь описание изображения](https://i.stack.imgur.com/XIPSv.png)
следующий фрагмент экрана показывает устройство-близнец устройства10, как вы можете видеть, есть свойство modelId: ![введите здесь описание изображения](https://i.stack.imgur.com/7GVr9.png)
Я рекомендую использовать для вашего решения модель pnp. если вас интересуют только команды, вы можете создать небольшое подмножество модели только для этого, см. следующий пример:
{
"@id": "dtmi:rk2021iotcfree:Test6vj;1",
"@type": "Interface",
"contents": [
{
"@type": "Command",
"commandType": "synchronous",
"name": "SetTemp"
}
],
"@context": [
"dtmi:dtdl:context;2"
]
}
куда:
"@id": "dtmi:rk2021iotcfree:Test6vj;1"
представляет modelId
"commandType": "synchronous"
представляет вызов прямого метода
"name": "SetTemp"
представляет имя метода
person
Roman Kiss
schedule
12.01.2021