【问题标题】:Azure IOT Central - Cloud to Device messages using MQTTAzure IOT Central - 使用 MQTT 的云到设备消息
【发布时间】:2020-02-24 07:34:58
【问题描述】:

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

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

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

Stackoverlow ansSample app

使用连接字符串作为,

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

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

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

Kindl 帮我解决它。

【问题讨论】:

    标签: azure-iot-hub azure-iot-sdk azure-iot-central


    【解决方案1】:

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

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

    【讨论】:

    • 如果我尝试调用任何 rest api,我会得到,下面的错误 { "error": { "code": "InvalidRequest", "message": "此 API 无法为应用程序调用abcd.azureiotcentral.com。如果您联系支持人员,请提供以下信息。请求 ID:8yb2u4iz,时间:星期一,2020 年 2 月 24 日 12:53:21 GMT。"、"requestId":"8yb2u4iz"、"时间": “格林威治标准时间 2020 年 2 月 24 日星期一 12:53:21”} } 如何解决此问题
    【解决方案2】:

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

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

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

    1. 显示命令 echo PnP 模型:

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

    1. device1 收到了直接调用,然后发布了它的响应(请注意,由于响应时间限制,此屏幕没有被截断)。以下屏幕 sn-p 显示了与 device1 的完整同步 REST 调用。请注意,此预览版未处理基于上述文档和 PnP 模型的响应负载。

    1. 最后,此屏幕 sn-p 通过 REST 显示此命令操作的历史记录:

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

    更新

    当调用方法echo时,我在设备端添加了缺失的屏幕sn-p:

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

    更新 2

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

    device4收到一条关于直接方法升级的消息:

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

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

    【讨论】:

    • IOT Central 不支持云到设备消息?,如果是这样我不能使用 IOT Central?我的设备订阅了 'devices/..ba50621/messages/devicebound/#' 并期望我提到的 json 数据。有什么 API 可以用来发送这个 json 数据吗?
    • 当前 IoTC 预览版的 REST API 没有用于向设备发送 C2D 消息的 API。异步或同步的执行命令 REST API 将调用设备上的直接方法。请将反馈写给 IoTC 团队,feedback.azure.com/forums/911455-azure-iot-central
    • 嗨,我刚刚创建了新的 IotC 应用程序,在创建新模板时,我发现它为我的网关设备预先配置了完全相同的模板。我的设备在 azure 认证的物联网即插即用设备目录中。当我看到属性和命令都完全匹配时。很高兴看到这一点。那么 REST API 会完美运行吗?
    • 是的,它应该可以工作。你的设备模板是什么?
    • 这是模板“SmartConnect FM-201 IoT Gateway”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多