AWS IoT Greengrass 入门-模块5:与设备影子交互

AWS IoT Greengrass 入门-模块5:与设备影子交互

本高级模块演示 AWS IoT Greengrass 设备如何与 AWS IoT Greengrass 组 中的 AWS IoT 设备影子交互。影子 是用于存储事物的当前或所需状态信息的 JSON 文档。在本模块中,您将探索一个 AWS IoT Greengrass 设备 (GG_Switch) 如何修改另一个 AWS IoT Greengrass 设备 (GG_TrafficLight) 的状态,以及这些状态如何同步到 AWS IoT Greengrass 云。

配置设备和订阅

当 AWS IoT Greengrass Core 连接到 Internet 时,影子可以同步到 AWS IoT。在此模块中,您首先使用本地影子而不同步到云。然后,您启用云同步。每个设备都有自己的影子。

  1. (设备) 页面上,在 AWS IoT Greengrass 组 中添加两个新设备。

    • 将设备命名为 GG_SwitchGG_TrafficLight
    • 生成并下载两个设备的一键式默认安全资源。
    • 记下设备的安全资源的文件名中的哈希组分。稍后会用到这些值。
  2. 将为两个设备下载的证书和密钥解压缩到计算机上的单个文件夹中。 将在上一模块中下载的 root-ca-cert.pem 文件复制到此文件夹中。

  3. 确保将设备设置为使用本地影子。否则,请选择省略号 (),然后选择 (仅限本地)

  4. 此模块中使用的函数代码要求您手动配置核心的终端节点。

    1. 在组配置页面上,选择 (设置)

    2. 对于 (本地连接检测),选择 (手动管理连接信息),然后选择 (查看核心的特定终端节点信息)

    3. 选择您的核心,然后选择**(连接)**。

    4. 选择编辑,确保只有一个终端节点值。该值必须是 AWS IoT Greengrass Core 设备的端口 8883 的 IP 地址终端节点(例如,192.168.1.4)。

    5. 选择 (更新)

  5. 将下表中的订阅添加到您的组中。例如,要创建第一个订阅,请执行以下操作:

    1. 在组配置页面中,选择 (订阅),然后选择 (添加订阅)
    2. (选择源) 下面,选择 (设备),然后选择 GG_Switch
    3. (选择目标) 下面,选择 (服务),然后选择 (本地影子服务)
    4. 选择 (下一步)
    5. 对于 (主题筛选条件),输入 $aws/things/GG_TrafficLight/shadow/update
    6. 选择**(下一步),然后选择(完成)**。

    主题的输入方式必须与表中所示完全相同。尽管可以使用通配符来整合一些订阅,但我们不建议这种做法。

    目标 主题 备注
    GG_Switch 本地影子服务 $aws/things/GG_TrafficLight/shadow/update GG_Switch 发送更新请求来更新主题。
    本地影子服务 GG_Switch $aws/things/GG_TrafficLight/shadow/update/accepted GG_Switch 需要知道更新请求是否被接受。
    本地影子服务 GG_Switch $aws/things/GG_TrafficLight/shadow/update/rejected GG_Switch 需要知道更新请求是否被拒绝。
    GG_TrafficLight 本地影子服务 $aws/things/GG_TrafficLight/shadow/update GG_TrafficLight 将其状态的更新发送到更新主题。
    本地影子服务 GG_TrafficLight $aws/things/GG_TrafficLight/shadow/update/delta 本地影子服务通过增量主题将收到的更新发送到 GG_TrafficLight。
    本地影子服务 GG_TrafficLight $aws/things/GG_TrafficLight/shadow/update/accepted GG_TrafficLight 需要知道其状态更新是否被接受。
    本地影子服务 GG_TrafficLight $aws/things/GG_TrafficLight/shadow/update/rejected GG_TrafficLight 需要知道其状态更新是否被拒绝。

    注意

    有关 $ 符号的信息,请参阅保留主题

  6. 确保 AWS IoT Greengrass 守护程序正在您的核心设备上运行。在核心设备终端中运行以下命令。

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

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

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

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

      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      

    现在已准备好将 Lambda 函数和订阅配置部署到您的 AWS IoT Greengrass Core 设备。

  7. 在组配置页面上,从 (操作) 中选择 (部署)

