热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NUC搭建一套智能家居平台

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


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

 

  自动化、场景、语音播报



  待补充。

  



  

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

 

 


推荐阅读
  • 本文提供最新的CUUG OCP 071考试题库,包含70道题目,旨在帮助考生更好地准备Oracle Certified Professional (OCP) 考试。 ... [详细]
  • 解析 HTTP 头 'Vary: Accept-Encoding' 的作用与重要性
    本文详细探讨了 'Vary: Accept-Encoding' HTTP 头的作用,即指导缓存系统(如代理服务器和 CDN)根据不同的编码需求存储和提供适当的资源版本,确保不同类型的客户端能够接收到适合自己的内容。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • 拖拉切割直线 ... [详细]
  • 四月个人任务:Linux基础操作与网络管理
    本文介绍了两项主要任务:编写一个脚本来检测192.168.1.0/24子网中当前在线的IP地址,以及如何在Linux系统中挂载Windows网络共享目录。通过具体步骤和代码示例,帮助读者理解和掌握相关技能。 ... [详细]
  • 本文面向非计算机专业背景的编程爱好者,介绍如何仅使用基础的C语言知识——二维数组和结构体,无需掌握复杂的数据结构如链表,即可编写一款经典的贪食蛇游戏。通过本教程,您将了解游戏开发的基本原理和实现方法。 ... [详细]
  • Python中调用Java代码的方法与实践
    本文探讨了如何在Python环境中集成并调用Java代码,通过具体的步骤和示例展示了这一过程的技术细节。适合对跨语言编程感兴趣的开发者阅读。 ... [详细]
  • VS Code 中 .vscode 文件夹配置详解
    本文介绍了 VS Code 中 .vscode 文件夹下的配置文件及其作用,包括常用的预定义变量和三个关键配置文件:launch.json、tasks.json 和 c_cpp_properties.json。 ... [详细]
  • 本文介绍了在Android Studio中通过代码和配置文件两种方法来移除Activity的标题栏,并讨论了当Activity继承自AppCompatActivity时的特殊处理方法。 ... [详细]
  • 本周六上午11点左右到达公司,回顾了一周的行业动态并完成了昨日的任务。下午主要解决了Axis2缓存问题以及DBS和KMS的相关技术难题。由于服务替换导致平台访问错误,经过多方查找未能解决,最终决定暂时搁置。此外,还分享了与朋友之间的沟通障碍及个人成长的思考。 ... [详细]
  • Pandas中使用sort_values方法进行数据排序
    本文介绍了如何利用Python的Pandas库中的sort_values方法对DataFrame对象进行排序。首先通过Numpy库生成随机数据,然后详细解释了DataFrame的创建过程及其参数,并重点探讨了sort_values方法的使用技巧。 ... [详细]
  • 探讨并提供解决方案以应对 'view is not in the window hierarchy' 的错误提示。 ... [详细]
  • 本文介绍了如何处理MySQL数据库中表 'xdb.auditlog' 被标记为已损坏的问题,并提供了解决方案。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 本文详细介绍了一种实现PopupWindow全屏显示且能有效隐藏虚拟按键的技术方案,适用于Android开发。此方法经过实际测试,表现良好,兼容性优秀。 ... [详细]
author-avatar
qianyu2602915863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有