智能物联网项目实战

项目下载地址

http://www.gxcode.top/code
在这里插入图片描述

一 项目说明

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}.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java之书

会持续更新实用好的文章谢谢关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值