实践说明

本次实践将在阿里云服务器上部署Home Assistant服务和MQTT服务,并在树莓派4B上通过GPIO口连接温湿度、火焰和烟雾传感器。最终编写Python程序将树莓派通过MQTT连接到Home Assistant,实现远程监控室内环境条件的效果。双端展现效果如下图。

目录

文章目录

  • 实践说明
  • 目录
  • 物料清单
  • 部署过程
    • Home Assistant部署
    • EMQX部署
    • 树莓派IoT接入MQTT服务器

物料清单

表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接线和传感器介绍这些看另外那篇博文)
实践将主要分为以下两大步:

  1. 部署Home Assistant和MQTT服务器;
  2. 将原有监测设备进行修改并通过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部署

树莓派IoT接入MQTT服务器

将物联网设备(基于树莓派GPIO的传感设备)接入到Home Assistant前,需要先通过MQTT客户端将设备连接到MQTT服务器。
首先介绍一下物联网设备通过消息中间件与HASS通信的过程。将物联网设备(基于树莓派GPIO的传感设备)称为ClientA,将Home Assistant称为ClientB,EMQX服务器为Broker。则一条传感器信息通过MQTT的订阅机制传送的过程如下:

  1. ClientA 连接到 Broker;
  2. ClientB 连接到 Broker,并订阅主题 Topic1;
  3. ClientA 发送给 Broker 一条消息,主题为 Topic1;
  4. Broker 收到 ClientA 的消息,发现 ClientB 订阅了 Topic1,然后将消息转发到 ClientB;
  5. ClientB 从 Broker 接收到该消息。

Eclipse Paho Python (opens new window)为 Eclipse Paho 项目下的 Python 语言版客户端库,该库能够连接到 MQTT Broker 以发布消息,订阅主题并接收已发布的消息。我们将通过Paho把树莓派连接到MQTT服务器。

[1]MQTT Python 客户端库 | EMQX 文档

先在树莓派使用 PyPi 包管理工具安装:

pip3 install paho-mqtt

接着在树莓派使用Python编写主控程序,读取传感器数据并按照一定采样时间间隔通过MQTT Broker发送传感器数据。主控程序代码如下(一些依赖已经提前安装):

# Python 3.7.3 (/usr/bin/python3)
# main_for_raspberry.py
import time
import sys
import Adafruit_DHT
import RPi.GPIO as GPIO
import time
import logging
from datetime import datetime
import json
import paho.mqtt.client as mqttlogging.basicConfig(level=logging.DEBUG)# MQTT服务器配置
MQTT_SERVER_IP = 'xxx.xxx.xxx.xxx' # 你的服务器地址
MQTT_SERVER_PORT = 1883
MQTT_SERVER_KEEPALIVE = 60# 传感器引脚配置
DHT11_chanel = 23 #BCM,GPIO.4
MQ2_chanel = 17 #BCM,GPIO.0
fire_sensor_chanel = 24 #BCM,GPIO.5# init GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(MQ2_chanel,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(fire_sensor_chanel,GPIO.IN)# 连接成功回调
def on_connect(client, userdata, flags, rc):print('Connected with result code '+str(rc))# 消息接收回调
def on_message(client, userdata, msg):print(msg.topic+" "+str(msg.payload))def main():client = mqtt.Client()# 指定回调函数client.on_connect = on_connectclient.on_message = on_message# 建立连接client.connect(MQTT_SERVER_IP, MQTT_SERVER_PORT, MQTT_SERVER_KEEPALIVE)while(True):# 获取并打包传感器信息为JSON格式recDate = datetime.now().strftime('%Y-%m-%d %H:%M:%S')hum,temp = getHumiAndTemp()fireState = isFireOK()smokeState = isMQ2OK()data_obj = json.dumps({'Temperature':temp,'Humidity':hum,'Fire':fireState,'Smoke':smokeState,'Date':recDate})print(data_obj)# 发布消息client.publish('homeassistant/tp_rasp',payload=str(data_obj),qos=0)time.sleep(5)client.loop_forever()# 获取DHT11传感器的温湿度数据
def getHumiAndTemp():return Adafruit_DHT.read_retry(11,DHT11_chanel)# 二值型传感器被触发则返回"on"
# 获取MQ-2烟雾传感器的状态
def isMQ2OK():if(bool(GPIO.input(MQ2_chanel))):return "off"else:return "on" # 获取火焰传感器的状态
def isFireOK():if GPIO.input(fire_sensor_chanel) == GPIO.HIGH:return "off"else:return "on"if __name__ == '__main__':main()

