主题中讨论的其他器件:TIDM-1020
您好!
1.我似乎得到了很多下面的误差、但影子回波示例仍然工作正常。 这种误差意味着什么、我应该对此感到担忧吗?
错误:runAWSClient L#154
循环-32中发生错误
2.我注意 到 DeltaCallback 函数仅输出在 AWS 阴影中更改的增量值。 它不会输出任何在 AWS 阴影中未更改的值。 我想问是否可以检索整个 json 的"状态"而不是仅检索增量值?
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.
您好!
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
Michael Reymond 对于#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