有没有办法从 azure 函数应用程序更新设备初始孪生?

Is there a way to update device initial twin from azure function app?

我正在使用自定义分配策略通过 DPS 注册我的设备。可以找到 C# 的参考代码 here.

我已经将 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
    };
}

现在,我面临的问题是在上面的代码中更新设备的初始双胞胎。如果您检查上述 link 的 c# 代码,它有一个名为 TwinState 和 TwinCollection 的 class,用于更新设备的初始双胞胎,但相同的 classes 或类似的 api's 我在 NodeJS 中找不到。

nodejs Azure IoT sdk 是否提供更新初始孪生的方法?

我能够在 node.js Azure 函数中实现自定义分配。下面是代码:-

module.exports = async function (context, req) {
    const regId = req.body.deviceRuntimeContext.registrationId;
    if(req && req.body && req.body.deviceRuntimeContext && req.body.deviceRuntimeContext.payload && 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 和 Initial twin 属性。
  2. D 是初始孪生
  3. 属性字段下 Desired 字段中的上限
  4. 函数返回的对象赋值给context.res

Here 是 Azure 家伙的官方视频。

在 DPS 首次预配设备时初始化 IoT 中心设备孪生的一种非常简单的方法是使用 DPS 注册组的“初始设备孪生”状态功能。

您定义初始孪生状态,当设备由注册组配置时,设备孪生会自动为新设备填充。

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