天猫精灵接入HomeAssistant

1、新增以下设备类目
微波炉 microwaveoven
取暖器 heater
驱蚊器 mosquito-dispeller
跑步机 treadmill
智能门控(门锁) smart-gating
智能手环 smart-band
晾衣架 hanger
2、同时支持 Long-Lived Access Tokens和 legacy_api_password(老的密码认证)
填密码时将最新生成的Long-Lived Access Tokens写入即可
Long-Lived Access Tokens生成在
另外说明一下,ha默认已经不提供api_password的方式,建议后续直接使用Long-Lived Access Tokens的方式来认证
——————-2018.06.09更新支持了电视调台和空调控制:
基于论坛下面两个论坛插件对接,其他插件并未测试,如有问题请反馈
—————–
写在前面,方案有几个硬性要求:
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 -vPHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09)Copyright (c) 1997-2010 The PHP GroupZend Engine v2.3.0, Copyright (c) 1998-2010 Zend TechnologiesPHP 5.3.3即为你的php版本。根据版本选择下面对应的方案php5.3.9以下版本可以直接执行:git clone https://github.com/bshaffer/oauth2-server-php.git -b php5.2-developgit clone https://github.com/c1pher-cn/tmall-bot-x1.gitmv tmall-bot-x1/* .php版本在5.3.9(包含5.3.9)以上的人请执行下列操作:git clone https://github.com/bshaffer/oauth2-server-php.gitgit clone https://github.com/c1pher-cn/tmall-bot-x1.git -b php5.3mv 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 DEFAULT ‘0’,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