我正在将遥测数据从iotedge模块发送到Azure云,并且需要确认数据是在云中接收到的。发现我可以使用确认回调。
这是我发送数据的方式:
clientResult = IoTHubModuleClient_LL_SendEventToOutputAsync(iotHubModuleClientHandle, messageInstance->messageHandle, "output1", SendConfirmationCallback_dps, (void *)messageInstance);
这是我的回调函数:
void SendConfirmationCallback_dps(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void* userContextCallback)
{
printf("Confirmation[%zu] received for message with result = %d\r\n", messageInstance->messageTrackingId, result);
}
**问题: 如果在发送数据时网络不可用,我会收到错误响应吗? 我是否缺少实现我的目标所需的任何东西?我的代码在所有其他方面都运行良好。 **
我的问题: 即使在发送数据时没有网络,确认回调中的'result'变量也等于零(“ IOTHUB_CLIENT_CONFIRMATION_OK”)。
主板规格: C SDK, iotedge V1.0.8, Ubuntu 18.04, ARM32
答案 0 :(得分:1)
当您将遥测数据从模块发送到IoT中心时,您实际上是在将其发送到Edge Hub,Edge Hub是另一个本地模块,充当IoT Hub的代理并允许客户端继续脱机运行。然后,Edge Hub将尽快将您的数据转发到云上。因此,您看到的成功结果意味着数据已发送到Edge Hub。您的数据将被存储到云中,但是在这种情况下,没有内置的方法可以从云中获取确认回调。