- 使用类似tasker、IFTTT工具和HomeAssistant配合使用时,HomeAssistant新版本(0.76+)中增加了新的授权方式auth_providers,当使用不兼容旧版模式时,原有的所有配置会失效,采用新的授权方式下,使用tasker、IFTTT时会遇到无法方便获得授权的问题
- 此php用来解决授权问题,利用php服务端做授权认证,返回给客户端(tasker、IFTTT等)access_token信息
- 使用PHP语言编写服务端,便于快速部署(单文件)
- 配置简单,最小仅需配置文件最上方的webSite的值即可
- 安全性高,可以额外配置key值,增加一层保护(防止此url被泄露时出现access_token被截取)
- 安装配置任意php环境,且所在目录拥有写入权限
- 拷贝index.php文件至任意可访问目录(不建议修改文件名),且目录允许php写入文件(用于refresh_token的保存(加密存储))
- 编辑index.php文件,修改最上方“$webSite=”的值,改为HomeAssistant的刚问路径(支持http/https),如“https://home.xxxx.com:8123” 。key值可改可不改,为安全起见建议key值做配置(可任意定义)
- 【登录,网关服务端建立token】浏览器访问index.php文件,界面会自动跳转到HomeAssistant登录页,登录后php路径下会写入一个数据文件(文件名为10位的字母+数字),标识token获取成功
- 【获取token】浏览器访问index.php文件,使用get/post方式传值state=clientrequesttoken,如“ https://home.xxxx.com/index.php?state=clientrequest&key=123 ” ,浏览器输出json格式字符串的access_token值表示token获取成功。(如果之前的步骤配置了key值,这里访问http时需要携带key值的传参)
- 【调用RestAPI】浏览器访问index.php文件,使用get/post方式传值state=clientrequestapi,并同时携带requestapi参数,如“https://home.xxxx.com/index.php?state=clientrequestapi&key=123&requestapi=/api/config ”,正常情况下浏览器会返回json格式的字符串(同访问HomeAssistant时{https://home.xxxx.com:8123/api/config }返回的结果相同),相当于绕开auth认证替代了直接访问HomeAssistant完成REST API请求的过程
- Rest API的URL请求示例说明
-
7.1. GET方式,不带参数示例: https://home.xxxx.com/index.php?state=clientrequestapi&key=123&requestapi=/api/config
-
7.2. GET方式,带参数示例 https://home.xxxx.com/index.php?state=clientrequestapi&key=123&requestapi=/api/gpslogger%3fgps=123.456789,123.456789%26device=IPHONE%26accuracy=53.6%26battery=30%26provider=gps (其中问号?用%3代替,&连接符用%26代替)
-
7.3. POST方式,示例:https://home.xxxx.com/index.php?state=clientrequestapi&key=123&requestapi=/api/services/script/script_xxxxxxxx POST传值 :{"name":"张三"} header声明:application/json
-
index.php的请求参数说明(get方式):
- state(必填) : clientrequesttoken 或 clientrequestapi
- key(选填) : (配合二次认证使用)
- realtoken(配合state = clientrequesttoken 时使用):值为1时,返回真实的可直接使用的token(格式:token_type+' '+access_token);值为空时,返回HomeAssistant提供的token原形json字符串
- requestapi(配合state = clientrequestapi 时使用):调用HomeAssistant的REST API时,URL地址栏的路径+完整参数(get方式),如“api/config”、“api/states/device_tracker.xxxxx”