下载必需的文件

  1. 安装 适用于 Python 的 AWS IoT 设备开发工具包。有关说明,请参阅安装 适用于 Python 的 AWS IoT 设备开发工具包中的步骤 1。

    该开发工具包供 AWS IoT 设备用于与 AWS IoT 以及与 AWS IoT Greengrass 核心设备通信。

  2. 从 GitHub 上的 AWS IoT Greengrass 样本存储库中,将 lightController.pytrafficLight.py 文件下载到您的计算机上。将它们保存在包含 GG_Switch 和 GG_TrafficLight 设备证书和密钥的文件夹中。

    lightController.py 脚本对应于 GG_Switch 设备,而 trafficLight.py 脚本对应于 GG_TrafficLight 设备。

测试通信 (已禁用设备同步)

  1. 确保您的计算机和 AWS IoT Greengrass Core 设备已使用同一个网络连接到 Internet。

    • 在 AWS IoT Greengrass Core 设备上,运行以下命令以查找其 IP 地址。

      hostname -I
      
    • 在计算机上,使用核心的 IP 地址运行以下命令。可以使用 Ctrl + C 停止 ping 命令。

      ping IP-address
      
  2. 获取您的 AWS IoT 终端节点。

    1. 在AWS IoT 控制台的导航窗格中,选择 (设置)

    2. 在**(设置)** 下方,记录**(终端节点)**的值。您可以使用此值在以下步骤中替换命令中的 AWS_IOT_ENDPOINT 占位符。

  3. 在您的计算机(不是 AWS IoT Greengrass Core 设备)上,打开两个命令提示符窗口。一个窗口代表 GG_Switch 设备,另一个窗口代表 GG_TrafficLight 设备。

    1. 从 GG_Switch 设备窗口中,运行以下命令。

      • path-to-certs-folder 替换为包含证书、密钥和 Python 文件的文件夹的路径。
      • AWS_IOT_ENDPOINT 替换为您的终端节点。
      • 将两个 switch 实例替换为 GG_Switch 设备的文件名中的哈希值。
      cd 'path-to-certs-folder'
      python lightController.py --endpoint 'AWS_IOT_ENDPOINT' --rootCA root-ca-cert.pem --cert 'switch'.cert.pem --key 'switch'.private.key --thingName GG_TrafficLight --clientId GG_Switch
      

    2. 从 GG_TrafficLight 设备窗口中,运行以下命令。

      • path-to-certs-folder 替换为包含证书、密钥和 Python 文件的文件夹的路径。
      • AWS_IOT_ENDPOINT 替换为您的终端节点。
      • 将两个 light 实例替换为 GG_TrafficLight 设备的文件名中的哈希值。
      cd 'path-to-certs-folder'
      python trafficLight.py --endpoint 'AWS_IOT_ENDPOINT' --rootCA root-ca-cert.pem --cert 'light'.cert.pem --key 'light'.private.key --thingName GG_TrafficLight --clientId GG_TrafficLight
      

      在首次执行时,每个设备脚本都将运行 AWS IoT Greengrass 发现服务来连接到 AWS IoT Greengrass Core(通过 Internet)。在设备发现了 AWS IoT Greengrass Core 并成功连接到它后,未来的操作可以在本地执行。

  4. 在 AWS IoT 控制台中,选择您的 AWS IoT Greengrass 组,选择 (设备),然后选择 GG_TrafficLight

  5. 选择**(影子)。在 GG_Switch 更改状态后,影子状态中的该影子主题不应有任何更新。这是因为 GG_TrafficLight 设置为仅限本地影子而不是影子同步到云**。

测试通信 (已启用设备同步)

对于此测试,您将 GG_TrafficLight 设备影子配置为与 AWS IoT 同步。您运行与上一个测试中相同的命令,但这次当 GG_Switch 发送更新请求时,云中的影子状态会更新。

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

  2. 对于 GG_TrafficLight 设备,选择省略号 (),然后选择 (同步到云)

  3. 在组配置页面上,从 (操作) 中选择 (部署)

  4. 再次在两个终端命令行窗口运行交互命令。

  5. 现在,请检查 AWS IoT 控制台中的影子状态。选择您的 AWS IoT Greengrass 组,选择 (设备),选择 GG_TrafficLight,然后选择 (影子)

    因为已启用 GG_TrafficLight 影子到 AWS IoT 的同步,所以每当 GG_Switch 发送更新时,云中的影子状态应该会更新。此功能可用于将 Greengrass 设备的状态公开给 AWS IoT。

    注意

    如果需要,您可以通过查看 AWS IoT Greengrass Core日志(尤其是 runtime.log)来排除问题:

    cd /greengrass/ggc/var/log
    sudo cat system/runtime.log | more
    

    也可以查看 GGShadowSyncManager.logGGShadowService.log。 有关更多信息,请参阅AWS IoT Greengrass 问题排查

原文地址:https://www.cnblogs.com/--Simon/p/11923702.html