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

 

  自动化、场景、语音播报



  待补充。

  



  

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

 

 


推荐阅读
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
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社区 版权所有