AWS IoT Greengrass:连接器入门

AWS IoT Greengrass:连接器入门

先决条件:

​ Twilio 账户 SID、身份验证令牌和支持 Twilio 的电话号码。创建 Twilio 项目后,项目控制面板上会显示这些值。您可以使用 Twilio 试用账户。如果您使用的是试用账户,则必须将非 Twilio 收件人电话号码添加到已验证电话号码列表中。 有关更多信息,请参阅如何使用您的免费 Twilio 试用账户

步骤 1:创建 Secrets Manager 密钥

在此步骤中,您将使用 AWS Secrets Manager 控制台为 Twilio 身份验证令牌创建一个文本类型密钥。

  1. 登录 AWS Secrets Manager 控制台

  2. 选择存储新密钥

  3. (选择密钥类型) 下,选择 (其他密钥类型)

  4. (纯文本) 选项卡的 (指定要为此密钥存储的键/值对) 下方,输入您的 Twilio 身份验证令牌。删除所有 JSON 格式设置,然后仅输入令牌值。

  5. 请确保为加密密钥保持选中 DefaultEncryptionKey,然后选择 Next (下一步)

    注意

    如果使用 Secrets Manager 在您的账户中创建的默认 AWS 托管密钥,AWS KMS 不会对您收费。

  6. 对于密钥名称,输入 greengrass-TwilioAuthToken,然后选择下一步

    注意

    默认情况下,Greengrass 服务角色允许 AWS IoT Greengrass 获得名称以 greengrass- 开头的密钥的值。有关更多信息,请参阅密钥要求。

  7. 本教程不需要轮换,因此,请选择 (禁用自动轮换),然后选择 (下一步)

  8. (审核) 页上,审核您的设置,然后选择 (存储)

    接下来,在 Greengrass 组中创建一个引用该密钥的密钥资源。

步骤 2:将密钥资源添加到 Greengrass 组

  1. 在 AWS IoT 控制台中,选择 Greengrass,然后选择 (组)

  2. 在组配置页面上,选择 (资源),然后选择 (密钥)。此选项卡显示属于该组的密钥资源。您可以从此选项卡添加、编辑和删除密钥资源。

  3. 选择 (添加密钥资源)

  4. (向组中添加密钥资源) 页面上,选择 (选择),然后选择 greengrass-TwilioAuthToken

  5. (选择标签 (可选)) 页面上,选择 (下一步)。AWSCURRENT 暂存标签表示最新版密钥。该标签始终包含在密钥资源中。

    注意

    本教程只需要 AWSCURRENT 标签。您可以视情况包括 Lambda 函数或连接器所需的标签。

  6. (为密钥资源命名) 页面上,输入 MyTwilioAuthToken,然后选择 (保存)

步骤 3:将连接器添加到 Greengrass 组

  1. 在组配置页面上,选择 (连接器),然后选择 (添加连接器)

  2. (选择连接器) 页面上,选择 (Twilio 通知),然后选择 (下一步)

  3. (配置参数) 页面上,执行以下操作:

    • 对于 (Twilio 身份验证令牌资源),选择 MyTwilioAuthToken。这是上一步中所创建的密钥资源。

      注意

      选择该资源时,将为您填充 ARN of Twilio auth token secret (Twilio 身份验证令牌密钥的 ARN) 属性。

    • 对于 (默认的来电号码),输入您的支持 Twilio 的实验号码。

    • 对于 (Twilio 账户 SID),输入您的 Twilio 账户 SID。

  4. 选择 (添加)

步骤 4:创建 Lambda 函数部署程序包

  1. AWS IoT Greengrass Core 开发工具包 下载 页面下载 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。

  2. 解压缩下载的程序包以获取软件开发工具包。软件开发工具包是 greengrasssdk 文件夹。

  3. 将以下 Python 代码函数保存在名为 temp_monitor.py 的本地文件中。

    from __future__ import print_function
    import greengrasssdk
    import json
    import random
    
    client = greengrasssdk.client('iot-data')
    
    # publish to the Twilio Notifications connector through the twilio/txt topic
    def function_handler(event, context):
        temp = event['temperature']
        
        # check the temperature
        # if greater than 30C, send a notification
        if temp > 30:
            data = build_request(event)
            client.publish(topic='twilio/txt', payload=json.dumps(data))
            print('published:' + str(data))
            
        print('temperature:' + str(temp))
        return
    
    # build the Twilio request from the input data
    def build_request(event):
        to_name = event['to_name']
        to_number = event['to_number']
        temp_report = 'temperature:' + str(event['temperature'])
    
        return {
            "request": {
                "recipient": {
                    "name": to_name,
                    "phone_number": to_number,
                    "message": temp_report
                }
            },
            "id": "request_" + str(random.randint(1,101))
        }
    
  4. 将以下项目压缩到名为 temp_monitor_python.zip 的文件中。在创建 ZIP 文件时,仅包含代码和依赖项,而不包含文件夹。

    • temp_monitor.py。应用程序逻辑。
    • greengrasssdk。发布 MQTT 消息的 Python Greengrass Lambda 函数所需的库。

    此即 Lambda 函数部署程序包。

步骤 5:在 AWS Lambda 控制台中创建 Lambda 函数

