野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1372|回复: 1

[经验\资料] 【鲁班猫创意大赛2期】LBC 智能家居无线网关

[复制链接]
发表于 2023-11-26 23:28:03 | 显示全部楼层 |阅读模式
本帖最后由 POMIN 于 2023-11-26 23:39 编辑

概述
特此声明,此方案非 All in One 方案,本方案是将智能家居常用的网关功能(包括但不限于ZigBee网关、蓝牙网关与WiFi网关)与中继路由、NAS等家庭云功能相融合实现的智能家居无线网关/服务器。
硬件概述
  • 使用 RTL8822CE 无线网卡给鲁班猫2提供 2.4/5GHz 频段的 Wi-Fi 支持和 Bluetooth 5.0 支持
  • 使用 CC2652p 作为 ZigBee 网关来使用,使用 ZNP 方案,USB 连接到鲁班猫2
  • 使用 nvme 固态硬盘或 SATA 固态硬盘拓展储存空间(可选)
软件概述
  • 安装 casaos 作为 docker 管理器使用, 相较于Portainer,操作更简单,更为适合家庭环境使用
  • 安装 HomeAssistent 作为智能家居管理后台,提供各种厂商接入家庭云的解决方案
  • 安装 NodeRED 自动化流配置工具,可以可视化的实现自己的家庭自动化,并且可以在网关端实现较为复杂的逻辑处理
  • 安装 AdGuard 来搭建局域网的 DNS 服务器,提供 DNS 拦截、DNS 防污染的功能
  • 安装 Nginx Proxy Manager 来管理局域网内的反向代理,搭配 AdGuard 来实现家庭局域网内的域名解析。
  • 安装 EMQX,提供 MQTT 服务器的功能,给 ZigBee2MQTT 或者其他 MQTT 相关的开源项目提供支持
开发流程硬件准备服务器端
  • 鲁班猫2
  • 无线路由器一台,如果没有宽带,只有免费Wi-Fi的话可以买一个支持 WISP 模式的路由器或者 4G 无线路由。
设备端
  • Wi-Fi 智能设备:易微联门磁传感器、米家智能插座*2、米家空调伴侣
  • ZigBee 智能设备:易微联温湿度传感器
  • BLE 智能设备:小米蓝牙温湿度传感器2
