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

/* Create by sndnvaps<[email protected]>
* data: 2015-04-12* upload 2 datapoint to yeelink.net at the same time * post by sndnvaps * hold on https://github.com/sndnvaps/MyRasPi*/ //upload_client.go 

import (
   "fmt"
   "io/ioutil"
   "net"
   "time"
   "os"
   "strconv"
)

func checkError(err error) {
     if err != nil {
        fmt.Fprintf(os.Stderr, "Fatal error: %s\n",err.Error())
        os.Exit(1)

        }
}

func GetCpuTemp() (t float32) {
      tf ,err := os.Open("/sys/class/thermal/thermal_zone0/temp")
      if err != nil {
      fmt.Printf("Read Cpu file error = %s\n",err.Error())
      }
      defer tf.Close()
      data := make([]byte,5)
      tf.Read(data)
      data_temp := string(data)
      temp, _ := strconv.Atoi(data_temp)
      var tt float32
      tt = float32(temp)
      fmt.Printf("Cpu temp  = %2.2f\n", tt/1000.00)

      return (tt/1000.00)

}

var c chan int

func yeelink_upload(device_id, sensor_id string, val float32) {
        //Connet the api.yeelink.net
        //REMOTE_IP 42.96.164.52
        //PORT      80

        conn, err := net.Dial("tcp","42.96.164.52:80")
        defer conn.Close()
        checkError(err)
        fmt.Printf("Post Request \n")
//        fmt.Printf("Cpu temp = %2.2f\n", GetCpuTemp())

        time.Sleep(time.Second)

         post := fmt.Sprintf("POST /v1.0/device/%s/sensor/%s/datapoints HTTP/1.0\r\nHost: api.yeelink.net\r\nAccept: */*\r\n",device_id,sensor_id);
         _ , err = conn.Write([]byte(post));

    if err != nil {
           fmt.Printf("Sent Requset ok\n")
        }

        fmt.Printf("Send the API-keys\n")
        time.Sleep(time.Second)

    // send the API-key
     _ , err = conn.Write([]byte("U-ApiKey: 108968b03a7e9334b2aca7c45bXXXXXX\r\nContent-Length: 15\r\nContent-type: application/json;charset=utf-8\r\n"))        //此处填写你自己的API-key
         checkError(err)
        time.Sleep(time.Second)
     //send the ‘\r\n‘
     _ , err = conn.Write([]byte("\r\n"))
       checkError(err)

      //send the value
      time.Sleep(time.Second)
      var value string

      value = fmt.Sprintf("{\"value\":%2.2f}\n\n",val)     //数据为 xx.xx 

     //_ , err = conn.Write([]byte("{\"value\":13.14}\r\n"))
       _, err = conn.Write([]byte(value))

         checkError(err)
        time.Sleep(time.Second)
      result, err := ioutil.ReadAll(conn)
      checkError(err)
      fmt.Println(string(result))
        c <- 1
   // os.Exit(1)
}

func main() {
          device_id := "XXXXX"     //设备id
          sensor_id := "XXXXX"    //传感器id
          sensor_id_2 := "XXXXX" //传感器id_2
          val := GetCpuTemp()     //此处的val只用于测试, 如果你有其它的参数,可以自行修改, val 类型为 float32, 长度需要5位,即xx.xx, 33.33 ,带2位小数
          c = make(chan int)

        go  yeelink_upload(device_id,sensor_id,val)    //
         // time.Sleep(time.Second * 15)
        go  yeelink_upload(device_id,sensor_id_2, val)
          //return
         <- c
         <- c
}

实现同时上传二个Datapoint数据到yeelink.net

原理是使用golang chanel

运行效果如下图:

时间: 2024-08-10 23:30:00

[原创] linux 下上传 datapoint数据到yeelink 【golang版本】同时上传2个数据点的相关文章

linux 下上传 datapoint数据到yeelink 修改版本

/*client.c*/ /* * 原代码地址: http://blog.csdn.net/liang890319/article/details/8615666 * */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #inclu

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

package main /* Create by sndnvaps<[email protected]> * date : 2015-04-05 * upload datapoint to yeelink.net * origin post by sndnvaps * hold on https://github.com/sndnvaps/MyRasPi */ import ( "fmt" "io/ioutil" "net" &qu

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

inotify 的同步备份机制有着缺点,于是看了sersync同步,弥补了rsync的缺点.以下转自:http://www.osyunwei.com/archives/7447.html 前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个

Linux下Rsync+Inotify-tools实现数据实时同步-(转载)

说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.osyunwei.com目录实时同步到目标服务器的/home/www.osyunwei.com下 具体操作: 第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作 一.分别在两台在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/

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

说明: 一.先安装好rsync的服务端和客户端: http://douya.blog.51cto.com/6173221/1573968 二.安装,使用inotify-tools,实时同步 1.查看服务器内核是否支持inotify ll /proc/sys/fs/inotify   #列出文件目录,出现下面的内容,说明服务器内核支持inotify -rw-r--r-- 1 root root 0 Mar  7 02:17 max_queued_events -rw-r--r-- 1 root r

Linux下mongodb安装及数据导入导出教程

Linux下mongodb安装及数据导入导出教程 #查看linux发行版本 cat /etc/issue #查看linux内核版本号 uname -r 一.Linux下mongodb安装的一般步骤 1.到mongodb的官网(https://www.mongodb.org/downloads) 下载相应你系统的安装包,拷贝(能够用ftp工具如winscp)到你的linux系统上面. 2.解压相应的安装包 命令例如以下:tar zxvf mongodb-linux-x86_64-3.0.4.tgz

[原创] Linux下几种文件传输命令 sz rz sftp scp介绍

Linux下几种文件传输命令 sz rz sftp scp介绍 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具.由于它是基于SSH的,会在传输过程中对用户的密码.数据等敏感信息进行加密,因此可以有效的防止用户信息在传输的过程中被窃取,比FTP有更高的安全性.在功能方面与FTP很类似,不仅可以传输文件数据,而且可以进行远程的文件管理(如建立,删除,查看文件列表等操作).Sftp与ftp虽然只有一字之差,但基于的传输协议却是不同的.因此不能用sftp client去连

(原创)linux下Microsoft/cpprestsdk支持https(server)

原创,转载请标明源地址 之前看网上一堆的资料说Microsoft/cpprestsdk不支持https或者说只支持window下的https,差点就被误导了,没办法,只好自己去翻了下源代码 先说明下linux版本把,centos7 创建ssl证书啥的,网上一堆的资料,这边就不再说了,直接贴源代码了 #include <stdio.h>#include <cpprest/uri.h>#include <cpprest/http_listener.h>#include &l

linux下用tar进行数据备份

本机上数据的手工备份 Linux系统上配有功能强大的tar命令,可以灵活地备份数据. tar最初是为了制作磁带备份而设计的把文件和目录备份到磁带中,然后从磁带中提取或恢复文件. 当然,现在我们可以使用tar来备份数据到任何存储介质上. tar非常易于使用稳定可靠,而且在任何 Linux系统上都有这个命令.因此是最经常使用的备份工具. 1.使用tar命令备份数据的格式如下: 上述命令是将/home/html 目录下的所有文件打包成tar文件backup.tar. cvf是tar的命令参数. c代表