博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【STM32+W5500+MQTT】24,所有功能都可以通过API函数的调用来实现;HTTP接入ONENET,API开发手册和打包函数,串口软件HTTP连接服务器上传数据,2018年12月28日
阅读量:3889 次
发布时间:2019-05-23

本文共 7871 字,大约阅读时间需要 26 分钟。

0,所有功能都可以通过API函数实现,具体的看【应用开发】里面,具体就是修改打包函数

 

/*---------------------------------------------------------------------------------*/功能:  HTTP,MQTT都可以通过此函数上传数据点,数据流参数: *pkt :    需要打包的数据       *key:    api-key或者master-key       *devid:   device ID 设备编号       *dsid:    data stream ID 数据流名称,如temp,hum       *val :    value 数据值返回值:打包好的数据的长度Note1:  API函数都是在Host:api.heclouds.com上传的,IP为183.230.40.33/80,        不要错误连接到Host:mqtt.heclouds.com的服务器IP 183.230.40.39/6002 Note2: 比如想要发布topic,只需要对着【应用手册】修改数据就OK/*-------------------------------------------------------------------------------*/uint32_t HTTP_PostPkt(char *pkt, char *key, char *devid, char *dsid, char *val){	char dataBuf[100] = {0};	char lenBuf[10] = {0};	*pkt = 0;//buffer		strcat(pkt, "POST /devices/");		strcat(pkt, devid);     //设备ID	strcat(pkt, "/datapoints?type=5 HTTP/1.1\r\n");/*采用分割字符串格式:JSON type = 5*/	strcat(pkt, "api-key:");//接入设备的api-key	strcat(pkt, key);	strcat(pkt, "\r\n");  	strcat(pkt, "Host:api.heclouds.com\r\n");//主机URL        //把格式化的数据写入某个字符串 sprintf(s, "%d", 123); //把整数123打印成一个字符串保存在s中	//sprintf( dataBuf, ",;%s,%s", dsid, val); //将温度名称"temp",数值tempStr 写入字符串 dataBuf数组			sprintf( dataBuf, ",;%s,%s", dsid, val);//dataBuf输出格式为:,;temp,2 	sprintf(lenBuf, "%d", strlen(dataBuf)); //strcat()将两个字符串连接,结果放在pkt=buffer[]中	strcat(pkt, "Content-Length:");	strcat(pkt, lenBuf);     //即将写入温度数据的长度       	strcat(pkt, "\r\n\r\n");//\r\n 
<回车>
<换行>
必须是两对,不然出错 strcat(pkt, dataBuf);//最后将温度信息写入pkt=buffer[]中 return strlen(pkt);//返回buffer的长度,同时pkt的内容也更改了
/*pkt完整输出函数*/POST /devices/509224485/datapoints?type=5 HTTP/1.1api-key:=Bos9PLTvzVDRUwR=lH7sGWLvh4= Host:api.heclouds.comContent-Length:9,;temp,26

 

 

1, 

MQTT服务器IP为 183.230.40.39 /6002

设备接入与HTTP模式 不同,设备ID+产品ID+设备编号

MQTT服务器地址域名为:mqtt.heclouds.com

2,,MQTT,HTTP,一定要去除 HTTP /1.1

2-1 MQTT设备的API调用的时候,一定要去除 HTTP /1.1,而且注意标点符号,;都是在英文状态下的

 

2-1-1)MQTT查询

*请求方法:GET

*URL: 

*APIkey:5Zndx8I=gOyxjoK84953W7UDRmE=

2-1-2)MQTT上传数据点API测试总算成功 type=3 

*请求方法:POST

*URL:

*APIkey:5Zndx8I=gOyxjoK84953W7UDRmE=

HTTP请求参数(完整JSON型,在串口网络软件调试的时候,也必须是这种格式):

