1

我的 IOT 设备已连接到 IOT 中央,并且能够通过导出选项接收数据。现在我想向我的设备发送一些命令,例如,在 json 数据下方,它期望在订阅的 URL'devices/....ba50621/messages/devicebound/#' 上发送设备的心跳

{ "action": "heartBeat", 
  "requestId": "b2c3d4e5-3424-4dca-32dc-12b73290cfed"
}

我通过参考以下链接创建服务应用程序以将云发送到设备消息,

Stackoverlow ans示例应用程序

使用连接字符串作为,

"HostName=asdasdas.azure-devices.net;DeviceId=asdasdasda50621;SharedAccessKey=nXmyveEPrV....pmo9jULvDtik="

当设备通过 dps 注册时收到此连接字符串。我在服务应用程序上使用它来连接。我不知道这是否正确。

当应用程序尝试发送消息时,我收到未经授权的错误。在上述链接的文档中说要从 IOT 集线器的共享访问策略中获取连接字符串。但我正在使用 iot central 并在连接字符串上方使用。

Kindl帮我解决它。

4

2 回答 2

1

如果您的 IoTC 应用程序不是旧版应用程序,您可以使用预览 IoTC 应用程序(它是CapabilityModel驱动的模型类型)和 REST API 支持来调用您的设备。当前预览版没有您尝试实现的功能,例如向设备发送 C2D 消息。

IoTC 预览版仅支持调用设备方法- Execute Command。以下屏幕片段演示了此功能。对于此示例,我使用的是Azure IoT Hub Tester,其中虚拟设备使用 MQTT 协议直接连接到 IoT Central 应用程序的底层 IoT Hub。

我使用AzureKit ESP32模板创建了一个免费的 IoT Central 应用程序,为 device1 注册和配置,从 Azure IoT Hub 测试器连接:

  1. 显示命令echo PnP 模型: 在此处输入图像描述

  2. 通过 REST POST 调用调用命令回显。请注意,授权 sastoken 必须在管理/API 令牌页面中创建。

在此处输入图像描述

  1. device1收到了直接调用,然后发布了它的响应(注意,这个屏幕没有因为响应时间短而被剪掉)以下屏幕片段显示了与 device1 的完整同步 REST 调用。请注意,此预览版未处理基于上述文档和 PnP 模型的响应负载。

在此处输入图像描述

  1. 最后,此屏幕片段通过 REST 显示了此命令操作的历史记录:

在此处输入图像描述

请注意,也缺少来自设备的响应对象,如 CapabilityModel 模式中所述。

更新

当调用方法echo时,我在设备端添加了缺少的屏幕片段:

在此处输入图像描述

如上图所示,设备接收到 REST POST 有效负载,并将其发布的响应返回给基于 PnP 模型模式的调用程序。

更新 2

以下屏幕片段演示了为device4调用命令升级。请注意,device4 是从模板SmartConnect FM-201 IoT Gateway创建的 PnP 设备。

在此处输入图像描述

device4收到有关直接方法升级消息:

在此处输入图像描述

device4将响应发送回调用者和 IoTC 应用程序。下图展示了它的历史:

在此处输入图像描述

再次注意,REST 响应和 IoTC 应用程序中都缺少响应对象。我希望这是此预览版中的一个错误,它会尽快修复它以跟进 CapabilityModel 架构。

于 2020-02-24T13:54:42.640 回答
1

云到设备的消息传递在 IoT Central 中的工作方式与普通的 IoT 中心略有不同。您必须使用 IoT Central REST API,而不是将服务客户端连接到 IoT 中心。

您可以向设备发送命令或更新属性。包含示例的完整文档在此处您可以在此处找到向您的设备发送命令的文档。

于 2020-02-24T08:07:14.487 回答