官方接口文档:https://developers.home-assistant.io/docs/api/rest
设想一种场景,当用户从家里离开,或者回到家里的时候,自动记录并提示用户回家或离家
本身 HomeAssistant 支持编写事件,但是再去学习 HomeAssistant 的语法规则,显然是不想的
所以这里使用 Python 直接编写程序,接入远程 api ,当事件发生时,执行自定义措施
下面的教程文章假定已经成功安装并运行了 HomeAssistant
获取秘钥
使用账户密码登录 HomeAssistant
后,点击左下角用户
将网页拉到最下面有一个选项 长期访问令牌
, 点击创建令牌
输入名称后即会出现一串字符串。请注意保管这串字符串
Python 请求 HomeAssistant 接口
注意,所有的请求中,都要携带两个请求头:
headers = {
"Authorization": "Bearer {}".format(api_key),
"Content-Type": "application/json"
}
其中 Authorization
是 Bearer api_key
这种形式
注意 Bearer
与 api_key
中间有空格,至于 api_key
就是第一步中获取的访问秘钥,也叫 长期访问令牌
获取HomeAssistant 配置信息
接口为: /api/config
,完整的路径是 http://xxxxx/api/config
, 如果 HomeAssistant
安装在本机上,那么就是使用:http://127.0.0.1:8123/api/config
接口
请求方式为: GET
注意添加两个请求头:
headers = {
"Authorization": "Bearer {}".format(api_key),
"Content-Type": "application/json"
}
python 代码示例:
需要定义自己的
api_key
和api_url
def _build_headers(hmap={}):
headers = {
"Authorization": "Bearer {}".format(api_key),
"Content-Type": "application/json"
}
for k, v in hmap:
headers[k] = v
return headers
def _get_config():
"""
首先获取一次运行配置,检测服务器是否正在运行
"""
res = requests.get("http://127.0.0.1:8123/api/config", headers = _build_headers())
if res.status_code != 200 :
print("get config faild")
return False
jres = json.loads(res.text)
print("res:" + str(jres))
return True
获取所有传感器状态
接口: /api/states
方法: GET
需要上文中提到的请求头
获取到的数据同样是 json 格式,这里回返回所有传感器状态数据,非常多,建议通过 id 获取单个传感器状态
获取单个传感器状态
接口: /api/states/<传感器id>
方法: GET
需要上文中提到的请求头
返回数据为 json
其中传感器id可以在 HomeAssistant
的管理员账户中查看到
如果不是管理员账户,则 获取所有传感器状态
会返回一个 Json Array
数据,每一个 item 中的 entity_id
即传感器id
想要单独获取某个传感器状态,使用这个 id 即可,以下是我检测手机是否在线的传感器id 数据示例:
{
"attributes": {
"device_class": "connectivity",
"friendly_name": "xiaomi10"
},
"context": {
"id": "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
"parent_id": null,
"user_id": null
},
"entity_id": "binary_sensor.xiaomi10",
"last_changed": "2020-09-03T00:15:41.075866+00:00",
"last_updated": "2020-09-03T00:15:41.075866+00:00",
"state": "off"
}
其中 state
表示处于关闭状态,如果 state 为 on
表示开启
既然能获取传感器状态了,那么轮询该接口,根据状态做判断即可实现自定义事件了
例如我所实现的场景是根据传感器得知用户回家或者离家状态,随后给自己手机发送通知
也可以用 Pushbear 给微信发条信息
如果需要Python控制开关,需要阅读官方HomeAssistant 官方文档,这份文档是会被更新的(最新的官方文档和某些镜像站的文档内容已经不同了)
只是文档是英文的,但也能从官方的伪代码中得知用途和请求方式