From cb7cb21754d264f1bc2410d07e2718d41dbbb619 Mon Sep 17 00:00:00 2001 From: dzq Date: Fri, 25 Apr 2025 09:03:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(mqtt):=20=E6=B7=BB=E5=8A=A0lockCmd?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=94=A8=E4=BA=8E=E5=8F=91=E9=80=81=E5=BC=80?= =?UTF-8?q?=E9=94=81=E6=8C=87=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增lockCmd方法,用于通过MQTT发送指定的开锁指令并解析返回数据。该方法支持多种指令类型,包括控制电机、开锁、设置超时时间等,并提供了错误处理机制。 --- .../agileboot/domain/mqtt/MqttService.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java b/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java index 98a5587..99f1911 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/mqtt/MqttService.java @@ -59,6 +59,7 @@ public class MqttService implements MqttCallback { } public void publish(String data) throws MqttException { +// lockCmd((byte) 0x8A, (byte) 0x01, (byte) 0x01, (byte) 0x33, null); String bcc = BCCCalculator.calculateBCC(data); MqttMessage message = new MqttMessage(BCCCalculator.hexStringToByteArray(data + bcc)); client.publish(TOPIC, message); @@ -83,4 +84,45 @@ public class MqttService implements MqttCallback { @Override public void deliveryComplete(IMqttDeliveryToken token) {} + + /****************************************************** + *函数名称: lockCmd + *输 入: 指令,地址码,通道号,指令参数 + *输 出: 是否发送成功,rsMsg反馈消息 + *说 明: 通过串口发送指定的指令并解析返回数据 + 指令0x7A:控制A型电机指令 + 指令0x7B:控制B型电机指令 + 指令0x7C:开锁,cmdSub指定开锁次数 + 指令0x7E:设置开锁超时时间 ,cmdSub时间单位秒 + 指令0x7F:开锁,cmdSub设置限位状态只有 00或11两种值有效 + 指令0x80:读锁状态指令 + 指令0x8A:开锁指令 + 指令0x8D:设置关门是否自动上传状态,cmdSub:0关闭,1开启 + 指令0x9A:常开指令 + 指令0x9B:关闭指令 + 指令0x9D:一键全开指令 + 指令0x9E:读取所有锁状态 + 指令中未标注cmdSub指令参数的固定为0x33 + *******************************************************/ + private boolean lockCmd(byte cmdNo, byte boardNo, byte lockNo, byte cmdSub, String[] rsMsg) + { + try + { + byte[] sendData= new byte[5]; + sendData[0]= cmdNo; + sendData[1]= boardNo; + sendData[2]= lockNo; + sendData[3]= cmdSub; + sendData[4]= (byte) (sendData[0] ^ sendData[1] ^ sendData[2] ^sendData[3]); + + //发送数据并获取返回值 + MqttMessage message = new MqttMessage(sendData); + client.publish(TOPIC, message); + + } catch(Exception e) { + log.error("lockCmd", e); + } + return false; + } + }