#azure-functions #iot #azure-iot-hub #azure-iot-edge #azure-iot-sdk
#azure-функции #iot #azure-iot-hub #azure-iot-edge #azure-iot-sdk
Вопрос:
Я использую пользовательскую политику распределения для регистрации своего устройства через DPS. Справочный код для C # можно найти здесь.
Я перенес большую часть кода для функции Azure с C # на NodeJS, как показано ниже:-
module.exports = async function (context, req) {
const regId = req.body.deviceRuntimeContext.registrationId;
const response = {
status: 200,
message: 'Device registered successfully'
};
if (!regId)
{
response.status = 500
}
const requestCustomPayload = req.body.deviceRuntimeContext.payload;
context.res = {
iotHubHostName: req.body.deviceRuntimeContext.payload.hubName
};
}
Теперь проблема, с которой я сталкиваюсь, заключается в обновлении начального двойника для устройства в приведенном выше коде. Если вы проверите приведенную выше ссылку на код c #, в нем есть классы TwinState и TwinCollection, которые используются для обновления начального двойника устройства, но те же классы или похожие API, которые я не смог найти в NodeJS.
Предоставляет ли nodejs Azure IoT sdk способ обновления начального двойника?
Комментарии:
1. TwinState — это просто оболочка для тегов и желаемых свойств, подробности см. в learn.microsoft.com/en-us/dotnet/api /…
2. @RomanKiss вы правы. Перейдя по этой ссылке, я смог определить данные, которые будут отправлены. Но загвоздка в том, что нам нужно отправить данные в поле body. Проверьте ответ ниже.
Ответ №1:
Мне удалось добиться пользовательского распределения в node.js Функция Azure. Ниже приведен код:-
module.exports = async function (context, req) {
const regId = req.body.deviceRuntimeContext.registrationId;
if(req amp;amp; req.body amp;amp; req.body.deviceRuntimeContext amp;amp; req.body.deviceRuntimeContext.payload amp;amp; req.body.deviceRuntimeContext.registrationId) {
const requestCustomPayload = req.body.deviceRuntimeContext.payload;
context.res = {
body: {
iotHubHostName: req.body.deviceRuntimeContext.payload.hubName,
initialTwin: {
tags: {
deviceName: "test"
}
},
properties: {
Desired: {}
}
}
}
};
} else {
context.res = {
status: 500,
message: `Somethig went wrong. Req object is ${JSON.stringify(req)}`
}
}
}
Некоторые наблюдения в приведенном выше коде
- Возвращаемый объект из функции имеет поле body, в котором мы задаем hubName и начальные свойства twin.
D
есть ли заглавные буквы вDesired
поле в поле свойств начального двойника- Возвращаемый объект из функции присваивается context.res
Вот официальное видео от ребят из Azure.
Ответ №2:
Очень простой способ инициализировать двойники устройств-концентраторов Интернета Вещей, когда устройство впервые подготовлено DPS, — это использовать функцию состояния «начальный двойник устройства» группы регистрации DPS.
Вы определяете начальное состояние двойника, и когда устройство подготавливается группой регистрации, двойник устройства автоматически заполняется для нового устройства.
{
"tags": {
"AnyKey": "AnyValue"
},
"properties": {
"desired": {
"newKey": 200,
"newKey2": "this is a test",
}
}
}