mqtt
1.安装 centos系统 宝塔 数据库 emqx 2.测试mqtt连接emqx服务器 3.修改emqx 实现 身份 权限 功能 4.添加一个 mqtt超级用户 添加一个mqtt普通用户 5.测试2个用户的区别 6.给普通用户 添加 接收 发送 权限 7.把mqtt弄到esp32上面 控制电磁锁 8.写个简单的网页 控制电磁锁 9.整个流程就算ok了
宝塔登录 外网面板地址: http://121.4.107.241:8888/f0d748eb 内网面板地址: http://10.0.4.10:8888/f0d748eb username: 6tyynvn9 password: b409f4e8
下载emqx v4.3
创建 mysql 数据库
用户名 mqtt 数据库密码 MxdTcsMXyd8RbSKc
数据库创建表
DROP TABLE IF EXISTS `mqtt_acl`;
CREATE TABLE `mqtt_acl` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`allow` int(1) DEFAULT NULL COMMENT '0: deny, 1: allow',
`ipaddr` varchar(60) DEFAULT NULL COMMENT 'IpAddress',
`username` varchar(100) DEFAULT NULL COMMENT 'Username',
`clientid` varchar(100) DEFAULT NULL COMMENT 'ClientId',
`access` int(2) NOT NULL COMMENT '1: subscribe, 2: publish, 3: pubsub',
`topic` varchar(100) NOT NULL DEFAULT '' COMMENT 'Topic Filter',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
LOCK TABLES `mqtt_acl` WRITE;
INSERT INTO `mqtt_acl` (`id`, `allow`, `ipaddr`, `username`, `clientid`, `access`, `topic`)
VALUES
(1,1,NULL,'$all',NULL,2,'#'),
(2,0,NULL,'$all',NULL,1,'$SYS/#'),
(3,0,NULL,'$all',NULL,1,'eq #'),
(4,1,'127.0.0.1',NULL,NULL,2,'$SYS/#'),
(5,1,'127.0.0.1',NULL,NULL,2,'#'),
(6,1,NULL,'dashboard',NULL,1,'$SYS/#');
UNLOCK TABLES;
DROP TABLE IF EXISTS `mqtt_user`;
CREATE TABLE `mqtt_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`salt` varchar(35) DEFAULT NULL,
`is_superuser` tinyint(1) DEFAULT 0,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
身份 权限
etc/acl.conf
全部注释
%%
匿名认证
etc/emqx.conf
Value: true | false
allow_anonymous = true 改为 allow_anonymous = false
当acl规则没有匹配到的时候就会找的这个参数,如果为allow,则会通过验证,为deny就会不通过验证
ACL nomatch. Enum: allow, deny
acl_nomatch = allow 改为 acl_nomatch = deny
加盐规则与哈希方法配置
etc/plugins/emqx_auth_mysql.conf
auth.mysql.password_hash = sha256
Value: plain | md5 | sha | sha256 | bcrypt 根据需要改
auth.mysql.password_hash = plain
权限控制 使用数据库mqtt_acl数据表 规则表字段说明: allow:禁止(0),允许(1) ipaddr:设置 IP 地址 username:连接客户端的用户名,此处的值如果设置为 $all 表示该规则适用于所有的用户 clientid:连接客户端的 Client ID access:允许的操作:订阅(1),发布(2),订阅发布都可以(3) topic:控制的主题,可以使用通配符,并且可以在主题中加入占位符来匹配客户端信息,例如 t/%c 则在匹配时主题将会替换为当前客户端的 Client ID %u:用户名 %c:Client ID
emqx命令
重启 ./bin/emqx console cd emqx 运行 ./bin/emqx start
cd emqx 停止 ./bin/emqx stop
cd emqx 加载mysql插件 ./bin/emqx_ctl plugins load emqx_auth_mysql
mqtt控制台 默认用户名 admin 与默认密码 public
mqtt管理员 拥有 mqtt服务器下 所有用户的功能
安装node
安装node环境 yum install -y nodejs
安装nodered
非常方便的nodejs开发工具 sudo npm install -g --unsafe-perm node-red
安装forever
为了后台运行 npm install forever -g
运行 node-red
前台运行
node-red
后台运行
forever start -l forever.log -o out.log -e err.log -a /usr/local/lib/node_modules/node-red/red.js
|