feat(mqtt): 添加lockCmd方法用于发送开锁指令
新增lockCmd方法,用于通过MQTT发送指定的开锁指令并解析返回数据。该方法支持多种指令类型,包括控制电机、开锁、设置超时时间等,并提供了错误处理机制。
This commit is contained in:
parent
d2a25dc9ea
commit
cb7cb21754
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue