【2014-03-04】yeelink使用笔记:注册和API学习

[历史归档] 本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2014-03-04| 标题:yeelink使用笔记:注册和API学习 | 分类: 操作系统 / linux / 树莓派 | 标签:python && jython·yeelink
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错误,即上传间隔太紧密了,但是作者调低了上传间隔,仍然有问题。还请路过的各位大牛指点迷津。
更多推荐



所有评论(0)