连接OneNET平台HTTP设备流程

该文档介绍了A900E连接 OneNET HTTP平台设备的例程,包括在终端自动创建设备和上传数据流。 [1.AM900E_HTTP的AT命令](https://easydoc.xyz/?#/doc/20664339/D5sNAlbL/c40SFln5) [2.AM900E连接ONENET HTTP设备例程](https://github.com/AmaziotDemo/AM900E_ALIYUN_MQTT) ## 1.HTTP协议连接ONEENT流程 ![image.png](https://cos.easydoc.net/68658482/files/k2oatr5y.png) ## 2.连接ONENET平台HTTP设备实例 ### 2.1 [登录ONENET平台](http://open.iot.10086.cn/)创建产品 进入[开发者中心](http://open.iot.10086.cn/product),选择公共协议产品,根据实际情况创建自己的产品(此文档以AM900EHTTP为例),如下图所示。 ![image.png](https://cos.easydoc.net/68658482/files/k2oauxkx.png) ### 2.2 创建设备 在终端发送AT命令,自动创建产品下的设备 ``` AT+CGATT=1 //挂接 GPRS 网络 OK AT+CGDCONT=1,"IP","cmmtm" //设置 PDP 上下文 OK AT+CGACT=1,1 //激活PDP 上下文 OK AT+HTTPINIT //初始化HTTP OK AT+HTTPPARA = "CID","1" //设置承载上下文标识 OK ``` 下图红色方框中为设备注册码 ![image.png](https://cos.easydoc.net/68658482/files/k2ob68bm.png) ``` AT+HTTPPARA = "URL","http://api.heclouds.com/register_de?register_code=W9cBpEOL3ZZrrKuH" OK //设置要访问的url,在onenet上创建HTTP设备,“register_code=”后面为设备注册码 AT+HTTPPARA="CONTENT","application/json" //设置内容为json格式 OK AT+HTTPPARA="API_KEY","jnabYv67umQptNP3gvyZPv9fcl8=" //设置API key OK AT+HTTPDATA //输入HTTP数据 > {"sn","201903"} //设备编号 AT+HTTPACTION=1 //执行put命令 OK 1 200 96 //执行成功返回26字节数据 AT+HTTPREAD = "0","96" //读取返回数据 OK //显示创建成功 +HTTPREAD: 96 {"errno":0,"data":{"device_id":"537721723","key":"QhYo1auW57sF39rvHV4Xd=Pf9HI="},"error":"succ"} AT+HTTPTERM //终止HTTP OK ``` 下图红色方框中表示创建的设备ID与设备APIKEY ![image.png](https://cos.easydoc.net/68658482/files/k2obv4r0.png) ### 2.3上传设备信息(温度,MP2.5) ``` AT+HTTPINIT //重新初始化HTTP OK AT+HTTPPARA = "CID","1" //设置承载上下文标识 OK AT+HTTPPARA = "URL","http://api.heclouds.com/devices/ 537721723 /datapoints?type=5" OK //设置要访问的url,设定设备数据流格式 AT+HTTPPARA="CONTENT","application/json" //设置内容为json格式 OK AT+HTTPPARA="API_KEY"," QhYo1auW57sF39rvHV4Xd=Pf9HI="//设置API key OK AT+HTTPDATA //输入HTTP数据 > ,;temperature,24.5;PM2.5,129 //上传数据流信息 AT+HTTPACTION=1//执行put命令 OK 1 200 26 //执行成功返回26字节数据 AT+HTTPREAD = "0","26" //读取返回数据 OK +HTTPREAD: 26 {"errno":0,"error":"succ"} //显示上传成功 AT+HTTPTERM //终止HTTP ok ``` 下图中红色方框中表示上传的数据(PM2.5,temperature) ![image.png](https://cos.easydoc.net/68658482/files/k2oby468.png) ## FAQ ### 1.AM900E向ONENET云平台发送HTTP协议的数据上传报文 POST /devices/537721723/datapoints HTTP/1.1 api-key:QhYo1auW57sF39rvHV4Xd=Pf9HI= Host:api.heclouds.com Connection:on Content-Length:66 {"datastreams":[{"id":"temperature","datapoints":[{"value":34}]}]} 发送完成1分钟之后,连接断开,是因为HTTP协议只能维持1分钟连接,如果想维持连接,需要再1分钟之内发送数据上传报文。如果将上述报文的Connection:on改为Connection:close,发送报文完成之后连接就会中断,即成为短连接。 ### 2. 长连接 长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1相对于1.0最重要的新特性就是引入了长连接。 ### 3. 短连接 短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。 注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议; HTTP协议是基于TCP的; ### 4. 如何快速区分当前连接使用的是长连接还是短连接? 1. 凡是在一次完整的消息交互(发请求-收响应)之后,立刻断开连接(有一方发送FIN消息)的情况都称为短连接; 2. 长连接的一个明显特征是会有心跳消息(也有没有心跳的情况),且一般心跳间隔都在30S或者1MIN左右,用wireshark抓包可以看到有规律的心跳消息交互(可能会存在毫秒级别的误差)。 ### 5. 什么时候用长连接,短连接? 1. 需要频繁交互的场景使用长连接, 点对点的通讯,而且连接数不能太多情况 ,相反则使用短连接,比如普通的web网站,ttp服务一般都用短链接(http1.0只支持短连接,1.1keep alive 带时间,操作次数限制的长连接),只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。 2. 维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以使用需谨慎。