# 库介绍 这里用到了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,是用户表,建表语句如下 ```sql 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表,是发送与订阅控制表,建表语句如下 ```sql 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表,是设备状态表,建表语句如下 ```sql 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的库与开发库,方法如下 ```bash 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配置文件参考 ```yaml listener 1883 protocol mqtt listener 9001 protocol websockets allow_anonymous false plugin /etc/mosquitto/mosquitto_plugin.so ```