linux下向yeelink添加数据点

http://blog.csdn.net/liang890319/article/details/8615666


初步简单的实现 并不完整

linux下最简单的实现方式就是curl来实现

请求实例 (运用curl):
curl --request POST --data-binary @datafile.txt --header "U-ApiKey: YOUR_API_KEY_HERE" http://api.yeelink.net/v1.0/device/12/sensor/3/datapoints
需要在HTTP Header中增加API Key来授权写入操作, 具体请参照API Key. 支持一次传送一个数据或者批量上传.



这里的代码是纯c实现的

为了将来方便移植到lwip

目前函数都已经修改

这是最基本的测试


三个文件

client.c  发送http请求给服务器

server.c 用来测试client发送的数据对不对

makefile用来编译上面的两个文件

使用时之需要执行client.c即可 没写退出函数 所以暂时用 ctrl+c结束进程


使用时先make

然后./client



client.c  发送http请求给服务器

  1. /*client.c*/  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <string.h>  
  5. #include <netinet/in.h>  
  6. #include <arpa/inet.h>  
  7. #include <unistd.h>  
  8. #include <fcntl.h>  
  9. #include <sys/stat.h>  
  10. #include <sys/types.h>  
  11. #include <sys/socket.h>  
  12. #define PORT 80  
  13. #define REMOTE_IP "202.136.56.203"  
  14.   
  15. //#define PORT 4321  
  16. //#define REMOTE_IP "192.168.1.104"  
  17.   
  18. int   main(int argc,char *argv[])  
  19. {     
  20.    int s ;  
  21.    struct sockaddr_in addr ;  
  22.     char mybuffer[256];  
  23.     char *str1="POST /v1.0/device/1847/sensor/2326/datapoints HTTP/1.0\r\nHost: api.yeelink.net\r\nAccept: */*\r\n";  
  24.     char *str2="U-ApiKey: c3b3d0671f3d962ee2b8aaa1cece81\r\nContent-Length: 12\r\nContent-type: application/json;charset=utf-8\r\n";  
  25.     char *str3="\r\n";  
  26.     char *str10="{\"value\":14}\r\n";  
  27.   
  28.    if( (s=socket(AF_INET,SOCK_STREAM,0))<0 )  //IPV4 TCP  
  29.    {  
  30.       perror("socket");  
  31.       exit(1);  
  32.    }  
  33.    else  
  34.    {  
  35.         printf("socket created .\n");  
  36.         printf("socked id: %d \n",s);  
  37.     }  
  38.   
  39.    bzero(&addr,sizeof(addr));  
  40.    addr.sin_family =AF_INET;  //IPV4  
  41.    addr.sin_port=htons(PORT); //SERVER PORT  
  42.    addr.sin_addr.s_addr=inet_addr(REMOTE_IP);  //SERVER IP  
  43.   
  44.    if(connect(s,(struct sockaddr *)&addr,sizeof(addr))<0)  
  45.    {  
  46.       perror("connect");  
  47.       exit(1);  
  48.    }  
  49.    else  
  50.    {  
  51.        printf("connected ok!\n");  
  52.        printf("remote ip:%s\n",REMOTE_IP);  
  53.        printf("remote port:%d\n",PORT);  
  54.     }  
  55.   
  56.     bzero(mybuffer,sizeof(mybuffer));  
  57.   
  58. //send http request  
  59.     printf("tcp send start!--");  
  60.    if(send(s,str1,strlen(str1),0)<0)  
  61.       {  
  62.          perror("send");  
  63.          exit(1);  
  64.       }  
  65.    if(send(s,str2,strlen(str2),0)<0)  
  66.       {  
  67.          perror("send");  
  68.          exit(1);  
  69.       }  
  70.    if(send(s,str3,strlen(str3),0)<0)  
  71.       {  
  72.          perror("send");  
  73.          exit(1);  
  74.       }  
  75. //body  
  76.    if(send(s,str10,strlen(str10),0)<0)  
  77.       {  
  78.          perror("send");  
  79.          exit(1);  
  80.       }  
  81.   
  82.    printf("tcp send ok!--");  
  83.   
  84.    recv(s ,mybuffer,sizeof(mybuffer),0);  
  85.    printf("%s\n",mybuffer);  
  86.    printf("enter os");  
  87.    while(1)  
  88.    {  
  89.          bzero(mybuffer,sizeof(mybuffer));  
  90.          recv(s ,mybuffer,sizeof(mybuffer),0);  
  91.   //       printf("received:%s\n",mybuffer);  
  92.    }  
  93. }  


