【问题标题】:How do I send an Azure Cloud to Device message in format IOTHUBMESSAGE_STRING?如何以 IOTHUBMESSAGE_STRING 格式发送 Azure 云到设备消息?
【发布时间】:2019-10-29 21:47:36
【问题描述】:

我正在使用 Azure IOT SDK,尝试将带有字符串正文的云发送到设备消息并在 SDK 中接收。无论我发送什么,SDK 都以字节数组格式表示。如何将字符串而不是字节数组从云端发送到我的设备 SDK?

这是我遵循的代码示例: https://github.com/Azure/azure-iot-sdk-c/blob/master/iothub_client/samples/iothub_ll_c2d_sample/iothub_ll_c2d_sample.c

这是我的回调:

IOTHUBMESSAGE_DISPOSITION_RESULT CAzureProcessor::ReceiveMessageCallback(IOTHUB_MESSAGE_HANDLE message, void* userContextCallback)
{
    CMyObject* pObject = (CMyObject*)userContextCallback;
    if (pObject != NULL)
    {
       IOTHUBMESSAGE_CONTENT_TYPE content_type = IoTHubMessage_GetContentType(message);
        if (content_type == IOTHUBMESSAGE_STRING)
       {
            //do stuff
       }
    }
    return IOTHUBMESSAGE_ACCEPTED;
}

我的问题是我永远不会到达“dostuff”,因为当我从 Azure 门户上的“消息到设备”页面或设备资源管理器发送 C2D 消息时,IoTHubMessage_GetContentType 总是返回 IOTHUBMESSAGE_BYTEARRAY。如何从这两个点中的任何一个发送字符串?

如果有帮助,这是我要发送的字符串:

[{"devicename":"My ROC","alias":"elevation","value":100}]

【问题讨论】:

  • 我最终调用了 IoTHubMessage_GetByteArray 并且 null 终止了字节数组以创建一个字符串。知道是否有更好的方法仍然很有趣。
  • 您在发送c2d消息时是否将内容类型设置为“text/plain”?或者,如果您仍然发送 JSON,您最好将内容类型设置为“application/json”:-)

标签: cloud azure-iot-hub


【解决方案1】:

不知道你是否查看过这篇文章,因为我使用了相同解决方案的变体,它对我来说非常适合 C2D 通信。

Sending Cloud to Device Messages using IoT DevKit and Azure IoT Hub - Device Code

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-11-05
    • 1970-01-01
    • 2017-10-04
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多