首页 > 其他分享 >物联网 | HASS+MQTT+树莓派室内监测小型物联网系统

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

时间:2023-03-21 21:33:18浏览次数:50  
标签:树莓 Assistant 联网 MQTT 传感器 GPIO Home

实践说明

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

物联网 | HASS+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部署

如果你有一台自己的云服务器的话,你可以使用EMQX开源版进行部署,参照​​EMQX开源版部署方法官方文档​​​。当然,为了省事省钱,我推荐你使用免费的MQTT服务器,由EMQX提供:​​EMQX的免费MQTT服务器。​

物联网 | HASS+MQTT+树莓派室内监测小型物联网系统_树莓派_02

树莓派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服务器。

​​​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 mqtt

logging.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_connect
client.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_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

# MQTT
mqtt:
broker: localhost #MQTT服务器地址
port: 1883 #MQTT服务器端口
username: #MQTT服务器用户名
password: #MQTT服务器密码
discovery: true
discovery_prefix: homeassistant

# 温湿度传感器的温度值
sensor 1:
platform: mqtt
name: "temperature"
state_topic: "homeassistant/tp_rasp"
unit_of_measurement: "℃"
value_template: '{{ value_json.Temperature }}'
device_class: temperature

# 温湿度传感器的湿度值
sensor 2:
platform: mqtt
name: "humidity"
state_topic: "homeassistant/tp_rasp"
unit_of_measurement: "%"
value_template: '{{ value_json.Humidity }}'
device_class: humidity

# 火焰传感器
binary_sensor 1:
platform: mqtt
name: "fire"
state_topic: "homeassistant/tp_rasp"
value_template: '{{ value_json.Fire }}'
device_class: problem

# 烟雾传感器
binary_sensor 2:
platform: mqtt
name: "smoke"
state_topic: "homeassistant/tp_rasp"
value_template: '{{ value_json.Smoke }}'
device_class: smoke

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

物联网 | HASS+MQTT+树莓派室内监测小型物联网系统_Python_03

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

物联网 | HASS+MQTT+树莓派室内监测小型物联网系统_MQTT_04

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

物联网 | HASS+MQTT+树莓派室内监测小型物联网系统_树莓派_05

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

物联网 | HASS+MQTT+树莓派室内监测小型物联网系统_Python_06

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

物联网 | HASS+MQTT+树莓派室内监测小型物联网系统_Python_07

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

标签:树莓,Assistant,联网,MQTT,传感器,GPIO,Home
From: https://blog.51cto.com/u_15388863/6141101

相关文章

  • 关于树莓派pico W 初探避坑
    1、上传UF2文件,win11系统不出现RPI-RP2的新卷    picow导入固件时,需要按住BOOTSEL按钮,然后插上USB。按照该方法操作,win11资源管理器应该出现一个RPI-RP2的新卷,但是......
  • MQTTX 接收不到订阅数据的排查
    场景JAVA数据发送端有日志显示数据已经发布出去了。MQTTX订阅该主题,没有收到数据,刚开始能够收到数据,过段时间就无法订阅接收到数据,断开重连,重新订阅也无法接收到数据.怀疑MQ......
  • 计讯物联工业路由器基于5G LAN技术成为工业互联网发展的“加速器”
    随着5G的成熟发展,其易部署、低时延、高可靠、大带宽、广连接的特性助力传统工业智能数字化转型,解决了传统工业的布线繁琐、通信环境复杂易造成干扰、对时延与稳定性更加敏......
  • 智慧大棚数据可视化物联网系统 构建高效农业
    农业的发展离不开农作物的生长,而农作物的生长会受到多方面的限制,主要是外界因素,因此,智慧农业便将传统农业与科技结合起来,衍生出智慧大棚,从而让农业得以快速发展。建设背景我......
  • 什么是物联网模块?
    物联网模块是物联网的核心,它是嵌入在物体或机器内的小型电子设备,能够将所有的物体都连接到无线网络并发送、接收数据,是连接物联网认知层和传输层的重要环节,改变了人们的生......
  • 江西互联网医院开发|智慧医院系统|线上问诊平台搭建
     江西互联网医院开发|智慧医院系统|线上问诊平台搭建|南昌市|赣州市|宜春市|吉安市|上饶市|抚州市|九江市|景德镇市|萍乡市|新余市|鹰潭 互联网医院最近发展的非常迅......
  • 数字农业:智慧农业三维可视化物联网系统
    农业的发展离不开农作物的生长,而农作物的生长会受到多方面的限制,主要是外界因素,因此,智慧农业便将传统农业与科技结合起来,衍生出智慧大棚,从而让农业得以快速发展。建设背景......
  • 海南互联网医院开发|智慧医院系统搭建|线上问诊系统定制
     海南互联网医院开发|智慧医院系统搭建|线上问诊系统定制|海口市|三亚市|三沙市|儋州市 为了缓解百姓就医难的问题,全国各地的医院都开始建立了互联网医院系统,患者可以......
  • 海南互联网医院系统搭建|智慧医院系统开发|在线问诊系统
     海南互联网医院系统搭建|智慧医院系统开发|在线问诊系统|海口市|三亚市|三沙市|儋州市 互联网医院最近发展的非常迅速,备受社会各界人士关注,很多人也是切身实际地在使......
  • STM32+ESP8ESP8266+SoftAP一键配网接入物联网平台
       Wi-Fi配网,指由外部向Wi-Fi设备提供SSID和密码(PSW),让Wi-Fi设备可以连接指定的热点或路由器,并加入后者所建立的Wi-Fi网络。   对于具备丰富人机界面包......