server.c 用来测试client发送的数据对不对

  1. /*server.c*/  
  2.   
  3. #include <sys/types.h>  
  4. #include <sys/socket.h>  
  5. #include <stdio.h>  
  6. #include <stdlib.h>  
  7. #include <string.h>  
  8. #include <sys/ioctl.h>  
  9. #include <unistd.h>  
  10. #include <netinet/in.h>  
  11.   
  12. #define PORT            4321  
  13. #define BUFFER_SIZE     1024  
  14. #define MAX_QUE_CONN_NM 5  
  15.   
  16. int main()  
  17. {  
  18.     struct sockaddr_in server_sockaddr, client_sockaddr;  
  19.     int sin_size, recvbytes;  
  20.     int sockfd, client_fd;  
  21.     char buf[BUFFER_SIZE];  
  22.       
  23.     /*建立socket连接*/  
  24.     if ((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1)  
  25.     {  
  26.         perror("socket");  
  27.         exit(1);  
  28.     }  
  29.     printf("Socket id = %d\n",sockfd);  
  30.       
  31.     /*设置sockaddr_in 结构体中相关参数*/  
  32.     server_sockaddr.sin_family = AF_INET;  
  33.     server_sockaddr.sin_port = htons(PORT);  
  34.     server_sockaddr.sin_addr.s_addr = INADDR_ANY;  
  35.     bzero(&(server_sockaddr.sin_zero), 8);  
  36.       
  37.     int i = 1;/* 使得重复使用本地地址与套接字进行绑定 */  
  38.     setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));      
  39.       
  40.     /*绑定函数bind*/  
  41.     if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))== -1)  
  42.     {  
  43.         perror("bind");  
  44.         exit(1);  
  45.     }  
  46.     printf("Bind success!\n");  
  47.       
  48.     /*调用listen函数*/  
  49.     if (listen(sockfd, MAX_QUE_CONN_NM) == -1)  
  50.     {  
  51.         perror("listen");  
  52.         exit(1);  
  53.     }  
  54.     printf("Listening....\n");  
  55.       
  56.     /*调用accept函数,等待客户端的连接*/  
  57.     if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size)) == -1)  
  58.     {  
  59.         perror("accept");  
  60.         exit(1);  
  61.     }  
  62.       
  63.     /*调用recv函数接收客户端的请求*/  
  64. while(1){  
  65.     memset(buf , 0, sizeof(buf));  
  66.     if ((recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0)) == -1)  
  67.     {  
  68.         perror("recv");  
  69.         exit(1);  
  70.     }else{  
  71.     printf("Received a message: %s\n", buf);  
  72.     }  
  73. }  
  74.   
  75. close(sockfd);  
  76. exit(0);  
  77. }  


makefile用来编译上面的两个文件


  1. EXEC1 = server  
  2. EXEC2 = client  
  3. OBJS1 = server.o  
  4. OBJS2 = client.o  
  5. HEADERS =  
  6.   
  7. CC = gcc  
  8. INC =  
  9. CFLAGS = ${INC} -g   
  10.   
  11. all:${EXEC1} ${EXEC2}  
  12. ${EXEC1} : ${OBJS1}  
  13.     ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJS1}   
  14.   
  15. ${OBJS1} : ${HEADERS}  
  16.   
  17. ${EXEC2} : ${OBJS2}  
  18.     ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${OBJS2}   
  19.   
  20. ${OBJS2} : ${HEADERS}  
  21.   
  22. .PHONY : clean  
  23. clean :  
  24.     -rm -f ${OBJS1} ${EXEC1}  
  25.     -rm -f ${OBJS2} ${EXEC2}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值