在x64上构建智能家居(home assistant) (五) 构建附加服务MQTT

home assistant中通常需要使用MQTT交换数据。
 

 此篇安装MQTT服务。

关于MQTT参考

MQTT协议报文格式解析 - 知乎一、概述MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。v3.1.1版本协议仅仅包含14个协议帧,它格式简单、规范且易于实现,非常适合物联网场景使用。 本文开始梳理MQTT协议的报文格式。官方的协议文档…https://zhuanlan.zhihu.com/p/429891532

安装mosquitto

apt-cache search mosquitto

sudo apt install mosquitto mosquitto-clients mosquitto-dev -y

安装后自动创建mosquitto账户作为mosquitto的操作账户。

常规配置
在使用之前,我们需要对mosquitto进行一些配置。首先打开配置文件

# vim.tiny /etc/mosquitto/mosquitto.conf 
在文件中找到如下内容并按要求修改。

# 端口号设置 
listener 1883 
 
# 配置pid文件路径 
pid_file /run/mosquitto/mosquitto.pid
 
# 消息持久存储 
persistence true
persistence_location /var/lib/mosquitto/
 
# 日志文件 
log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

# 禁止匿名访问 
allow_anonymous false
# 认证配置 
password_file /etc/mosquitto/pwfile
# 权限配置 
acl_file /etc/mosquitto/aclfile

没有则创建文件
touch /etc/mosquitto/pwfile


设置用户名和密码
什么是密码文件
用来把需要访问mosquitto的用户名和密码放到单个文件中。当只有少量用户使用mosquitto时,这是一种有效的验证方法。

服务开启后,输入如下命令,根据提示输入两遍密码
mosquitto_passwd /etc/mosquitto/pwfile 用户名

创建密码文件并新增用户
生成一个名为mqtt,密码也为mqtt的用户。

$ mosquitto_passwd -c /etc/mosquitto/pwfile mqtt 
执行该语句后需要两次输入密码。

再增加一个名为mqtt1,密码也为mqtt1的用户。

$ mosquitto_passwd /etc/mosquitto/pwfile mqtt1 
执行该语句后需要两次输入密码。

创建角色权限
新增一个aclfile文件.

$ touch /etc/mosquitto/aclfile 
在里面写入如下内容

# mqtt只能读取以test为前缀的topic消息 
user mqtt 
topic read test/# 
 
# mqtt1只能往以test为前缀的topic中发消息 
user mqtt1 
topic write test/# 
执行mosquitto 2
在mosquitto用户下,执行如下命令,可启动mosquitto。其中:

-c    指定配置文件
-d    后台运行
# su - mosquitto
$ mosquitto -c /etc/mosquitto/mosquitto.conf -d 
systemctl start mosquitto

启动后程序应阻塞在控制台中。

  • 查看运行状态 systemctl status mosquitto
  • 开启/关闭systemctl start/stop mosquitto

测试mosquitto 2
mosquitto在安装后,自带了两个小程序,一个是订阅端mosquitto_sub,一个是发布端mosquitto_pub。下面我们先启动订阅端,再使用发布端发布消息。

mosquitto_sub
执行如下命令

# su - mosquitto
$ mosquitto_sub -h 127.0.0.1 -p 1883 -t "test/#" -u mqtt -P mqtt -i "sub1" 
参数含义如下:

-h    mosquitto服务器地址。
-p    mosquitto服务器端口号。
-t    需要发布的topic,此处需要匹配订阅端的topic通配符,否则订阅端无法接收。
-u    之前在aclfile中配置过的用户名,注意需要有write权限。
-P    用户名对应的密码,之前在pwfile中配置过。
-i    客户端id,这个字符串在mosquitto服务器中务必唯一。若不加该参数,mosquitto会默认给你唯一id。
启动后程序应阻塞在控制台中。

mosquitto_pub
执行如下命令

# su - mosquitto
$ mosquitto_pub -h 127.0.0.1 -p 1883 -t "test/iot" -u mqtt1 -P mqtt1 -i "pub1" -m "temp:36,humi:75" 
参数含义如下:

-h    mosquitto服务器地址。
-p    mosquitto服务器端口号。
-t    需要发布的topic,此处需要匹配订阅端的topic通配符,否则订阅端无法接收。
-u    之前在aclfile中配置过的用户名,注意需要有write权限。
-P    用户名对应的密码,之前在pwfile中配置过。
-i    客户端id,这个字符串在mosquitto服务器中务必唯一。若不加该参数,mosquitto会默认给你唯一id。
-m    发送的内容正文。在例子中假设temp是温度,humi是湿度。
发布完成后,mosquitto_pub会立刻返回,mosquitto_sub的控制台应显示收到的消息:


若能正常收到消息,则说明mosquitto已经被正确配置。

参考:

[linux] Ubuntu20.04上安装搭建MQTT服务器mosquitto_slimmm的博客-CSDN博客_ubuntu安装mqtt服务器mosquitto是支持MQTT v3.1 的开源消息代理软件,而且搭建更加方便快捷。本博文记录了MQTT协议简介 和 在Ubuntu 20.04上安装和配置mosquittoMQTT协议简介MQTT(Message Queuing Telemetry Transport)消息队列遥测传输协议,是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。.MQTT最大优点在于,可以以极少的代码和有限的带宽,为连.https://blog.csdn.net/slimmm/article/details/109021321

Mosquitto 搭建及配置_量子物理学的博客-CSDN博客_mosquitto简介: Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本3.1和3.1.1、5.0。Mosquitto轻量,适用于低功耗单板计算机到完整服务器的所有设备。其他服务器代理实现:https://github.com/mqtt/mqtt.github.io/wiki/servers各操作系统安装指引:https://mosquitto.org/download/下载安装以Ubuntu16为例添加到存储库列表sudo apt-add-repository ppa:mosqhttps://blog.csdn.net/yiyihuazi/article/details/122873234

在homeassistant中配置MQTT。搜索并选择MQTT。

将搭建好的mosquitto服务信息绑定到Home Assistant中,这样Home Assistant就可以接收MQTT信息并展示。


点击完成,我们就能够看到界面。

 创建传感器

使用MQTT Discovery

新建一个温度传感器和一个湿度传感器,内容为json格式,字段含义见附1。

$ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/sensor/room1-temp/config" -u mqtt -P mqtt -i "pub1" -m '{"device_class": "temperature", "name": "ROOM1-TEMP", "unique_id":"room1-temp", "state_topic": "homeassistant/sensor/room1/state", "unit_of_measurement": "°C", "value_template": "{{ value_json.temp}}" }'
$ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/sensor/room1-humi/config" -u mqtt -P mqtt -i "pub1" -m '{"device_class": "humidity", "name": "ROOM1-HUMI", "unique_id":"room1-humi", "state_topic": "homeassistant/sensor/room1/state", "unit_of_measurement": "%", "value_template": "{{ value_json.humi}}" }'

打开配置->实体注册表,在里面我们应该能够看到刚创建的温度和湿度传感器。

在概览页面(也就是首页),我们可以通过编辑Dashboard的方式把传感器数据放在页面上。

 

自行发送一个传感器数据 

作为测试,我们可以使用mosquitto的工具自己发送一个数据,如果Web页面能够正常展示数据,说明我们的Home Assistant已经彻底配置完成。

$ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/sensor/room1/state" -u mqtt -P mqtt -i "pub1" -m '{ "temp": 27.20, "humi": 40.70 }'

附1 discovery参数表

参数含义
-tmqtt中的发送主题,格式为homeassistant/sensor/{name}/config
-umqtt的用户名
-Pmqtt的密码
-imqtt的clientId,注意在连接同一个MQTT Server的时候不要重复
-mdevice_class:设备类型,支持列表见https://www.home-assistant.io/integrations/sensor/#device-class,若设备与列表中均不匹配(例如甲醛传感器),则在json中不要包含该字段。
name:显示在界面上的传感器名称。
unique_id:全局唯一的传感器id,此处若不传数据,在系统中将无法更改属性。
state_topic:当传递传感器数据时需要订阅的主题,格式为homeassistant/sensor/{name}/state
unit_of_measurement:量纲,此处可以自由传递字符串,但若不传,前端展示会出现问题。
value_template:在传感器数据中取哪个json字段作为数据。

参考文献

  1. Documentation - Home Assistant (home-assistant.io)

Configuration.yaml - Home Assistant

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值