当更改时,影子管理器获取事件。

0

【以下的问题经过翻译处理】 你好,我的核心设备上有一个影子管理器组件,并且当物体发生改变时,命名的影子现在到达了。

在我的自定义python组件中,我可以使用GetThingShadowRequest() ipc调用读取影子...都很好。

我正在尝试侦听增量主题,以便在某些内容发生更改时做出反应,以便我可以请求更新的影子(如上所述)并执行某些操作。

我尝试了:

g_ipc_client = awsiot.greengrasscoreipc.connect()
responserequest = SubscribeToTopicRequest()
responserequest.topic_name = g_uri_shadow_delta_topic  # "$aws/things/mythingname/shadow/name/streamcontrol/update/delta"
responserequest.qos = QOS.AT_LEAST_ONCE
g_shadow_handler = shadow_delta_handler()
g_delta_subscribe_operation = g_ipc_client.new_subscribe_to_topic(g_shadow_handler)
future = g_delta_subscribe_operation.activate(responserequest)
future.result()

但是当我在IoT Core Thing上更新影子时,shadow_delta_handler从未被调用。

我应该使用new_subscribe_to_topic(handler)还是new_subscribe_to_iot_core(handler)?

future.result()似乎立即返回,这是否意味着它已停止订阅?

如何无限期地订阅主题?

profile picture
专家
已提问 5 个月前1 查看次数
1 回答
0

【以下的回答经过翻译处理】 我可能已经找到了问题所在。SubscribeToTopicRequest中的 topic_name 不是成员,应该只是 topic

因此,这一行:

responserequest.topic_name = g_uri_shadow_delta_topic

应该是:

responserequest.name = g_uri_shadow_delta_topic

不幸的是,Python 的灵活性会使您受损,因为没有任何人会在添加成员到 SubscribeToTopicRequest 类时发出警告或提示,即使它将被未使用。

如果我对此正确,那么您应该考虑创建带有您卡住的详细信息的 GitHub 问题。我认为您的 IPC 客户端正在发出没有任何主题的订阅请求,这可能应该是一个错误。此外,Nucleus 应该在接收到错误的订阅请求时返回有用的错误,而不是失败并出现 NullPointer。开发者因缺乏有用的错误信息而卡在这样的小问题上是不可接受的。

Nucleus 的链接(其中包含 IPC 代码):https://github.com/aws-greengrass/aws-greengrass-nucleus/issues

Python v2 IoT SDK 的链接:https://github.com/aws/aws-iot-device-sdk-python-v2/issues

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则