本文共 7871 字,大约阅读时间需要 26 分钟。
/*---------------------------------------------------------------------------------*/功能: 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
MQTT服务器IP为 183.230.40.39 /6002
设备接入与HTTP模式 不同,设备ID+产品ID+设备编号
MQTT服务器地址域名为:mqtt.heclouds.com
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的内容也更改了 换行> 回车>
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
数据点表示在某个时刻该数据流的值。其at表示时间,为可选字段。如果为空,则设备云会取当前时间。如果存在其格式必须为"YYYY-MM-DDThh:mm:ss"的形式(例如:2015-03-22T22:31:12)。
数据点中的value表示具体的值,其值为JSON对象,可以为整型、浮点型、字符串多种类型。如果value部分用双引号括起来,则其在设备云存储为字符串,如果不用双引号括起来,则其表示数值。字符编码现在只支持UTF-8。
新增数据点支持如下简写方式。在请求的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 |
|
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。
POST /devices/509224485/datapoints?type=5 HTTP/1.1
api-key:=Bos9PLTvzVDRUwR=lH7sGWLvh4= Host:api.heclouds.com Content-Length:9,;temp,26
POST http://api.heclouds.com/devices/509224485/datapoints?type=5 HTTP/1.1api-key:=Bos9PLTvzVDRUwR=lH7sGWLvh4= Host:api.heclouds.comContent-Length:9,;temp,28
发送内容中,空格占一个字符
*请求方法:POST
*URL:
*APIkey:=Bos9PLTvzVDRUwR=lH7sGWLvh4=
HTTP请求参数:,;temp,32
直接用USR软件也可以进行调试
此处的,;一定不能少
删除,;之后数据上传出现错误
,
在同一个产品(198366)下面,可以同时有两个不同的设备1,2.
topic的发布可以是Dev1或者Dev2,而且这两个设备可以不用订阅任何topic就可以发布,此时产品(198366)相当于一个中转站和守门员,只要设备连接上了中转站,就可以发布topic或者订阅topic。
topic的订阅只要是同一个产品(198366)下面就可以订阅,而且订阅的接收消息是只接收订阅之后发布的,对于在订阅之前发布的消息,不会接收。如果设备2只是订阅了topic2,那么设备2绝对不会收到来自topic1的发布消息
4-2). 开发板资料、例程代码在哪里下载
答:社区->开发板专区
转载地址:http://tavhn.baihongyu.com/