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 "42.96.164.52" //api.yeelink.net = 42.96.164.52 14 15 //#define PORT 4321 16 //#define REMOTE_IP "192.168.1.104" 17 18 19 // int GetCpuTemp() { 20 //char *GetCpuTemp() { 21 float GetCpuTemp() { 22 23 int fd, size; 24 int temp = 0; 25 char buffer[15] = { }; 26 fd = open("/sys/class/thermal/thermal_zone0/temp", O_RDONLY); 27 size = read(fd,buffer, sizeof(buffer)); 28 close(fd); 29 int tmp; 30 // strcpy(tmp,buffer); 31 32 temp = atoi(buffer); 33 float tf = atof(buffer); 34 printf("float temp = %2.2f ", tf/1000); 35 36 // printf("temp = %d ",temp / 1000); 37 38 // sprintf(tmp,"%d",temp / 1000); 39 // printf(" temp1 =%s ",tmp); 40 // printf(" temp2 = %s ",buffer); 41 42 // return (temp/1000) ; 43 return (tf/1000); 44 } 45 46 47 48 int main(int argc,char *argv[]) 49 { 50 int s ; 51 struct sockaddr_in addr ; 52 char mybuffer[256]; 53 char *str1="POST /v1.0/device/19374/sensor/33945/datapoints HTTP/1.0 Host: api.yeelink.net Accept: */* "; 54 char *str2="U-ApiKey: 108968b03a7e9334b2aca7c45b199dee Content-Length: 15 Content-type: application/json;charset=utf-8 "; //
// 此处的Content-Length: 15是决定改善的数据的长度 = strlen("values":33.35) = 15 55 char *str3=" "; 56 char *str10; 57 printf("GetCpuTemp() = %2.2f ",GetCpuTemp()); 58 59 sprintf(str10,"{"value":%2.2f} ",GetCpuTemp()); 60 // str10 = "{"value":33.0} "; 61 printf("str10 = %s ", str10); 62 // char *str10="{"value":14} "; 63 // printf("str10 = %s ",str10); 64 65 if( (s=socket(AF_INET,SOCK_STREAM,0))<0 ) //IPV4 TCP 66 { 67 perror("socket"); 68 exit(1); 69 } 70 else 71 { 72 printf("socket created . "); 73 printf("socked id: %d ",s); 74 } 75 76 bzero(&addr,sizeof(addr)); 77 addr.sin_family =AF_INET; //IPV4 78 addr.sin_port=htons(PORT); //SERVER PORT 79 addr.sin_addr.s_addr=inet_addr(REMOTE_IP); //SERVER IP 80 81 if(connect(s,(struct sockaddr *)&addr,sizeof(addr))<0) 82 { 83 perror("connect"); 84 exit(1); 85 } 86 else 87 { 88 printf("connected ok! "); 89 printf("remote ip:%s ",REMOTE_IP); 90 printf("remote port:%d ",PORT); 91 } 92 93 bzero(mybuffer,sizeof(mybuffer)); 94 95 //send http request 96 printf("tcp send start!--"); 97 if(send(s,str1,strlen(str1),0)<0) 98 { 99 perror("send"); 100 exit(1); 101 } 102 if(send(s,str2,strlen(str2),0)<0) 103 { 104 perror("send"); 105 exit(1); 106 } 107 if(send(s,str3,strlen(str3),0)<0) 108 { 109 perror("send"); 110 exit(1); 111 } 112 //body 113 if(send(s,str10,strlen(str10),0)<0) 114 { 115 perror("send"); 116 exit(1); 117 } 118 119 printf("tcp send ok!--"); 120 121 recv(s ,mybuffer,sizeof(mybuffer),0); 122 printf("%s ",mybuffer); 123 printf("enter os"); 124 125 while(1 ) 126 { 127 bzero(mybuffer,sizeof(mybuffer)); 128 recv(s ,mybuffer,sizeof(mybuffer),0); 129 // printf("received:%s ",mybuffer); 130 if (strlen(mybuffer) == 0 ){ // if strlen(mybuffer) == 0, exit the loop 131 return 0; 132 } 133 } 134 return 0; 135 }
修改传递数据的数值参考自:http://home.eeworld.com.cn/my/space-uid-487728-blogid-236541.html
编译方法
gcc -o upload_cpu_temp client.c
./upload_cpu_temp
运行效果如下图:
上传float数值到yeelink
yeelink 上的展示数据如下图: