利用 AWS IoT Greengrass 在边缘 DIY 自动浇花 | 手把手玩转物联网(四)

阅读数:1 2020 年 1 月 9 日 15:57

利用 AWS IoT Greengrass 在边缘 DIY 自动浇花 | 手把手玩转物联网(四)

为 AWS IoT Greengrass 配置和部署 Lambda 函数

选择之前创建的 Greengrass 组,在配置页面上,选择 Lambdas,然后点击两次 Add Lamba,分别将 wfSensor 和 wfSwitch 加入,添加时注意以下要点:

  • 选择 Use existing Lambda
  • 在选择版本时,不要选择具体版本号,而是选择 Alias:xxx
  • 在加入的函数右上角点击省略号 (…),选择 Edit Configuration(编辑配置)
  • 对于“Run as”,请选择 Another user ID/group ID,在下方输入两个 0,对于“containerization”,选择 No container(always)。这个修改只是针对第二种交互模式,对于第一种交互模式,无需修改。
  • Timeout 超时值改为 10 秒
  • 对于 Lamba 生命周期,wfSensor 需要改为 long-lived;wfSwitchLambda 不用修改。

配置如下订阅:

col 1 col 2 col 3
Source 源 Target 目标 Topic 主题
wfSensor IoT Cloud waterflower/sensor/telemetry
wfSensor wfSwitch waterflower/sensor/telemetry
wfSwitch IoT Cloud waterflower/relay
IoT Cloud wfSwitch waterflower/setting

针对本文的第二种交互模式,需要在树莓派上修改 AWS IoT Greengrass 的参数。打开 /greengrass/config/config.json,在 “runtime”部分,增加:

Python

复制代码
"allowFunctionsToRunAsRoot" : "yes"

在 AWS IoT 控制台上,在相应 greengrass 组中,点击 Deploy 部署,将云配置部署到树莓派设备。第一次部署可能需要几分钟。当部署完成后,您应该在部署页面上的状态列中看到已成功完成

您可以验证 Lambda 函数是否在设备上运行,详细步骤参见: https://docs.aws.amazon.com/zh_cn/greengrass/latest/developerguide/lambda-check.html。

创建和配置 ****Amazon Elasticsearch

在 Amazon Elasticsearch 控制台上,创建一个新域,名称为 waterflower,网络配置选择“Public access”,并输入以下 Access policy(访问策略):

Python

复制代码
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "es:*",
"Resource": "arn:aws-cn:es:<region>:<your-Account-ID>:domain/waterflower/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"x.x.x.x/32"
]
}
}
}
]
}

上面“x.x.x.x”请输入您的电脑对应的公网 IP 地址,您可以输入 https://checkip.amazonaws.com 获得。

访问 Kibana 界面,创建 index,命名为 wf-sensor:

Python

复制代码
PUT /wf-sensor
{
"mappings": {
"properties": {
"timestamp": { "type": "long", "copy_to": "datetime" },
"datetime": { "type": "date", "store": true },
"clientId": { "type": "text" },
"temp": { "type": "float" },
"moisture": { "type": "integer" },
"light": { "type": "integer" },
"switch": { "type": "integer" },
"state": { "type": "integer" }
}
}
}

创建 index pattern:

  • 名称:wf-sensor*
  • 时间过滤器字段名称:datetime

配置 IoT 规则引擎

在 AWS IoT 控制台中,点击 Act->Rules,创建规则:

  • 规则查询条件:SELECT * FROM ‘waterflower/sensor/telemetry’
  • 添加 Action,选择 Send a message to the Amazon Elasticsearch Service
  • 选择 Domain(域)waterflower
  • ID: ${newuuid()}
  • Index: wf-sensor
  • Type: _doc

创建可视化报表

在 Kibana 界面,点击左边菜单栏的 Discover(发现),您现在可以看到上传的设备状态数据,它们按时间顺序显示在屏幕上。

点击左边菜单栏的 Visualize,您现在可以创建可视化图表,并可以添加到仪表板中,以远程监控和查看传感器状态和继电器 / 水泵工作情况。如下图示例:

利用 AWS IoT Greengrass 在边缘 DIY 自动浇花 | 手把手玩转物联网(四)

测试和验证

您可以通过以下几个方法验证自动浇花效果:

  • 利用 AWS IoT 控制台的 test 功能发布消息到 waterflower/setting,修改湿度阈值,测试水泵工作情况
  • 通过 Amazon Elasticsearch 的 Kibana 界面,查看传感器数据变化情况和水泵工作情况
  • 关闭树莓派的互联网连接,验证连接丢失的条件下,自动浇花是否正常工作

资源清理

在您成功搭建了本文介绍的自动浇花系统后,根据您的使用需求,可以按照如下两种情况对创建的资源进行清理,以免产生不必要的费用。

如果您想继续使用自动浇花功能,但不再需要进行远程监控,请按以下步骤删除资源:

  • 打开 AWS IoT 控制台,依次选择 Act -> Rules,点击之前创建的规则 waterflower 的右上角省略号 (…),点击删除并确认
  • 打开 Amazon Elasticsearch 控制台,可以看到之前创建的域 waterflower,点击进入。然后,点击最上面一排的“Delete domain(删除域)”按钮,在弹出窗口中,选中 checkbox 框,然后点击删除

如果您不再使用整个自动浇花系统,请先按上面步骤删除远程监控相关的资源,然后按以下步骤继续清理所有资源:

  • SSH 到树莓派,输入以下命令停止 greengrass 进程:

Python

复制代码
$sudo /greengrass/ggc/core/greengrassd stop
  • 打开 AWS IoT 控制台,点击左边菜单栏中的 Greengrass -> Groups,点击之前创建的组 waterflower,进入组管理界面,点击右上角的 Actions -> Reset Deployments,在弹出窗口中,选中 checkbox 框,点击 Reset deployment
  • 接着点击右上角的 Actions -> Delete Group,在弹出窗口中,点击“Yes, Continue to delete”按钮,确认删除
  • 继续在 AWS IoT 控制台,点击左边的 Manage -> Things,点击 waterflower_Core 的右上角省略号 (…),点击删除并确认

小结

根据上面的方案实现,您可能会发现在 树莓派系统上运行 AWS IoT Greengrass 可以构建更多的 IoT 解决方案。从基本的遥测到执行机器学习推理,我们的客户正在构建多种多样的 AWS IoT Greengrass 解决方案,以便不断创新并扩展解决方案的价值。

在本文中,您学习了如何利用 AWS IoT Greengrass DIY 一个自动浇花系统。现在,您可以扩展这个方案,增加手机 App 实现对浇花参数控制和远程监控自动浇花工作状况,并利用 AWS IoT Greengrass 不断改进您的边缘功能。

作者介绍:

!
复制代码
AWS 解决方案架构师。 负责基于 AWS 的云计算方案架构咨询和设计,同时致力于 AWS 物联网服务和无服务器架构在国内和全球商业客户的应用和推广,推进企业服务迁移上云进程。有 10 年以上的数据中心基础架构设计,企业级应用系统设计开发等经验。

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/diy-auto-watering-at-the-edge-with-aws-iot-greengrass-hand-to-hand-internet-of-things/

评论

发布