MQTT搭建
直接使用mosquitto完成服务器搭建
mosquitto官网
一、安装
安装服务器端
sudo apt-get install mosquitto
安装客户端
sudo apt-get install mosquitto-clients
二、配置
- 添加配置文件
sudo vim /etc/mosquitto/conf.d/myconfig.conf
添加以下内容
port
1883
listener
1884
listener
1885
protocol mqtt
listener
1886
protocol mqtt
allow_anonymous
false
password_file /etc/mosquitto/pwfile
PS:主配置文件mosquitto.conf的内容一般为
pid_file /var/run/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
PS:可使用命令指定配置文件路径
mosquitto -c /etc/mosquitto/mosquitto.conf -d
-c 指定配置文件
-d 表示后台启动
- 添加用户&密码
sudo mosquitto_passwd -c /etc/mosquitto/pwfile username
- 用户权限配置aclfile
sudo vim /etc/mosquitto/aclfile
编辑内容
user user1
topic
write test/
topic
read $SYS/
user user2
topic
read test/
查看相关参数说明(附文末)
mosquitto_sub --help
mosquitto_pub --help
三、启动与测试
- 启动
sudo service mosquitto start
sudo service mosquitto status
sudo service mosquitto stop
- 测试
mosquitto_sub -h localhost -t
"test/#" -u 用户名 -P 密码 -i “client1”
发布主题(terminal 2)
mosquitto_pub -h localhost -t
"test/testTopic" -u 用户名 -P 密码 -m
"Hello MQTT from mosquitto-clients"
mosquitto_sub -h localhost -t
"test/#" -u hanmeimei -P
123456 -i
"client1"
订阅系统主题
mosquitto_sub -h localhost –t
'$SYS/broker/clients/active' -u lilei -P
123456 -i
"client2"
发布
mosquitto_pub -h localhost -t
"test/abc" -u lilei -P
123456 -i
"client3" -m
"How are you?"
卸载与重新安装MQTT
- 首先检索相关文件位置 mosquitto mosquitto_sub mosquitto_pub mosquitto_passwd
whereis mosquitto
- 然后使用rm命令删除相关文件
sudo rm -rf /etc/mosquitto
sudo rm /usr/sbin/mosquitto /usr/share/man/man8/mosquitto.8.gz
另外三个文件同理
- 重新安装
sudo apt-get remove --purge mosquitto
sudo apt-get remove --purge mosquitto-clients
四、部署mqtt_bridge1. 创建Catkin工作空间(若无Catkin工作空间)
详情见此教程
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
2. 编译工作空间,设置环境变量
cd ~/catkin_ws
catkin_make
source devel/setup.bash
3. clone mqtt_bridge repositories
cd ~/catkin_ws/src
git clone git@github.com:groove-x/mqtt_bridge.git
4. 配置该repository所需环境
详情见此教程
配置环境
sudo apt install python3-pip
sudo apt install ros-noetic-rosbridge-library
sudo apt install mosquitto mosquitto-clients
安装相关依赖
sudo pip3
install -r dev-requirements.txt
PS:因为ros默认使用python2,而mqtt_bridge包使用的是python3编写的,所以此处可能会出现报错,因为需要用python3进行安装。
首先在主目录中打开显示隐藏文件选项(Crtl+H),找到.bashrc文件,在末尾加入一行代码
alias python=python3
此时你还不一定能用,因为你的pip3不一定是最新版本,所以可能无法找到比较新的依赖,而mqtt_bridge包却又使用比较新的依赖。因此要更新pip3:
sudo python3 -m pip
install --upgrade pip
若出现报错则删除dev-requirements.txt里面的git+那一行。这时候,安装就没问题了,如果还有什么问题的话,翻墙即可。
sudo pip3
install -r dev-requirements.txt
5. 重新编译并配置环境变量
编译
catkin_make
配置环境变量后即可使用
source devel/setup.bash
启动自带的demo
roslaunch mqtt_bridge demo.launch
参数说明
persistence
true
log_dest none
mosquitto_sub 是一个简单的 mqtt 客户端,它将订阅一组主题并打印它收到的所有消息。在 libmosquitto
1.6.9 上运行的 mosquitto_sub 版本
1.6.9。
Usage: mosquitto_sub
{[-h host
] [-p port
] [-u username
] [-P password
] -t topic
| -L URL
[-t topic
]}
[-c
] [-k keepalive
] [-q qos
]
[-C msg_count
] [-E
] [-R
] [--retained-only
] [--remove-retained
] [-T filter_out
] [-U topic
...
]
[-F format
]
[-W timeout_secs
]
[-A bind_address
]
[-i id
] [-I id_prefix
]
[-d
] [-N
] [--quiet
] [-v
]
[--will-topic
[--will-payload payload
] [--will-qos qos
] [--will-retain
]]
[{--cafile
file | --capath dir
} [--cert file
] [--key file
]
[--ciphers ciphers
] [--insecure
]
[--tls-alpn protocol
]
[--tls-engine engine
] [--keyform keyform
] [--tls-engine-kpass-sha1
]]
[--psk hex-key --psk-identity identity
[--ciphers ciphers
]]
[--proxy socks-url
]
[-D
command identifier value
]
mosquitto_sub --help
-A :将传出套接字绑定到此主机/IP 地址。用于控制客户端通过哪个接口进行通信。
-c :禁用“干净会话”(在客户端断开连接时存储订阅和未决消息)。
-C :收到“msg_count”消息后断开连接并退出。
-d :启用调试消息。
-D:定义 MQTT v5 属性。有关更多详细信息,请参阅文档。
-E :一旦经纪人确认所有订阅后退出。
-F :输出格式。
-h
: 要连接的 mqtt 主机。默认为本地主机。
-i :用于此客户端的 ID。默认为 mosquitto_sub_ 附加进程 ID。
-I :将客户端 ID 定义为附加进程 ID 的 id_prefix。当代理使用 clientid_prefixes 选项时很有用。
-k :在几秒钟内为该客户端保持活动状态。默认为
60。
-L :将用户、密码、主机名、端口和主题指定为 URL,格式为:mqtt
(s
)://
[username
[:password
]@
]host
[:port
]/topic
-N :打印有效负载时不添加行尾字符。
-p :要连接的网络端口。普通 MQTT 默认为
1883,基于 TLS 的 MQTT 默认为
8883。
-P:提供密码
-q :用于订阅的服务质量级别。默认为
0。
-R :不打印过时的消息(带有保留集的消息)。
-t
: 要订阅的 mqtt 主题。可以重复多次。
-T :过滤掉结果的主题字符串。可能会重复。
-u :提供用户名
-U :取消订阅主题。可能会重复。
-v :详细打印发布的消息。
-V :指定连接时使用的 MQTT 协议的版本。可以是 mqttv5、mqttv311 或 mqttv31。默认为 mqttv311。
-W :以秒为单位指定处理传入 MQTT 消息的超时时间。
--help :显示此消息。
--quiet :不打印错误信息。
--retained-only :仅处理设置了保留标志的消息,并在收到第一个非保留消息时退出。
--remove-retained :向服务器发送一条消息以清除任何收到的保留消息 使用 -T 过滤掉您不想被清除的消息。
--will-payload :客户端 Will 的有效负载,由代理发送,以防意外断开连接。如果未给出并且设置了 will-topic,则将发送零长度消息。
--will-qos :客户端 Will 的 QoS 级别。
--will-retain :如果给定,使客户端将保留。
--will-topic
: 发布客户端 Will 的主题。
--cafile :包含可信 CA 证书的文件的路径,以启用基于加密证书的通信。
--capath :包含可信 CA 证书以启用加密通信的目录的路径。
--cert :用于身份验证的客户端证书,如果服务器需要。
--key :如果服务器需要,用于身份验证的客户端私钥。
--keyform :密钥文件类型,可以是“pem”或“engine”。
--ciphers :要支持的 TLS 密码的 openssl 兼容列表。
--tls-version :TLS 协议版本,可以是 tlsv1.3 tlsv1.2 或 tlsv1.1 之一。如果可用,默认为 tlsv1.2。
--insecure :不检查服务器证书主机名是否与远程主机名匹配。使用此选项意味着您无法确定远程主机是您希望连接的服务器,因此不安全。不要在生产环境中使用此选项。
--tls-engine :如果设置,则启用 SSL 引擎设备。
--tls-engine-kpass-sha1 :与所选 SSL 引擎一起使用的密钥密码的 SHA1。
--psk :十六进制的预共享密钥(无前导 0x)以启用 TLS-PSK 模式。
--psk-identity :TLS-PSK 模式的客户端身份字符串。
--proxy
: SOCKS5 代理 URL 的形式: socks5h://
[username
[:password
]@
]hostname
[:port
] 仅支持“none”和“username”身份验证。
mosquitto_pub 是一个简单的 mqtt 客户端,它将在单个主题上发布消息并退出。mosquitto_pub 版本
1.6.9 在 libmosquitto
1.6.9 上运行。
Usage: mosquitto_pub
{[-h host
] [-p port
] [-u username
] [-P password
] -t topic
| -L URL
}
{-f
file | -l
| -n
| -m message
}
[-c
] [-k keepalive
] [-q qos
] [-r
] [--repeat N
] [--repeat-delay time
]
[-A bind_address
]
[-i id
] [-I id_prefix
]
[-d
] [--quiet
]
[-M max_inflight
]
[-u username
[-P password
]]
[--will-topic
[--will-payload payload
] [--will-qos qos
] [--will-retain
]]
[{--cafile
file | --capath dir
} [--cert file
] [--key file
]
[--ciphers ciphers
] [--insecure
]
[--tls-alpn protocol
]
[--tls-engine engine
] [--keyform keyform
] [--tls-engine-kpass-sha1
]]
[--psk hex-key --psk-identity identity
[--ciphers ciphers
]]
[--proxy socks-url
]
[--property
command identifier value
]
[-D
command identifier value
]
mosquitto_pub --help
-A :将传出套接字绑定到此主机/IP 地址。用于控制客户端通过哪个接口进行通信。
-d :启用调试消息。
-D:定义 MQTT v5 属性。有关更多详细信息,请参阅文档。
-f :将文件的内容作为消息发送。
-h
: 要连接的 mqtt 主机。默认为本地主机。
-i :用于此客户端的 ID。默认为 mosquitto_pub_ 附加进程 ID。
-I :将客户端 ID 定义为附加进程 ID 的 id_prefix。当代理使用 clientid_prefixes 选项时很有用。
-k :在几秒钟内为该客户端保持活动状态。默认为
60。
-L :将用户、密码、主机名、端口和主题指定为 URL,格式为:mqtt
(s
)://
[username
[:password
]@
]host
[:port
]/topic
-l :从标准输入读取消息,为每一行发送单独的消息。
-m :要发送的消息有效负载。
-M
: QoS
1/2 的最大飞行消息数
..
-n :发送一个空(零长度)消息。
-p :要连接的网络端口。普通 MQTT 默认为
1883,基于 TLS 的 MQTT 默认为
8883。
-P:提供密码
-q :用于所有消息的服务质量级别。默认为
0。
-r :应该保留消息。
-s :从标准输入读取消息,将整个输入作为消息发送。
-t :要发布到的 mqtt 主题。
-u :提供用户名
-V :指定连接时使用的 MQTT 协议的版本。可以是 mqttv5、mqttv311 或 mqttv31。默认为 mqttv311。
--help :显示此消息。
--repeat
: 如果发布模式为 -f、-m 或 -s,则重复发布 N 次。
--repeat-delay :如果使用 --repeat,则在发布之间等待时间秒数。默认为
0。
--quiet :不打印错误信息。
--will-payload :客户端 Will 的有效负载,由代理发送,以防意外断开连接。如果未给出并且设置了 will-topic,则将发送零长度消息。
--will-qos :客户端 Will 的 QoS 级别。
--will-retain :如果给定,使客户端将保留。
--will-topic
: 发布客户端 Will 的主题。
--cafile :包含可信 CA 证书以启用加密通信的文件的路径。
--capath :包含可信 CA 证书以启用加密通信的目录的路径。
--cert :用于身份验证的客户端证书,如果服务器需要。
--key :如果服务器需要,用于身份验证的客户端私钥。
--keyform :密钥文件类型,可以是“pem”或“engine”。
--ciphers :要支持的 TLS 密码的 openssl 兼容列表。
--tls-version :TLS 协议版本,可以是 tlsv1.3 tlsv1.2 或 tlsv1.1 之一。如果可用,默认为 tlsv1.2。
--insecure :不检查服务器证书主机名是否与远程主机名匹配。使用此选项意味着您无法确定远程主机是您希望连接的服务器,因此不安全。不要在生产环境中使用此选项。
--tls-engine :如果设置,则启用 TLS 引擎设备。
--tls-engine-kpass-sha1 :与所选 SSL 引擎一起使用的密钥密码的 SHA1。
--psk :十六进制的预共享密钥(无前导 0x)以启用 TLS-PSK 模式。
--psk-identity :TLS-PSK 模式的客户端身份字符串。
--proxy
: SOCKS5 代理 URL 的形式: socks5h://
[username
[:password
]@
]hostname
[:port
] 仅支持“none”和“username”身份验证。
文章评论(0条评论)
登录后参与讨论