如何通过7个简单步骤构建智能物联网网关
现在我们将着手构建智能物联网网关。我们将使用 Ansible 来自动化网关配置,因为它也可用于配置管理和应用程序部署。一旦您准备好在生产环境中配置和部署数千个网关,就可以同样地使用这个 Ansible 工具(一个简单的自动化IT工具)。
网关的主要组件是:
- Red Hat Enterprise Linux:提供企业级基础。
- Red Hat JBoss A-MQ(消息队列产品):调处传感器数据。
- Red Hat JBoss Fuse(企业服务总线):转换传感器数据并将其发送到端点。
- Red Hat JBoss BRMS(业务规则管理系统):实现边缘的实时决策。
一旦网关配置完毕,我们将通过启动 Red Hat JBoss Fuse 并构建及部署路由和业务规则服务来付诸实践。然后我们启动一个传感器应用程序,它使用 MQTT 将温度数据发送到 Red Hat JBoss A-MQ 中间件。这些消息将被转发到我们之前开启的服务。最后,我们将创建业务规则以在传感器值达到阈值时触发所期望的动作。
注意:在开始之前,您需要确保在网关的 Downloads 文件夹中有 Red Hat JBoss Fuse 6.2.1 。您可以从 Red Hat Customer Portal 下载它。在 Red Hat Developer Program 中也免费提供红帽产品。
步骤 1:用 Ansible 准备主机系统
在主机上 clone 项目仓库。
- 打开终端并输入以下命令:
[user@localhost ~]$ git clone -b Virtual-Lab-1-Host https://github.com/RedHat-IoT/Virtual_IoT_Gateway.git
- 使用网关的 IP 地址更新主机文件 [Virtual-IoT-Gateway/Ansible/host] ,并将主机的公钥放在远程网关上(Ansible 使用 ssh 与远程系统通信)。你可以在这里学习如何设置 Ansible 。
- 为您网关的用户名更新 Ansible playbook BuildGW 文件 [Virtual-IoT-Gateway/Ansible/BuildGW]: set_fact:user='user name'
- 通过输入以下命令来启动 Ansible playbook:
[user@localhost ~]$ cd Virtual_IoT_Gateway/Ansible
[user@localhost ~]$ ansible-playbook BuildGW
让 Ansible 运行 playbook 中的任务。待 Ansible 完毕后,我们就可以准备直接在网关上开始工作。
第2步:登录到网关
注意:就我的网关而言,我使用了 username = 'demo-user' 和 password = 'change12_me' 的配置。
第3步:启动 Red Hat JBoss Fuse 服务
- 打开一个新的 shell 并输入以下命令:
[demo-user@localhost ~]$ cd
[demo-user@localhost ~]$ cd IoT_Summit_Lab
[demo-user@iotlab IoT_Summit_Lab]$ ./runJBossFuse.sh
- 等待 Red Hat JBoss Fuse 服务完成启动过程。
Red Hat JBoss Fuse 需要安装 'camel-mqtt' OSGi(Open Service Gateway Initiative,开放服务网关倡议)功能来处理 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输) 消息。
- 在 'JBossFuse' 命令提示符处输入以下简单的命令:
JBossFuse:karaf@root> features:install camel-mqtt
- 最小化此 shell 以保持 Fuse 服务在后台运行。
第4步:构建和部署 Camel 路由
传感器数据将通过本项目提供的 Camel 路由进行转换和发送。现在我们需要构建 Red Hat JBoss Fuse 项目并将其部署到我们正在运行的 Fuse 服务上。我们将使用有现成提供的脚本来构建和部署项目。
- 在终端中,执行以下命令:
[demo-user@iotlab Software_Sensor]$ cd
[demo-user@iotlab ~]$ cd IoT_Summit_Lab/
[demo-user@iotlab IoT_Summit_Lab]$ ./runRoutingService.sh
我们可以通过登录到 JBOSS Fuse 管理控制台来验证 Camel 路由已经部署好(请参阅详细信息)。
第5步:创建业务规则
智能物联网网关的其中一个重要功能是在传感器数据满足业务规则所定义的某些条件时触发动作。在本节中,我们将学习如何创建业务规则服务。该服务将按以下方式工作:
- 从消息队列中读取传感器数据。
- 传感器数据被移交给规则执行引擎,该规则执行引擎根据每个定义的规则触发动作。
- 更改后的数据被放入另一个定义的消息队列中。
我们将使用 MS Excel 决策表来定义业务规则。下图(原文如此,无图)显示了一个每一行代表一个规则的决策表的示例。蓝色的列是“条件”,黄色的列则是“动作”。
规则的语法很简单:如果 一些条件,那么 一些动作。
该规则系统能够从电子表格中读取并按照上述语法将其编译为规则。在本实验中,提供了一个示例的业务规则电子表格,可用于创建新规则。
此表中的列所代表含义如下:
Alerting Rule:规则的名称。它是一个可选字段,但对调试非常有用。
Device Type:由传感器报告的设备类型。
Payload:此规则需要匹配的数值范围。
Result:由规则触发的动作,即将值更改为0或1。
- 打开示例规则电子表格:'DecisionTable.xls'
- 通过填写以下信息创建两条规则:
- 规则1:如果我们得到0到60之间的温度读数,则将结果字段更改为0。
- 规则2:如果我们得到61到100之间的温度读数,则将结果字段更改为1。
注意:在第二条规则 Payload 列中,在“61”和“100”之间添加一个空格。
注意:以 MS Excel 格式保存电子表格。
业务规则服务的详细信息在这里。
第6步:构建并运行业务规则服务
我们已经在决策表中添加了一些规则,现在我们需要构建新版本的服务并启动它。
- 在终端中输入以下命令:
[demo-user@localhost IoT_Summit_Lab]$ cd
[demo-user@localhost ~]$ cd IoT_Summit_Lab/
[demo-user@localhost IoT_Summit_Lab]$ ./runRulesService.sh
它应该显示以下输出:
< output truncated > AMQ-Broker tcp://localhost:61616 ready to work!
Device-Type = temperature
Device-ID = 4711
Payload = 70
Result = 1
----------------------
Sending 18.05.2016 10:46:22 766temperature47117000.01
第7步:测试规则服务
我们将通过软件传感器向我们的设置发送测试消息来测试此服务。应该发生以下步骤:
- 软件传感器通过 MQTT 发送具有高值的消息。
- 路由服务会将其选中,转换消息并将其发送到 AMQP (Advanced Message Queuing Protocol,高级消息队列协议)消息队列。
- 业务规则服务将从队列中获取转换后的消息,并将其放入另一个 AMQP 消息队列中,但前提是它满足业务规则条件。
- 在新终端中输入以下命令:
[demo-user@localhost Desktop]$ cd
[demo-user@localhost ~]$ cd IoT_Summit_Lab/
[demo-user@localhost IoT_Summit_Lab]$ ./runHighSensor.sh
它应该显示以下输出:
Starting the producer to send messages
Sending '70,0'
AMQ-Broker tcp://localhost:61616 ready to work!
Device-Type = temperature
Device-ID = 4711
Payload = 70
Result = 1
----------------------
Sending 17.05.2016 15:08:59 265temperature47117000.01
----------------------
验证消息是否得到正确处理的另一种方法是通过 'http://localhost:8181' 查看 Red Hat JBoss Fuse 控制台。消息入列和出列的统计现在应该显示一条消息已经从 'message.to.rules' 中取出并放入 'message.to.datacenter' 中。
注意: Fuse 控制台登录名/密码是 admin/change12_me
结论
通过红帽自动化工具来使用 Ansible 构建智能物联网网关是一个非常简单的过程。基于开源技术的企业级智能物联网网关由 Red Hat Enterprise Linux, Red Hat JBoss Fuse, Red Hat JBoss BRMS 和 Red Hat JBoss A-MQ 构建而成。
我们提供了示例代码,通过部署路由和业务规则服务来使智能物联网网关可用。传感器应用程序用于将温度数据发送到 A-MQ 中间件。这些 MQTT 消息由我们之前启动的服务处理。最后,我们创建了业务规则以在传感器值达到阈值时触发所期望的动作。
在 GitHub 上提供了构建智能物联网网关的源代码,并包含演练视频。