如果提示找不到依赖,则需要分别安装依赖:

# 安装树莓派GPIO驱动
pip3 install PRi.GPIO# 安装DHT11传感器依赖
pip3 install Adafruit_Python_DHT# 其它自行安装

确保树莓派主机可以访问互联网的情况下,启动主控程序。
接着就需要在部署Home Assistant的服务器上,打开配置文件configuration.yaml,本次实践部署中,这个文件在/home/hass/config下,使用nano命令打开(也可用vim):

nano /home/hass/config/configuration.yaml

将其修改为(mqtt项下username和password已去除,实际需要填入):

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:# Text to speech
tts:- platform: google_translategroup: !include groups.yamlautomation: !include automations.yamlscript: !include scripts.yamlscene: !include scenes.yaml# MQTT
mqtt:broker: localhost #MQTT服务器地址port: 1883 #MQTT服务器端口username: #MQTT服务器用户名password: #MQTT服务器密码discovery: truediscovery_prefix: homeassistant# 温湿度传感器的温度值
sensor 1:platform: mqttname: "temperature"state_topic: "homeassistant/tp_rasp"unit_of_measurement: "℃"value_template: '{{ value_json.Temperature }}'device_class: temperature# 温湿度传感器的湿度值
sensor 2:platform: mqttname: "humidity"state_topic: "homeassistant/tp_rasp"unit_of_measurement: "%"value_template: '{{ value_json.Humidity }}'device_class: humidity# 火焰传感器
binary_sensor 1:platform: mqttname: "fire"state_topic: "homeassistant/tp_rasp"value_template: '{{ value_json.Fire }}'device_class: problem# 烟雾传感器
binary_sensor 2:platform: mqttname: "smoke"state_topic: "homeassistant/tp_rasp"value_template: '{{ value_json.Smoke }}'device_class: smoke

Ctrl+O保存,Ctrl+X退出。再用浏览器打开Home Assistant的Web管理页面,在概览页右上角三个点内点击编辑仪表盘选项,添加卡片可以找到配置的传感器。按照规则添加完成以后,部署就完成了。

完成后还可以前往Home Assistant的Github仓库下载安卓端APP,简单连接到部署在服务器的服务程序后,就可以通过手机监控传感器数据了,同时也会将手机的一些传感器信息上传到Home Assistant。最终在Web管理后台的效果如下图:

在Home Assistant的安卓移动App上显示效果如下:

在安卓手机桌面上使用上使用Home Assistant的桌面小部件:

树莓派与传感器组成的IoT设备在运行时如下图所示:

博客首发:https://ranlychan.top/archives/489.html

物联网 | HASS+MQTT+树莓派室内监测小型物联网系统相关推荐

  1. 树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制

    树莓派mqtt协议连接阿里云物联网平台(三) 前面树莓派的数据已经上传到云端,可是我的android手机该如何获取树莓派上传的这些数据呢,,困惑了我好几天的疑问,解开的那一刻,真的时拨开云雾见青天啊. ...

  2. 利用rfcomm实现树莓派与手机通信_工业物联网 | 怎么用NodeRed实现树莓派与阿里云物联网平台通信?虹科告诉你!...

    想获取更多IIOT干货 请点击蓝字,关注我们 虹科工业树莓派 高性能 多接口 宽温--适应恶劣环境 ★★★★★ Node-RED是构建物联网(IoT)应用程序的强大工具,它使用可视化的编程方法,允许开 ...

  3. 阿里云物联网平台体验(树莓派+Python篇)

    阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...

  4. Python3树莓派连接阿里云物联网设备发送接收数据

    Python3连接阿里云物联网设备发送接收数据(树莓派) 阿里云物联网IOT 代码部分 库文件 Windows下安装环境 树莓派安装环境 可能遇到的错误 代码 效果展示 阿里云物联网IOT 首先,准备 ...

  5. 巴歇尔槽流量计远程采集物联网关在明渠流量监测的应用

    巴歇尔槽流量计远程采集物联网关在明渠流量监测的应用 巴歇尔槽流量计主要用于测量明渠内水的流量,如灌渠.污水沟.城市下水道的流量等.传统的做法是通过流量计.采集器.PLC.4G无线远程传输终端,然后在中 ...

  6. 智联物联分享之物联网协议MQTT简述,MQTT协议特点

    接触过物联网设备的朋友们对于MQTT应该都不陌生吧,那MQTT是什么呢?智联物联小编为大家分享下MQTT的简述与特点. MQTT(Message Queuing Telemetry Transport ...

  7. 物联网在改造海上钻井平台监测方面发挥着关键作用

    物联网(IoT)并没有遗漏任何面临挑战的行业,它为这些行业提供了更多发展机会.Biz4Intellia首席执行官SanjeevVerma表示,凭借其在陆上石油和天然气运输方面的持续发展,物联网也已开始 ...

  8. .NET Core开发的iNeuOS物联网平台部署树莓派(raspbian),从网关到云端整体解决方案。助力2019中国.NET峰会。

    .NET Core开发的iNeuOS物联网平台部署树莓派(raspbian),从网关到云端整体解决方案.助力2019中国.NET峰会. 参考文章: (1).NET Core开发的iNeuOS物联网平台 ...

  9. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

最新文章

  1. 设计模式学习2 工厂模式
  2. BZOJ3048: [Usaco2013 Jan]Cow Lineup
  3. Jenkins持续集成环境之凭证管理
  4. websocket与socket.io
  5. SAP(HANA+S/4)上云基础环境部署最佳实践
  6. OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
  7. numpy 删除所有为_用Numpy和Pandas工具分析销售数据
  8. 三星android11推送,三星将在2020年1月开始推送Android 10系统:等太久
  9. Java进行spark计算
  10. Mybatis和Spring整合逆向工程
  11. 压缩与解压2---文件的压缩
  12. chrome调试微信网页_2022.2.9可行
  13. Unified diagnostic services (UDS)
  14. 59% 的程序员曾担心自己猝死!
  15. 端午节,我用Python爬取屈原的诗
  16. wan端口未连接怎么弄_路由器WAN口未连接解决方法,WAN口未连接怎么办
  17. ISCC2016Basic Writeup
  18. 【LWIP】初学STM32+LWIP+网络遇到的基础问题记录
  19. 科学计算机复利现值怎么计算公式,复利现值计算公式
  20. mapbox中文地图_使用 Mapbox 地图

热门文章

  1. Hive学习笔记——parse
  2. Spring 4 Hello World 例子(带源码)
  3. 几何画板是如何证明勾股定理的
  4. 海外 网易云音乐无法正常使用 极简
  5. hibernate一对一主键关联映射(二)---双向关联
  6. Gephi画无向图和有向图(显示节点和边序号)
  7. pdfwin10闪退_windows10打开pdf文件3秒后秒退
  8. 智慧城市水质在线COD监测传感器
  9. mt4 python神经网络_用Python写MT4自动交易策略来炒外汇
  10. 视频教程-软考项目管理知识实战(上)-软考