·
· 214
计算机测量与控制
第24卷
代码中先引入各种设备驱动,再调用zetta实例对象的use
方法,将设备作为中间件嵌入到Zetta Server,通过link方法
与云端的Zetta服务器相连,将本地API发布为互联网API,
内部使用WebSocket协议实现本地设备与云端API数据的实
时传输,这样在云中API中可实时监测各种设备的状态和数
据,也可以使用API调用对在线的设备发送控制指令和参数。
2.3本地端IoT应用编程
提供的Git工具将Zetta服务器项目部署到Heroku,选择应用
类型为node.js即可。
假如部署的应用名称为city—lot,则Zetta服务的请求地
址为https://city—iot.heroku.com.
每个连接的设备都有一个唯一的请求地址,其格式为:
https://city—iot.heroku.com:3000/servers/CitylOT/
devices/e6f5b480一e96e一4fdc一8718—9laeb0234c99
其中CityIOT是本地的Server名称,最后的数字编码是
Zetta自动生成的设备ID,使用如下的JSON格式请求数据,
实现对设备的控制。
物联网本地端除了可以引用设备驱动外,还可以根据应用
功能需求,使用Node.jS的事件驱动、异步、非阻塞的响应式
编程模式编写设备间相互协作完成的功能模块,根据监测设备
的状态和数据以执行相关的动作,如发送报警信号,切断电路
开关和控制阀门流量大小等。如下简要示意代码展示了loT应
用的编程实现。
{
’’method”:”POST”,
”href”:”https://city—iot.heroku.corn:3000/servers/Cityl0T/de—
vices/e6f5b480—e96e一4fdc一8718—9laeb0234c99”.
module.exports=function(server){
”fields”:[{
varIedquery=server.where({type:”led”。name:”LED灯”));
micquery=server.where(type:”mic”,name:”内置麦克”);
server.observe([1edquery,micquery],function(1ed,mic){
led.state.on(”开”,function(){
’’name”:”action”,
”value”:”开”
}])
此控制数据可以使用任何客户端发送HTTP POST请求
给联网的10T设备。
mic.speek(100);});
}););
4物联网客户端设计编程
loT应用编程使用Node.jS的模块机制,通过Zetta Serv—
er的where方法定位IoT设备和observe方法智能感知设备是
分布式物联网实现云服务与各个端点的loT设备连接后,
就可以通过互联网,在任何PC、手机或平板上使用Web方式
控制所有的连接设备,包括实时接收监测的数据,以及发送对
IoT设备的控制指令。
否启动、停止或在线,在JavaScript回调方法中取得在线设
备。最后监控设备的状态变化事件,以异步响应式编程模式实
现需要的执行的动作和功能。
Web客户端可以使用任何MAX框架如jQuery,Angular—
JS,Dojo等请求云端设备API实现对loT设备的访问和控制。
如下是演示了使用jQuery的异步AJAx请求方法.post控制
LED灯点亮的实现代码。
3云端服务器实现
通过Zetta实例对象的link方法可以连接多个Zetta服务
器,由Zetta自身完成连接时使用的协议、请求握手、防火墙
穿越等复杂的工作细节,极大减轻了开发者的编程负担,使开
发者集中精力专注于业务功能实现。
.post(”https://city—iot.heroku.eom:3000/servers/CitylOT/de—
vices/e6f5b480—e96e一4fdc一8718—91aeb0234e99”,{action:”开”},
function(){
将本地Zetta服务器与云中Zetta的服务器互联,实现本
地服务器连接设备的API公布在互联网上。任何连接互联网
的应用客户端都可以通过此API访问所有分别各地的loT设
备,实现分布式物联网。
//回调处理代码
})
Zetta设备最引人注目的特点是支持实时WebSoeket协议,
支持设备数据的高速、实时传输,客户端使用此协议可以实时
接收设备的监控数据,不再需要定时的HTTP请求,由IoT
设备采用推方式自动发送给客户端。
云端Zetta服务器与本地服务器实现基本相同,为连接众
多本地的本地Zetta服务器,并集中发布每个联网Device的
API,Zetta提供了最简单的方法expose(*),可以发布每个
通过link方法连接的本地Device的API。云端服务器的简化
的示意代码如下所示。
5系统的实际应用
使用此云平台分布式loT应用模式对传统的供热监控系统
进行改造,在系统的投资上大大节省。原来使用昂贵的工业控
制计算机,现在下位机全部采用微型树莓派。在每个供热锅炉
房设置一个Zetta Server端点,将多个供热站的Server与云
Zetta进行互联,加大简化了系统的应用开发。使得项目的开
发进度成倍提高,系统的可维护性和可伸缩性得到巨大改善,
新增换热站时,通过部署一个Zetta Server可立即进行入网
监测。
zetta=require(’zetta'):
3000;
PORT=process.env.PORT
zetta()
.name(’cloud')
.expose(’*’)
.1isten(PORT);
创建Node.jS项目,并将此服务器启动代码保存为serv—
er.js,在项目的配置文件package.json中指定依赖的Node.js
模块,包括zetta和其他模块。在百度云、阿里云或开源云平
台Heroku上申请云主机,推荐使用Linux操作系统,并安装
Node.jS的最新版。
6
结论
将新的服务器平台Node.jS和Zetta开源框架应用于基于
云的loT应用开发,简化了loT应用开发的复杂性,加快了物
联网应用的开发效率,提高了应用的可维护性、可升级性和可
(下转第218页)
本文使用Heroku免费云平台作为测试目的,生产环境要
使用商业化平台以保证系统的可靠运行和售后服务。使用平台
万方数据
全部评论(0)