From be5c9f324ac1d31f4f262d288c5f72a7a0c10c47 Mon Sep 17 00:00:00 2001 From: mac <user@users-MacBook-Pro.local> Date: 星期五, 19 一月 2024 10:08:23 +0800 Subject: [PATCH] 2024年01月19日10:08:08 --- HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java | 151 +++++++++++++++++++++++++++---------------------- 1 files changed, 83 insertions(+), 68 deletions(-) diff --git a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java index e38c3ad..692e5ad 100644 --- a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java +++ b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java @@ -11,9 +11,9 @@ import com.hdl.sdk.link.common.utils.LogUtils; import com.hdl.sdk.link.core.bean.LinkRequest; import com.hdl.sdk.link.core.bean.LinkResponse; +import com.hdl.sdk.link.core.bean.ModbusResponse; import com.hdl.sdk.link.core.bean.ZigbeeResponse; import com.hdl.sdk.link.core.bean.gateway.GatewayBean; -import com.hdl.sdk.link.core.callback.BaseCallBack; import com.hdl.sdk.link.core.callback.ModbusCallBack; import com.hdl.sdk.link.core.callback.ZigbeeCallBack; import com.hdl.sdk.link.core.config.HDLLinkConfig; @@ -25,12 +25,12 @@ */ public class HDLModBusConnect { - private static final String TAG="HDLModbusConnect"; + private static final String TAG = "HDLModbusConnect"; private static HDLModBusConnect instance; /** - * 鍐呴儴鐢紝涓昏鏄鐞嗗鐞嗘帀閫忎紶涓婚鍙妉ink涓婚鍚庯紝杩樺師Zigbee鍘熺敓鏁版嵁鍙婁富棰樼敤 + * 鍐呴儴鐢紝涓昏鏄鐞嗗鐞嗘帀閫忎紶涓婚鍙妉ink涓婚鍚庯紝杩樺師modbus鍘熺敓鏁版嵁鍙婁富棰樼敤 */ - private final String zigbeeAllTopic = "/Modbus"; + private final String allTopic = "/Modbus"; /** * 杩斿洖褰撳墠瀹炰緥锛屼笉瀛樺湪灏卞垱寤哄苟鍚屾椂娉ㄥ唽鐩戝惉浜嬩欢 @@ -51,10 +51,10 @@ * @param eventListener */ public void registerListener(EventListener eventListener) { - if(null==eventListener){ + if (null == eventListener) { return; } - EventDispatcher.getInstance().register(zigbeeAllTopic, eventListener); + EventDispatcher.getInstance().register(allTopic, eventListener); } /** @@ -63,10 +63,10 @@ * @param eventListener */ public void removeListener(EventListener eventListener) { - if(null==eventListener){ + if (null == eventListener) { return; } - EventDispatcher.getInstance().remove(zigbeeAllTopic, eventListener); + EventDispatcher.getInstance().remove(allTopic, eventListener); } /** @@ -76,62 +76,76 @@ final EventListener eventListener = new EventListener() { @Override public void onMessage(Object msg) { -// try { -// if (msg instanceof LinkResponse) { -// LinkResponse linkResponse = (LinkResponse) msg; -// String body = linkResponse.getData(); -// int index = body.indexOf("{"); -// //zigbee鍥炲鐨勬暟鎹墠鏈変富棰橈紝鍚庨潰鎵嶆槸鏁版嵁 -// if (index <= 0) -// return; -// -// String zigbeeTopic = body.substring(0, index).trim(); -// //zigbee鐨勮礋杞芥暟鎹� -// String bodyData = body.substring(index); -// -// ZigbeeResponse zigbeeResponse = new ZigbeeResponse(); -// zigbeeResponse.setTopic(zigbeeTopic); -// zigbeeResponse.setData(bodyData); -// String oid = null; -// //鏄惁鏄�氳繃涓荤綉鍏抽�忎紶涓婚 -// if (linkResponse.getTopic().contains("/slaveoid/")) { -// oid = linkResponse.getTopic().split("/")[8]; -// } else { -// oid = linkResponse.getTopic().split("/")[2]; -// } -// zigbeeResponse.setOid(oid); -// for (GatewayBean gatewayBean : HDLLinkLocalGateway.getInstance().getGatewayList()) { -// if (oid.equals(gatewayBean.getGatewayId()) || oid.equals(gatewayBean.getDevice_mac()) || oid.equals(gatewayBean.getOid())) { -// //涓婇潰鐨刼id鍙兘鏄綉鍏砳d鎴栬�卪ac鎴栬�呮槸oid锛屼笉绠℃槸鍝釜缁熶竴浣跨敤oid琛ㄧず鏂瑰紡 -// zigbeeResponse.setOid(gatewayBean.getOid()); -// break; -// } -// } -// EventDispatcher.getInstance().post(zigbeeTopic, zigbeeResponse); -// //鍙戝竷Zigbee鍘熺敓涓婚鍙婃暟鎹� -// EventDispatcher.getInstance().post(zigbeeAllTopic, zigbeeResponse); -// } -// } catch (Exception e) { -// LogUtils.e(TAG,"LinkResponse杞琙igbeeResponse寮傚父:"+ e.getMessage()); -// } + try { + if (msg instanceof LinkResponse) { + LinkResponse linkResponse = (LinkResponse) msg; + if (linkResponse.getTopic() == null || !linkResponse.getTopic().contains("custom/native/inverter/up")) { + return; + } + byte[] data = linkResponse.getByteData(); + ModbusResponse modbusResponse = new ModbusResponse(); + String topic = "Modbus" + data[0] + data[1]; + modbusResponse.setTopic(topic); + modbusResponse.setData(data); + String oid = null; + //鏄惁鏄�氳繃涓荤綉鍏抽�忎紶涓婚 + if (linkResponse.getTopic().contains("/slaveoid/")) { + oid = linkResponse.getTopic().split("/")[8]; + } else { + oid = linkResponse.getTopic().split("/")[2]; + } + modbusResponse.setOid(oid); + for (GatewayBean gatewayBean : HDLLinkLocalGateway.getInstance().getGatewayList()) { + if (oid.equals(gatewayBean.getGatewayId()) || oid.equals(gatewayBean.getDevice_mac()) || oid.equals(gatewayBean.getOid())) { + //涓婇潰鐨刼id鍙兘鏄綉鍏砳d鎴栬�卪ac鎴栬�呮槸oid锛屼笉绠℃槸鍝釜缁熶竴浣跨敤oid琛ㄧず鏂瑰紡 + modbusResponse.setOid(gatewayBean.getOid()); + break; + } + } + + EventDispatcher.getInstance().post(topic, modbusResponse); + //鍙戝竷Zigbee鍘熺敓涓婚鍙婃暟鎹� +// EventDispatcher.getInstance().post(allTopic, modbusResponse); + } + } catch (Exception e) { + LogUtils.e(TAG, "LinkResponse杞琈odbusResponse寮傚父:" + e.getMessage()); + } } }; //娉ㄥ唽鐩存帴閫氳鐨勪富棰橈紝鍖呮嫭鐩存帴鍜屼富缃戝叧閫氳鎴栬�呯洿鎺ュ拰浠庣綉鍏抽�氳 registerListener(String.format(TopicConstant.NATIVE_MODBUS_UP, "+"), eventListener); - registerListener(String.format(TopicConstant.NATIVE_MODBUS_DOWN_REPLY, "+"), eventListener); + //registerListener(String.format(TopicConstant.NATIVE_MODBUS_DOWN_REPLY, "+"), eventListener); + //registerListener(String.format(TopicConstant.NATIVE_ZIGBEE_UP_SLAVE, "+", "+"), eventListener); + } - // registerListener(String.format(TopicConstant.NATIVE_ZIGBEE_UP_SLAVE, "+", "+"), eventListener); + + /** + * 鍙戦�佸師鐢熸暟鎹� + * + * @param gatewayOidOrGatewayId 鐩爣缃戝叧鐨刼id鎴栬�呯綉鍏矷d + * @param payload 鍙戦�佹暟鎹� + * @param baseCallBack 缁撴灉鍥炶皟 + */ + public void Send(String gatewayOidOrGatewayId, byte[] payload, final ModbusCallBack baseCallBack) { + Send(gatewayOidOrGatewayId, payload, 5, baseCallBack); } /** * 鍙戦�佸師鐢熸暟鎹� * * @param gatewayOidOrGatewayId 鐩爣缃戝叧鐨刼id鎴栬�呯綉鍏矷d - * @param responeTopic 鍥炲涓婚 * @param payload 鍙戦�佹暟鎹� - * @param baseCallBack 缁撴灉鍥炶皟 + * @param timeout 瓒呮椂鏃堕棿(s) + * @param baseCallBack 缁撴灉鍥炶皟 */ - public void Send(String gatewayOidOrGatewayId,String responeTopic, String payload, final ModbusCallBack baseCallBack) { + public void Send(String gatewayOidOrGatewayId, byte[] payload, int timeout, final ModbusCallBack baseCallBack) { + if (payload == null || payload.length == 0) { + if (baseCallBack != null) { + baseCallBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); + System.out.println("鍙戦�佹暟鎹椂璐熻浇鏁版嵁鏄┖鐨�--->"); + } + return; + } //濡傛灉鏈湴鏈夐摼鎺ヨ繖涓綉鍏�,鍒欑敤鏈湴杩炴帴 GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayByOidOrGatewayId(gatewayOidOrGatewayId); if (null == gatewayBean) { @@ -145,22 +159,24 @@ String tempTopic = String.format(TopicConstant.NATIVE_MODBUS_DOWN, gatewayOidOrGatewayId); LinkRequest request = new LinkRequest(tempTopic, payload, gatewayBean.getIsLocalEncrypt()); - if ("true".equals(gatewayBean.getMaster())) { - request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN, HDLLinkConfig.getInstance().getGatewayId())); - } else { - request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN_SLAVE, HDLLinkConfig.getInstance().getGatewayId(), gatewayOidOrGatewayId)); - } - request.setReplyTopic(responeTopic); - long timeout = 2 * 1000; +// if ("true".equals(gatewayBean.getMaster())) { + request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN, HDLLinkConfig.getInstance().getGatewayId())); +// } else { +// request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN_SLAVE, HDLLinkConfig.getInstance().getGatewayId(), gatewayOidOrGatewayId)); +// } + request.setReplyTopic("Modbus" + payload[0] + payload[1]); + long awaitTime = timeout * 1000L; - new HDLConnectHelper(timeout, 1, gatewayBean.getIp_address(), 8586, request, new HDLConnectHelper.HdlSocketListener() { + new HDLConnectHelper(awaitTime, 1, gatewayBean.getIp_address(), 8586, request, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { -// if (msg instanceof String) { -// if (null != baseCallBack) { -// baseCallBack.onSuccess(msg+""); -// } -// } + if (msg instanceof int[]) { + if (null != baseCallBack) { + baseCallBack.onSuccess((int[]) msg); + } + } else { + LogUtils.e("鍙戦�丮odbus鍥炶皟瀵硅薄绫诲瀷闈炴暟缁勭被鍨嬶紝绫诲瀷鏄�" + msg.getClass()); + } } @Override @@ -171,7 +187,6 @@ } }, true).send(); } - /** @@ -261,12 +276,12 @@ /** * 澶勭悊zigbee鍥炲鐨勬暟鎹� * - * @param responeTopic 鍥炲涓婚 - * @param linkResponse 鍥炲鐨勯�忎紶鏁版嵁 + * @param responeTopic 鍥炲涓婚 + * @param linkResponse 鍥炲鐨勯�忎紶鏁版嵁 */ private static String getZigbeeData(String responeTopic, LinkResponse linkResponse) { //涓婚涓虹┖涓嶅鐞� - if(TextUtils.isEmpty(responeTopic)){ + if (TextUtils.isEmpty(responeTopic)) { return null; } -- Gitblit v1.8.0