4-Openwrt MQTT broker使用

mosquitto算是MQTT在linux平台应用比较广泛的开源软件,包含了服务端broker,也提供了lib库给client使用。

1.mosquitto下载编译

到官网下载需要的版本:http://mosquitto.org/files/source/

在openwrt下面添加mosquitto package

files下面放启动脚本和conf配置文件,Makefile里面编译信息,src下面就是官网下载的mosquitto源码

mosquitto/
├── files
│   ├── mosquittoConf
│   │   └── mosquitto.conf
│   └── mosquitto.init
├── Makefile
└── src
    ├── about.html
    ├── aclfile.example
    ├── ChangeLog.txt
    ├── client

mosquitto/Makefile

include $(TOPDIR)/rules.mk

PKG_NAME:=mosquitto
PKG_VERSION:=1.5
PKG_RELEASE:=20191126

PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)_$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk

define Package/$(PKG_NAME)
  SECTION:=net
  CATEGORY:=Network
  TITLE:=mosuqitto
  PKGARCH:=all
  SUBMENU:=net
  URL:= http://mosquitto.org/files/source/mosquitto-1.5.tar.gz
  DEPENDS:= +libopenssl +librt +libuuid
endef

define Package/$(PKG_NAME)/description
 mosquitto
endef

define Build/Prepare
    mkdir -p $(PKG_BUILD_DIR)
    $(CP) ./src/* $(PKG_BUILD_DIR)/
endef

define Build/InstallDev
    $(INSTALL_DIR) $(1)/usr/include
    $(CP) $(PKG_BUILD_DIR)/lib/mosquitto.h $(1)/usr/include
    $(INSTALL_DIR) $(1)/usr/lib
    $(CP) $(PKG_BUILD_DIR)/lib/libmosquitto.so.1 $(1)/usr/lib/
    $(LN) libmosquitto.so.1 $(1)/usr/lib/libmosquitto.so
endef

define Package/$(PKG_NAME)/install
    $(INSTALL_DIR) $(1)/usr/lib
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/libmosquitto.so.1 $(1)/usr/lib/
    $(LN) libmosquitto.so.1 $(1)/usr/lib/libmosquitto.so
    $(INSTALL_DIR) $(1)/usr/sbin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mosquitto $(1)/usr/sbin/mosquitto
    $(INSTALL_DIR) $(1)/etc/mosquittoConf
    $(CP) ./files/mosquittoConf/* $(1)/etc/mosquittoConf/
    $(INSTALL_DIR) $(1)/etc/init.d
    $(INSTALL_BIN) ./files/mosquitto.init $(1)/etc/init.d/mosquitto
endef

$(eval $(call BuildPackage,$(PKG_NAME)))

mosquitto/files/mosquitto.init

!/bin/sh /etc/rc.common
# Basic init script for mosquitto
# April 2012, OpenWrt.org
# Provides support for the luci-app-mosquitto package, if installed

START=80
USE_PROCD=1

CONF=/etc/mosquittoConf/mosquitto.conf

start_service() {
    procd_open_instance
    procd_set_param command mosquitto
    procd_append_param command -c $CONF
    procd_set_param respawn
    [ -e /proc/sys/kernel/core_pattern ] && {
        procd_set_param limits core="unlimited"
    }   
    procd_close_instance
}

mosquitto/files/mosquittoConf/mosquitto.conf

user root

listener 1883

log_type error
log_type warning
log_type notice
log_type information
log_type debug

allow_anonymous true

上面文件都添加好之后,在.config里面选中mosquitto,编译

CONFIG_PACKAGE_mosquitto=y

2.mosquitto配置启动

编译正常后,在openwrt上面使用,上面在init.d里面加了自启动,先/etc/init.d/mosquitto stop停止到手动启动

mosquitto -c /etc/mosquittoConf/mosquitto.conf

mosquitto启动的时候根据mosquitto.conf里面的信息进行启动,默认监听端口是1883,打开debug信息,允许匿名登录allow_anonymous true

正常启动如下:

root@openwrt:/# mosquitto -c /etc/mosquittoConf/mosquitto.conf 
1593326317: mosquitto version 1.5 starting
1593326317: Config loaded from /etc/mosquittoConf/mosquitto.conf.
1593326317: Opening ipv6 listen socket on port 1883.
1593326317: Warning: Address family not supported by protocol
1593326317: Opening ipv4 listen socket on port 1883.
1593326317: Warning: Mosquitto should not be run as root/administrator.

3.命令行发布订阅测试

上面mosquitto Broker启动之后,就可以用命令mosquitto_submosquitto_pub进行测试是否正常

跟在ubuntu上面的测试一样,先订阅

root@zihome:/# mosquitto_sub -t "local/test" -h 127.0.0.1 -p 1883 -d -i ubuntu_client1
Client ubuntu_client1 sending CONNECT
Client ubuntu_client1 received CONNACK (0)
Client ubuntu_client1 sending SUBSCRIBE (Mid: 1, Topic: local/test, QoS: 0)
Client ubuntu_client1 received SUBACK
Subscribed (mid: 1): 0

此时也可以看到Broker上面的log,添加了一个设备

1593326374: New connection from 127.0.0.1 on port 1883.
1593326374: New client connected from 127.0.0.1 as ubuntu_client1 (c1, k60).
1593326374: No will message specified.
1593326374: Sending CONNACK to ubuntu_client1 (0, 0)
1593326374: Received SUBSCRIBE from ubuntu_client1
1593326374:     local/test (QoS 0)
1593326374: Sending SUBACK to ubuntu_client1

再开启一个终端,发布主题

root@zihome:/# mosquitto_pub -t "local/test" -m "{test:111}" -h 127.0.0.1 -p 1883 -d -i ubuntu_client2
Client ubuntu_client2 sending CONNECT
Client ubuntu_client2 received CONNACK (0)
Client ubuntu_client2 sending PUBLISH (d0, q0, r0, m1, 'local/test', ... (10 bytes))
Client ubuntu_client2 sending DISCONNECT

可以看到Broker收到client2的消息后,转发给client1

1593326497: New client connected from 127.0.0.1 as ubuntu_client2 (c1, k60).
1593326497: No will message specified.
1593326497: Sending CONNACK to ubuntu_client2 (0, 0)
1593326497: Received PUBLISH from ubuntu_client2 (d0, q0, r0, m0, 'local/test', ... (10 bytes))
1593326497: Sending PUBLISH to ubuntu_client1 (d0, q0, r0, m0, 'local/test', ... (10 bytes))
1593326497: Received DISCONNECT from ubuntu_client2
1593326497: Client ubuntu_client2 disconnected.

client1收到Broker转发的数据

Client ubuntu_client1 received PINGRESP
Client ubuntu_client1 received PUBLISH (d0, q0, r0, m0, 'local/test', ... (10 bytes))
{test:111}

测试一切正常。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343