最近在学习树莓派的时候看别人用到了yeelink这个网站,感觉蛮好玩的,自己也学习了一下。这里备注下:
CONTENTS
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错误,即上传间隔太紧密了,但是作者调低了上传间隔,仍然有问题。还请路过的各位大牛指点迷津。
发表评论