如何构建物联网网关?
今天和大家分享的是如何构建一套智能物联网网关。我们将利用Ansible实现该网关的自动化配置,当然Ansible亦适用于配置管理及应用部署。如果大家面对大量网关配置与部署工作,那么Ansible绝对是值得强烈推荐的优秀工具。
下面来看此网关的几大主要组件:
红帽企业 Linux:提供企业级基础。
红帽 JBoss A-MQ: 对传感器数据进行评判。
红帽 JBoss Fuse:传输传感器数据并将其路由至端点。
红帽 JBoss BRMS:在边缘位置实现实时决策制定。
在网关配置完成后,我们将启动红帽JBoss Fuse,而后构建并部署路由与业务规则服务,从而使其开始运作。我们随后会启动一款传感器应用,其利用MQTT将温度数据发送至红帽JBoss A-MQ代理。这些消息会被转发至我们此前启动的服务处。最后,我们将创建业务规则,用于在传感器值达到阈值时触发对应操作。
注意:在开始之前,大家首先需要在网关内的Downloads文件夹内保存一份红帽JBoss Fuse 6.2.1。
第一步:利用Ansible准备主机系统
在主机设备上克隆项目库。
打开终端并输入以下命令:
[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 playbook BuildGW文件[Virtual-IoT-Gateway/Ansible/BuildGW],将其中的用户名修改为您网关的实际值:user=’user name’
输入以下命令以启动该Ansible playbook:
[user@localhost ~]$ cd Virtual_IoT_Gateway/Ansible
[user@localhost ~]$ ansible-playbook BuildGW
让Ansible运行此playbook中的各项任务。一旦Ansible完成执行,我们即可准备直接操作此网关。
第二步:登录至该网关
注意:在此套网关中,我们使用了username = ‘demo-user’与password = ‘change12_me’。
第三步:启动红帽JBoss Fuse服务器
开启新shell,输入以下命令:
[demo-user@localhost ~]$ cd
[demo-user@localhost ~]$ cd IoT_Summit_Lab
[demo-user@iotlab IoT_Summit_Lab]$ ./runJBossFuse.sh
等待红帽JBoss Fuse服务器完成启动流程。
红帽 JBoss Fuse需要安装‘camel-mqtt’ OSGi功能以处理MQTT消息。
在‘JBossFuse’命令提示符下输入以下命令:
JBossFuse:karaf@root> features:install camel-mqtt
最小化此shell,保持Fuse服务器在后台运行。
第四步:构建并部署Camel Route
传感器数据将由Camel Route负责传输及路由。现在我们需要构建红帽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 route是否部署完成。
第五步:创建业务规则
智能物联网网关最为重要的功能之一,是在传感器数据满足业务规则中设定的特定条件时触发对应操作。在本章节中,我们将了解如何创建一项业务规则服务。此服务将通过以下方式起效:
1. 从Message队列中读取传感器数据。
2. 将传感器数据传递至规则执行引擎,并由后者根据定义规则触发操作。
3. 经过变更的数据被放置在另一已定义Message队列中。
这里我们将使用微软Excel决策表来定义业务规则。下图所示为一套决策表实例,其中每一行表代表一条规则。蓝色的列为“条件(conditions)”,而黄色的列则定义一项“操作(action)”。规则语法非常简单:如果满足某条件,则执行某操作。
这套规则系统会从电子表格中读取规则,并将其按以上语法进行编译。在本示例中,我们的业务规则电子表格可用于创建新规则。
下面来看表格中各列所代表的含义:
Alerting Rule(警告规则):规则名称。此为可选字段,但在调试中非常有用。
Device Type(设备类型):传感器所报告的设备类型。
Payload(有效载荷):此规则需要匹配的数字范围。
Result(结果):由规则触发的操作,即将值更改为0或1。
打开示例规则表格:‘DecisionTable.xls.’
填写以下信息以创建两项规则:
规则一:如果我们读取到的温度为0到60之间,则将结果字段变更为0。
规则一:如果我们读取到的温度为61到100之间,则将结果字段变更为1。
注意:在第二条规则Payload列中,在“61”与“100”之间添加一个空格。
注意:将表格保存为微软Excel格式。
点击此处 查看此业务规则服务 的具体细节。
第六步:构建并运行业务规则服务
现在我们已经完成了规则添加,接下来需要构建新的服务版本并加以启动。
在终端内执行以下命令:
[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
第七步:测试规则服务
我们通过软件传感器发送一条测试消息,从而进行服务测试。具体步骤如下:
软件传感器通过MQTT发送一条高值。
路由服务获取该值后,将其转换为消息并发送至AMQP消息队列。
业务规则服务从队列中获取此消息,并在其滞业务规则条件时将其添加至另一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’'查看红帽JBoss Fuse控制台。这里的入队与出队消息数量应该显示,已经有一条消息由message.to.rules’处获取并被放置在‘message.to.datacenter’当中。
注意:Fuse控制台的登录名/密码为admin/change12_me。
总结
我们可以利用Ansible并配合红帽自动化工具轻松完成智能物联网网关的构建工作。这套企业级智能物联网网关基于多项开源技术,包括红帽企业Linux、红帽JBoss Fuse、红帽JBoss BRMS以及红帽JBoss A-MQ。
这里我们已经提供了示例代码,包括部署路由机制与业务规则服务以保证此智能物联网网关开始正常运作。其中传感器应用负责向A-MQ代理发送温度数据。这些MQTT消息由我们此前启动的服务进行处理。最后,我们创建了业务规则,用于在传感器值达到阈值时触发特定操作。
来源: 51CTO安全资讯