天猫精灵接入HomeAssistant【智能家居技能接入】

最近随着天猫精灵的铺开,很多人会问,天猫精灵支持连接小米设备吗,天猫精灵能控制小米网关吗?答案是无法直接控制,因为小米毕竟不会把自己的设备开放给小爱的直接竞争对手天猫精灵,如果开放了,小爱以后怎么在圈里混?
但是!!可以间接控制,通过 天猫精灵–HomeAssistant–小米设备,完成控制。

先放视频吧:

视频打不开的自己点视频链接看吧

 

写在前面,方案有几个硬性要求:
1.homeassistant公网可以访问,并有你自己的设备
什么?不知道HomeAssistant是什么?
搞技术的请直接访问 https://home-assistant.io/
不搞技术的可以看看这篇文章了解一下:智能家居初体验。 还是不明白的话那就请自己搜索HomeAssistant了解一下了,如果这一点不搞明白建议您可以不要往下读了。我所有的内容都是基于已搭建好HomeAssistant的基础上写的,如果没部署请先去部署好再继续看帖子。(瀚思彼岸是目前国内最大的HomeAssistant技术交流论坛,不懂的人可以先去学习了解下,在上面可以找到各路大佬助你入坑HomeAssistant!!)

2.php+mysql或者相似的环境

3.该方式目前只能自己搭自己用


小白们如果上述条件1、2不具备,又想完美接入天猫精灵怎么办?

 

请移步这篇文章(当然这个方案也依赖条件1,如果不具备也不用往下看了)–>>Hassbian论坛官方技能接入

有问题,可以微博留言,关注转发就是支持,谢谢!!

另外如果你自己有能力搭建服务,不希望将自己的ha账号托管给论坛,那么请继续往下看,自助搭建的方案也可以帮助你完成HomeAssistant接入天猫精灵。

 


由于论坛毕竟处于公益类型,没有过多的资源支持,所以在使用公共技能的时候可能会出现延时等问题,所以我提供自己搭建天猫网关的方法,供各位自行搭建。

 

先发一张架构简图

6月10日更新了网关代码,由于此次改动较多,需要更新的人需要重建数据库,建议将老代码和数据库、天猫平台上的技能全部删掉重来,这样不会有冲突。

1.下载Oauth2和网关PHP代码

查看自己的php版本:
执行php -v
PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
PHP 5.3.3即为你的php版本。根据版本选择下面对应的方案
php5.3.9以下版本可以直接执行:
mv tmall-bot-x1/* .
php版本在5.3.9(包含5.3.9)以上的人请执行下列操作:
mv tmall-bot-x1/* .

2.数据库建表

进入你的mysql数据库新建一个数据库,并在mysql执行下列建表命令

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)
);

 

然后再新建账号和密码(XXXXXXclientid、XXXXXXsecret自己随便设,要记住后面填到天猫开放平台里)

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、discovery.php add.php等文件改成别的名字,比如information.php.back 这样避免外人通过这个页面拿到你的hass密码或者操做你的页面。

然后没有然后了,愉快的加你的设备吧!

添加设备请注意:

1.多个同一位置的传感器请使用虚拟设备,虚拟传感器的设备id需要手工加一个后缀

2.关于设备类型和名称:deviceType(设备类型)选择你实际操控时,想让天猫精灵控制的设备名。比如你以‘冰箱’的形式操作这个设备,那这里就选择‘冰箱’,控制的时候叫  天猫精灵打开[位置]的冰箱。deviceName(设备名称)这个位置虽然留空让你填写,但请一定填写成更设备类型一样的名字!!! 必须一样听明白没?这里不按要求写,天猫精灵不听指令不要来找我。这是天猫的要求,如果想改别名,直接在天猫精灵app里就可以改。

3.关于操作和属性

    actions(支持的操作)操作action主要用于确定该设备支持哪些操作,可以根据ha里的功能进行判断后添加

设置音量           命令:把(客厅)的(电视的)音量调到80%【范围0-100】

设置颜色               命令:把(客厅)的(落地灯)调成(白色)

设置亮度               命令:把(客厅)的(吸顶灯)亮度调到(80)【范围0-100】

打开                      命令:打开(厨房)的(窗帘)

关闭                      命令:关闭(卫生间)的(吊灯)

声音按步长调大     命令: (客厅)的(电视)大点声 (仅media_player支持)

声音按步长调小     命令: (客厅)的(电视)小点声(仅media_player支持)

下一首或下一台   命令: (客厅)的(电视)下一台(仅media_player支持)

上一首或上一台   命令: (客厅)的(电视)上一台(仅media_player支持)

频道选择               命令:   把(电视、机顶盒)调到 (浙江卫视、中央一台)

我要看中央一台、浙江卫视(只有一台可调台设备是才可以这么用)

(仅media_player支持)

暂停、继续          命令:(餐厅)的(扫地机器人)暂停(media_player、vacuum)

设置模式               命令:(卧室)的空调调成制冷模式、送风模式、制热模式、除湿模式(climate)

设置温度               命令:(次卧)的空调温度设置为 25度

风速调整                命令:(主卧)的空调风速调为(1档、2档、3档)

查询温度

查询亮度

查询湿度

查询pm2.5

查询电源开关

properties(支持的属性状态)主要用于传感器和设备状态,需要查询的设备请选择对应的属性

电源状态     (客厅)的(吸顶灯)开着呢嘛?
PM2.5        (客厅)的(传感器)的(PM2.5)是多少?
湿度         (客厅)的(传感器)的(湿度)是多少?
温度         (客厅)的(传感器)的(温度)是多少?
亮度         (客厅)的(传感器)的(亮度)是多少?

——-1月8日   新增灯光颜色控制
——-6月1日   电视相关控制,同时整合多传感器查询、配置管理页面
——-6月10日   电视相关控制,新增空调(climate支持)

按照我的代码部署的人,后续所有更新只需要更新不同分支里这两个文件即可
gate.php
aligenies_request.php
add.php
addVirtualDevice.php

php5.3.9以下选择master分支
php版本在5.3.9(包含5.3.9)以上选择php5.3分支