天猫精灵接入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分支

 

进阶篇,智能家居初体验:homekit、homebridge、HomeAssistant都是干啥的?

从装修房子到买家电装安防,到入坑homebridge和homeassistant,再从homebridge的基于iphone siri的语音控制,到通过天猫精灵控制家电,这一段时间也算是接触了很多智能产品和设备,同时自己对只能家居的理解也更进一步。那我也基于最近一段时间的学习,完整的总结一下。

还是把之前录的效果放一下吧,哈哈:

从全局上看,我认为智能家居有几个阶段:

   设备数字网络化—-远程控制—-自动化控制—-语音控制—-‘贾维斯’

第一阶段最简单,设备肯定要通电并把物理的信号转换成数字信号,比如温湿度传感器,摄像头,电子门锁,体感设备,门磁,遥控器,联网之后,也就是到了第二阶段,互联后可以不依赖物理开关控制,能通过某种信号控制,这里的控制渠道可能有很多:红外、射频、蓝牙、网络… 再然后我们可以对这些互联可以远程控制的设备设置一些联动的逻辑,也就是现在所说的自动化控制,比如:检测到有人就播放一段语音、十二点音箱自动播放广播、人回家时关闭窗帘打开灯… 再然后我们可以通过智能音箱语音完成一些指令或者基于AI的对答,再然后可能就是像钢铁侠里贾维斯那样的超级管家,能像人一样有一定的思维逻辑的自动化处置!

目前市面上看到的产品其实并算不上智能家居,或者说仅仅是做到了前三个阶段:传感器数据采集以及指令的下发,还有一些简单的自动化,距离真正的“智能”还有很大差距。最近的频频发布的智能音箱目前也只是实现了语音控制,距离真正的智能管家,还是有很大的差距的。我这里讲的“智能”主要是现状下的一些产品。


一.智能家居是什么,能干什么?

就我自己了解到的情况,我把智能设备(物联设备)分为两类:

一类是信息采集器,摄像头、门磁、温度计、湿度计、霾表、红外传感器、烟感、水感等等。用来收集环境数据。

一类是控制器,灯、开关、窗帘盒、插座、锁、空调、用来执行某种动作。

而把采集器和控制器协调在一起,执行远程操控或是根据不同条件设置不同的动作,就成了现在所谓的智能家居系统。目前基本形成了 采集器+控制器+网关 组成了一套完整的智能家居系统的模式。

二.智能家居系统

    由于技术上的没有完全统一的协议,再加上一些厂商的封闭思维,不同厂商间的采集器和控制器是不通用的,都需要去配置各个家自己的中控系统及app,所以目前想把家里的全套东西都配置好你可能要在一个手机里装N个app,家里也是要接各种网关设备,或者一步到位全买这一个厂商的全套产品。

控制系统有两种,一种是开放平台,一种是封闭平台。就如字面意思,国外比较多的是统一软件协议然后各家做各家的硬件,然后由统一的控制平台来完成智能控制,比如HomeAssistant、Domoticz、Google Home、homekit(虽然homekit算不上真正意义的开放…但他开放了统一的协议标准);对比国内,目前多数是自己管自己,平台之间互不兼容,想做到智能就要买我家的全套设备才行。

三.封闭平台(这里只说国内的)

LifeSmart、阿里智能、萤石云:这些属于封闭的平台,都由各个智能设备厂商自己独立建立的中控app,只能控制自己旗下或者联盟内的产品及设备,无法“跨界”联动。

博联boardlink,米家:基本属于半开放的状态,支持部分系统的相互联动。

LifeSmart,是国内的智能家居品牌,主打智能家居控制,缺少家电类的覆盖,品质较高但相对的价格也比较贵。

阿里智能,依托阿里强大的整合能力组成了很大范围的联盟,目前在大小家电范围覆盖的较广,但在门磁、传感器类比较缺乏。

萤石云,海康威视旗下的品牌,做监控起家,主打安防类,门磁、人体传感器、声光水传感器的场景及联动比较丰富,但比较遗憾的是他没有家居类的设备。

 

博联boardlink,博联以红外和射频遥控作为切入点,可以与大部分红外和射频设备联动,目前也在搞自己的平台,但他的远程遥控器处于半开放的状态,可以对接很多三方的平台以及多数的智能音响,如:天猫精灵、Amazon Echo。

米家,小米在智能家居这块布局很早,以比较高的性价比取得了比较大的覆盖量和认可。目前也处于一种半开放的状态,可以支持对接三方平台。

以我自己家举例,如果按我自己的想法去实施的话我可能需要下面四个厂商的产品,(手机里同时装四个app、家里装四个网关,而且他们之间还不能相互控制)

小米          霾表、空气净化器、灯、插座

博联科技  红外控制 FR射频控制

阿里智能  空调、冰箱(家电类)、插座

萤石          摄像头、门磁、红外、烟感(安防类)

What a fuck??!!

四.开放平台

开放中控平台: HomeAssistant、Domoticz、Homekit

Homekit 是苹果推出的智能家居平台, 并在iOS 10开始默认在手机“家庭”APP中集成,可以通过apple内置的siri完成语音控制,但无法通过其他app或者android手机控制。目前接入homekit的厂商并不是很多,而且价格偏贵。亮点在于siri控制和苹果比较高的产品质量,准确的说他应该也属于封闭平台,但为什么要把他放在开放平台?请往后看homebridge部分。

 

HomeAssistant 是一款开源的智能家居平台详细介绍见其官网:https://home-assistant.io ,需要运行在python3的环境下,可以通过网页和手机客户端完成控制。目前看功能方面要比homekit强大很多,因为其开源的原因,可定制性较强,受到比较多开源爱好者的喜欢。支持通过网页或者android手机app、iOS手机app的控制;支持各种复杂条件的自动化动作(满足X情的条件下,做Y);语音控制方面,支持与类似亚马逊的Echo的智能系统的控制。

 

Domoticz 也是类似的智能家居平台详见官网http://www.domoticz.com/,相比来说界面比较丑,与HomeAssistant一样支持通过网页或者android手机app、iOS手机app控制;支持各种复杂条件的自动化动作(满足X情的条件下,做Y);语音控制方面,支持与类似亚马逊的 Echo的智能系统的控制。

 
 

homebridge

最后要强烈介绍一下homebridge,它由前homekit程序员创建,用nodejs编写,用于更多让更多无法接入homekit的产品接入homekit平台,程序开源,有各个兴趣组提供不同的插件,以兼容不同的智能设备,像桥一样把三方的设备与homekit连接在一起,让他们能在iOS里被Siri控制。有了它就可以将HomeAssistant与Domoticz中的智能设备引入到homekit中,由siri统一控制。

五.如何搭建这样的开放平台

前面文章提到过HomeKit 的优势在于iOS原生自带、Siri支持中文,还有苹果对高品质的把控。你可以告诉 Siri 我回家了,早上好等这样的文字激活你设置好的场景,还是可以直接从控制中心看到和控制你所有支持的设备,比起其他第三方智能家居 App 使用体验都更佳。 

懂技术的同学可以直接到下面的地址按项目中的方式部署

Homebridge项目地址:https://github.com/nfarina/homebridge

下面两篇文章里我将介绍如何搭建一套完整的智能家居系统。完成以下的操作,你需要一个永不关机(或者你需要的时候不关机的)Mac、Windows 或 Linux 设备,恩,简单说就是要有一台服务器,这里比较多的人选择使用树莓派,有的人在家里的NAS中安装,因为我已经有一台群晖的nas了,所以我选择在nas上完成安装