alei643 发表于 2018-6-9 18:02:07

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

本帖最后由 alei643 于 2018-6-9 18:02 编辑

##是时候来点干货了,本篇教程主要是帮大家了解HA REST API的语法结构,调用原理,借助HA提供的JSON数据接口和Node Red设计工具开发更加灵活可控的自动化流程
###基础知识:(https://developers.home-assistant.io/docs/en/external_api_rest.html)             (https://www.zhihu.com/question/28557115)
### 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、(https://developers.home-assistan ... i_rest.html#get-api)   获取API的状态
>>2、(https://developers.home-assistan ... html#get-api-config)       以JSON数据格式返回HA的配置信息
>>3、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-discovery-info)      以JSON数据格式返回HA的主要配置信息
>>4、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-events)       获取HA的日志
>>5、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-services)   获取HA所有的服务信息
>>6、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-history-period-lt-timestamp)       获取指定时间段内的HA历史信息
>>7、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-states)      获取每个HA实体的状态信息
>>8、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-states-lt-entity-id)       获取指定实体的状态信息
>>9、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-error-log)      获取HA的错误日志
>>10、(https://developers.home-assistant.io/docs/en/external_api_rest.html#get-api-camera-proxy-camera-lt-entity-id)      获取指定摄像机的图像
>>11、(https://developers.home-assistant.io/docs/en/external_api_rest.html#post-api-states-lt-entity-id)      更新指定实体的状态信息
>>12、(https://developers.home-assistant.io/docs/en/external_api_rest.html#post-api-events-lt-event-type)      更新日志信息,可以传递JSON格式数据
>>13、(https://developers.home-assistan ... t-domain-lt-service)       调用HA的服务,可以传递JSON数据
>>14、(https://developers.home-assistan ... l#post-api-template)      更新模板数据
>>15、(https://developers.home-assistan ... pi-event-forwarding)转发日志
>>16、(https://developers.home-assistant.io/docs/en/external_api_rest.html#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`节点反馈给浏览器


>####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`替换掉。



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




最后分享一下这三个例子的Flow代码
1、**** Hidden Message *****
2、**** Hidden Message *****
3、**** Hidden Message *****

发表于 2018-6-9 19:19:14

就喜欢楼主的node red系列教程:lol

lmy8812 发表于 2018-6-9 21:09:20

就喜欢楼主的node red系列教程

ttbye 发表于 2018-6-9 21:36:08

谢谢分享啊

豆腐di青春 发表于 2018-6-9 23:22:59

感谢分享

seamo 发表于 2018-6-10 02:17:48

群晖装不上这个插件:'(:'(:'(:'(:'(:'(:'(:'(:'(

nuaawmy 发表于 2018-6-10 04:22:14

一样可以用在tasker上

alei643 发表于 2018-6-10 07:04:50

seamo 发表于 2018-6-10 02:17
群晖装不上这个插件

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

alei643 发表于 2018-6-10 07:06:41

nuaawmy 发表于 2018-6-10 04:22
一样可以用在tasker上

正解!

a137537763 发表于 2018-6-10 08:23:41

支持 支持 支持 支持
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Node Red 系列教程之五 深入了解HomeAssistant REST API