NUC搭建一套智能家居平台

 

序言:


 

学习智能家居有好几年了, 一直是零零碎碎的东学西凑,前几天心血来潮,在某东买了一台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代码:

 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平台可以进行模拟测试,测试通过后,跟小度说:“发现设备”,就可以让小度控制智能设备了。

  自动化、场景、语音播报


  待补充。

  


  

 至此,我们小打小闹的智能家居平台就搞定上线了,让我们这群快乐的程序员一起吹嘘分享智能科技带来的快感吧!

 

猜你喜欢

转载自www.cnblogs.com/yixueli/p/12548972.html