Tiklu Ganguly
Tiklu Ganguly

Reputation: 357

Azure IoT Edge C++ module not sending device to cloud telemetry

I have written an IoT Edge C++ module that is sending the event output using the following function call:

bool IoTEdgeClient::sendMessageAsync(std::string message)
{
    bool retVal = false;

    LOGGER_TRACE(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) START");
    LOGGER_DEBUG(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) message : " << message);

    Poco::Mutex::ScopedLock lock(_accessMutex);

    MESSAGE_INSTANCE *messageInstance = CreateMessageInstance(message);

    IOTHUB_CLIENT_RESULT clientResult = IoTHubModuleClient_LL_SendEventToOutputAsync(_iotHubModuleClientHandle, messageInstance->messageHandle, "output1", SendConfirmationCallback, messageInstance);
    if (clientResult != IOTHUB_CLIENT_OK)
    {
        LOGGER_ERROR(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) ERROR : " << message << " Message id: " << messageInstance->messageTrackingId);
        retVal = false;
    }
    else
    {
        retVal = true;
    }

    LOGGER_TRACE(IOT_CONNECTION_LOG, className + "::sendMessageAsync(...) END");
    return retVal;
}

The result of the function call IoTHubModuleClient_LL_SendEventToOutputAsync is always coming as IOTHUB_CLIENT_OK. My module name is MicroServer and the route configured is:

FROM /messages/modules/MicroServer/outputs/output1 INTO $upstream

I do not see the SendConfirmationCallback function being called. Also, I do not see any device to cloud message appearing in the IoT hub. Any ideas why this is happening and how to fix it?

Upvotes: 0

Views: 261

Answers (1)

Tiklu Ganguly
Tiklu Ganguly

Reputation: 357

It turned out that I need to call this function atleast a couple of times per second

IoTHubModuleClient_LL_DoWork(_iotHubModuleClientHandle);

which I was not doing. As a result the code was not working properly. Once I started doing it. The code just worked.

Upvotes: 1

Related Questions