mqtt插件侧README.md 3.1 KB

库介绍

这里用到了3个库,库文件的路径为
/var/lib/mosquitto/db/user.db
/var/lib/mosquitto/db/acl.db
/var/lib/mosquitto/db/dev.db

/var/lib/mosquitto/db/user.db下只有一个表
表名为user,是用户表,建表语句如下

CREATE TABLE `user` (
  `uid` INTEGER PRIMARY KEY AUTOINCREMENT,
  `clientid` TEXT NOT NULL,
  `user` TEXT NOT NULL,
  `pass` TEXT NOT NULL,
  `mode` INTEGER NOT NULL DEFAULT 0,
  `deadline` INTEGER NOT NULL DEFAULT 9223372036854775807,
  UNIQUE(`clientid`, `user`, `pass`)
);

其中clientid、user、pass均为登录参数,
mode代表是多次有效还是一次有效,0为多次有效,1为一次有效。
deadline代表这条记录的有效期,默认为无穷大,如果想创建有有效期的账号,可以利用这个字段。

/var/lib/mosquitto/db/acl.db下有两个表
分别是pub表与sub表,是发送与订阅控制表,建表语句如下

CREATE TABLE `pub` (
  `pid` INTEGER PRIMARY KEY AUTOINCREMENT,
  `clientid` TEXT NOT NULL,
  `topic` TEXT NOT NULL,
  `deadline` INTEGER NOT NULL DEFAULT 9223372036854775807,
  UNIQUE(`clientid`, `topic`)
);
CREATE TABLE `sub` (
  `sid` INTEGER PRIMARY KEY AUTOINCREMENT,
  `clientid` TEXT NOT NULL,
  `topic` TEXT NOT NULL,
  `deadline` INTEGER NOT NULL DEFAULT 9223372036854775807,
  UNIQUE(`clientid`, `topic`)
);

其中clientid为登录时参数,topic为topic的前缀,不是完整topic哦。
deadline代表这条记录的有效期,默认为无穷大,如果想创建有有效期的账号,可以利用这个字段。

/var/lib/mosquitto/db/dev.db 表名为dev表,是设备状态表,建表语句如下

CREATE TABLE `dev` (
  `did` INTEGER PRIMARY KEY AUTOINCREMENT,
  `clientid` TEXT NOT NULL,
  `DI0` INTEGER NOT NULL DEFAULT 0,
  `DI1` INTEGER NOT NULL DEFAULT 0,
  `DI2` INTEGER NOT NULL DEFAULT 0,
  `DI3` INTEGER NOT NULL DEFAULT 0,
  `DI4` INTEGER NOT NULL DEFAULT 0,
  `DI5` INTEGER NOT NULL DEFAULT 0,
  `DI6` INTEGER NOT NULL DEFAULT 0,
  `DI7` INTEGER NOT NULL DEFAULT 0,
  `DO0` INTEGER NOT NULL DEFAULT 0,
  `DO1` INTEGER NOT NULL DEFAULT 0,
  `DO2` INTEGER NOT NULL DEFAULT 0,
  `DO3` INTEGER NOT NULL DEFAULT 0,
  `DO4` INTEGER NOT NULL DEFAULT 0,
  `DO5` INTEGER NOT NULL DEFAULT 0,
  `DO6` INTEGER NOT NULL DEFAULT 0,
  `DO7` INTEGER NOT NULL DEFAULT 0,
  UNIQUE(`clientid`)
);

其中clientid为设备的ID,其他为设备状态,如果收到了下线包(avty:offline),会删除那一行设备。
也就是说,如果没查到,就说明设备离线,查到东西说明设备在线。

编译方法

需要先安装mosquitto的库与开发库,方法如下

apt install libmosquitto-dev mosquitto-dev -y

然后直接执行make即可。

使用方法

将生成的mosquitto_plugin.so放到特定目录下,如/etc/mosquitto
修改mosquitto的配置文件,在最后面添加
plugin [目录]/mosquitto_plugin.so
plugin /etc/mosquitto/mosquitto_plugin.so
完整mosquitto配置文件参考

listener 1883
protocol mqtt

listener 9001
protocol websockets

allow_anonymous false
plugin /etc/mosquitto/mosquitto_plugin.so