Pasted image 20231113000855.png
基本工作
安装好鲁班猫的系统,我这里安装的是 Ubuntu22.04 这个镜像,推荐安装带有 xface 界面的镜像,软件包相对较全面,配置过程有可视化界面也方便,后续不需要桌面环境时禁用就行,可以不用,但是要有。
安装好 RTL8822 网卡和天线,打开鲁班猫的终端,运行 ifconfig 命令来查询鲁班猫的IP地址,我这里的鲁班猫 IP 是 192.168.0.103,运行 hciconfig 也可以看到蓝牙正常工作。
Pasted image 20231109160503.png
网络拓扑
网关,当然少不了网络拓扑的设计,关于 LBC 无线网关的拓扑设计如下图
Pasted image 20231113001617.png
可以在路由器看到鲁班猫的IP地址,鲁班猫的默认设备名是lubancat,设置 MAC 地址和IP地址绑定或者把鲁班猫设置为静态地址的,不能和别的设备IP地址一样,否则会导致冲突无法上网,我是将路由器的DHCP设置为了 192.168.0.100 到 192.168.0.199,同时鲁班猫静态IP设置为了192.168.0.199。
Pasted image 20231112232153.png
此外,查看局域网内的IP地址办法有很多,当然也可以用一些软件来查,比如下面这个,推荐连接的不是自己的 Wi-Fi 的时候,比如使用公寓、出租屋的 Wi-Fi 时还是扫一下,防止后续需要设置静态 IP 时影响到其他设备上网。
Pasted image 20231109101757.png
casaos 安装
这个在野火的教程里已经介绍过了,我这里就不再重复介绍,按照这个操作即可:https://doc.embedfire.com/linux/rk356x/app/zh/latest/app/CasaOS/casaos.html
把端口改成 88,这个很重要!因为后续使用 Nginx Proxy Manager 时需要使用 80端口。
Pasted image 20231111161305.png
然后把 /DATA/Appdata 共享出来,本质上是使用的 Samba 进行的局域网共享
Pasted image 20231109134837.png
然后挂载到自己的PC上面,如果提示不能挂载的话就直接百度”Windows 挂载 SMB 不安全的解决办法“,挂载为一个磁盘,后续不使用 HACS 时把插件从GitHub下载下来直接拖进去解压就可以。
Pasted image 20231109135407.png
中继路由设置
使用 docker 拉取 openwrt 然后设置一下 lan 口、wan口,然后关于中继路由的设置,我介绍这六点……,由于某些不可抗力因素,这个东西还是自行研究吧,搭建好带有魔法的中继路由就是下面这个样子了,鲁班猫2只有两个网口,如果需要更强的功能可以使用鲁班猫2N,两个2.5G和两个千兆网口玩起来更爽。
Pasted image 20231109232353.png
HomeAssistent 设置
小内存版本的鲁班猫建议非必要不安装 HACS,因为HACS在实测在获取插件列表时需要的内存较大,上文已经映射磁盘到了PC上面,直接把插件的压缩包解压拖到 HomeAssistent 的插件目录然后重启安装即可
ZigBee 网关设置CC2652p ZigBee 网关硬件
ZigBee 网关这里使用 ZNP 的方案,硬件原理图、Gerber、烧录工具和固件在这个 github 仓库: https://github.com/egony/cc2652p_E72-2G4M20S1E 作者是俄罗斯的大佬,乌拉。
原理图如下,LDO、CH340C 加 CC2652p,十分简单,随手画一个就可以,模块可以买亿佰特的模块,只要是带 bsl 引导程序的就可以,带 bsl 的可以串口烧录程序,否则就需要用jlink 来烧录了,或者直接小黄鱼买成品当然也可以。
Pasted image 20231110115847.png
复刻一个,如下图,画的原理图PCB比较简单也就不放出来了。
5de7561e5a68ff1d6e963b5ebcc0b89c.jpeg
也可以购买NRF52840-DONGLE,比这个好看一点,价格都差不多,Nordic家的这个芯片集成了USB,可以实现单芯片完成ZigBee网关的开发,缺点就是目前资料很贫瘠
可以查看GitHub中的这个讨论 https://github.com/zigpy/zigpy/issues/394
仓库: https://github.com/kardia-as/zigpy-zboss
然后安装 ZigBee 插件
Pasted image 20231110143227.png
选择 usb 转串口的设备,这里需要在 docker 中映射该设备,或者直接使用文末的 compose 文件导入
Pasted image 20231110143222.png
第一次初始化等的时间较久,可能这个慢也是和 ZigBee主打低功耗相关的一个“特性”把。
需要添加设备的时候,把设备进入配对模式,点击添加 ZigBee 设备,扫描添加设备即可
BLE 网关设置
BLE 的设置也需要一些操作,首先安装好 dbus、bluez 两个软件包
sudo apt-get updatesudo apt-get -y install dbus bluez
然后映射两个文件到容器中,容器内的 HomeAssistent 才能正常识别到蓝牙设备
/run/dbus
/etc/localtime
适配器需要选择 Home Assistant 支持的 BLE 硬件才可以使用,如果是 USB 转蓝牙模块,尽量选择带硬件复位功能的,官网中有说明
Pasted image 20231109095919.png
Wi-Fi 网关接入
Wi-Fi设备的接入就比较简单了,把鲁班猫和智能设备同时接入到一个局域网内即可。
强调一下,鲁班猫和智能设备都需要是相同网络下的 STA 模式才可以。如果使用鲁班猫作为 AP 来连接鲁班猫下面的 STA 设备是行不通的!
小米、易微联平台接入
小米插件链接: https://github.com/al-one/hass-xiaomi-miot
易微联插件链接: https://github.com/AlexxIT/SonoffLAN
把 release 包中的内容直接简单粗暴地拖到挂载的共享网盘的AppData/homeassistant/config/custom_components 目录下
Pasted image 20231110140331.png
重启 HomeAssistent,然后安装 sonoff 和 xiaomi_miot 两个插件
Pasted image 20231110140752.png
NodeRED 设置
NodeRED插件链接: https://github.com/zachowj/hass-node-red
和上文同理,直接拖进去、重启、安装,这个插件不需要额外设置,在 nodered 中配置、部属即可同步到 HomeAssistant。
搜索节点 node-red-contrib-home-assistant-websocket 安装,安装完成就有许多的Homeassistent的节点了
Pasted image 20231110143117.png
关于怎么用这个来添加自定义的设备可以参考我在野火瑞萨氛围赛中制作的 LVGL 仪表盘: https://www.firebbs.cn/forum.php?mod=viewthread&tid=35800
参考仪表盘的代码配置一个传感器节点,如下图,数据源为 MQTT 的消息包,解析后传入一个 sensor 实体。
Pasted image 20231113004934.png
然后用 MQTTX 传入一个 JSON 格式的消息包,改变当前的湿度数据为 66%
Pasted image 20231113005346.png
依照这个思路,无论是 ESP8266、ESP32(当然乐鑫的芯片用 ESPHome 来接入 HA 也是比较方便的选择)这些Wi-Fi模块,或者带 MAC 的 MCU,只要是可以接入 MQTT 服务器收发消息的,统统可以接入到 HA。
当然关于 MQTT 智能家居这方面应用,有一个比较有名的 github 开源项目叫OpenMQTTGateway,有兴趣的朋友可以了解一下,这个项目甚至把 Lora、433、GSM、红外线等等各种无线协议统统涵盖进去了,想把传统设备升级到智能设备可以选择这个项目来开发,比如传统电视机的红外遥控器(现在的智能电视简直没法看!!)接入到智能家居生态等等操作。
Pasted image 20231113010238.png
AdGuard 设置
关于 AdGuard 安装的教程有很多,casaos 也支持一键安装,就不赘述了,把网络设置为 host 时可能会出现 53 端口被占用的问题,可以参考这篇文章解决: https://www.moeelf.com/archives/270.html
这里强调一个使用通配符来完成域名解析的配置,在配置这个之前需要将鲁班猫的 IP地址设置成静态 IP,当然也可以使用路由器的 MAC 与 IP 地址绑定的功能,我这里配置的是 192.168.0.199。
Pasted image 20231111160640.png
配置两个*.lbcserver.love 和 lbcserver.love 来解析 lbcserver.love 这个域名,然后把 DNS 服务器,填入路由器的 DNS 设置,或者在 PC 上设置 DNS 为 192.168.0.199。
Pasted image 20231111172355.png
其实 AdGuard 本身是用来拦截广告和控制网站访问的,奈何它原理是作为 DNS 服务器的,配置啥的也比 dnsmasq 要方便得多,直接拿来做家庭 DNS 服务器也挺合理的(还能过滤某些视频网站的广告~~)
Nginx Proxy Manager 设置
继上文,我们已经可以实现对 lbcserver.love 域名的局域网内的解析,但是这个域名对应的 Web 资源也需要设置,但是许多 Web 资源是使用的非 80 端口,例如在刚才安装的 AdGuard 的管理面板的端口为 3000,我们需要用域名来访问这个面板的话就需要 http://lbcserver.love:3000 这个地址,这很不优雅!!
于是我们就需要设置反向代理,总所周知 Nginx 设置反向代理是十分方便的,但是单用 Nginx 的话零代码配置几乎不太可能,所以安装 Nginx Proxy Manager 这个软件还是很方便的,这里设置一个 lbcserver.love 域名和 192.168.0.199 的 88 端口的反向代理,88端口就是上文已经设置好的 casaos 的面板端口。
Pasted image 20231111174031.png
EMQX 的设置
关于EMQX搭建的教程已经十分的丰富了,这里就不再赘述了。
More 。。。。
有了 Docker 可以说几乎无所不能,还有许许多多的功能可以添加,比如 MC 服务器、Gitlab、ESPHome。。。,但是由于我手上的鲁班猫2是2+32G的装完这些软件就已经占用掉了四分之三的 RAM 了,其余的软件包就自行研究吧。
Pasted image 20231111160300.png
最终效果
casaos 主页面(配置好反向代理、DNS 和静态 IP(当然也可以用带有魔法的网络访问,比这个方法更为简单,但是需要自行研究),直接访问域名 http://lbcserver.love/
Pasted image 20231111201902.png
接入我的所有智能设备到 LBC 网关。
Pasted image 20231112175109.png
Home Assistant 主页,可以看到我的各种设备的状态
Pasted image 20231111220339.png
因为我是早上八点半和中午一点半上班,设置一个早上八点二十和中午一点二十自动关闭空调,再也不会出现忘记关空调电费咔咔的涨了。
因为有门磁传感器,所以也设置了一个晚上六点之后开门时判断当前温度是否高于28°,高于的话自动打开空调。
Pasted image 20231112210058.png
装到盒子里,放路由器旁边,等有时间了再画个壳子
_IMG_20231113_011927.jpg
_IMG_20231113_011958_edit_1307010699744056.jpg
配置文件就直接放在附件里了
compose.zip (14.83 KB, 下载次数: 4)


回复

使用道具 举报

发表于 2023-11-27 08:40:04 | 显示全部楼层
真不错   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 06:10 , Processed in 0.131310 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表