实践说明
本次实践将在阿里云服务器上部署Home Assistant服务和MQTT服务,并在树莓派4B上通过GPIO口连接温湿度、火焰和烟雾传感器。最终编写Python程序将树莓派通过MQTT连接到Home Assistant,实现远程监控室内环境条件的效果。双端展现效果如下图。
目录
物料清单
表1 实践过程所用主要物料及说明
配件名称 |
数量 |
功能 |
Raspberry Pi 4B |
1 |
物联网终端设备主机 |
闪迪Micro SD 16GB |
1 |
为树莓派烧录系统 |
树莓派专用电源适配器及电源线 |
1 |
为树莓派供电 |
MQ-2烟雾传感器 |
1 |
检测燃烧产生烟雾及有害气体 |
火焰传感器 |
1 |
检测一定线性范围的火焰 |
DHT11温湿度传感器 |
1 |
检测室内温度和相对湿度 |
杜邦线 |
9 |
连接传感器和树莓派电脑 |
阿里云服务器2G内存50G磁盘 |
1 |
部署HASS和MQTT服务 |
部署过程
本次实践将在我的另外一篇文章“基于树莓派4B的室内环境监测和预警系统”中的物联网设备的基础上,进行进一步扩展修改,设计和部署一个较为完善的小型智能物联网系统,包含服务器、消息中间件、自制IoT设备和用户客户端(Web管理后台)。(具体GPIO接线和传感器介绍这些看另外那篇博文) 实践将主要分为以下两大步:
- 部署Home Assistant和MQTT服务器;
- 将原有监测设备进行修改并通过MQTT接入Home Assistant。
其中第一步需要将Home Assistant和组件EMQX安装至系统中,且由于docker技术的便捷易用,上述的框架和组件均在基于docker技术下的linux系统下安装配置。此处不再赘述,按照网上其它流程走即可。下面主要提一下Home Assistant的安装参数。
Home Assistant部署
表2 系统状态参数表
系统状态参数 |
值 |
版本 |
core-2021.12.8 |
安装类型 |
Home Assistant Container |
开发版 |
false |
Supervisor |
false |
Docker |
true |
用户 |
root |
虚拟环境 |
false |
Python 版本 |
3.9.7 |
操作系统系列 |
Linux |
操作系统版本 |
4.18.0-305.19.1.el8_4.x86_64 |
CPU 架构 |
x86_64 |
时区 |
Asia/Shanghai |
EMQX部署
如果你有一台自己的云服务器的话,你可以使用EMQX开源版进行部署,参照EMQX开源版部署方法官方文档。当然,为了省事省钱,我推荐你使用免费的MQTT服务器,由EMQX提供:EMQX的免费MQTT服务器。
树莓派IoT接入MQTT服务器
将物联网设备(基于树莓派GPIO的传感设备)接入到Home Assistant前,需要先通过MQTT客户端将设备连接到MQTT服务器。 首先介绍一下物联网设备通过消息中间件与HASS通信的过程。将物联网设备(基于树莓派GPIO的传感设备)称为ClientA,将Home Assistant称为ClientB,EMQX服务器为Broker。则一条传感器信息通过MQTT的订阅机制传送的过程如下:
- ClientA 连接到 Broker;
- ClientB 连接到 Broker,并订阅主题 Topic1;
- ClientA 发送给 Broker 一条消息,主题为 Topic1;
- Broker 收到 ClientA 的消息,发现 ClientB 订阅了 Topic1,然后将消息转发到 ClientB;
- ClientB 从 Broker 接收到该消息。
Eclipse Paho Python (opens new window)为 Eclipse Paho 项目下的 Python 语言版客户端库,该库能够连接到 MQTT Broker 以发布消息,订阅主题并接收已发布的消息。我们将通过Paho把树莓派连接到MQTT服务器。
先在树莓派使用 PyPi 包管理工具安装:
接着在树莓派使用Python编写主控程序,读取传感器数据并按照一定采样时间间隔通过MQTT Broker发送传感器数据。主控程序代码如下(一些依赖已经提前安装):
如果提示找不到依赖,则需要分别安装依赖:
确保树莓派主机可以访问互联网的情况下,启动主控程序。 接着就需要在部署Home Assistant的服务器上,打开配置文件configuration.yaml,本次实践部署中,这个文件在/home/hass/config下,使用nano命令打开(也可用vim):
将其修改为(mqtt项下username和password已去除,实际需要填入):
Ctrl+O保存,Ctrl+X退出。再用浏览器打开Home Assistant的Web管理页面,在概览页右上角三个点内点击编辑仪表盘选项,添加卡片可以找到配置的传感器。按照规则添加完成以后,部署就完成了。
完成后还可以前往Home Assistant的Github仓库下载安卓端APP,简单连接到部署在服务器的服务程序后,就可以通过手机监控传感器数据了,同时也会将手机的一些传感器信息上传到Home Assistant。最终在Web管理后台的效果如下图:
在Home Assistant的安卓移动App上显示效果如下:
在安卓手机桌面上使用上使用Home Assistant的桌面小部件:
树莓派与传感器组成的IoT设备在运行时如下图所示: