预计到 2050 年,寰球人口将达到 100 亿左右。为了满足这种增长在食粮和养分方面的指数级需要,咱们现有的耕作办法必须在无限的可用土地供给范畴内提高产量。
目前进步农业产量的办法包含应用化学肥料和宽泛应用杀虫剂。这些办法的长处是减产,但代价是会对整个环境造成不利影响:毁坏生物多样性,净化地下水、土壤及其肥力,甚至空气。
📢 09.09-09.14 亚马逊云科技中国峰会线上峰会正在炽热进行中!想要理解更多亚马逊云科技最新技术公布和实际翻新,点击图片报名吧~
Capgemini 是 亚马逊云科技高级征询合作伙伴 和托管服务提供商 (MSP),领有一支遍布 40 多个国家 / 地区的由 220,000 人组成的多元文化团队。本博文中概述的 Capgemini 解决方案提出了一种代替办法,应用技术来治理水分以实现最优动物成长。
- Capgemini
https://www.capgemini.com/ - 亚马逊云科技高级征询合作伙伴
https://partners.amazonaws.co…
Capgemini 崇奉 可继续 IT 解决方案,这是指利用 IT 实际和技术惠及客户和其余利益攸关方,确保经济、社会和环境可持续性支柱的长期福祉。
- 可继续 IT 解决方案
https://www.linkedin.com/puls…
Capgemini 的解决方案被称为“Smart Hub Cropping”,它能够查看农田的降水量,联合政府的天气数据,并剖析农业数据,为农民提供切实可行的见解和灌溉流程自动化。所有这些都与农民最须要的进步作物产量的体验相一致。
为了实现这一成绩,亚马逊云科技在物联网 (IoT)、监控、洞察、集成和机器学习 (ML) 等畛域推出了 Capgemini 云技术。
解决方案概览
Capgemini 的 Smart Hub Crop 解决方案为农民提供了一个界面,可显示无关农场中田地水分含量的数据和见解。这与侧重于预测降水量的天气数据以及印度 农业单干与农民福利司 提供的数据相结合,详述了全国播种的作物量和作物品种。
- 农业单干与农民福利司
https://agricoop.nic.in/en
此组合数据集不仅帮忙农民理解要种植哪类作物以及在农场的哪个区域种植,还有助于他们维持作物以确保生产性增长。
农民通过挪动应用程序注册并进行身份验证来拜访他们的数据集、查看无关田地的数据、下周的天气预报数据以及查看农田水分含量的图形示意。
Smart Hub Crop 蕴含以下内容:
- 部署到农场的湿度传感器和反对 GPS 的 (IoT) 设施。
- 亚马逊云科技上的地方监控和剖析平台。
- 用于在亚马逊云科技上取得洞察和互动的挪动应用程序。
图 1 – 高级解决方案示意图
该解决方案应用与 Arduino 电子设备连贯的湿度传感器。这提供了通过互连 GPS 接口向 Smart Hub Crop 外围发送含水量数据的性能。
- Arduino
https://www.arduino.cc/en/Gui…
Amazon IoT 设施被设置为定期将数据发送到 Smart Hub Crop 服务,以便通过水分算法与农民田地的土壤类型一起解决。之后,将这些数据以及收到的第三方环境数据存储在 Smart Hub Crop 数据库中。
这些信息通过网页版或手机版挪动应用程序提供给农民。
图 2 – 高级架构示意图
亚马逊云科技工具箱
Capgemini 应用 React Native(一种开源挪动应用程序框架)和 Amazon SDK for JavaScript 开发了 Smart Hub Crop 解决方案。React 基元通过 Amazon SDK 出现用户界面 (UI) 和应用程序,并应用雷同的原生平台 API 与亚马逊云科技服务进行交互。
- React Native
https://docs.aws.amazon.com/s… - Amazon SDK for JavaScript
https://aws.amazon.com/sdk-fo…
终端用户(在本例中为农民)应用挪动利用程序界面作为解决方案的一部分。用户应用 Amazon Cognito 通过 React 利用程序界面进行身份验证并接管 JWT 令牌。此令牌用于受权从应用程序对 Amazon AppSync 的 API 调用。
- Amazon Cognito
https://aws.amazon.com/cognito/ - Amazon AppSync
https://aws.amazon.com/appsync/
通过身份验证后,用户将从 Amazon DynamoDB 表中检索信息,该表用于保留位于农民田间的 IoT 设施提供的数据。
- Amazon DynamoDB
https://aws.amazon.com/dynamodb/
Smart Hub Crop 应用以下亚马逊云科技服务:
- Amazon AppSync 是一项应用 GraphQL 的托管式服务,它容许您创立灵便的 API 来平安地拜访、操作和组合来自一个或多个数据源的数据,从而让应用程序轻松获取所需的数据。
- Amazon Amplify Framework 可让开发人员轻松创立、配置和施行由亚马逊云科技提供反对的可扩大挪动和 Web 应用程序,并与之交互。Amazon Amplify 可无缝配置和治理您的挪动后端,并提供一个简略的框架,轻松将后端与 iOS、Android、Web 和 React Native 前端集成。Amazon Amplify 还能够主动执行前端和后端的应用程序公布流程,从而容许您交付。
- Amazon Amplify CLI 是一个对立的工具链,用于为您的应用程序创立、集成和治理亚马逊云科技服务。
- Amazon Cognito 是一项用户治理服务,对用户的身份验证和受权提供丰盛的反对。您能够在 Amazon Cognito 中或通过其余联结第三方身份提供商 (IdP) 治理这些用户。
- Amazon DynamoDB 是一个键值和文档数据库,能够任何规模提供单个位毫秒级性能。
6. Amazon IoT Core 提供将 Amazon IoT 设施连贯到其余设施和亚马逊云科技服务的云服务。
- Amazon AppSync
https://aws.amazon.com/appsync/ - Amazon Amplify Framework
https://docs.amplify.aws/ - Amazon Amplify CLI
https://aws-amplify.github.io… - Amazon Cognito
https://aws.amazon.com/cognito/ - Amazon DynamoDB
https://aws.amazon.com/dynamodb/ - Amazon IoT Core
https://docs.aws.amazon.com/i…
构建解决方案
要施行 Smart Hub Crop 解决方案,请实现下列步骤。
第 1 步:初始化我的项目并设置 Amazon Amplify
首先,您须要装置并配置 Amazon 命令行界面 (CLI)、Amazon Amplify CLI 和 NPM。
- Amazon 命令行界面 (CLI)
https://aws.amazon.com/cli/ - Amazon Amplify CLI
https://aws-amplify.github.io… - NPM
https://www.npmjs.com/get-npm
要创立 React 我的项目,请运行以下命令:
npx create-react-app farmhub-demo
此命令会创立一个名为 farmhub-demo 的文件夹,其中蕴含空的 React 应用程序。
依照以下阐明在 React 应用程序中初始化 Amazon Amplify 我的项目:
- 通过键入 cd farmhub-demo 切换到我的项目目录。
- 通过运行以下命令并答复提醒来初始化 Amazon Amplify 我的项目:
amplify init
- 输出我的项目的名称:farmhubdemo
- 输出环境的名称:dev
- 抉择默认编辑器:Visual Studio Code(或您抉择的编辑器)
- 抉择您要构建的应用程序的类型:JavaScript
- 您在应用什么 JavaScript 框架:React
- 源目录门路:src
- 散发目录门路:build
- “构建”命令:npm run-script build
- “启动”命令:npm run-script start
- 抉择要应用的身份验证办法:Amazon 配置文件 /Amazon 密钥
amplify init 命令在 React 站点内初始化了一个新我的项目,并应用 Amazon CloudFormation 堆栈在云中部署资源。
您会在我的项目的根目录中看到一个名为 Amazon Amplify 的新文件夹,还会在 src 目录中看到一个名为 aws-exports.js 的文件。此文件夹和文件用于保留 Amazon Amplify 我的项目配置。
第 2 步:为 Amazon Amplify 我的项目配置身份验证
要向应用程序增加身份验证,请应用以下命令:
amplify add auth
- 您想应用默认身份验证和平安配置吗?默认配置
- 您心愿用户在应用 Amazon Cognito 用户池时如何登录?用户名
- 您想配置高级设置吗?不,我已实现
第 3 步:在 Amazon Amplify 我的项目中配置 API
要向应用程序增加 GraphQL API,请应用以下命令:
amplify add api
- 从上述服务中抉择其中一个:GraphQL
- 提供 API 名称:farmhubdemo
- 为 API 抉择受权类型:Amazon Cognito User Pool
- 您想配置 GraphQL API 的高级设置吗?不,我已实现
- 您有已正文的 GraphQL 架构吗?否
- 抉择架构模板(应用箭头键):蕴含字段的单个对象(例如蕴含 ID、名称、形容的“Todo”)
- 您当初想编辑架构吗?是
当您收到所选代码编辑器的提醒时,将任何默认文本替换为以下架构:
type Farm @model {
id: ID!
user_id: String!
field_name: String!
soil_type: String!
location: String!
moisture_level: String!
timestamp: Int!
}
这就实现了 Amazon Amplify 我的项目所需的配置。要部署应用程序,请应用以下命令:
amplify push
- 确定要持续吗?是
- 您想为新建的 GraphQL API 生成代码吗?是
- 抉择代码生成语言指标:JavaScript
- 输出 GraphQL 查问、渐变和订阅的文件名格局:src/graphql//.js*
- 您想生成 / 更新所有可能的 GraphQL 操作(查问、渐变和订阅)吗?是
- 输出最大语句深度:2
第 4 步:配置前端 React 应用程序
首先要做的是将 Amazon Amplify 库增加到我的项目中。这提供了可简化与亚马逊云科技服务集成所需的代码的模块。
在我的项目的根目录中运行以下命令:
npm install -S aws-amplify && npm install -S aws-amplify-react
要将 React 应用程序配置为感知新的 Amazon Amplify 我的项目,请在 src 文件夹中 src/index.js 文件内援用主动生成的 aws-exports.js 文件。
关上 src/index.js 并在上次导入的上面增加以下代码:
import Amplify from 'aws-amplify'
import config from './aws-exports'
Amplify.configure(config)
当初,将该代码增加到将用于与 API 交互的网站。关上 src/app.js 并增加以下代码,替换默认内容:
import React from 'react';
// 从 Amplify 库导入
import {API, graphqlOperation, Auth} from 'aws-amplify'
// 导入查问定义
import {listFarms} from './graphql/queries'
// 导入新的 Amplify 身份验证组件
import {withAuthenticator} from 'aws-amplify-react'
class App extends React.Component {
// 定义状态来保留从 API 返回的数据
state = {farms: []
}
// 在浏览器中出现页面时执行查问,从 API 中检索数据
async componentDidMount() {const user = await Auth.currentAuthenticatedUser()
console.log('user:', user)
console.log('user info:', user.signInUserSession.idToken.payload)
try {const farmData = await API.graphql(graphqlOperation(listFarms))
console.log('farmData:', farmData)
this.setState({farms: farmData.data.listFarms.items})
} catch (err) {console.log('error fetching farms...', err)
}
}
render() {
return (
<>
{this.state.farms.map((farm, index) => (<div key={index}>
<p>{farm.user_id}</p>
<p>{farm.field_name}</p>
<p>{farm.soil_type}</p>
<p>{farm.location}</p>
<p>{farm.moisture_Level}</p>
<p>{farm.timestamp}</p>
</div>
))
}
</>
)
}
}
export default withAuthenticator(App, { includeGreetings: true})
如果您违心,可为此站点增加任意款式。应用以下命令在本地零碎上启动站点:
yarn start
此命令会在本地编译 React 站点。您能够在 http://localhost:3000 上查看该网站并与之互动
第 5 步:测试前端和 API
浏览至本地零碎上的 React 站点,而后依照阐明创立和验证新账户。您须要应用无效的电子邮件地址能力接管确认码。
注册账户并登录后,您将看到一个带有“hello”音讯和登记按钮的页面。接下来,登录 亚马逊云科技治理控制台 以测试 API 并应用 GraphQL 渐变增加一些数据。
- 亚马逊云科技治理控制台
https://aws.amazon.com/console/
关上 Amazon AppSync 控制台 ,而后进入 farmhubdemo-dev API。在控制台的左侧,导航到 查问。
- Amazon AppSync 控制台
https://eu-west-1.console.aws…
首先要做的是向 Amazon Cognito 进行身份验证。为此,请单击 应用用户池登录 ,输入您在上一步中应用的账户信息,而后抉择 登录。
图 3 – 登录屏幕,可让您通过 Amazon Cognito 用户池拜访 Amazon AppSync API
要向应用程序增加一些数据,请执行以下渐变并创立新的水分记录条目:
mutation createFarm {
createFarm(input: {
user_id: "farmer@farmmail.com",
field_name: "Corn field 1",
soil_type: "Loam Soil",
location: "London",
moisture_level: "1.2",
timestamp: 687247
} ) {
user_id
field_name
soil_type
location
moisture_level
timestamp
id
}
}
如果胜利,控制台右侧将显示已写入存储的 JSON 记录。要对此进行验证,请关上 Amazon DynamoDB 控制台 ,而后关上带有 Farm 前缀的表并抉择 我的项目 选项卡。您应该看到一条记录:
- Amazon DynamoDB 控制台
https://eu-west-1.console.aws…
图 4 – Amazon DynamoDB 表中的我的项目。
记下残缺的表名称,因为这将在下一节中用到。
最初,刷新 React 网页以查看显示的数据。
设置 Amazon IoT Core 组件
Amazon IoT 使联网设施可能连贯到亚马逊云科技,容许应用程序与物理设施进行交互,或者收集来自这些设施的数据并进行解决。
下一节将向您介绍在 Amazon IoT Core 控制台中创立逻辑 Amazon IoT 设施,这条 Amazon IoT 规定用于获取 Amazon IoT 设施发送的数据,而后将其增加到咱们应用程序的 Amazon DynamoDB 表中。
第 1 步:在 Amazon IoT Core 中创立“事物”
关上 Amazon IoT 控制台 并开展 治理 ,而后抉择 事物。
- Amazon IoT 控制台
https://eu-west-1.console.aws…
抉择 创立 (或者,如果您还没有任何事物,请注册一个),而后抉择创立单个事物。指定 moisture_thing 作为事物的名称,而后抉择 下一步。
请留神,您能够对此事物利用类型,这样能够简化治理并为共享类型的事物提供统一的注册表数据。您也能够将此内容增加到组中,这样就能够同时治理多个事物了。对于本演练,咱们不会配置其中任何一个。
单击 下一步 ,而后抉择 创立证书 选项。这将生成 X.509 证书,用于爱护您的设施与 Amazon IoT Core 之间的通信。
图 5 – 胜利创立 IoT 设施证书
下载证书,而后抉择 激活 以激活 X.509 证书。最初,抉择 附加策略。
要进行测试,请抉择 默认策略。策略用于受权您的设施执行 Amazon IoT 操作,例如订阅或公布到主题。
接下来,抉择 注册事物。
第 2 步:设置 Amazon IoT 规定以将数据移至存储
接下来要做的是配置一个规定,该规定将获取发送到相应事物的数据,并将其写入 API 将与之交互的 Amazon DynamoDB 表中。
在 Amazon IoT 控制台 中,开展操作,而后抉择规定。
- Amazon IoT 控制台
https://eu-west-1.console.aws…
抉择 创立规定 。为该规定指定名称、moisture_rule 和形容。在 规定查问语句 局部中,增加以下 Amazon IoT SQL 语句:
SELECT state.reported.field_data.id as id,
state.reported.field_data.user_id as user_id,
state.reported.field_data.field_id as field_id,
state.reported.field_data.field_name as field_name,
state.reported.field_data.soil_type as soil_type,
state.reported.field_data.location as location,
state.reported.field_data.moisture_level as moisture_level,
state.reported.field_data.timestamp as timestamp,
state.reported.field_data.createdAt as createdAt,
state.reported.field_data.updatedAt as updatedAt
FROM 'farmhubcropping/moisture_thing'
此规定查问语句会监听应用 FROM 条件定义的主题
farmhubcropping/moisture_thing。
这意味着向此主题发送数据的每台设施都将触发该规定。当规定触发 SELECT 子句时,它会从音讯中提取信息。
接下来,在 设置一项或多项操作 局部中,抉择 增加操作。
在 抉择操作 页面上,抉择 将音讯拆分为 Amazon DynamoDB 表 (DynamoDBv2) 的多列 ,而后抉择 配置操作。
抉择 创立资源,而后抉择在测试渐变之后创立的 Amazon DynamoDB 表,首先是 farm-
而后,抉择 创立角色 以授予该规定对此表的所需拜访权限。最初,指定名称 farmhub_dynamodb_rule_role 并抉择 创立角色。
图 6 – 配置了表和角色的 IoT“配置操作”屏幕
抉择 增加操作 将此操作增加到该规定,而后抉择 创立规定。
第 3 步:测试零碎
要测试零碎,请应用 Node.js 脚本创立一个模仿“事物”。
关上终端窗口并应用以下命令创立一个名为 iot_thing 的新文件夹:
mkdir iot_thing
在 iot_thing 文件夹中,创立一个名为 certs 的文件夹以存储之前下载的证书,以及将用于模仿咱们的湿度 IoT 设施的 Node.js 脚本:
`cd iot_thing
mkdir certs
touch index.js`
将之前下载的证书文件复制到 iot_thing/cert 目录中。为了简略些,请按如下形式重命名这些文件:
- 以 certificate.pem.crt 结尾的文件重命名为 moisture_thing_crt.pem
- 以 private.pem.key 结尾的文件重命名为 moisture_thing_key.pem
在终端的 iot_thing 目录中,运行以下命令以下载亚马逊根证书颁发机构 (CA):
wget -O certs/rootCA.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
当初,您应该有以下文件夹和文件:
Iot_thing # root folder
|___certs # folder with certificate files
|_____moisture_thing_crt.pem # certificate
|_____moisture_thing_key.pem # private key
|_____rootCA.pem # Amazon Root CA
在 iot_thing 中,应用以下命令增加 Amazon IoT SDK:
- Amazon IoT SDK
https://docs.aws.amazon.com/i…
npm i –save aws-iot-device-sdk
将以下代码复制到 iot_thing 文件夹中的 index.js 文件:
// 申明实用于 JavaScript 和节点库的 AWS IoT 设施 SDK
const awsiot = require('aws-iot-device-sdk')
// 申明 thingName 和主题
const thingName = 'moisture_thing'
const topic = `farmhubcropping/${thingName}`
// 申明 aws IoT 终端节点
const endpoint = YOUR AWS IOT ENDPOINT' // xxxxxxxxxxxxx-ats.iot.AWS_REGION.amazonaws.com
const device = awsiot.device({keyPath: `./certs/${thingName}_key.pem`,
certPath: `./certs/${thingName}_crt.pem`,
caPath: `./certs/rootCA.pem`,
clientId: thingName,
host: endpoint
})
let field_data = {id: Math.random().toString(36).substr(2, 12),
user_id: "farmer@farmmail.com",
field_name: "Corn Field",
soil_type: "Loam Soil",
location: "London",
moisture_level: "1",
timestamp:“12345678”,
createdAt: "2021-04-01T15:54:59.713Z",
updatedAt: "2021-04-01T15:54:59.713Z"
}
device.on('connect', () => {console.log(`${thingName} is connected to ${endpoint}`)
device.publish(topic, JSON.stringify({ state:{
reported: {field_data} }}))
})
在 index.js 文件中,将变量“YOUR AMAZON IOT ENDPOINT”替换为您本人的 IoT 终端节点。这是容许您连贯到 Amazon IoT 的自定义终端节点。您的每个事物都在此终端节点上有一个可用的 REST API。
从 Amazon IoT 控制台 的左侧导航窗格中,抉择 设置 。您的终端节点将列在顶部的 设施数据终端节点 局部。
- Amazon IoT 控制台
https://console.aws.amazon.co…
从 Amazon IoT 控制台中,抉择 测试。
对于 订阅主题 ,输出 #,而后抉择 订阅主题。咱们将订阅所有主题以查看您的设施是否正在公布。
在本地零碎上的 iot_thing 文件夹中,应用以下命令启动脚本 index.js:
node index.js
回到 Amazon IoT 控制台中,您将看到正在发送到主题的数据:
图 7 – 显示 Amazon IoT 控制台正在捕捉传入数据的图片
因为咱们曾经设置了 Amazon IoT 规定,数据也已增加到 Amazon DynamoDB 表中。因而,刷新本地主机上运行的网站,当初您将看到第二个条目。
论断
借助 Capgemini 的“Smart Hub Cropping”Amazon IoT 解决方案,农民能够取得农田的实时状态,例如土壤类型和含水量,并随时随地监控和执行操作。
您能够让农民轻松平安地分享他们的田地状态。这有助于他们维持作物以确保生产性增长。
咱们冀望看到您如何依照本示例开始利用 Amazon IoT 打造 Smart Hub Cropping 的将来。
Capgemini – 亚马逊云科技合作伙伴聚焦
Capgemini 是亚马逊云科技高级征询合作伙伴和 MSP。Capgemini 领有一支由遍布 40 多个国家 / 地区的 22 万人组成的多元文化团队,领有 12,000 多项亚马逊云科技认证和 2,700 多项无效亚马逊云科技认证。
本篇作者
Pete Moles
亚马逊云科技
合作伙伴解决方案构架师
Charudath Doddanakatte
Capgemini
数字客户体验总监
Ragavie Dakshinamoorthy
Capgemini
技术解决方案架构师