手头有一台支持中移动的OneNet平台的接口的烟感设备,刚好可以用来了解一下移动搭建的这套开放平台。
OneNet平台是中国移动物联网公司推出的物联网解决方案平台。对于集成了移动的物联网模块,NB-IOT模块的设备,目前是可以免费接入这个平台进行数据展示。移动其实也是想做大平台,控制数据流,期望采用了NB-IOT模块的设备都能够在自己的掌控中。首先这套平台提供了一套API给设备接入,只要按照这套API进行对接,设备就可以接入,这部分不是这次的重点,后面应该也会写一篇博客专门讲设备接入。其次这套平台还提供了一套API给第三方的平台来调用,方便第三方平台来获取设备数据。从软件结构上来看OneNet平台很像一个中间件,客户的设备通过一套接口对接这个平台,客户想拿设备数据通过这个平台的一套接口来拿。
目前OneNet平台支持的协议还是相当丰富的,有MQTT、MODBUS、LWM2M、EDP、RGMP、http、tcp透传等。
另外,除了中国移动,中国电信也建立了自己的物联网解决方案平台easy-iot平台。百度也建立了自己的天工物联网开放平台。还有一些其他厂商也建立了自己的物联网开放平台,其实都是期望能成为标准,成为数据的掌控者。
手头的烟感设备集成了NB-IOT模块,接入相对简单,这里只简单介绍接入过程。首先要在平台注册,然后建立产品,在产品下面建立对应的设备,这里有两个比较重要的参数一个是IMEI,一个是IMSI。设备录入成功后就像下面这个样子,如果在线,颜色应该是绿的。
详细信息能看到每条上来的数据。
如何从OneNet平台获取数据呢?
OneNet平台给我们提供了一种特别简单的方式,这里只介绍最简单的,只要我们配好一个IP和端口,那么一旦有设备数据上行到OneNet平台,那么OneNet平台会将这条数据推送到我们设置好的IP和端口上,数据格式也比较简单,类似这个样子:
那么我们首先要搭建我们用来接收OneNet推送数据的简易平台。
我在公网的服务器上起了一个workman的框架,配好端口就可以了。
端口我用的7377
$webserver = new WebServer(‘http://0.0.0.0:7377‘);
$webserver->addRoot(‘test.onenet.cn’, ‘/home/even/api/onenet’);
启动workman的日志如下:
----------------------- WORKERMAN -----------------------------
Workerman version:3.5.4 PHP version:5.6.33
------------------------ WORKERS -------------------------------
user worker listen processes status
even none tcp://0.0.0.0:7177 1 [OK]
even WebServer http://0.0.0.0:7377 1 [OK]
----------------------------------------------------------------
Press Ctrl+C to quit. Start success.
我在/home/even/api/onenet放置的index.php来接收设备数据,index.php简单代码如下:
$file = "/home/even/api/onenet/iot.log";
if( $_SERVER['REQUEST_METHOD'] == "GET" ){
$result=$_GET['msg'];
echo "$result";
if($f = file_put_contents($file, $result,FILE_APPEND)){
}else{
echo "file print fail\n";
}
}else if( $_SERVER['REQUEST_METHOD'] == "POST" ){
$result="";
if($result == ""){
$result="isnull";
}
$result=$_POST;
$data=json_encode($_POST);
if($f = file_put_contents($file, $data,FILE_APPEND)){
}else{
echo "file print fail\n";
}
}
?>
大概就是如果get方法,就认为是验证,直接提取msg返回即可,如果是post,认为是数据,写到本地的文件。
将我们搭建好的IP和端口配置到OneNet平台中:
选用最简单的明文模式,然后提交,此时OneNet平台会向我们搭建的建议平台发送认证信息,GET方法送过来三个参数,我们只要把其中的msg参数提取出来,回给这一次的http请求就可以完成平台认证,就是这么简单。完成认证后是这个样子:
然后等着收数据就可以了。
下面是收到的一条数据
{“msg”:{“at”:1532944417722,”imei”:”xxxxxxxxxxx”,”type”:1,”ds_id”:”3200_0_5750”,”value”:”1500100100050031214922020001030300010D”,”dev_id”:36620955},”msg_signature”:”7x3qm+f98Pkb\/dOmt5FSXw==”,”nonce”:”*NYf0@lF”}
这里我隐去了IMEI,能够看到其中value值就是我们在平台上看数据详情中最上头的一条。至此整个流程走完,想做负责一点的小伙伴可以尝试一下加密。