作者:qianyu2602915863 | 来源:互联网 | 2023-08-28 16:20
序言:学习智能家居有好几年了, 一直是零零碎碎的东学西凑,前几天心血来潮,在某东买了一台InterNUC迷你电脑,打算作为智能家庭控制中心,加上以前的经验,利用业务时间打造了一套自
序言:
学习智能家居有好几年了, 一直是零零碎碎的东学西凑,前几天心血来潮,在某东买了一台Inter NUC迷你电脑,打算作为智能家庭控制中心,加上以前的经验,利用业务时间打造了一套自己的智能家居平台,以下记录搭建过程中点点滴滴。
效果图:
架构图
智能家居的核心是搭建的Home Assistant(HASS),如果想用siri控制设备已经不用HomeBridge做桥接了,HASS已经源生支持Homekit协议了。
所有的设备接入都通过HASS进行管理,如果是采用树莓派等网关桥接的设备或传感器,推荐采用MQTT的方式接入到HASS,开发成本很低。
控制主机
为什么买NUC呢,因为它就是一台性能不错的电脑,含雷电3接口(40Gps带宽)和2.5寸硬盘盒空间,后期可以拓展为NAS服务器 ,支持4K@60Hz显示输出,可拓展为HTPC。
主机配置: Inter NUC8i5BEH,CPU:i5 8259U ,硬盘: 三星970 EVO 250G,内存: 金士顿DDR4 2400MHz 16G。
主机能耗控制得不错,待机7W左右,如果你不在意能耗,你也可以拿台式机来做控制主机。
也可以买主板集成CPU J系列的,价格便宜好多,跑智能家居是足够的。
这评分已经快超过鄙人的台式电脑了。
系统安装
先下载并安装开源Proxmox虚拟化平台(PVE),官网:https://www.proxmox.com/de/ ,再在虚拟化平台下安装的虚拟机,用于跑HASS、MQTT、Node-RED等软件。
其实最开始我是先安装win10 ,再用VM ware安装CentOS虚拟机的,这里就需要处理很多衍生的问题,比如开机启动,内网映射等,而且据我的经验,VM虚拟机时间长了稳定性不太好。
PVE的安装比较简单,跟着教程一步一步走就行了,大致安装时间5分钟左右。这里需要注意的是,如果是用UltraISO软件刻录到U盘,一定要采用Raw格式。
如果NUC主机识别不了U盘系统,需要开机按f2后,在设置中关闭security boot。
PVE安装后,在本地存储中上传CentOS镜像,并创建虚拟机,虚拟机的硬件配置根据实际情况调整,然后启动虚拟机,在弹出的Web控制台进行系统的安装。
安装系统后的界面:
软件部署
推荐采用docker容器化的方式进行软件的部署,这样升级和维护会比较简单。
安装docker命令:
# 配置docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 查找并安装指定版本docker
yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-18.03.1.ce-1.el7.centos
(可选)安装docker编排工具和Web管理界面,我用的Rancher,如果下载较慢,可以设置docker默认镜像仓库为阿里云。
docker run --name rancher -d -v /data/docker/rancher/data:/var/lib/mysql --restart=unless-stopped -p 8080:8080 rancher/server
Rancher里依次添加主机,应用和服务:
如果虚拟机配置较差,可以不安装Rancher,直接通过docker命令安装HomeAssistant:
docker run --restart=always --network host -d -v /etc/localtime:/etc/localtime:ro -v /data/docker/home-assistant/config:/config -p 8123:8123 --name hass homeassistant/home-assistant
至此,HASS平台就搭建完成了,后面对智能家居的管理,都是对挂载的配置文件进行修改就行了。
添加设备
HASS平台搭建后,我们就需要向平台添加设备了,不同的设备接入方式会有小差别,但基本都是通过修改HASS配置文件,就可以接入了。
HASS设备接入文档: https://home-assistant.cc/component/
下面是我的小米设备的接入配置:
1、米家网关:
#小米网关
xiaomi_aqara:
gateways:
- mac: 78:11:**:**:81:E3 #网关MAC地址,在米家APP里,多次点击关于即可查询
key: 62A96******A4500 #网关局域网通讯协议密码,在米家APP里,多次点击关于即可查询
2、飞利浦台灯:
# 飞利浦智睿系列灯具 #token用电脑安卓模拟器 安装米家5.0.19, 然后在资源管理器查找
light:
- platform: xiaomi_miio
name: 飞利浦台灯
host: 192.168.0.48
token: 740a96fbe*******c8817e0ccc44d54e
3、小米插线板:
#小米插线板
switch:
- platform: xiaomi_miio
name: 书房插座
host: 192.168.0.47
token: 802d2e16******739163f32275317c1c
这里需要注意的是,米家wifi设备,可以跳过网关直接控制,但是需要知道设备的token,解决办法最简单的是通过电脑安装安卓模拟器,然后安装米家APP(5.0.19以下版本),
连接设备后,在/data/data/com.xiaomi.smarthome/databases/miio2.db文件里可以直接找到token。
设备添加后,HASS平台的界面:
其他设备接入
现在HASS平台可以添加很多智能设备了 ,但如果是自己开发的设备和传感器,比如树莓派,就需要自己去实现HASS的api,管理和控制设备。
最简单的方式就是通过MQTT协议实现与HASS的交互。
这个例子我后面再补上。
Siri控制
添加siri控制非常简单,苹果的智能家居采用的Homekit协议,需要苹果官方进行认证的设备才能控制,后来Homekit协议被逆向工程后,最开始用Homebridge模拟HomeKit 认证配件,让大家的设备都能通过苹果系统进行控制。
现在HASS已经默认支持HomeKit了,所以我们这里可以直接跳过Homebridge。
HASS配置很简单,只需要节点名就行了,配置重启后,HASS会通知HomeKit代码:
然后,打开iphone手机,添加配件,输入HomeKit代码就可以siri控制你的智能设备了。
外网访问
现在,siri只能在同一个局域网下对设备进行控制,如果需要外网访问,可以购买苹果的AppleTV或HomePod,这里我们采用另外的方式:
原理就是找一台公网服务器(可以采用阿里云的轻量服务器),把请求反向代理到内网HASS,这里需要采用内网映射的技术,我使用的是frpc,这样你就可以通过外网来控制家里的设备了。
服务器安装代理软件(frps):
docker run --restart=always --network host -d -v /data/docker/frp/frps.ini:/conf/frps.ini --name frps cloverzrg/frps-docker
虚拟机安装内网映射软件(frpc):
docker run --restart=always --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
配置文件:
[common]
server_addr = 服务器IP
server_port = 6000
token = 请求令牌
[home-assistant]
type = tcp
local_ip = 内网IP
local_port = 8123 #本地端口
remote_port = 8123 #远程端口
这样,我们访问公网IP:8123端口,就会被代理到内网虚拟机的8123端口了。
家庭智能设备如果暴露到公网,就需要注意安全方面的问题了,为了安全起见,我们采用HTTPS证书的方式,对请求进行加密。
现在我们可以在阿里云免费申请一个证书, 然后配置到nginx上,通过https域名的方式,反向代理到服务器8123端口,再代理到内网虚拟机。(注意,服务器8123端口需要做安全限制)
nginx配置:
server
{
listen 80;
server_name home.xxx.com;
return 301 https://$server_name$request_uri; #http请求直接跳转到https
}
server {
listen 443;
server_name home.xxx.com;
ssl on;
ssl_certificate cert/home.xxx.com.pem;
ssl_certificate_key cert/home.xxx.com.key;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8123;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_read_timeout 900s;
}
access_log /root/wwwroot/log/home.xxx.com.log;
}
最终效果:
如果你有时间精力,也可以自己开发小程序,对接内网的HASS平台。
智能音响
我家里用是的小度音响,需要到百度dueros开放平台去添加技能,按小度对智能设备的定义参数,修改家里的设备参数,天猫精灵和小爱同学类似。
添加技能:
配置Oauth2授权:
HASS配置:
#小度技能开放平台
dueros:
expire_hours: 87600 #授权过期时间. 该参数不是必填
然后在duerOS平台可以进行模拟测试,测试通过后,跟小度说:“发现设备”,就可以让小度控制智能设备了。
自动化、场景、语音播报
待补充。
至此,我们小打小闹的智能家居平台就搞定上线了,让我们这群快乐的程序员一起吹嘘分享智能科技带来的快感吧!