feat(mqtt): 添加lockCmd方法用于发送开锁指令

新增lockCmd方法,用于通过MQTT发送指定的开锁指令并解析返回数据。该方法支持多种指令类型,包括控制电机、开锁、设置超时时间等,并提供了错误处理机制。
This commit is contained in:
dzq 2025-04-25 09:03:10 +08:00
parent d2a25dc9ea
commit cb7cb21754
1 changed files with 42 additions and 0 deletions

View File

@ -59,6 +59,7 @@ public class MqttService implements MqttCallback {
} }
public void publish(String data) throws MqttException { public void publish(String data) throws MqttException {
// lockCmd((byte) 0x8A, (byte) 0x01, (byte) 0x01, (byte) 0x33, null);
String bcc = BCCCalculator.calculateBCC(data); String bcc = BCCCalculator.calculateBCC(data);
MqttMessage message = new MqttMessage(BCCCalculator.hexStringToByteArray(data + bcc)); MqttMessage message = new MqttMessage(BCCCalculator.hexStringToByteArray(data + bcc));
client.publish(TOPIC, message); client.publish(TOPIC, message);
@ -83,4 +84,45 @@ public class MqttService implements MqttCallback {
@Override @Override
public void deliveryComplete(IMqttDeliveryToken token) {} public void deliveryComplete(IMqttDeliveryToken token) {}
/******************************************************
*函数名称: lockCmd
* : 指令地址码通道号指令参数
* : 是否发送成功rsMsg反馈消息
* : 通过串口发送指定的指令并解析返回数据
指令0x7A控制A型电机指令
指令0x7B控制B型电机指令
指令0x7C开锁cmdSub指定开锁次数
指令0x7E设置开锁超时时间 cmdSub时间单位秒
指令0x7F开锁cmdSub设置限位状态只有 00或11两种值有效
指令0x80读锁状态指令
指令0x8A开锁指令
指令0x8D设置关门是否自动上传状态cmdSub0关闭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;
}
} }