From 05fe6ce3b6a2dea664caea660886ed63b45e65e7 Mon Sep 17 00:00:00 2001 From: snickersun Date: Mon, 31 Aug 2020 23:05:47 +0800 Subject: [PATCH] =?utf8?q?MQTT=20=E8=A7=A3=E6=9E=90=E6=96=87=E6=9C=AC?= =?utf8?q?=E6=97=B6=E5=8E=BB=E6=8E=89=E4=B8=8D=E7=AC=A6=E5=90=88=E5=8D=8F?= =?utf8?q?=E8=AE=AE=E7=9A=84=E5=8D=95=E5=BC=95=E5=8F=B7=EF=BC=88=E6=9C=8D?= =?utf8?q?=E5=8A=A1=E5=99=A8=E9=97=AE=E9=A2=98=EF=BC=8C=E8=AE=BE=E5=A4=87?= =?utf8?q?=E5=81=9A=E4=BA=86=E9=80=82=E9=85=8D=EF=BC=89=E3=80=82=20mqtt=20?= =?utf8?q?=E5=8C=BA=E5=9F=9FID=E6=9C=AA=E5=8F=96=E5=88=B0=EF=BC=8C?= =?utf8?q?=E5=B0=B1=E4=B8=8D=E5=90=91=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=8F=91?= =?utf8?q?=E9=80=81=E9=99=A4=E4=BA=86BREQ=E4=B9=8B=E5=A4=96=E7=9A=84?= =?utf8?q?=E6=B6=88=E6=81=AF=E3=80=82=20mqtt=20=E5=AE=9E=E7=8E=B0=20delive?= =?utf8?q?r=20=E5=8F=91=E9=80=81=E6=88=90=E5=8A=9F=E5=88=A4=E6=96=AD?= =?utf8?q?=E3=80=82=20mqtt=20=E5=AE=9E=E7=8E=B0LGZONE=E6=97=B6=E9=97=B4?= =?utf8?q?=E6=9F=A5=E8=AF=A2=E8=AE=BE=E7=BD=AE=E3=80=82=20mqtt=20=E5=8D=8F?= =?utf8?q?=E8=AE=AE=E9=87=87=E7=94=A8UTC=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../enqualcomm/support/service/Deliver.java | 6 +- .../enqualcomm/support/utils/TimeUtil.java | 4 +- .../com/ic/protocols/protocolAPIHelper.java | 6 +- .../java/com/ic/protocols/protocol_fzd.java | 13 +++ .../java/com/ic/protocols/protocol_mqtt.java | 97 +++++++++++++++---- .../ic/protocols/protocol_mqtt_client.java | 5 +- 6 files changed, 106 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index 7d641d67..fbcdac3d 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -338,11 +338,15 @@ public class Deliver extends AbstractConnectionService { this.mConnection = paramConnection; this.mRuntime = paramRuntime; String cmd = paramStringMessage.cmd(); - + if(Config.protocol_no==Config.PROTOCOL_MQTT) + { + cmd=protocolAPIHelper.isCmdStr(paramStringMessage); + } //如果需要检测是否响应。 if (NeedCheckServerResponse==true){ if(needCheckResponseCMD!=null) { + ICLogger.i("mqtt ====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)); if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){ ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!"); ServerResponsed=true; diff --git a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java index b9b45e34..ea0d71f6 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java @@ -60,7 +60,9 @@ public class TimeUtil { // SimpleDateFormat df3 = new SimpleDateFormat("yyyyMMddHHmmss"); Date date1 = null; try { - date1 = df1.parse(date+" "+time); + String dt=date+" "+time; + ICLogger.i("parseDatetiime " +dt); + date1 = df1.parse(dt); return date1; } catch (ParseException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 3333efbc..c1dfa7a1 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -73,7 +73,11 @@ public class protocolAPIHelper { return sm; } - + /*** + * its only used for message sending by mConnection.DeliverCMDMessageToSystem + * @param msg + * @return + */ public static String isCmdStr(StringMessage msg){ if(msg==null) ICLogger.i("isCmdStr StringMessage is null"); diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 8c66631a..fd3b1cd8 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -461,6 +461,19 @@ public class protocol_fzd { } + public static StringMessage AL(Runtime runtime){ + /*** + * [IC*334588000000156*00CD*AL,180916,064153,A,22.570512,N,113.8623267,E,0.00,154.8,0.0,11,10 0,100,0,0,00100018,7,0,460,1,9529,21809,155,9529,21242,132,9529,21405,131,9529,63554,131,9 + * 529,63555,130,9529,63556,118,9529,21869,116,0,12.4] + * 平台回复: + * [IC*YYYYYYYYYYYYYYY*LEN*AL] + * 实例:[IC*334588000000156*0002*AL] + * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止. + */ + return null; + + } + public static StringMessage UPLOAD(){ return genFZDCMD(cmdMap.get(CMD_TYPE.UPLOAD)); diff --git a/app/src/main/java/com/ic/protocols/protocol_mqtt.java b/app/src/main/java/com/ic/protocols/protocol_mqtt.java index 5a362d80..9d7d2dd0 100644 --- a/app/src/main/java/com/ic/protocols/protocol_mqtt.java +++ b/app/src/main/java/com/ic/protocols/protocol_mqtt.java @@ -49,7 +49,8 @@ public class protocol_mqtt { KA, // 心跳连接 LGZONE, // 获取服务器端时间 UD, // 位置数据上报 - AL, // 报警数据上报 + AL, // 报警位置数据上报 + ALARM, // 报警数据上报 temp, // 上传体温数据 heart, // 终端心率上传 blood, // 上传血压数据 @@ -77,6 +78,7 @@ public class protocol_mqtt { cmdMap.put(CMD_TYPE.LGZONE, "LGZONE"); cmdMap.put(CMD_TYPE.UD, "UD"); cmdMap.put(CMD_TYPE.AL, "AL"); + cmdMap.put(CMD_TYPE.AL, "ALARM"); cmdMap.put(CMD_TYPE.temp, "temp"); cmdMap.put(CMD_TYPE.heart, "heart"); cmdMap.put(CMD_TYPE.blood, "blood"); @@ -130,10 +132,11 @@ public class protocol_mqtt { if (CoreService.getInstance() != null) imei = CoreService.getInstance().getRuntime().IMEI(); String cmdtype = msg.cmd().replace(projName + "/" + protocolVersion + "/", "").replace("/" + imei, ""); - ICLogger.i("mqtt isCmdStr topic " + msg.cmd() + " ,cmd " + cmdtype); +// ICLogger.i("mqtt isCmdStr topic " + msg.cmd() + " ,cmd " + cmdtype); for (CMD_TYPE key : cmdMap.keySet()) { - ICLogger.i("mqtt isCmdStr cmd " + msg.cmd() + " key " + cmdMap.get(key)); +// ICLogger.i("mqtt isCmdStr cmd " + msg.cmd()+" " +cmdtype +" key " + cmdMap.get(key)); if (cmdMap.get(key).equals(cmdtype)) { +// ICLogger.i("Find cmd "+cmdtype); return cmdtype; } } @@ -148,16 +151,22 @@ public class protocol_mqtt { */ public boolean parserCmd(String cmdtype, byte[] bytes) { String cmd_msgbuf = new String(bytes); - log("bytes.size " + bytes.length); - cmdbuf.append(cmd_msgbuf); - log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString()); - cmd_msgbuf = cmd_msgbuf.replace(CMDHEADER, "").replace(CMDEND, ""); - for (CMD_TYPE key : cmdMap.keySet()) { - if (cmdMap.get(key).toString().equals(cmdtype)) { - handleCmd(key, cmdtype, cmd_msgbuf); - return true; + log(cmdtype+" bytes.size " + bytes.length+" "+cmd_msgbuf); +// cmdbuf.append(cmd_msgbuf); +// log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString()); + +// String[] cmdlist=cmdbuf.toString().split(CMDEND+CMDHEADER); + +// for ( String cmditem : cmdlist ) { + cmd_msgbuf = cmd_msgbuf.replace(CMDHEADER, "").replace(CMDEND, "").replace("'",""); + for (CMD_TYPE key : cmdMap.keySet()) { + if (cmdMap.get(key).toString().equals(cmdtype)) { + handleCmd(key, cmdtype, cmd_msgbuf); + return true; + } } - } +// } + return false; } @@ -185,7 +194,6 @@ public class protocol_mqtt { .append("/").append(protocolVersion) .append("/").append(cmdtype) .append("/").append(imei); - return genStringMessage(sbtopic.toString(), sb.toString()); } @@ -244,6 +252,9 @@ public class protocol_mqtt { * 平台发布的子主题为:KA * 回应的消息为:[LEN,KA] */ + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } StringBuilder sb = new StringBuilder(); String cmd = cmdMap.get(CMD_TYPE.KA); sb.append(TimeUtil.getUTCSystemDateYYMMDD()).append(CMDSPLIT) @@ -287,7 +298,9 @@ public class protocol_mqtt { * 123456789,为区域id */ - + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } StringBuilder sb = new StringBuilder(); String cmd = cmdMap.get(CMD_TYPE.UD); sb.append(TimeUtil.getUTCSystemDateYYMMDD()).append(CMDSPLIT) @@ -332,6 +345,9 @@ public class protocol_mqtt { * 实例表示:东八区,上午8 点整 */ + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } StringBuilder sb = new StringBuilder(); String cmd = cmdMap.get(CMD_TYPE.LGZONE); sb.append(runtime.bleInfo.ble_area_id); @@ -362,11 +378,20 @@ public class protocol_mqtt { */ String[] list=data.split(CMDSPLIT); if (list.length==4){ - String timeZone=list[1]; - String date=list[3]; - String time=list[2]; + String timeZone=list[1].trim(); + String date=list[3].trim(); + String time=list[2].trim(); Date datetime= TimeUtil.parseDatetiime(date,time); - int timezone=Integer.parseInt(timeZone.replace("+","")); + + int timezone; + try + { + timezone=Integer.parseInt(timeZone.replace("+","").trim()); + }catch (Exception e){ + ICLogger.e("timezone",e); + timezone=8; + } + if (datetime!=null){ ICLogger.i("==="+timezone+" "+TimeUtil.getDefaultTimeZone()); TimeUtil.setTimeZone(timezone); @@ -386,6 +411,30 @@ public class protocol_mqtt { } + + public static StringMessage AL(Runtime runtime){ +/*** + * 报警数据上报(AL) + * 终端发布(平台订阅): + * 终端向“WBG100/v1/AL/ID_手表IMEI”的主题发布 [LEN,位置数据(见附录一),区域id] + * + * 终端订阅(平台发布): + * 终端订阅“WBG100/v1/ID_手表IMEI/+”的主题列表,会收到平台的回应 + * 平台发布的子主题为:AL + * 回应的消息为:[LEN, AL] + * + * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止. + */ + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } + StringBuilder sb = new StringBuilder(); + String cmd = cmdMap.get(CMD_TYPE.AL); + sb.append(runtime.bleInfo.ble_area_id); + return genMqttCMDMsg(cmd, sb.toString(), runtime.IMEI()); + + } + // // public static String UPLOAD(){ // @@ -504,8 +553,8 @@ public class protocol_mqtt { //普通非二进制命令用此函数处理 boolean ret=true; - ICLogger.i("handleCmd "+type.name() + " strLen="+data.length()); - if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd +" "+ data); + ICLogger.i("mqtt handleCmd "+type.name() + " strLen="+data.length()); + if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", "mqtt recv " + cmd +" "+ data); switch (type){ case KA: @@ -519,6 +568,14 @@ public class protocol_mqtt { ICLogger.i("服务器收到登录包BREQ"); mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化 break; + case LGZONE: + handleLGZONE(mConnection,mRuntime,data); + break; + + case UD: + mConnection.DeliverCMDMessageToSystem("UD",cmd);//通知下面线程状态变化 + break; + // case CR: // //立即定位指令(长链接有效) // handleCR(mConnection); diff --git a/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java b/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java index 97c54643..9558662d 100644 --- a/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java +++ b/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java @@ -99,9 +99,10 @@ public class protocol_mqtt_client { isBound = true; isBinding = false; - + ICLogger.i("OnBind"); mClient.setHandler(mHandler); + attemptConnectMqtt(); } @Override @@ -149,7 +150,7 @@ public class protocol_mqtt_client { public void connectservice() { if (isBound) { - attemptConnectMqtt(); +// attemptConnectMqtt(); } else if (!isBound && !isBinding) { attemptBindService(); } -- 2.17.1