This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220S-LAUNCHXL:AWS 阴影回波示例问题

Guru**** 2553260 points
Other Parts Discussed in Thread: TIDM-1020

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/811035/cc3220s-launchxl-aws-shadow-echo-sample-problems

器件型号:CC3220S-LAUNCHXL
主题中讨论的其他器件:TIDM-1020

您好!

1.我似乎得到了很多下面的误差、但影子回波示例仍然工作正常。 这种误差意味着什么、我应该对此感到担忧吗?

错误:runAWSClient L#154
循环-32中发生错误

2.我注意 到 DeltaCallback 函数仅输出在 AWS 阴影中更改的增量值。 它不会输出任何在 AWS 阴影中未更改的值。 我想问是否可以检索整个 json 的"状态"而不是仅检索增量值?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jack:

    错误-32只是表示您在 AWS 影子示例中使用的 RX 缓冲区太小(MQTT_RX_buffer_TO_SHort_ERROR)。 您可以通过修改 AWS IoT 配置中的 AWS IOT MQTT_RX_BUF_LEN 定义来调整 RX 缓冲区大小

    我认为 AWS 影子 API 函数中没有内置 API 来检索当前影子状态。 您可以尝试使用底层 MQTT 主题手动请求影子状态:

    https://docs.aws.amazon.com/iot/latest/developerguide/device-shadow-mqtt.html

    请告诉我您是否需要进一步澄清或对该主题有进一步的问题。

    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     对于#2、是否可以为影子中的特定值而不仅仅是"状态"注册增量回调?

    那么、不要这么做

    jsonStruct_t deltaObject;
    deltaObject.pData = stringToEchoDelta;
    deltaObject.dataLength = shadow_MAX_SIZE_of_RX_buffer;
    deltaObject.pkey ="state";
    deltaObject.type = shadow_JSON_object;
    deltaObject.CB = DeltaCallback; 

    我可以了  

    jsonStruct_t deltaObject;
    deltaObject.pData = stringToEchoDelta;
    deltaObject.dataLength = shadow_MAX_SIZE_of_RX_buffer;
    deltaObject.pkey ="value1";
    deltaObject.type = shadow_JSON_object;
    deltaObject.CB = Value1 DeltaCallback; 

    通过这种方式、我可以根据影子中特定值的更改执行特定操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Michael Reymond 对于#2、是否可以为影子中的特定值而不仅仅是"状态"注册增量回调?

    那么、不要这么做

    1

    2.

    3.

    4.

    5.

    6.

    jsonStruct_t deltaObject;

    deltaObject.pData = stringToEchoDelta;

    deltaObject.dataLength = shadow_MAX_SIZE_OD_RX_buffer;

    deltaObject.pkey ="状态";

    deltaObject.type = shadow_JSON_object;

    deltaObject.CB = DeltaCallback;

    我可以了

    1

    2.

    3.

    4.

    5.

    6.

    jsonStruct_t deltaObject;

    deltaObject.pData = stringToEchoDelta;

    deltaObject.dataLength = shadow_MAX_SIZE_OD_RX_buffer;

    deltaObject.pkey ="value1";

    deltaObject.type = shadow_JSON_object;

    deltaObject.CB = Value1 DeltaCallback;

    通过这种方式、我可以根据影子中特定值的更改执行特定操作。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    仔细观察 AWS SDK API,似乎实际上可以使用 aws_IoT_shadow_get() API 从云请求完整的影子状态。 您可以按照如下方式使用它:

    void ShadowImage GetCallback (const char * pThingName、ShadowImage _t action、
    shadow_Ack_Status_t status、const char * pReceivedJsonDocument、
    void *pContextData)
    {
    IoT_INFO ("%s"、pReceivedJsonDocument);
    }
    
    aws_IoT_shadow_get (&mqttClient、aws_IOT i_my_the_name、ShadowImage Callback、NULL、4、 false); 

    关于设置要观察的特定影子值的触发器的第二个问题、我只需在影子回调中放置一条 if 语句、以检查所需状态是否设置为特定值。

    此致、

    Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     谢谢 Michael Reymond。 不过、我还有另一个问题。 我设置了一个按钮、通过执行以下代码、在每次按下阴影时更新其"已报告"状态。 但是、一旦发送此更新、它将不同于先前的"所需"状态、后者将触发增量更改。 除了影子的"已报告"状态之外、我还如何更新"所需"状态、以避免此问题?

    IF (buildJSONForReported (stringToEchoDelta、shadow_MAX_SIZE _of_RX_buffer、
    valueString、strlen (valueString))){
    messageArrivedOnDelta = false;
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我只需使用 aws_IoT_shadow_add_desired () API 来更改影子 JsonDocumentBuffer 的"所需":{}部分、然后使用 aws_IoT_shadow_update ()将其推送到云并覆盖所需状态、就像使用 aws_IoT_shadow_add_reported()报告设备状态一样。  

    我认为您可能需要查看 TIDM-1020 CC3220 AWS 恒温器代码的 MQTT_CLIENT_Task.c 文件。 它实现了您感兴趣的许多影子操作。 我建议您查看该文件、以了解如何处理不同的 AWS 影子用例。

    此致、
    Michael