请选择 进入手机版 | 继续访问电脑版

『瀚思彼岸』» 智能家居第一站

 找回密码
 立即注册
查看: 2576|回复: 107

[教程系列] Node Red 系列教程之五 深入了解HomeAssistant REST API

  [复制链接]

12

主题

213

帖子

1372

积分

论坛技术达人

积分
1372
金钱
1149
HASS币
0

教程狂人

QQ
发表于 2018-6-9 18:02:07 | 显示全部楼层 |阅读模式
本帖最后由 alei643 于 2018-6-9 18:02 编辑

是时候来点干货了,本篇教程主要是帮大家了解HA REST API的语法结构,调用原理,借助HA提供的JSON数据接口和Node Red设计工具开发更加灵活可控的自动化流程

基础知识:HA REST API官方文档             REST API介绍

HA官方的API 调用方式:

1、curl命令行:        

curl -X GET \
-H "x-ha-access: YOUR_PASSWORD" \
-H "Content-Type: application/json" \
http://IP_ADDRESS:8123/ENDPOINT

2、Python编程语言:

from requests import get
url = 'http://localhost:8123/ENDPOINT'
headers = {'x-ha-access': 'YOUR_PASSWORD',
'content-type': 'application/json'}
response = get(url, headers=headers)
print(response.text)

3、HTTP请求测试工具:

http://IP_ADDRESS:8123/api/<API命令>?api_password=YOUR_PASSWORD
可以使用HTTP在线POST、GET测试工具按照API文档的命令格式进行测试

HA REST API 命令介绍:

1、GET /api/     获取API的状态
2、GET /api/config       以JSON数据格式返回HA的配置信息
3、GET /api/discover_info      以JSON数据格式返回HA的主要配置信息
4、GET /api/events       获取HA的日志
5、GET /api/services     获取HA所有的服务信息
6、GET GET /api/history/period/<timestamp>       获取指定时间段内的HA历史信息
7、GET /api/states        获取每个HA实体的状态信息
8、GET /api/states / <entity_id>       获取指定实体的状态信息
9、GET /api/error_log        获取HA的错误日志
10、GET / api/camera_proxy/camera.<entity_id>        获取指定摄像机的图像
11、POST / api / states / <entity_id>        更新指定实体的状态信息
12、POST /api/events/<event_type>        更新日志信息,可以传递JSON格式数据
13、POST/api/services/<domain> / <service>       调用HA的服务,可以传递JSON数据
14、POST /api/template        更新模板数据
15、POST / api / event_forwarding  转发日志
16、DELETE / api / event_forwarding       取消日志转发

如果对REST API、HTTP、JSON等技术不是很了解的,上面罗列的这些东西就跟看天书似的,没关系,让我们借助Node Red尝试几个基本API命令,了解一下HA REST API的用法。

1、在Node Red中创建一个HTTP站点

首先我们按照图片的样式建立一个HTTP站点的Flow,并设置HTTP输入节点的参数,在template节点中按图三输入HTLM代码,部署成功后,打开浏览器访问http://你的Node Red地址:端口号/homeassistant,如果没有错误发生,浏览器将解析template节点中的html代码。

在这个Flow中,使用Http In节点侦听请求,当收到浏览器发送的Http请求后,解析Template中的Html代码,再通过Http Response节点反馈给浏览器
{94AE5F20-C4D1-4606-8E87-2AA253B4CDFA}.bmp 1.png 2.png

2、使用GET方法请求HA的config信息

下面这个Flow是一个标准的GET方法,该Flow被执行后,HA将以JSON数据格式返回HA的配置信息,返回的数据中包含HA当前配置文件开启的组件,配置目录,经纬度等。Http Request节点的URL地址需要按http://HA地址:端口号/api/config?api_password=你的HA密码格式填写。除了使用GET /api/config的方法,大家还可以使用上方API列表中的所有GET进行同样测试,测试时,需要将URL地址中的/api/config替换掉。
5.png
7.png

3、通过HA的REST API打开灯

通过第二个例子的测试,我们知道GET是向HA请求数据,仅依靠GET方法是无法控制HA设备的,比如如果要打开灯,我们必须要向HA发送数据,告诉HA要打开哪个灯,也就是说向HA提交灯的entity_id,在这里需要用到POST方法。Node节点需要用到FunctionHttp Request,设置方法参考图片。部署完成后,可以通过点击时间戳节点的虚拟按键,测试是否可以正常打开对应的灯。
11.png 22.png 333.png


最后分享一下这三个例子的Flow代码


1、
游客,如果您要查看本帖隐藏内容请回复

2、
游客,如果您要查看本帖隐藏内容请回复

3、
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 4金钱 +60 收起 理由
gzroc + 10 厉害了word楼主!
Roger + 20 我来瀚思就为看你!
neroxps + 10 膜拜大神!
Jones + 20 膜拜大神!

查看全部评分

回复

使用道具 举报

87

主题

2643

帖子

8520

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
8520
金钱
5832
HASS币
54
发表于 2018-6-9 19:19:14 | 显示全部楼层
就喜欢楼主的node red系列教程
回复

使用道具 举报

6

主题

171

帖子

691

积分

论坛分享达人

积分
691
金钱
520
HASS币
0
发表于 2018-6-9 21:09:20 | 显示全部楼层
就喜欢楼主的node red系列教程
回复

使用道具 举报

2

主题

192

帖子

890

积分

高级会员

Rank: 4

积分
890
金钱
698
HASS币
0
发表于 2018-6-9 21:36:08 | 显示全部楼层
谢谢分享啊
回复

使用道具 举报

0

主题

69

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
金钱
249
HASS币
0
发表于 2018-6-9 23:22:59 | 显示全部楼层
感谢分享
回复

使用道具 举报

2

主题

116

帖子

824

积分

高级会员

Rank: 4

积分
824
金钱
708
HASS币
0
发表于 2018-6-10 02:17:48 | 显示全部楼层
群晖装不上这个插件
回复

使用道具 举报

9

主题

219

帖子

1142

积分

论坛积极会员

积分
1142
金钱
923
HASS币
0
发表于 2018-6-10 04:22:14 来自手机 | 显示全部楼层
一样可以用在tasker上
回复

使用道具 举报

12

主题

213

帖子

1372

积分

论坛技术达人

积分
1372
金钱
1149
HASS币
0

教程狂人

QQ
 楼主| 发表于 2018-6-10 07:04:50 | 显示全部楼层
seamo 发表于 2018-6-10 02:17
群晖装不上这个插件

安装nodred方法很多,DOCKER、hass.io插件等等,选择一种就可以
回复

使用道具 举报

12

主题

213

帖子

1372

积分

论坛技术达人

积分
1372
金钱
1149
HASS币
0

教程狂人

QQ
 楼主| 发表于 2018-6-10 07:06:41 | 显示全部楼层
nuaawmy 发表于 2018-6-10 04:22
一样可以用在tasker上

正解!
回复

使用道具 举报

1

主题

155

帖子

621

积分

高级会员

Rank: 4

积分
621
金钱
466
HASS币
0
发表于 2018-6-10 08:23:41 | 显示全部楼层
支持 支持 支持 支持  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2018-12-12 19:52 , Processed in 0.244495 second(s), 44 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表