这里用到了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