zoukankan      html  css  js  c++  java
  • 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 问题排查

  • 相关阅读:
    hihocoder 1049 后序遍历
    hihocoder 1310 岛屿
    Leetcode 63. Unique Paths II
    Leetcode 62. Unique Paths
    Leetcode 70. Climbing Stairs
    poj 3544 Journey with Pigs
    Leetcode 338. Counting Bits
    Leetcode 136. Single Number
    Leetcode 342. Power of Four
    Leetcode 299. Bulls and Cows
  • 原文地址:https://www.cnblogs.com/--Simon/p/11923702.html
Copyright © 2011-2022 走看看