我无法使用适用于 C++ v2 的 AWS IOT 开发工具包为主题创建 LWT。没有一个示例演示如何完成此操作,文档也不完全清楚。

我曾尝试SetWill()在调用之前调用连接上的函数Connect(),但这只会导致连接失败。

我们的代码基于 AWS simple pub sub 代码,并且基本稳定(除了由于未知原因遇到超时和重新连接)。

我们的目标是嵌入式系统,我们当前的 AWS SDK 版本是 1.12.8。如果这是此问题的根本原因(也是我们观察到的断开连接和超时问题),我们可以升级我们的 SDK 版本。


我一直在努力设置一个规则,以正确地将消息重新发布到影子/更新主题,但我确实看到 AWS IOT 在我的应用程序退出时未执行正常断开连接的情况下发布 LWT 消息。我在 Connect 之前调用 SetWill() 并将保留参数设置为“false”。如果我将 retain 设置为“true”,那么 AWS 会在我连接后立即关闭连接。

此代码可能不是创建 JSON 消息的最有效方式,但它确实以正确的格式发布数据以进行影子更新,前提是您可以获得将其转发到正确的影子主题的规则。

    JsonObject jsonLWT;
    JsonObject jsonState;
    JsonObject jsonReported;
    String sLWT;

    jsonReported.WithString("connected", "false");
    jsonState.WithObject("reported", jsonReported);
    jsonLWT.WithObject("state", jsonState);
    sLWT = jsonLWT.View().WriteReadable();

    ByteBuf bbufLWT = ByteBufFromArray((const uint8_t*)sLWT.data(), sLWT.length());


    if ( !connection->SetWill("sdk/test/update", AWS_MQTT_QOS_AT_MOST_ONCE, false, bbufLWT) ) {
        fprintf(stdout, "ERROR: failed to set LWT\n");
        return -1;
    }

我在 Windows PC 上使用适用于 C++ v2 的 AWS IOT SDK。我不知道它是什么版本,但它是从最新的 git 源构建的。


微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部