Philips的hue灯泡算是智能灯泡的鼻祖了,这次就来玩玩这个哈。
meethue
meethue.com是hue的门户啦,有各种的使用说明。开发者的入口在哪呢...找了半天发现右边有竖着的developer...
好吧,进去以后直奔Get started。大概扫一圈以后发现这个hue的bridge设计的还真不错,直接通过http就能访问到api的测试后台。
- 认证
只要改url和body就能直接控制灯泡。然后发现都是unauthorized。于是回来看文档,发现需要按一下bridge的button,然后立刻发个下面的请求就能认证上。之后的所有请求就都ok了。以后就可以用/api/newdeveloper/lights/1/state
来控制这个id为1的灯泡啦。很标准的JSON RESTful API,设计的不错!
不过这个不意味着我跑到任何一家有hue的地方,按一下按钮执行一个程序以后就可以躲门口随便玩他家的灯泡了...
POST http://<bridge ip address>/api
{"devicetype":"test user","username":"newdeveloper"}
- 修改灯泡状态
每个灯泡都有一个url作为它的endpoint,可以对它肆意GET POST PUT。比如让它打开就curl一下。色温(sat)亮度(bri)和颜色(hue)控制起来超容易!
url -X PUT -H 'Content-Type: application/json' -d '{"on":false, "sat":255, "bri":255,"hue":10000}' http://192.168.31.xxx/api/newdeveloper/lights/1/state
MYO控制HUE
哈,MYO又出现了!上次只拿了pose的数据,这次我想让灯泡跟着挥手变换颜色,那就要获得当前手臂的角度啦。代码的区别只是多加个回调就好啦。能拿到一个4维的数据。xyzw。
@Override
public void onOrientationData(Myo myo, long timestamp, Quaternion rotation) {
((TextView) findViewById(R.id.hello)).setText(
"Z:" + rotation.z() + " W:" + rotation.w() + " X:" + rotation.x() + " Y:" + rotation.y());
}
通过观察发现挥手的时候变换的很多的是w轴,而且右手挥动的过程正好是-0.5到0.5的过程。好啦,现在把这个数据随时记录下来,每秒钟发个PUT过去改灯泡的状态。咱就用OkHttp搞好啦,类似这样。
String updateHue(int bright, int hue) throws IOException {
OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(JSON,
"{\"on\":true,\"bri\":150}");
Request request = new Request.Builder()
.url("http://192.168.31.xxx/api/newdeveloper/lights/1/state")
.post(body)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
Party!
好啦,就这样!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。