项目下载地址
一 项目说明
1.包含设备属性功能的管理
2.产品管理
3.设备管理
4.通过mqtt协议自动添加设备和设备在线状态监控
5.设备属性功能对应的历史数据报表显示
6.等等其他功能
二 项目图片
三.项目部署步骤资料
1.启动emqx
cmd /k "cd /d D:\emqx\bin"
cmd /k "emqx.cmd start"
访问地址:http://localhost:18083/#/
2.启动springboot后台项目
# redis 配置
redis:
# 地址
host: localhost
# 端口,默认为6379
port: 6379
# mqtt 配置
mqtt:
username: wumei-smart # 账号
password: wumei-smart # 密码
host-url: tcp://localhost:1883 # mqtt连接tcp地址
client-id: ${random.int} # 客户端Id,不能相同,采用随机数 ${random.value}
default-topic: test # 默认主题
timeout: 30 # 超时时间
keepalive: 30 # 保持连接
clearSession: true # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息)
# 主库数据源
master:
url: jdbc:mysql://localhost/wumei-smart?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
3.启动vue后台项目
# 后端接口地址
VUE_APP_SERVER_API_URL = 'http://localhost:8080'
# EMQX接口地址和账号(EMQX安装默认账号密码为admin public)
VUE_APP_EMQX_API_URL = 'http://localhost:8081'
VUE_APP_EMQX_API_USER_NAME = 'admin'
VUE_APP_EMQX_API_PASSWORD = 'public'
# EMQX消息服务器连接地址
VUE_APP_EMQX_SERVER_URL = 'ws://localhost:8083/mqtt'
方法前端地址:
http://localhost:80/ admin/admin123
4.MQTTX
1.平台接受设备在线信号
/43/D11MST831S18/status/post
{
"rssi": -44,
"firmwareVersion": 1,
"status": 3,
"userId": "1",
"summary": {
"name": "wumei-smart",
"chip": "esp8266",
"author": "kerwincui",
"version": 1.2,
"createTime": "2023-03-06"
}
}
2.平台属性主题属性接受数据
/44/dd01/property/post
[{
"id": "light",
"name":"灯光",
"value": "77",
"remark":"灯光",
"shadow": "20"
}]
说明:
是在EMQ管理->客户端->点击客户端ID->订阅列表
发送内容:
访问:https://fastbee.cn/doc/pages/system/ --> 使用说明 -> 设备激活
------------------
1.设备认证(加密认证+简单认证)
post接口地址:http://127.0.0.1:8080/iot/tool/mqtt/auth 【com.ruoyi.iot.controller.ToolController】
数据form-data:
# 客户端Id等于 认证类型 + 设备编号 + 产品编号 + 用户ID
clientId = S & deviceNumber & productId & userId
# 用户名
userName = wumei-smart
# 密码
password = mqtt密码
password = mqtt密码 & 设备授权码 (产品启用设备授权时格式)
信息内容:编辑产品和编辑设备中查找
clientid=S&D11MST831S18&43&1
username=wumei-smart
password=P1QI11Q75G3T35MF&4E565F5D96B349028E4D590AC3D355CE
2.激活(由设备发送):
post接口(mqtt钩子处理):http://127.0.0.1:8080/iot/tool/mqtt/webhook【com.ruoyi.iot.controller.ToolController】
3设备认证自动添加设备【com.ruoyi.iot.controller.ToolController】
设备简单认证:toolService.simpleMqttAuthentication
设备加密认证:toolService.encryptAuthentication
-----------------
1. 订阅主题
主题 描述
/{productId}/{deviceNum}/info/get 订阅设备信息(订阅到该主题就发布设备信息)
/{productId}/{deviceNum}/ota/get 订阅设备升级
/{productId}/{deviceNum}/property/get 订阅属性(服务端发布,设备订阅)
/{productId}/{deviceNum}/property-online/get 订阅属性(在线模式,用户端发布,设备订阅)
/{productId}/{deviceNum}/function/get 订阅功能(服务端发布,设备订阅)
/{productId}/{deviceNum}/function-online/get 订阅功能(在线模式,用户端发布,设备订阅)
/{productId}/{deviceNum}/monitor/get 订阅实时监测信号(根据监测次数和间隔,然后发布监测数据)
/{productId}/{deviceNum}/ntp/get 订阅时钟同步(可选,用于同步设备的当前时间)
#2. 发布主题
主题 描述
/{productId}/{deviceNum}/info/post 发布设备信息
/{productId}/{deviceNum}/property/post 发布属性 (实时显示,包括监测数据,可定时上报监测数据)
/{productId}/{deviceNum}/function/post 发布功能 (实时显示)
/{productId}/{deviceNum}/event/post 发布事件
/{productId}/{deviceNum}/monitor/post 发布实时监测数据(仅用于实时监测图表显示,不会存储)
/{productId}/{deviceNum}/ntp/post 发布时钟同步(可选)
-----------
影子:
物联网平台提供的IoT设备影子功能,在云端保存为一个JSON文档,
用于存储设备上报状态、应用程序期望状态信息。
设备在线时,可以直接获取云端指令;设备离线后,再次上线可以主动拉取云端指令。
发送信息,控制硬件
E:\0_src_project\0_ky_project\2_物美智能项目\vue\src\utils\mqttTool.js
mqttTool.publish = function (topic, message, name) {
return new Promise((resolve, reject) => {
if (mqttTool.client == null) {
resolve('Mqtt客户端未连接')
console.log("Mqtt客户端未连接")
return;
}
mqttTool.client.publish(topic, message, { qos: 1 }, function (err) {
console.log('发送主题:', topic);
console.log('发送内容:', message);
if (!err) {
if (topic.indexOf('offline') > 0) {
console.log("[ " + name + " ] 影子指令发送成功");
resolve("[ " + name + " ] 影子指令发送成功");
} else {
console.log("[ " + name + " ] 指令发送成功");
resolve("[ " + name + " ] 指令发送成功");
}
} else {
console.log("[ " + name + " ] 指令发送失败");
reject("[ " + name + " ] 指令发送失败");
return;
}
})
})
}
---
四、EMQX配置
#1.HTTP认证
系统使用EMQX的HTTP认证插件,实现自定义认证逻辑。配置文件位于:etc/plugins/emqx_auth_http.conf
## 修改认证请求中的请求地址,其他保持默认
auth.http.auth_req = http://localhost:8080/iot/tool/mqtt/auth
auth.http.auth_req.method = post
auth.http.auth_req.params = clientid=%c,username=%u,password=%P
## 注释超级用户的请求地址、请求方式和参数
# auth.http.super_req = http://127.0.0.1:8991/mqtt/superuser
# auth.http.super_req.method = post
# auth.http.super_req.params = clientid=%c,username=%u
## 注释ACL鉴权的请求地址、请求方法和参数
# auth.http.acl_req = http://127.0.0.1:8991/mqtt/acl
# auth.http.acl_req.method = get
# auth.http.acl_req.params = access=%A,username=%u,clientid=%c,ipaddr=%a,topic=%t,mountpoint=%m
认证请求地址为后端接口 http://localhost:8080/iot/tool/mqtt/auth ,后端运行在本地使用localhost或本机IP,
端口默认8080,如果做了修改或者代理,需要对应修改。
超级用户认证和ACL鉴权用不到,但是需要注释掉,不然会占用几秒的认证时间。
#2.WebHook
系统使用EMQX的WebHook插件,实现设备上下线和IP定位功能。配置文件位于:etc/plugins/emqx_web_hook.conf
## 修改webhook地址
web.hook.api.url = http://localhost:8080/iot/tool/mqtt/webhook
# web.hook.rule.client.connect.1 = {"action": "on_client_connect"}
# web.hook.rule.client.connack.1 = {"action": "on_client_connack"}
web.hook.rule.client.connected.1 = {"action": "on_client_connected"}
web.hook.rule.client.disconnected.1 = {"action": "on_client_disconnected"}
# web.hook.rule.client.subscribe.1 = {"action": "on_client_subscribe"}
# web.hook.rule.client.unsubscribe.1 = {"action": "on_client_unsubscribe"}
# web.hook.rule.session.subscribed.1 = {"action": "on_session_subscribed"}
# web.hook.rule.session.unsubscribed.1 = {"action": "on_session_unsubscribed"}
# web.hook.rule.session.terminated.1 = {"action": "on_session_terminated"}
# web.hook.rule.message.publish.1 = {"action": "on_message_publish"}
# web.hook.rule.message.delivered.1 = {"action": "on_message_delivered"}
# web.hook.rule.message.acked.1 = {"action": "on_message_acked"}
WebHook地址为后端接口 http://localhost:8080/iot/tool/mqtt/webhook,后端运行在本地使用localhost或本机IP,端口默认8080,如果做了修改或者代理,需要对应修改。启用 web.hook.rule.client.connected.1 和 web.hook.rule.client.disconnected.1 其他项注释掉,节省后端资源。
#3.关闭匿名认证
匿名认证不安全,同时会影响认证流程,需要关闭。配置文件位于: etc/emqx.conf ,文件比较大,大概位于第447行。
## Value: true | false
allow_anonymous = false
#4.启用Http认证和WebHook插件
在 EMQX 启动时就默认启动插件,直接在 data/loaded_plugins 添加需要启动的插件名称 {emqx_auth_http,true}. {emqx_web_hook,true}. {emqx_delayed_publish ,true}. 。安装方式不同配置文件可能在 /var/lib/emqx/loaded_plugins 位置。emqx所有配置修改完后,重启emqx。
{emqx_management,true}.
{emqx_recon,true}.
{emqx_retainer,true}.
{emqx_dashboard,true}.
{emqx_rule_engine,true}.
{emqx_bridge_mqtt,false}.
{emqx_auth_http,true}.
{emqx_web_hook,true}.
{emqx_delayed_publish ,true}.