在该步骤中,您使用 AWS Lambda 控制台创建 Lambda 函数,然后将其配置为使用您的部署程序包。接着,发布函数版本并创建别名。

  1. 在组配置管理器中选择(Lambda)

  2. 选择 (添加Lambda),然后选择 (新建Lambda)

  3. (基本信息) 部分中,使用以下值:

    • 对于 (函数名称),输入 TempMonitor

    • 对于 (运行时),选择 Python 2.7

    • 对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。(此角色未由 AWS IoT Greengrass 使用。)

  4. 在页面底部,选择 (创建函数)

  5. 在 TempMonitor 函数的 (配置) 选项卡上,在 (函数代码) 中使用以下值:

    • 对于 代码输入种类,选择上传 .zip 文件

    • 对于 (运行时),选择 Python 2.7

    • 对于 (处理程序),输入 temp_monitor.function_handler

  6. 选择 (上传)

  7. 选择您的 temp_monitor_python.zip 部署程序包。

  8. 选择 (保存)

Greengrass 组可以按别名 (推荐) 或版本引用 Lambda 函数。通过使用别名,可以更轻松地管理代码更新,因为您在更新函数代码时无需更改订阅表或组定义。相反,您只是将别名指向新的函数版本。

  1. (操作) 菜单上,选择 (发布新版本)

  2. 对于 Version description (版本描述),输入 First version,然后选择 Publish (发布)

  3. (操作) 菜单中选择 (创建别名)

  4. 创建新别名页面上,使用以下值:

    • 对于名称,输入 GG_TempMonitor
    • 对于 Version (版本),选择 1

    注意

    AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。

  5. 选择 Create

步骤 6:将 Lambda 函数添加到 Greengrass 组

  1. 在组配置页面上,选择 Lambdas,然后选择 (添加Lambda)

  2. (将 Lambda 添加到 Greengrass 组) 页面上,选择 (使用现有Lambda)

  3. (使用现有 Lambda) 页面上,选择 TempMonitor,然后选择 (下一步)

  4. (选择 Lambda 版本) 页面上,选择 Alias:GG_TempMonitor,然后选择 (完成)

步骤 7:将订阅添加到 Greengrass 组

在该步骤中,您将添加一个订阅,使 Lambda 函数将输入数据发送到连接器。此连接器定义它订阅的 MQTT 主题,因此该订阅使用其中一个主题。这与示例函数发布到的主题相同。

对于本教程,您还可以创建订阅,以允许函数从 AWS IoT 接收模拟温度读数,并允许 AWS IoT 从连接器接收状态信息。

  1. 在组配置页面上,选择 (订阅),然后选择 (添加订阅)

  2. 选择您的源和目标页面,配置源和目标,如下所示:

    1. 对于选择源,选择 Lambda,然后选择 TempMonitor
    2. 对于 (选择目标),选择 (连接器),然后选择 Twilio 通知
    3. 选择 (下一步)

  3. Filter your data with a topic (利用主题筛选您的数据) 页面上,对于 Required topic syntax (要求的主题语法),选择 twilio/txt,然后选择 Next

  4. 选择 Finish

  5. 重复步骤 1 至 4,以创建允许 AWS IoT 将消息发布到该函数的订阅。

    1. 对于选择源,选择服务,然后选择 IoT Cloud
    2. 对于选择目标,选择 Lambda,然后选择 TempMonitor
      3. 对于 Topic filter (主题筛选条件),输入 temperature/input

  6. 重复步骤 1 至 4,以创建允许连接器将消息发布到 AWS IoT 的订阅。

    1. 对于 Select a source (选择源),选择 Connectors (连接器),然后选择 Twilio 通知
    2. 对于选择目标,选择服务,然后选择 IoT Cloud
    3. 对于主题筛选条件,已为您输入 twilio/message/status。这是连接器发布到的预定义主题。

步骤 8:部署 Greengrass 组

将组部署到核心设备。

  1. 确保 AWS IoT Greengrass Core正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。

    1. 要检查守护程序是否正在运行,请执行以下操作:

      ps aux | grep -E 'greengrass.*daemon'
      

      如果输出包含 root/greengrass/ggc/packages/ggc-version/bin/daemon 条目,则表示守护程序正在运行。

      注意

      路径中的版本取决于您的核心设备上安装的 AWS IoT Greengrass 核心软件版本。

    2. 要启动守护程序,请执行以下操作:

      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      
  2. 在组配置页面上,选择(部署),然后从(操作)菜单中,选择(部署)

测试解决方案

  1. 在 AWS IoT 控制台主页上,选择 (测试)

  2. 对于订阅,请使用以下值,然后选择 Subscribe to topic。Twilio 通知 连接器向此主题发布状态信息。

    属性
    订阅主题 twilio/message/status
    MQTT 负载显示 将负载显示为字符串
  3. 对于 (发布),请使用以下值,然后选择 (发布到主题) 来调用函数。

    属性
    主题 temperature/input
    消息 recipient-name 替换为文本消息收件人的姓名,将 recipient-phone-number 替换为文本消息收件人的电话号码。如果您使用的是试用账户,则必须将非 Twilio 收件人电话号码添加到已验证电话号码列表中。
    {
       "to_name": "recipient-name",
       "to_number": "recipient-phone-number",
       "temperature": 31
    }
    

    如果成功,则收件人会收到文本消息,并且控制台会在输出数据中显示 success 状态。

    现在,将输入消息中的 temperature 更改为 29 并发布。由于温度小于 30,因此 TempMonitor 函数不会触发 Twilio 消息。

posted @ 2020-01-08 20:19  Hi,Simon  阅读(543)  评论(0编辑  收藏  举报