azure 如何为IoT即插即用DTDL模型中的设备孪生设置所需属性和报告属性

toe95027  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(140)

我将此dtdl模型上传到IoT即插即用v0.15.4.0中的本地文件夹(之前版本的行为相同):

{
"@id": "dtmi:com:sergio:devkit;1",
"@type": "Interface",
"@context": [
    "dtmi:dtdl:context;2"
],
"displayName": "Machine Part -v1",
"description": "Machine Part data",
"contents": [
    {
        "@type": "Property",
        "name": "telemetryInterval",
        "displayName": "telemetryInterval",
        "description":  "The time interval of this data",
        "schema": "double",
        "writable": true
    },
    {
        "@type": "Property",
        "name": "PartId",
        "displayName": "PartId",
        "description": "The unique id of the machine part",
        "writable": true,
        "schema": "string"
    },

    {
        "@type": "Property",
        "name": "Alert",
        "displayName": "Alert",
        "description": "whether or not this machine part needs maintenance",
        "writable": true,
        "schema": "boolean"
    },
    {
        "@type": "Property",
        "name": "ledState",
        "displayName": "LED state",
        "description": "Returns the current state of the onboard LED.",
        "writable": true,
        "schema": "boolean"
    },
    {
        "@type": "Telemetry",
        "name": "Description",
        "schema": "string"
    },
    {
        "@type": "Telemetry",
        "name": "Code",
        "schema": "integer"
    },
    {
        "@type": "Telemetry",
        "name": "Temperature",
        "displayName": "Temperature",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "Humidity",
        "displayName": "Humidity",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "pressure",
        "displayName": "Pressure",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "magnetometerX",
        "displayName": "Magnetometer X / mgauss",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "magnetometerY",
        "displayName": "Magnetometer Y / mgauss",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "magnetometerZ",
        "displayName": "Magnetometer Z / mgauss",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "accelerometerX",
        "displayName": "Accelerometer X",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "accelerometerY",
        "displayName": "Accelerometer Y",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "accelerometerZ",
        "displayName": "Accelerometer Z",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "gyroscopeX",
        "displayName": "Gyroscope X",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "gyroscopeY",
        "displayName": "Gyroscope Y",
        "schema": "double"
    },
    {
        "@type": "Telemetry",
        "name": "gyroscopeZ",
        "displayName": "Gyroscope Z",
        "schema": "double"
    }
]

}
我的期望是,因为属性ledState和警报属性是可写的,这些应该是报告和所需的属性。但是,Azure门户中的物联网集线器设备(见下文)显示它们的方式不同,我不知道为什么。我如何将上传到物联网P&P的DTDL模型中的属性设置为报告或所需?

{
"deviceId": "mymxchip",
"etag": "AAAAAAAAAAk=",
"deviceEtag": "NDU1NDk0NDM4",
"status": "enabled",
"statusUpdateTime": "0001-01-01T00:00:00Z",
"connectionState": "Connected",
"lastActivityTime": "2023-01-09T07:26:48.611708Z",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
    "primaryThumbprint": null,
    "secondaryThumbprint": null
},
"modelId": "dtmi:com:sergio:devkit;1",
"version": 164,
"properties": {
    "desired": {
        "telemetryInterval": 5,
        "Alert": true,
        "$metadata": {
            "$lastUpdated": "2023-01-08T07:27:01.9659284Z",
            "$lastUpdatedVersion": 9,
            "telemetryInterval": {
                "$lastUpdated": "2023-01-08T06:54:11.9502921Z",
                "$lastUpdatedVersion": 8
            },
            "Alert": {
                "$lastUpdated": "2023-01-08T07:27:01.9659284Z",
                "$lastUpdatedVersion": 9
            }
        },
        "$version": 9
    },
    "reported": {
        "deviceInformation": {
            "__t": "c",
            "manufacturer": "MXCHIP",
            "model": "AZ3166",
            "swVersion": "1.0.0",
            "osName": "Azure RTOS",
            "processorArchitecture": "Arm Cortex M4",
            "processorManufacturer": "STMicroelectronics",
            "totalStorage": 1024,
            "totalMemory": 128
        },
        "ledState": false,
        "telemetryInterval": {
            "ac": 200,
            "av": 1,
            "value": 5
        },
        "$metadata": {
            "$lastUpdated": "2023-01-09T07:28:26.0068306Z",
            "deviceInformation": {
                "$lastUpdated": "2023-01-09T07:28:25.4599426Z",
                "__t": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "manufacturer": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "model": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "swVersion": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "osName": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "processorArchitecture": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "processorManufacturer": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "totalStorage": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                },
                "totalMemory": {
                    "$lastUpdated": "2023-01-09T07:28:25.4599426Z"
                }
            },
            "ledState": {
                "$lastUpdated": "2023-01-09T07:28:25.7411971Z"
            },
            "telemetryInterval": {
                "$lastUpdated": "2023-01-09T07:28:26.0068306Z",
                "ac": {
                    "$lastUpdated": "2023-01-09T07:28:26.0068306Z"
                },
                "av": {
                    "$lastUpdated": "2023-01-09T07:28:26.0068306Z"
                },
                "value": {
                    "$lastUpdated": "2023-01-09T07:28:26.0068306Z"
                }
            }
        },
        "$version": 155
    }
},
"capabilities": {
    "iotEdge": false
}

}

mjqavswn

mjqavswn1#

DTDL可写属性在设备孪生中同时显示为报告属性和所需属性,这是正确的。但是,这取决于设备的行为。
如果您使用服务API设置所需属性,则会更新设备孪生中的所需属性值。然后,设备应在接收并处理所需属性时发送Ack-在上面的示例中,看起来设备已对telemetryInterval属性执行了此操作。设备尚未确认Alert所需属性更新。
当设备发送报告属性时,将使用设备发送的值更新设备孪生。在上例中,设备已发送deviceInformationledStatetelemetryInterval报告属性。发送telemetryInterval是为了响应所需属性。
您可以在此处找到更多详细信息:

  • https://learn.microsoft.com/en-us/azure/iot-develop/concepts-convention#writable-properties
  • https://learn.microsoft.com/en-us/azure/iot-develop/concepts-developer-guide-device#writable-properties(多种语言的器械代码示例)

相关问题