/*上传不同的数据temp,hum ;temp同时上传两个数据,测试完美*/{   "datastreams":    [     {       "id": "temp",       "datapoints": [       {       "value":3      },     {       "value":4      }      ]     },   {       "id": "hum",       "datapoints": [       {       "value":5      }      ]     }  ] }
/*上传单个数据点,下面的关键字和标点符号一个不能少 */{   "datastreams":  //关键字不能少  [     {       "id": "temp",       "datapoints": [  //关键字不能少      {       "value":3      }      ]     }  ] }

2-1-3)MQTT上传数据点API测试成功 type=5.

HOST 的IP是谁就是谁,MQTT的单个数据上传和HTTP一模一样的

*请求方法:POST

*URL:

*APIkey:5Zndx8I=gOyxjoK84953W7UDRmE=

HTTP请求参数:,;datastreams;temp,3543(,;temp,3543  PS:datastreams可以去掉  )

,;datastreams;temp,3543
/*temp同时上传两个数据*/,;datastreams;temp,12;temp,23
/*同时上传temp,hum的数据*/,;datastreams;temp,12;temp,23;hum,34

 

2-1-4)MQTT查询订阅的topic

*请求方法:GET

*URL:

*APIkey:900T4i4cAHjej8i2vfYaHB=cCq4= (必须是master key)

HTTP请求参数:

2-1​​​​​​​-5)MQTT发布topic与网络助手发送消息

*请求方法:POST

*URL:

*APIkey:900T4i4cAHjej8i2vfYaHB=cCq4=

HTTP请求参数:{"payload":"testmsg"}

POST http://api.heclouds.com/mqtt?topic=test_topic HTTP/1.1api-key:900T4i4cAHjej8i2vfYaHB=cCq4=  Host:api.heclouds.comContent-Length:17just for test LoL

POST /mqtt?topic=test_topic HTTP/1.1api-key:900T4i4cAHjej8i2vfYaHB=cCq4=  Host:api.heclouds.comContent-Length:17just for test LoL

 

topic的API打包函数

