写在前面,方案有几个硬性要求:
1.homeassistant公网可以访问
2.搭建公网可访问的https的oauth2服务(个人认为这里难度对较高)
3.搭建公网可访问的网关服务器,将天猫开放平台的语义转换成HA的api,代理调用HA。
4.该方式目前只能自己搭自己用(技能只能在测试状态,无法发布)
我这里 2、3两个搭在一起,使用PHP完成,可以用任意语言替换。由于2、3难度较高,对没有代码能力且不理解oauth2的人来说属于修仙教程。 但是如果你跟我有一样的php+mysql环境,那就不会很复杂,直接复制我的代码,然后修改自己的设备列表即可!!
小白们如果上述条件都不具备,又想完美接入天猫精灵(飞利浦hue灯的方案只能把设备模拟成灯,控制命令不友好)。可以选择这个方案来接入 https://bbs.hassbian.com/thread-2919-1-1.html
当然,这么接入我认为也有一些好处:
1.以智能家居技能接入,不用在天猫精灵里另起技能名字,直接调用。
2.完完全全的接入,正规渠道,稳定可控。
3.能做到什么完全不受限制,全看天猫精灵的家居技能做到什么程度。
0.先发一张架构图
1.下载Oauth2和网关PHP代码
git clone https://github.com/bshaffer/oauth2-server-php.git -b php5.2-develop git clone https://github.com/c1pher-cn/tmall-bot-x1.git mv tmall-bot-x1/* .
git clone https://github.com/bshaffer/oauth2-server-php.git git clone https://github.com/c1pher-cn/tmall-bot-x1.git -b php5.3 mv tmall-bot-x1/* .
2.数据库建表
CREATE TABLE oauth_clients ( client_id VARCHAR(80) NOT NULL, client_secret VARCHAR(80) NOT NULL, redirect_uri VARCHAR(2000) NOT NULL, CONSTRAINT client_id_pk PRIMARY KEY (client_id)); CREATE TABLE oauth_access_tokens (access_token VARCHAR(40) NOT NULL, client_id VARCHAR(80) NOT NULL, user_id VARCHAR(255), expires TIMESTAMP NOT NULL,scope VARCHAR(2000), CONSTRAINT access_token_pk PRIMARY KEY (access_token)); CREATE TABLE oauth_authorization_codes (authorization_code VARCHAR(40) NOT NULL, client_id VARCHAR(80) NOT NULL, user_id VARCHAR(255), redirect_uri VARCHAR(2000) NOT NULL, expires TIMESTAMP NOT NULL, scope VARCHAR(2000), CONSTRAINT auth_code_pk PRIMARY KEY (authorization_code)); CREATE TABLE oauth_refresh_tokens ( refresh_token VARCHAR(40) NOT NULL, client_id VARCHAR(80) NOT NULL, user_id VARCHAR(255), expires TIMESTAMP NOT NULL, scope VARCHAR(2000), CONSTRAINT refresh_token_pk PRIMARY KEY (refresh_token)); CREATE TABLE oauth_users (username VARCHAR(255) NOT NULL, password VARCHAR(2000), first_name VARCHAR(255), last_name VARCHAR(255), CONSTRAINT username_pk PRIMARY KEY (username)); CREATE TABLE oauth_scopes ( scope VARCHAR(80) NOT NULL, is_default BOOLEAN, PRIMARY KEY (scope) ); CREATE TABLE IF NOT EXISTS `oauth_devices` ( `id` int(11) NOT NULL AUTO_INCREMENT,`user_id` varchar(255) NOT NULL,`deviceId` varchar(255) NOT NULL, `deviceName` varchar(255) NOT NULL, `jsonData` text NOT NULL, `devices` TEXT NOT NULL, `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `del` int(11) NOT NULL DEFAULT '0',`virtual` INT NOT NULL DEFAULT '0',`zone` VARCHAR( 255 ) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2; CREATE TABLE user_data ( id bigint not null auto_increment, user_id VARCHAR(255) NOT NULL, homeassistantURL VARCHAR(255) NOT NULL, homeassistantPASS VARCHAR(255) NOT NULL, user_name VARCHAR(255) NOT NULL, email VARCHAR(255), expires TIMESTAMP NOT NULL, fromwhere VARCHAR(20) NOT NULL, PRIMARY KEY (id), UNIQUE KEY inx_user_id(user_id) ); INSERT INTO oauth_clients (client_id, client_secret, redirect_uri) VALUES ("XXXXXXclientid", "XXXXXXsecret", "https://open.bot.tmall.com/oauth/callback");
3.修改配置文件
请按照你自己的数据库配置修改 homeassistant_conf.php
4.在天猫开放平台新建技能
用你的淘宝账号在https://open.bot.tmall.com登陆,新建技能
技能类型选择智能家居,上传图片和一些描述(因为技能无法发布,这里叫什么你随意)
账户授权链接 https://yourhost.com/authorize.php
ClientID XXXXXXclientid
Client Secret XXXXXXsecret
(XXXXXXclientid、XXXXXXsecret为前面自己设置的)
Access Token URL https://yourhost.com/token.php
开发者网关地址 https://yourhost.com/gate.php
(上面所有yourhost.com 替换成你自己网站的域名)
配置好了之后点击下一步,真机测试下面点开启真机测试,之后就可以在下放看到H5的配置页面。
到之前配置的账户授权连接
https://yourhost.com/authorize.php
当然,我这里写的非常简单,只做了一个确认按钮。
授权成功之后,如果没有报错,则天猫平台的页面会显示出你当前的设备列表(gate.php中配置的设备)。同时手机天猫精灵客户端也可以看到这些设备了。看到默认的设备列表说明这部ok了。
————————————————————————————————————————
这里如果出现:”Oauth token 返回不正确,请检查”或”参数值内容错误。,三秒后返回设备列表“
请修改Oauth2-PHP-Server的相关文件。
将oauth2-server-php/src/OAuth2中的Server.php中 ‘require_exact_redirect_uri’ => true,
修改为
‘require_exact_redirect_uri’ => false,
(require_exact_redirect_uri参数改为false)
————————————————————————————————————
凭借code获得token后即表示授权成功后你就可以看到你已经配置的设备列表
5.配置自己的设备列表
配置设备的方法现在已整合论坛的代码,支持多虚拟设备(传感器)
在这里修改你的hass地址和密码:你的域名/information.php
在这里管理你的设备列表:你的域名/discovery.php
因为将原有的账号体系去掉,所以第一次访问时看到登录按钮,点击即可通过。
完成hass域名密码配置后只要确认功能没问题,就可以把目录下的/information.php文件改成别的名字,比如information.php.back 这样避免外人通过这个页面拿到你的hass密码。
设置颜色 命令:把(客厅)的(落地灯)调成(白色)
设置亮度 命令:把(客厅)的(吸顶灯)亮度调到(80)【范围0-100】
打开 命令:打开(厨房)的(窗帘)
关闭 命令:关闭(卫生间)的(吊灯)
PM2.5 (客厅)的(传感器)的(PM2.5)是多少?
湿度 (客厅)的(传感器)的(湿度)是多少?
温度 (客厅)的(传感器)的(温度)是多少?
亮度 (客厅)的(传感器)的(亮度)是多少?