概述
我的目的是在服务器端搭建hass,接入米家设备进行远程控制(在自己的APP中接入ha的websocket api)
本篇不是入门攻略,算是个人爬坑笔记。
服务器环境为centos7
搭建
docker安装和运行
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl start docker
拉hass镜像并运行容器
docker pull homeassistant/home-assistant:latest
docker run -it -d --memory 512m --name="hass" -v /home/hass/config:/config -p 8123:8123 homeassistant/home-assistant:latest
这样hass的配置文件就可以在
/home/hass/config
目录下查看了
根据端口和你的服务器IP打开hass网站,注册一下账号并登录
然后下载hacs,没有魔法的话改容器的hosts
docker exec -it hass bash
vi /etc/hosts # 编辑
# 找个站长工具搜一下github ip,比如
# 185.199.110.133 raw.githubusercontent.com
# 20.205.243.166 github.com
# 可以多试几次
wget -O - https://get.hacs.xyz | bash -
- 在
配置>设备与服务
里添加集成,搜索hacs添加
- 需要github的认证,不成功还是多试几次
- hass重启后左栏出现hacs商店,点击进入集成,搜索Xiaomi Miot安装(我不是局域网,用不了gateway3,在本地部署的小伙伴可以考虑gateway3,延迟据说比较低)
- 安装完成后重启,然后添加集成
坑
这个插件依托云端账号,登录的时候需要手机验证码,但是不在同一个网络下验证了也无法登陆。#issue107里有同样的问题,开发者提供了两种方式,我选择给服务器临时搭一个桌面,然后vnc远程连接桌面。
图形界面安装
yum -y groups install "GNOME Desktop"
echo "exec gnome-session" >> ~/.xinitrc
yum -y groups install "KDE Plasma Workspaces"
echo "exec startkde" >> ~/.xinitrc
yum groupinstall "X Window System"
startx
vnc安装
yum install -y tigervnc-server
cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
vim /etc/systemd/system/vncserver@:1.service
### 修改vncserver@:1.service
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
### 运行
systemctl daemon-reload
systemctl start vncserver@:1
### 密码设置(账号是root,如果用其他账户要修改vncserver@:1.service,请自行查阅资料)
vncpasswd
访问vnc的端口是5900+n,这里是5901
远程桌面软件很多,这边选择vnc viewer
然后打开火狐,进入hass,这时候验证就能通过了。
WSS
用postman测试一下websocket连接,设备是一个switch
地址为你的ip:8123/api/websocket
连接完成后要鉴权
{
"type": "auth",
"access_token": "123"
}
token可以直接在用户资料里面创建一个长期令牌
订阅事件
{
"id": 1,
"type": "subscribe_events",
// Optional
"event_type": "state_changed"
}
开关服务调用
{
"id":9,
"type": "call_service",
"domain": "switch",
"service": "turn_off",
// Optional
"target": {
"entity_id": [
"switch.giot_v51ksm_05f0_switch"
]
}
}
官方资料里有更多API,感兴趣去多康康。