『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 205728|回复: 649

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

  [复制链接]

23

主题

658

帖子

4643

积分

元老级技术达人

积分
4643
金钱
3970
HASS币
30

教程狂人

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

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

[u]https://developers.home-assistant.io/docs/en/external_api_rest.html)-------------[rest-api介绍](https://www.zhihu.com/question/28557115)">基础知识:[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html">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、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-discovery-info">GET /api/discover_info      以JSON数据格式返回HA的主要配置信息
4、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-events">GET /api/events       获取HA的日志
5、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-services">GET /api/services     获取HA所有的服务信息
6、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-history-period-lt-timestamp">GET GET /api/history/period/<timestamp>       获取指定时间段内的HA历史信息
7、https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-states">GET /api/states        获取每个HA实体的状态信息
8、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-states-lt-entity-id">GET /api/states / <entity_id>       获取指定实体的状态信息
9、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-error-log">GET /api/error_log        获取HA的错误日志
10、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#get-api-camera-proxy-camera-lt-entity-id">GET / api/camera_proxy/camera.<entity_id>        获取指定摄像机的图像
11、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#post-api-states-lt-entity-id">POST / api / states / <entity_id>        更新指定实体的状态信息
12、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#post-api-events-lt-event-type">POST /api/events/<event_type>        更新日志信息,可以传递JSON格式数据
13、POST/api/services/<domain> / <service>       调用HA的服务,可以传递JSON数据
14、POST /api/template        更新模板数据
15、POST / api / event_forwarding  转发日志
16、[u]https%3A//developers.home-assistant.io/docs/en/external_api_rest.html#delete-api-event-forwarding">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 膜拜大神!
+ 20 膜拜大神!

查看全部评分

回复

使用道具 举报

123

主题

4664

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

10

主题

276

帖子

1192

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

1

主题

265

帖子

2577

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

0

主题

82

帖子

598

积分

高级会员

Rank: 4

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

使用道具 举报

2

主题

136

帖子

1024

积分

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

28

主题

559

帖子

4413

积分

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

23

主题

658

帖子

4643

积分

元老级技术达人

积分
4643
金钱
3970
HASS币
30

教程狂人

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

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

使用道具 举报

23

主题

658

帖子

4643

积分

元老级技术达人

积分
4643
金钱
3970
HASS币
30

教程狂人

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

正解!
回复

使用道具 举报

1

主题

178

帖子

936

积分

高级会员

Rank: 4

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

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-22 01:22 , Processed in 0.269963 second(s), 38 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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