Есть ли способ обновить первоначальный близнец устройства из функционального приложения Azure?

#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)}`
        }
    }
}
  

Некоторые наблюдения в приведенном выше коде

  1. Возвращаемый объект из функции имеет поле body, в котором мы задаем hubName и начальные свойства twin.
  2. D есть ли заглавные буквы в Desired поле в поле свойств начального двойника
  3. Возвращаемый объект из функции присваивается context.res

Вот официальное видео от ребят из Azure.

Ответ №2:

Очень простой способ инициализировать двойники устройств-концентраторов Интернета Вещей, когда устройство впервые подготовлено DPS, — это использовать функцию состояния «начальный двойник устройства» группы регистрации DPS.

Вы определяете начальное состояние двойника, и когда устройство подготавливается группой регистрации, двойник устройства автоматически заполняется для нового устройства.

 {
  "tags": {
    "AnyKey": "AnyValue"
  },
  "properties": {
    "desired": {
        "newKey": 200,
        "newKey2": "this is a test",
    }
  }
}