/*client.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#define PORT 80
#define REMOTE_IP "42.96.164.52" //api.yeelink.net = 42.96.164.52 //#define PORT 4321
//#define REMOTE_IP "192.168.1.104" // int GetCpuTemp() {
//char *GetCpuTemp() {
float GetCpuTemp() { int fd, size;
int temp = ;
char buffer[] = { };
fd = open("/sys/class/thermal/thermal_zone0/temp", O_RDONLY);
size = read(fd,buffer, sizeof(buffer));
close(fd);
int tmp;
// strcpy(tmp,buffer); temp = atoi(buffer);
float tf = atof(buffer);
printf("float temp = %2.2f\n", tf/); // printf("temp = %d\n",temp / 1000); // sprintf(tmp,"%d",temp / 1000);
// printf(" temp1 =%s\n",tmp);
// printf(" temp2 = %s\n",buffer); // return (temp/1000) ;
return (tf/);
} int main(int argc,char *argv[])
{
int s ;
struct sockaddr_in addr ;
char mybuffer[];
char *str1="POST /v1.0/device/19374/sensor/33945/datapoints HTTP/1.0\r\nHost: api.yeelink.net\r\nAccept: */*\r\n";
char *str2="U-ApiKey: 108968b03a7e9334b2aca7c45b199dee\r\nContent-Length: 15\r\nContent-type: application/json;charset=utf-8\r\n"; //
// 此处的Content-Length: 15是决定改善的数据的长度 = strlen("values":33.35) = 15
char *str3="\r\n";
char *str10;
printf("GetCpuTemp() = %2.2f\n",GetCpuTemp()); sprintf(str10,"{\"value\":%2.2f}\r\n",GetCpuTemp());
// str10 = "{\"value\":33.0}\r\n";
printf("str10 = %s\n", str10);
// char *str10="{\"value\":14}\r\n";
// printf("str10 = %s\n",str10); if( (s=socket(AF_INET,SOCK_STREAM,))< ) //IPV4 TCP
{
perror("socket");
exit();
}
else
{
printf("socket created .\n");
printf("socked id: %d \n",s);
} bzero(&addr,sizeof(addr));
addr.sin_family =AF_INET; //IPV4
addr.sin_port=htons(PORT); //SERVER PORT
addr.sin_addr.s_addr=inet_addr(REMOTE_IP); //SERVER IP if(connect(s,(struct sockaddr *)&addr,sizeof(addr))<)
{
perror("connect");
exit();
}
else
{
printf("connected ok!\n");
printf("remote ip:%s\n",REMOTE_IP);
printf("remote port:%d\n",PORT);
} bzero(mybuffer,sizeof(mybuffer)); //send http request
printf("tcp send start!--");
if(send(s,str1,strlen(str1),)<)
{
perror("send");
exit();
}
if(send(s,str2,strlen(str2),)<)
{
perror("send");
exit();
}
if(send(s,str3,strlen(str3),)<)
{
perror("send");
exit();
}
//body
if(send(s,str10,strlen(str10),)<)
{
perror("send");
exit();
} printf("tcp send ok!--"); recv(s ,mybuffer,sizeof(mybuffer),);
printf("%s\n",mybuffer);
printf("enter os"); while( )
{
bzero(mybuffer,sizeof(mybuffer));
recv(s ,mybuffer,sizeof(mybuffer),);
// printf("received:%s\n",mybuffer);
if (strlen(mybuffer) == ){ // if strlen(mybuffer) == 0, exit the loop
return ;
}
}
return ;
}

修改传递数据的数值参考自: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 上的展示数据如下图:

