# energy14 **Repository Path**: hulutech/energy14 ## Basic Information - **Project Name**: energy14 - **Description**: mqtt物联网项目api - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-19 - **Last Updated**: 2024-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # goravel框架mqtt后端管理系统 ### 介绍 本系统基于Golang语言,使用goravel框架开发,实现了MQTT服务器端和客户端的连接和通信功能,后端管理系统与单片机实现mqtt双向订阅,实现按需查看单片机的实时数据, 该系统采用管道通信,并发读取单片机数据,通过服务器通配符订阅设备唯一标识devices/+/data,通过主题:devices/+/command,发送单片机指令完成数据查询操作。 #### 本地测试,mac下:mosquitto扩展,命令解释如下 ```go mosquitto_pub -h localhost -t "devices/unique_device_id/command" -m "Your command message" -u your_username -P your_password mosquitto_sub -h localhost -t "devices/unique_device_id/data" -u your_username -P your_password ``` 单片机(设备)是发布者,它们首先将自身的唯一标识ID发布到 MQTT 服务器上。服务器是订阅者,它订阅了设备上报的唯一标识ID所对应的主题。当服务器需要发送指令时, 它将指令发布到特定设备的主题上,而设备则会订阅这些指令所在的主题,从而接收到服务器端的指令。 然后,设备根据指令执行相应的操作,并将结果发布到预定的主题上,服务器则订阅这些主题以获取设备的回传数据。 基于这个流程,可以服务器端编写订阅设备唯一标识ID主题的逻辑,并在接收到指令后,将指令发布到相应设备的主题上。 而在客户端(单片机)中,您需要编写订阅指令主题的逻辑,并在接收到指令后,执行相应的操作,并将结果发布到服务器端指定的主题上。 ```go 步骤一:客户端上报唯一标识ID 在客户端上报唯一标识ID,假设唯一标识ID为 "device001": mosquitto_pub -h localhost -t "devices/device001/data" -m "UniqueIdentifier" 步骤二:服务端订阅唯一标识 在服务器端订阅客户端设备的唯一标识ID: mosquitto_sub -h localhost -t "devices/device001/data" 步骤三:服务端发送命令给客户端 在服务器端向特定设备唯一标识ID发布命令消息,假设命令为 "start": mosquitto_pub -h localhost -t "devices/device001/command" -m "start" 步骤四:单片机返回数据 设备接收到命令消息后,执行相应操作并返回数据,假设返回的数据为 "SensorData": mosquitto_pub -h localhost -t "devices/device001/data" -m "SensorData" ``` #### 示意图 ![image](https://gitee.com/hulutech/energy14/raw/master/doc/steps.png) #### 注意事项 开启定时任务,每10分钟修改historytracks表中的state状态为0,表示离线,等待心跳数据的到来,心跳数据到来后,将状态改为1,表示在线。