0 前提

首先呢我们要知道onenet是一个数据的中间平台。
在这个品台上我们可以创建一个产品,然后又可以在产品下面创建一个虚拟的设备。

在实际的生过里面我们可以使用 “单片机” 或者 “手机软件” 来关联上品台上面的这个设备,
当然关联的时候可以有好几种协议,比如MQTT 和 Http

1 onenet服务类型

onenet平台上面也提供了很多产品,我用过的就是 多协议接入 还有一个就是 物联网开发套件
多协议接入相关文档
https://open.iot.10086.cn/doc/multiprotocol/book/develop/http/api/4.%E6%9F%A5%E8%AF%A2%E8%AE%BE%E5%A4%87%E8%AF%A6%E6%83%85.html

物联网开发套件
物联网开发套件相关文档
https://open.iot.10086.cn/doc/mqtt/book/application-develop/list/registDevice.html

2 关联平台设备

不过一般硬件在关联 onenet平台上面的虚拟设备的时候使用的是 MQTT因为MQTT协议使用的时候可以在平台上面显示在线。
而且MQTT是基于消息订阅的,就是发布和订阅,当topic里面有数据的时候,会自动下发给订阅这个topic的设备。
(需要注意的是,硬件和软件都是可以通过MQTT协议关联 平台上面那个虚拟设备的,而且都会显示在线)

mqtt和http协议的区别
直观的区别就是mqtt是基于消息队列的,队列里面有数据的时候就会“主动”向订阅这个topic的设备数据发消息
,可以理解为平台主动下发

http就是通过post或者get方法请求 来得到数据,你请求一次就会得到一次数据,“我们要自己去获取数据”

注意
我这里先来讲解一下这个物联网套件的东西 首先你就要知道一下不管干啥都要现在 onenet平台上面搞到一个虚拟设设备

2.1 硬件关联平台

主要是通过mqtt协议来关联平台
相关的软件:mqtt.fx 调试助手 和 onenet调试助手
这两个软件就相当于是现实中的 “单片机” 来连接到云平台上面的数据

2.2 软件关联平台

主要是通过http协议来关联平台,就是通过调用平台提供的一个api(application programming interface 应用程序接口,sdk
software development kit 软件开发工具包)
通过http协议调用接口来实现和 onenet这个虚拟设备的通信的。

3 物联网套件MQTTS服务

3.1 设备(硬件)的接入

3.1.1 连接设备

物联网开发套件 主要就是使用MQTTs 这个协议
模拟硬件接入 主要使用软件 mqtt.fx image.png
onenet官方的mqtt.fx 讲解视频地址https://www.bilibili.com/video/BV1Mg4y1z7yj?spm_id_from=333.999.0.0
而且可以参考物联网套件相关文档里面的
快速入门—-设备连接 可以实现让自己的模拟的硬件快速连接,onenet的虚拟设备。在连接虚拟设备的时候尤其需要注意的就是ip地址和端口。然后就是要注意用户名和密码,这个用户名和密码就是产品ID和token
image.png

经过这一步你就可以实现然设备上线了

3.1.1. 0设备的 token

这里还要重点的讲解一下password这个东西,这里的password就是硬件设备接入时候的token鉴权信息。
查看文档 mqtt物联网套件文档 —— 用户指南——-安全鉴权 ——token算法。了解一下这个token是怎嘛回事
image.png

token计算工具的下载地址 , mqtt物联网套件 文档 —- 用户指南——-安全鉴权 ——token生成工具里面得到
image.png
需要注意的是这个res ,有几种方式,在硬件设备接入的时候使用的和API(软件)接入的时候构成是不一样的
还有就就是这个et ,是一个unix事件,我们可以使用在线工具生成一个unix时间,其实就是一个毫秒值,距离现在远一点(两个月就可以了)的毫秒值。
method里面有几种 md5 和 sha1 还有其他的,官方的案例里面使用的是sha1 ,这里我也使用sha1得了,其实都可

在说回来这个res的构成,这里我们使用mqttfx这软件模拟的是 硬件设备接入的方法。所以使用第二种
image.png

3.1.2 上传数据点

设备开发——topic簇——数据点topic簇
可以实现将数据上传到云平台的虚拟设备的数据流。这里需要注意topic名字的写法。
image.png

image.png
image.png
可以看到平台里面data这个数据流里面已经是abcdef了。

3.1.3 订阅数据点

文档里面找 设备开发指南——协议规范

不知道为什么得到的不是数据流的值。。。疑惑????????
image.png

按理说刚才我们已经把数据点上传上去了,我们现在就可以订阅刚才的topic得到数据流里面的数据了,但是我发现这里订阅得到的不是自己刚才上传的数据,而是上传时候的 id值 ;
image.png

我们这里只讲解上传数据点。

上传的结果就是傻逼 ,上传的时候 使用的是json格式,而且需要指定一下上传到哪里