linux 下上传 datapoint数据到yeelink 修改版本的更多相关文章

  1. [原创] linux 下上传 datapoint数据到yeelink 【golang版本】同时上传2个数据点

    /* Create by sndnvaps<sndnvaps@gmail.com> * data: 2015-04-12* upload 2 datapoint to yeelink.ne ...

  2. [原创] linux 下上传 datapoint数据到yeelink 【golang版本】

    package main /* Create by sndnvaps<sndnvaps@gmail.com> * date : 2015-04-05 * upload datapoint ...

  3. Linux 下上传下载命令,SCP,SFTP,FTP

    scp 帮助命令: man scp scp功能: 下载远程文件或者目录到本地, 如果想上传或者想下载目录,最好的办法是采用tar压缩一下,是最明智的选择. 从远程主机 下载东西到 本地电脑 拷贝文件命 ...

  4. [转载]关于在Linux下上传代码至Github

    刚开始使用Github没多长时间,所以很多地方不太熟练,看到阿里云上有一篇文章写得不错,故转载过来. 转载自:https://www.aliyun.com/jiaocheng/122729.html ...

  5. Linux下不借助工具实现远程linux服务器上传下载文件

    # Linux下不借助工具实现远程linux服务器上传下载文件 ## 简介 - Linux下自带ssh工具,可以实现远程Linux服务器的功能- Linux下自带scp工具,可以实现文件传输功能 ## ...

  6. Linux下Rsync+sersync实现数据实时同步

    inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一. ...

  7. 上传RNA-seq数据到NCBI GEO数据库

    SRA - NCBI example - NCBI 要发文章了,审稿时编辑肯定会要求你上传NGS测序数据. 一般数据都是放在集群,不可能放在个人电脑上,因为有的数据大的吓人(几个T). 所以我们就建一 ...

  8. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  9. Linux下Rsync+Inotify-tools实现数据实时同步

    Linux下Rsync+Inotify-tools实现数据实时同步 注意:下面的三个案例都是rsync 每次都是全量的同步(这就坑爹了),而且 file列表是循环形式触发rsync ,等于有10个文件 ...

随机推荐

  1. Delphi中类的运行期TypeInfo信息结构说明

    Delphi中类的运行期TypeInfo信息结构说明 CnPack 开源软件项目 2007-09-19 21:55:58 Delphi中类的运行期TypeInfo信息结构说明作者:刘啸CnPack开发 ...

  2. C语言char s[] 和 char *s的差别

    C语言char s[] 和 char *s的差别,以下这个回答解说的非常清晰. The difference here is that char *s = "Hello world" ...

  3. [Network]Wireless and Mobile

    Wireless 1 Introduction 1.1 Elements 1. Wireless Hosts Wireless does not mean mobility. 2. Base Stat ...

  4. Android自己定义控件:老版优酷的三级菜单(效果图 + Demo)

    效果图: 制作思路: 1.先分析这个效果,事实上能够理解为把三级菜单分成level1,level2,level3,level1是始终显示的. 点击level1后,level2会出现:点击level2后 ...

  5. 【ALearning】第二章 Androidproject知识介绍

    本章介绍了主要的初步Androidproject成立了一个开发环境.为了Android意识的整体项目和理解.本章包含Android开发环境的搭建.第一Android工程Hello World与Andr ...

  6. MVC数组模型绑定

    ASP.NET MVC数组模型绑定   在ASP.NET MVC中使用Razor语法可以在视图中方便地展示数组,如果要进行数组模型绑定,会遇到索引断裂问题,如下示例: <input type=& ...

  7. UVa 11988 - Broken Keyboard (a.k.a. Beiju Text) 题解

    刘汝佳的题目,悲剧文本 -_-||| 这里使用vector<string>容器倒置记录数据,然后从后面输出就能够了. 难度就是不知道这种文档究竟哪里是開始输出,故此使用动态管理内存的容器比 ...

  8. 关于 typedef & typedef struct & typedef union理解 --写给不长脑子的我

    来源: http://zhidao.baidu.com/link?url=qxzkx5gaoCfnHnygYdzaLEWkC45JqNYYUk42eHHjB0yB3ZMgHv6lGjnq3CRfgQw ...

  9. setChecked方法触发onCheckedChanged监听器问题

    有时须要在程序初始化界面时,讲有些比如toggleButton等控件依照需求勾选,此时会发现,当我setChecked时会触发onCheckedChanged监听器,导致这部分代码被调用两次.解决方法 ...

  10. BGP拓扑错误模拟配置

    R1配置 --------------------------------------------- version 5.20, ESS 2207P45# sysname RT1# super pas ...