本帖最后由 FrankLv 于 2017-11-30 22:44 编辑
本人测试了debian实体环境和docker将hass接入天猫精灵,都可以实现,看到论坛有大神放出成功案例,我在这就介绍下docker如何接入吧,有时间我再说说debian实体环境如何接入。
在此感谢25989406、感谢KleinerSource、感谢大家、感谢论坛给我们有个很好的学习和折腾的环境。
其他就不多说了,下面来干货。
搭建环境非常重要,非常重要,非常重要
镜像推荐使用“1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10”,其实1and1internet这家伙做了好些镜像,基本都差不错。
(1)环境准备
便于方便我将所有配置做好了做成附件,下载后解压到您宿主机相应位置,这个位置大家要记住(如果想知道怎么做的可以私信我,我再告诉你方法,这个不是一句话就能解释清楚的)。
由于使用https才能接入,所以需要ssl证书,可以根据自己的域名申请验证后的证书(这个大家自行搜索,不是本教程重点)或者安装openssl来生成证书。
申请或者自己自作完后放入nginx\ssl文件夹中替换我的(为了安全我将我的证书清空了),名称最好和我的一样,不然你就需要改nginx配置了。
注意:需要将解压的nginx文件夹及里面的文件权限设为root且为0777
(2)镜像下载和环境搭建:
sudo docker run -u 999:0 -p 3307:3306 -p 8081:8080 -p 8082:8082 -v /home/docker/nginx/nginx/:/etc/nginx/ -v /home/docker/nginx/www/:/var/www/www/ -v /home/docker/nginx/mysql/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD="password" 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10
解释下:3307是容器对外的口,3306是容器内mysql端口;8081是容器对外phpmyadmin管理口,8080是容器内mysql端口,8082口是我需要开的web口用于搭建OAuth2(对外口大家随意改,搭建OAuth2口也随意-这个后续需要再配置,只要和后续配置的口一致就行);/home/docker/nginx/mysql/是我放数据库的位置(我的所有配置文件均在/home/docker/中,大家位置一定要和第2步中放附件位置一致),大家改成自己的就行。
如果觉得下载慢可以使用镜像加速,这个大家自行论坛搜索,我使用酸酸乳所以用官方源很快。
搭建完成后工作基本结束,后续在路由中将8082的口映射到外网就行。
成功的界面:
现在看看ip:端口能否访问(一般就可以访问),如果不行看看容器是否启动,若没有启动将其启动即可,若启动多次还是会出现停止,需要检查下ssl设置是否正确。
(3)配置环境参数
需要修改以下文件
首先要改的是www文件server.php文件中数据库的配置,如果你的密码使用的是password,那么你就不需要修改了
记住你的数据库名称后续搭建mysql需要,记住,一定要记住
还需要修改homeassistant_conf.php文件,这个改为自己的hass地址和密码,必须是外网可以访问的,所以肯定需要密码,不然你的hass就完全暴露在互联网了(外网访问常用的是DDNS,或frp)
最后需要修改gate.php文件,修改自己hass中设备的ID
(4)数据库建立
如果容器建好且运行中的话,那就直接浏览器访问寄主ip:8081,进入界面后用户名root,密码password(配置不一样以您配置为准)。进入后新建刚才让您记住的数据库名称,没改动的话就是oauth2_db,类型选择utf8_general_ci。
过后点击您建的数据库,上部有SQL选项,选择进入,输入如下代码
CREATE TABLE oauth_clients (client_id VARCHAR(80) NOT NULL, client_secret VARCHAR(80) NOT NULL, redirect_uri VARCHAR(2000) NOT NULL, grant_types VARCHAR(80), scope VARCHAR(100), user_id VARCHAR(80), CONSTRAINT clients_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), 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 TEXT, is_default BOOLEAN);
CREATE TABLE oauth_jwt (client_id VARCHAR(80) NOT NULL, subject VARCHAR(80), public_key VARCHAR(2000), CONSTRAINT jwt_client_id_pk PRIMARY KEY (client_id));
再输入下面代码,便于介绍我给分开了,其实可以放在一起执行的。
INSERT INTO oauth_clients (client_id, client_secret, redirect_uri) VALUES ("ID", "PASS", "https://open.bot.tmall.com/oauth/callback");
其中ID和PASS是对应OAuth2验证的用户名和密码,改成自己熟悉的,也要记住,记住,记住。
(5)接入天猫
浏览器输入https://open.bot.tmall.com,淘宝账户登录,进入界面,点击增加技能
过后的界面就和前面大神帖子一样设置就可以了,就不再这累述,不过注意的是地址要加端口8082
至此教程结束,有问题可以联系我,由于是后写教程的,可能中间步骤有疏漏,还望指出。
造福大家就不设置权限了
附件附件:
nginx.rar
(99.65 KB, 下载次数: 265)
|