问题是上传数据是没有问题的,但是我订阅的时候没有办法订阅到我的那个数据,只能顶图饿到

3.2 应用(软件)的接入

软件的接入主要是通过http协议调用onenet的API接口
模拟软件接入的调试助手postmanimage.png

可以参考视频:https://www.bilibili.com/video/BV16Z4y1x7Zx?spm_id_from=333.880.my_history.page.click
视频里面使用的是 多协议开发的API ,但是我们这里使用的是 物联网开发套件,二者是不一样的,可以对比一下看看嘛。实际对这里的用处不大。

3.2.1 获得设备详情API

首先我们就是要看一下 物联网开发套件里面的API接口
查看文档 应用开发指南 —- API 使用
image.png
可以看到服务地址,和API的鉴权 和一个http得到数据点实例

就是说使用http调用接口的时候肯定是要用到鉴权信息的,刚才我们3.1.1 进行设备(硬件)接入的时候,有个参数是password,这个password就是一个token字符串。

这里应用(软件)接入的时候也会用到token字符串。

这两个字符串都可以使用token生成工具来实现,但是token的构成是不一样的,两个的token结果也是不一样的。
token生成工具可以在 mqtt物联网套件文档 —— 用户指南——-安全鉴权 —— token生成工具里面下载得到。

注意设备(硬件)接入和应用(软件)接入时候的token是不一样的。我们这里是API访问,使用的res应该是第一个
image.png
打开postman软件,这个软件你可以在百度下载一个
地址https://www.postman.com/downloads/

首先就是要知道 mqtt物联网开发套件的API 直接进到 mqtt物联网开发套件文档—-

image.png
这里我们调的是https://api.heclouds.com/devices/914864615 查询设备详情的API , 返回的json就是关于设备的所有消息。
image.png

3.2.2 获得数据点

查看文档 应用开发指南 —- API —- 查询设备数据点API
image.png
GET http://api.heclouds.com/devices/8029377/datapoints?datastream_id=ds&start=2017-01-01T00:00:00&limit=100 HTTP/1.1

datastream_id=ds。这个ds就是我们的数据流的名字。
&start=2017-01-01T00:00:00&limit=100 HTTP/1.1 可有可无,没有的话就是得到最新的一条数据,
有的话就是得到2017-01-01T00:00:00 到现在的100条数据。

postman里面调用API
https://api.heclouds.com/devices/914864615/datapoints?datastream_id=data
image.png

3.3.3 上传数据点(方法一)

我们上传数据点的API在mqtt物联网套件的文档 mqtt物联网套件文档 里面是没有的,但是我们可以借鉴
多协议开发的文档多协议接入文档

这里给出一个api实例
https://api.heclouds.com/devices/914864615/datapoints?type=3
https://api.heclouds.com/devices/设备名/datapoints?type=3 (这个type=3 表示的是json数据)
注意是post方式提交的请求,然后我们还要在请求体里面,输入{“data”:”asdfasdfasdf}
image.png
查看一下平台数据
image.png

3.3.4 上传数据点(方法二)

我们可以借鉴一下 多协议接入里面的文档 , 查看一下文档多协议接入文档 ,里面的
开发指南-mqtt ——API—-上传数据点
image.png
image.png

里面有些参数是必须的,如果你没有指定type的类型,就需要在请求体里面写上完整的数据格式了(我们在3.3.3里面指定了type,所以json数据就比较简单了)。
就是下面这样的,

  1. {
  2. "datastreams": [{
  3. "id": "temperature",
  4. "datapoints": [{
  5. "at": "2013-04-22T00:35:43",
  6. "value": "bacd"
  7. },
  8. {
  9. "at": "2013-04-22T00:55:43",
  10. "value": 84
  11. }
  12. ]
  13. },
  14. {
  15. "id": "key",
  16. "datapoints": [{
  17. "at": "2013-04-22T00:35:43",
  18. "value": {
  19. "x": 123,
  20. "y": 123.994
  21. }
  22. },
  23. {
  24. "at": "2013-04-22T00:35:43",
  25. "value": 23.001
  26. }
  27. ]
  28. }
  29. ]
  30. }

使用postman来实现呢
image.png

查看一下平台的数据
image.png
已经有temperature这个数据点了

4 问题

mqtt 物联网套件接入的时候的鉴权信息,只能使用 authorization这个鉴权方式来实现,authorization的数据就是token数据。

但是多协议接入的鉴权方式可以使用api-key 也可以使用authorization 来实现。

还有就是 我这里 使用mqtt.fx模拟硬件接入的时候没有办法得到 topic ,数据流里面的数据,不知道怎么办。

最后,其实mqtt物联网套件使用的是mqtts 这个协议来实现的,文档里面的API比较少,我们可以借鉴,多协议接入里面的文档,查看一下API,里面的API有的还是可以用的。。