Home Assistant

Home Assistant是一个IoT设备的集中管理平台,他可以解决各家产品相互不兼容的问题。

我用的最多的设备是米家,其次是易微联,还有少量的其他品牌的产品,另外还有一些自己DIY的设备,比如WLED,ESP8266的继电器等等。

这些品牌都互不兼容,或者蹩脚兼容。好在这些品牌几乎都能被Home Assistant所支持,或者说大家都符合相关IoT标准。

丢弃米家接口

我一直都是通过对https://api.io.mi.com/app接口进行抓包,而后将数据rc4加解密,直接对米家APP的接口进行读写操作。这套流程很麻烦,涉及到抓包,签名,授权,数据加解密等各个环节。

[抓包米家app文章] 米家"智能"设备折腾 模拟米家协议

麻烦是麻烦些,因为是直接操作的米家APP接口,好处是相当稳定。随着手机抓包的越来越难,加之有个别新的设备抓包数据莫名其妙的无法解密,比如最新的人体传感器2S,所以我决定弃用解密米家APP的方案。

即使数据可以解密,这个方法也不是长久之计,说不定哪天一更新就不能用了,所以我决定扔掉用了几年的米家接口。

请勿索要米家APP接口协议,因为这涉及加解密,其实GITHUB上有,我就是参考的别人的代码,也可已参考上文完整的思路已经给出了

Home Assistant REST API

REST API是Home Assistant另外一个非常大的特点,别的品牌也有开放接口给开发者的,但是这些接口更多的是给产品、给厂商,并不是给普通用户的。

Home Assistant的API是面向用户的,你只需要会一点点基础编程就可以使用,最少也就3-4行代码就可以解决问题了。

比如,要把灯打开:

// php
$token = "xxxxxxxxxx"; // token
$id = "xxxxxxxxxx"; // 设备id
$url = "http://192.168.1.15:8123/api/services/light/turn_on"; // hass 服务器地址
$opts = ["http" => ["method" => "POST", "content" => json_encode(['entity_id' => $id], 320), "header" => "Authorization: Bearer {$token}"]];
file_get_contents($url, false, stream_context_create($opts));

加上一个cron就可以做一些自定义的控制了。

Home Assistant REST API 官方文档:

HA的API几乎可以做所有的操作,官方文档有详细实例。
https://developers.home-assistant.io/docs/api/rest/

开启Home Assistant接口功能

API功能是Home Assistant系统默认就带的,只需在菜单administrator中开启高级模式,再在长期访问令牌中添加一个TOKEN就可以了。

注意生成了TOKEN要及时复制保存,关闭了alert就再也看不到了。

除了灯和开关 为什么找不到其他的控制方法?

灯和开关都可以找到demo,一搜一大堆。除了这两个方法之外就几乎再也找不别的方法实例了,github和官方文档都没有,难道所有人只操作灯和开关?

官方文档services方法这样写:

Returns an array of service objects. Each object contains the domain and which services it contains.

看了几遍我都没有明白,直到我把自己的services全部打印出来,里面把所有的域名,方法,属性全部列了出来。
只要按照里面的数据,构建自己的请求就可以了。

我做了4个方法:

  • light 控制灯
  • switch 控制开关
  • cover 控制电机(窗帘等)
  • text 控制小爱语音

如果有小爱,是有一个偷懒的办法的,只要一个text就够了,所有的操作都让小爱去干就可以了,比如关闭4个灯:
light(灯0, off),light(灯1, off),light(灯2, off),light(灯3, off)

text(小爱同学,关闭所有的灯。)

标签: Home Assistant, 智能家居, mijia, 米家, api, wled, lot, 易微联

添加新评论