好记性不如铅笔头

linux, 操作系统, 树莓派

yeelink使用笔记:注册和API学习

最近在学习树莓派的时候看别人用到了yeelink这个网站,感觉蛮好玩的,自己也学习了一下。这里备注下:

YeeLink:

官网:【 http://www.yeelink.net/ 】

介绍:【 http://www.yeelink.net/developer/doc/11 】

使用YeeLink很简单,首先注册一个用户,然后就可以在自己的用户下建立若干个设备,每个设备下可以建立若干个传感器。这样就可以通过HTTP进行通讯了。如下图,这里作者在设备下面新建个【 读秒 】 传感器,用来学习YeeLink的API。

与【 读秒 】通讯:

YeeLlink的API非常简单易用,连接如下【 http://www.yeelink.net/developer/api 】,可以直接使用HTTP进行通讯,不过首先要获取自己的API KEY,这个获取如下图:

下面作者备份下3种通讯方法

使用【 soapUI 】:

soapUI的官网:【 http://www.soapui.org/ 】

soapUI关于http header的设置:【 http://www.soapui.org/SOAP-and-WSDL/adding-headers-and-attachments.html 】

下载和安装SoapUI作者就不贴图了,这里作者贴下如何简单的使用:

新建工程:

在工程下新建testsuite:


在testsuite下新建TestCase:


在testcase下新建teststep:


到这里我们就可以使用teststep进行API的学习了,这里作者举两个例子截图:

使用soapUI获取设备列表:

API的截图如下:

那么soapUI的teststep的设置如下图,要注意headers的tianjia:

上传数值到传感器:

首先要获得传感器的ID,以及传感器所属设备的ID,获取方式如下:

然后查看API的介绍,这里【 读秒 】传感器是数值型的,因此我们可以只关注数值型的API介绍:

需要注意的是这边关于上传间隔的要求,以及timestamp的处理。teststep的实现如下:

到这里,就可以运行teststep进行API学习了。

使用YeeLink自带工具:

地址如下:【 http://www.yeelink.net/developer/debug 】,就不在过多的介绍了。

使用curl命令:

API附带有curl命令的格式,也不过多介绍了,另外也可参考这篇文章的后半部分【 http://www.2fz1.com/?p=370 】

使用python:

可以使用python进行http交互,作者使用的是【 python3.3 的 urllib.request】,在网上搜索了很多资料,发现还是看API最方便了,参考链接如下 【 http://docs.python.org/3.3/library/urllib.request.html 】

这里就直接贴代码了:

import urllib.request

def addKeyToHeader(req):
	req.add_header("U-ApiKey","XXX");

def httpGet(str):
	req = urllib.request.Request(str,method="GET");
	addKeyToHeader(req);
	r = urllib.request.urlopen(req);
	print(req.full_url);
#	print(r.info());
#	print(r.geturl());
	print(r.read().decode('utf-8'));
		
def httpPost(str, data):
	req = urllib.request.Request(str,method="POST");
	addKeyToHeader(req);
	req.data = data.encode(encoding="utf-8");
	r = urllib.request.urlopen(req);
	print(req.full_url);
	print(req.data);
#	print(r.info());
#	print(r.geturl());
#	print(r.read().decode('utf-8'));
	print(r.status);
	
if __name__ == "__main__":
	print("GetDevices:");
	httpGet("http://api.yeelink.net/v1.0/devices");
	
	print("GetSensors Of Device 8060:");
	httpGet("http://api.yeelink.net/v1.0/device/8060/sensors");
	
	print("Upload Data to Sensor 12798:");
	httpPost("http://api.yeelink.net/v1.0/device/8060/sensor/12798/datapoints","{\"value\":80}");

设置【 读秒 】传感器的数据:

这里我们使用python来模拟一个真实的传感器在上传数据,每隔一段时间将当前的秒数上传到传感器中,代码如下:

import urllib.request
import time
import random

def getCurrSeconds():
	return time.strftime("%S", time.localtime());

def addKeyToHeader(req):
	req.add_header("U-ApiKey","XXXX");
	
def httpPost(str, data):
	req = urllib.request.Request(str,method="POST");
	addKeyToHeader(req);
	req.data = data.encode(encoding="utf-8");
	r = urllib.request.urlopen(req);
	print(data);
	
if __name__ == "__main__":
	print("Upload Data to Sensor 12819:");
	
	while 1:
		try:
			httpPost("http://api.yeelink.net/v1.0/device/8060/sensor/12819/datapoints","{\"value\":" + getCurrSeconds() + "}");
			time.sleep(random.randint(30,60));
		except:
			print("Exception Occured,Sleep More");
			time.sleep(300);

 截图如下:

不过最后作者发现一个问题,就是经常性的报406错误,即上传间隔太紧密了,但是作者调低了上传间隔,仍然有问题。还请路过的各位大牛指点迷津。

Leave a Reply

17 + 1 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据