uint32_t MQTT_POSTtopicPkt(char *pkt, char *master-key, char *topic_name, char *msg){	char dataBuf[100] = {0};	char lenBuf[10] = {0};	*pkt = 0;//buffer		strcat(pkt, "POST /mqtt?topic=");		strcat(pkt, topic_name);     //topic名称	strcat(pkt, " HTTP/1.1\r\n");	strcat(pkt, "api-key:");//接入设备的master-key	strcat(pkt, master-key);	strcat(pkt, "\r\n");  	strcat(pkt, "Host:api.heclouds.com\r\n");//主机URL	sprintf( dataBuf, "%s", msg);//将发布的消息	sprintf(lenBuf, "%d", strlen(dataBuf)); //strcat()将两个字符串连接,结果放在pkt=buffer[]中	strcat(pkt, "Content-Length:");	strcat(pkt, lenBuf);     //即将写入温度数据的长度       	strcat(pkt, "\r\n\r\n");//\r\n 
<回车>
<换行>
必须是两对,不然出错 strcat(pkt, dataBuf);//最后将温度信息写入pkt=buffer[]中 return strlen(pkt);//返回buffer的长度,同时pkt的内容也更改了

2-2 HTTP调用

2-3 打包函数的定义

下面以数据点的上传为例,来详细解答 

uint32_t HTTP_PostPkt(char *pkt, char *key, char *devid, char *dsid, char *val){	char dataBuf[100] = {0};	char lenBuf[10] = {0};	*pkt = 0;//buffer	//把格式化的数据写入某个字符串 sprintf(s, "%d", 123); //把整数123打印成一个字符串保存在s中	//sprintf( dataBuf, ",;%s,%s", dsid, val); //将温度名称"temp",数值tempStr 写入字符串 dataBuf数组		/*采用分割字符串格式:type = 5*/	sprintf( dataBuf, ",;%s,%s", dsid, val);    //printf("%s\r\n",dataBuf);  //输出格式为   ,;temp,2 //sprintf( dataBuf, ",;%s,%s;%s,%s", dsid1, val1,dsid2, val2);  //同时上传两个数据点成功	sprintf(lenBuf, "%d", strlen(dataBuf));	//strcat()将两个字符串连接,结果放在pkt=buffer[]中	strcat(pkt, "POST /devices/"); //设备ID	strcat(pkt, devid);	strcat(pkt, "/datapoints?type=5 HTTP/1.1\r\n");	strcat(pkt, "api-key:");//接入设备的api-key	strcat(pkt, key);	strcat(pkt, "\r\n");  	strcat(pkt, "Host:api.heclouds.com\r\n");//主机URL	strcat(pkt, "Content-Length:");//即将写入温度数据的内容	strcat(pkt, lenBuf);	strcat(pkt, "\r\n\r\n");//\r\n 
<回车>
<换行>
必须是两对,不然出错 strcat(pkt, dataBuf);//最后将温度信息写入pkt=buffer[]中// POST /devices/devid/datapoints?type=5 HTTP/1.1\r\n//api-key:key\r\n// Host:api.heclouds.com\r\n//Content-Length:lenBuf\r\n//\r\n//dataBuf return strlen(pkt);//返回buffer的长度

打包函数最终输出格式如下:   

 POST /devices/devid/datapoints?type=5 HTTP/1.1\r\n

api-key:key\r\n
Host:api.heclouds.com\r\n
//Content-Length:lenBuf\r\n
//\r\n
//dataBuf   ( ,;temp,2  )

两个数据点sprintf( dataBuf, ",;%s,%s;%s,%s", dsid1, val1,dsid2, val2);  //type=5  output:,;dsid1,val1;dsid2,val2 

sprintf( dataBuf,    ",;{"%s":"%s"}"    , dsid, val);                                                 // ​​​​​​​type=3时,output: ,;{"dsid":"val"}

HTTP方法 POST
URL //api.heclouds.com/devices/device_id/datapoints
HTTP头部 api-key: 242RprHyALimOZLCKiXeT7IRdLM= //masterkey 或者 设备apikey
URL参数 type=3 //上传数据类型(可选,默认为完整JSON型,见HTTP内容示例)

POST http://api.heclouds.com/devices/2*****30/datapoints HTTP/1.1api-key: Wh**************Dv1c=Host: api.heclouds.com
  1. 数据点表示在某个时刻该数据流的值。其at表示时间,为可选字段。如果为空,则设备云会取当前时间。如果存在其格式必须为"YYYY-MM-DDThh:mm:ss"的形式(例如:2015-03-22T22:31:12)。

  2. 数据点中的value表示具体的值,其值为JSON对象,可以为整型、浮点型、字符串多种类型。如果value部分用双引号括起来,则其在设备云存储为字符串,如果不用双引号括起来,则其表示数值字符编码现在只支持UTF-8。

  3. 新增数据点支持如下简写方式。在请求的URL中增加type字段,指示所使用的格式类型。目前type支持3,4,5三种情况

URL://api.heclouds.com/devices/2214570/datapoints?type=3   //示例中的时间多可以去除  完整JSON型

示例:{"temperature":(冒号)22.5,(逗号)"humidity":"95.2%"}         

表示在数据流temperature中增加一个数据点22.5(数值),在humidity中增加一个数据点95.2%(字符串)。

      //JSON最常用的格式是对象的 键值对。例如下面这样://百度JSON型,以逗号分离

1

{"firstName": "Brett", "lastName": "McLaughlin"}

URL://api.heclouds.com/devices/2214570/datapoints?type=4

示例:{"temperature":{"2015-03-22T22:31:12":22.5}}  //{"temperature":{22.5}}

表示在数据流temperature中加一个数据点,在2015年3月22日22点31分12秒的值为22.5

URL://api.heclouds.com/devices/2214570/datapoints?type=5      //没有大括号,结尾也不要分号或者大括号

示例:temperature,2015-03-22T22:31:12,22.5;pm2.5,89  //temperature,(逗号)22.5;(分号)pm2.5,89

表示在数据流temperature中加一个数据点,即2015年3月22日22点31分12秒的值为22.5;在数据流pm2.5中添加一个数据点,即当前时间的值为89。

2-4,使用串口软件实现HTTP,MQTT连接服务器

2-4-1)网络助手调试模式1

POST /devices/509224485/datapoints?type=5 HTTP/1.1

api-key:=Bos9PLTvzVDRUwR=lH7sGWLvh4= 
Host:api.heclouds.com
Content-Length:9

,;temp,26

2-4-2)网络助手模式2,使用下面的打包格式这个也发送成功

