【问题标题】:AWS GreenGrass check Topic in LambdaAWS GreenGrass 检查 Lambda 中的主题
【发布时间】:2018-06-02 08:53:07
【问题描述】:

我目前正在摆弄 AWS GreenGrass,并且已经完成了大部分基本示例。现在问题我已经了解如何根据触发它的 MQTT 主题在我的 lambda 函数中执行不同的操作。我真的找不到关于如何区分哪个主题触发了我的 python 脚本中的函数处理程序的文档。我正在尝试为我的 sonos 系统构建一个小型控制器,它使用以下非常基本的主题:

sonos/play

这只是尝试播放我硬编码的某首歌曲。

sonos/pause

应该暂停系统。

我知道我可以为每个命令创建几个 lambda,但这似乎很挑剔。有人可以解释一下如何解决这类问题吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda greengrass


    【解决方案1】:

    基于此dev guide,您可以在 lambda 中从上下文中获取主题:

    def get_input_topic(context):
        try:
            topic = context.client_context.custom['subject']
        except Exception as e:
            logging.error('Topic could not be parsed. ' + repr(e))
        return topic
    
    action = get_input_topic(context).split('/')[-1]
    

    【讨论】:

      【解决方案2】:

      我实际上并不认为这是可能的。如果您查看传递给您的 lambda 函数的 eventcontext 对象,它们都不包含主题地址。

      我必须做的是有一个单独的 lambda 函数来响应每个 MQTT 主题的消息。

      如果可以做到这一点,很高兴得到纠正。

      【讨论】:

        【解决方案3】:

        您可以在 lambda 处理程序的上下文对象中检查客户端上下文。不要认为这是记录在案的。但这应该可以解决您的问题。

        【讨论】:

          【解决方案4】:

          您是否尝试过创建 AWS IoT 规则?

          我遇到了类似的问题,因为我有几个 AWS IoT Things,我不想创建数百个订阅和 lambda。

          在您的 GG 组中添加以下订阅:

          Source    | Target       | Topic
          ----------|--------------|---------------------
          IoT Cloud | [xyz_lambda] | [xyz_lambda]/trigger
          

          然后转到 AWS IoT 上的 Act 部分并使用以下语句创建规则:

          SELECT topic(2) as action, * from 'sonos/#'
          

          topic(2) 函数捕获主题的第二段(请参阅AWS IoT SQL Reference - Functions)。我们将其重命名为action* 捕获与 sonos/playsonos/pause 消息(如果有)一起发送的有效负载。

          向您的规则添加一个操作,将消息重新发布到[xyz_lambda]/trigger 主题。

          发送到您的 lambda 函数处理程序的 JSON 事件将具有属性 action,后跟 sonos/playsonos/pause 消息的 JSON 有效负载:

          {
            "action": "play",
            ...
          }
          

          {
            "action": "pause",
            ...
          }
          

          希望这会有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-08
            • 2017-11-28
            • 2020-05-06
            • 1970-01-01
            • 2021-01-09
            • 1970-01-01
            • 1970-01-01
            • 2019-09-01
            相关资源
            最近更新 更多