POST http://api.heclouds.com/devices/509224485/datapoints?type=5 HTTP/1.1api-key:=Bos9PLTvzVDRUwR=lH7sGWLvh4= Host:api.heclouds.comContent-Length:9,;temp,28

发送内容中,空格占一个字符

2-4-3)在线API输入调试(特别注意与2的一一对应,在2中,HTTP/1.1一定不能少)

*请求方法:POST

*URL:

*APIkey:=Bos9PLTvzVDRUwR=lH7sGWLvh4= 

HTTP请求参数:,;temp,32

 

 

 

3,数据的接入,我自己刚刚还看了这么长时间。没想到别人已经写好了  

直接用USR软件也可以进行调试

 

此处的,;一定不能少

删除,;之后数据上传出现错误

3-2  MQTT使用

 

3-3使用模拟软件接入

 

3-3-1),数据的上传
3-3-2),命令的下发

,

3-3-3),topic有啥用吗?  

 

3-3-4),添加成两个设备之后,演示如下,结论:

在同一个产品(198366)下面,可以同时有两个不同的设备1,2.

topic的发布可以是Dev1或者Dev2,而且这两个设备可以不用订阅任何topic就可以发布,此时产品(198366)相当于一个中转站和守门员,只要设备连接上了中转站,就可以发布topic或者订阅topic。

topic的订阅只要是同一个产品(198366)下面就可以订阅,而且订阅的接收消息是只接收订阅之后发布的,对于在订阅之前发布的消息,不会接收。如果设备2只是订阅了topic2,那么设备2绝对不会收到来自topic1的发布消息

4,全国各平台域名和地址? 

4-2). 开发板资料、例程代码在哪里下载

答:社区->开发板专区 

5,数据点的订阅,测试成功

 

 

转载地址:http://tavhn.baihongyu.com/

你可能感兴趣的文章
实例演示如何使用WordPress自定义字段
查看>>
在 WordPress 指定页面加载指定 JavaScript 或 CSS 代码
查看>>
Apache配置多个监听端口和不同的网站目录的简单方法
查看>>
Linux 搭建 discuz 论坛
查看>>
如何在discuz帖子中插入视频
查看>>
怎么更改织梦网站logo和默认广告
查看>>
织梦系统如何插入优酷视频?
查看>>
Discuz设置特定用户组不启用验证码发帖权限
查看>>
百度云服务器 CentOS 图形界面支持
查看>>
为什么要使用R语言?历数R的优势与缺点
查看>>
[小技巧] Linux 下查询图片的大小
查看>>
Linus Torvalds说那些对人工智能奇点深信不疑的人显然磕了药
查看>>
[小技巧] svn: 不能解析 URL
查看>>
USB_ModeSwitch 介绍
查看>>
大公司和小公司的抢人战,孰胜孰负?
查看>>
通过make编译多文件的内核模块
查看>>
如何调试Javascript代码
查看>>
皮克斯宣布开源Universal Scene Description
查看>>
复盘:一个创业项目的失败之路
查看>>
阿里巴巴宣布加入Linux基金会
查看>>