From 9efc5cef6ff75da58fe450add20ffab044e74b54 Mon Sep 17 00:00:00 2001 From: mac <user@users-MacBook-Pro.local> Date: 星期四, 18 一月 2024 09:59:33 +0800 Subject: [PATCH] 2024年01月18日09:59:27 --- HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java | 24 +++ app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java | 17 ++ build.gradle | 8 + app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java | 40 +++--- app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java | 150 +++++++++++++++++------- app/src/main/java/com/hdl/photovoltaic/utils/TimeUtils.java | 10 + app/build.gradle | 15 + app/src/agconnect-services.json | 96 ++++++++++++++++ 8 files changed, 290 insertions(+), 70 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 47347c1..fe6082b 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 @@ -118,6 +118,7 @@ //registerListener(String.format(TopicConstant.NATIVE_ZIGBEE_UP_SLAVE, "+", "+"), eventListener); } + /** * 鍙戦�佸師鐢熸暟鎹� * @@ -126,6 +127,25 @@ * @param baseCallBack 缁撴灉鍥炶皟 */ public void Send(String gatewayOidOrGatewayId, byte[] payload, final ModbusCallBack baseCallBack) { + Send(gatewayOidOrGatewayId, payload, 5, baseCallBack); + } + + /** + * 鍙戦�佸師鐢熸暟鎹� + * + * @param gatewayOidOrGatewayId 鐩爣缃戝叧鐨刼id鎴栬�呯綉鍏矷d + * @param payload 鍙戦�佹暟鎹� + * @param timeout 瓒呮椂鏃堕棿(s) + * @param 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,9 +165,9 @@ // request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN_SLAVE, HDLLinkConfig.getInstance().getGatewayId(), gatewayOidOrGatewayId)); // } request.setReplyTopic("Modbus" + payload[0] + payload[1]); - long timeout = 5 * 1000; + 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 int[]) { diff --git a/app/build.gradle b/app/build.gradle index 57003e8..c68e838 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,7 @@ plugins { id 'com.android.application' + // 娣诲姞濡備笅閰嶇疆(鍗庝负鏋佸厜鎺ㄩ��) + id 'com.huawei.agconnect' } //蹇呴』閰嶇疆uni def mfph = [ @@ -54,6 +56,8 @@ // VIVO_APPKEY : "vivo鐨凙PPKEY", // VIVO_APPID : "vivo鐨凙PPID", // HONOR_APPID : "Honor鐨凙PP ID", +// MEIZU_APPKEY : "MZ-榄呮棌鐨凙PPKEY", +// MEIZU_APPID : "110098313", ] @@ -170,11 +174,12 @@ implementation 'com.contrarywind:Android-PickerView:4.1.9' -// //鑻ヤ笉闆嗘垚鍘傚晢閫氶亾锛屽彲鐩存帴璺宠繃浠ヤ笅渚濊禆 -// // 鏋佸厜鍘傚晢鎻掍欢鐗堟湰涓庢帴鍏� JPush 鐗堟湰淇濇寔涓�鑷达紝涓嬪悓 -// // 鎺ュ叆鍗庝负鍘傚晢 -// implementation 'com.huawei.hms:push:6.9.0.300' -// implementation 'cn.jiguang.sdk.plugin:huawei:5.0.3' + //鑻ヤ笉闆嗘垚鍘傚晢閫氶亾锛屽彲鐩存帴璺宠繃浠ヤ笅渚濊禆 + // 鏋佸厜鍘傚晢鎻掍欢鐗堟湰涓庢帴鍏� JPush 鐗堟湰淇濇寔涓�鑷达紝涓嬪悓 + // 鎺ュ叆鍗庝负鍘傚晢 + implementation 'com.huawei.hms:push:6.9.0.300' + implementation 'cn.jiguang.sdk.plugin:huawei:5.0.3' + implementation 'com.huawei.agconnect:agconnect-core:1.9.1.301' // // 鎺ュ叆 FCM 鍘傚晢 // implementation 'com.google.firebase:firebase-messaging:23.1.2' // implementation 'cn.jiguang.sdk.plugin:fcm:5.0.3' diff --git a/app/src/agconnect-services.json b/app/src/agconnect-services.json new file mode 100644 index 0000000..886de3e --- /dev/null +++ b/app/src/agconnect-services.json @@ -0,0 +1,96 @@ +{ + "agcgw":{ + "backurl":"connect-drcn.hispace.hicloud.com", + "url":"connect-drcn.dbankcloud.cn", + "websocketbackurl":"connect-ws-drcn.hispace.dbankcloud.com", + "websocketurl":"connect-ws-drcn.hispace.dbankcloud.cn" + }, + "agcgw_all":{ + "CN":"connect-drcn.dbankcloud.cn", + "CN_back":"connect-drcn.hispace.hicloud.com", + "DE":"connect-dre.dbankcloud.cn", + "DE_back":"connect-dre.hispace.hicloud.com", + "RU":"connect-drru.hispace.dbankcloud.ru", + "RU_back":"connect-drru.hispace.dbankcloud.cn", + "SG":"connect-dra.dbankcloud.cn", + "SG_back":"connect-dra.hispace.hicloud.com" + }, + "websocketgw_all":{ + "CN":"connect-ws-drcn.hispace.dbankcloud.cn", + "CN_back":"connect-ws-drcn.hispace.dbankcloud.com", + "DE":"connect-ws-dre.hispace.dbankcloud.cn", + "DE_back":"connect-ws-dre.hispace.dbankcloud.com", + "RU":"connect-ws-drru.hispace.dbankcloud.ru", + "RU_back":"connect-ws-drru.hispace.dbankcloud.cn", + "SG":"connect-ws-dra.hispace.dbankcloud.cn", + "SG_back":"connect-ws-dra.hispace.dbankcloud.com" + }, + "client":{ + "cp_id":"2850086000428177029", + "product_id":"388421841221912061", + "client_id":"1334607718899553344", + "client_secret":"16C06FC0240591855E34A0F1F1B3EDD28D9AD47CD6EB8049FE9434244D110D08", + "project_id":"388421841221912061", + "app_id":"110103729", + "api_key":"DAEDAL9meDhjmXsa+iGSNzr9ChvpxvAamFjPSLrX8FPrxCrS2s2nMKvrUjHD1g6dIuGB+Gd21AvXzG2aFytNBvGEUSRZBTQ3lQhVJQ==", + "package_name":"com.hdl.photovoltaic" + }, + "oauth_client":{ + "client_id":"110103729", + "client_type":1 + }, + "app_info":{ + "app_id":"110103729", + "package_name":"com.hdl.photovoltaic" + }, + "service":{ + "analytics":{ + "collector_url":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn", + "collector_url_ru":"datacollector-drru.dt.dbankcloud.ru,datacollector-drru.dt.hicloud.com", + "collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn", + "collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn", + "collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn", + "resource_id":"p1", + "channel_id":"" + }, + "edukit":{ + "edu_url":"edukit.cloud.huawei.com.cn", + "dh_url":"edukit.cloud.huawei.com.cn" + }, + "search":{ + "url":"https://search-drcn.cloud.huawei.com" + }, + "cloudstorage":{ + "storage_url_sg_back":"https://agc-storage-dra.cloud.huawei.asia", + "storage_url_ru_back":"https://agc-storage-drru.cloud.huawei.ru", + "storage_url_ru":"https://agc-storage-drru.cloud.huawei.ru", + "storage_url_de_back":"https://agc-storage-dre.cloud.huawei.eu", + "storage_url_de":"https://ops-dre.agcstorage.link", + "storage_url":"https://agc-storage-drcn.platform.dbankcloud.cn", + "storage_url_sg":"https://ops-dra.agcstorage.link", + "storage_url_cn_back":"https://agc-storage-drcn.cloud.huawei.com.cn", + "storage_url_cn":"https://agc-storage-drcn.platform.dbankcloud.cn" + }, + "ml":{ + "mlservice_url":"ml-api-drcn.ai.dbankcloud.com,ml-api-drcn.ai.dbankcloud.cn" + } + }, + "region":"CN", + "configuration_version":"3.0", + "appInfos":[ + { + "package_name":"com.hdl.photovoltaic", + "client":{ + "app_id":"110103729" + }, + "app_info":{ + "package_name":"com.hdl.photovoltaic", + "app_id":"110103729" + }, + "oauth_client":{ + "client_type":1, + "client_id":"110103729" + } + } + ] +} \ No newline at end of file diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java b/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java index 3abca1c..9b159f2 100644 --- a/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java +++ b/app/src/main/java/com/hdl/photovoltaic/internet/TcpClient.java @@ -1,19 +1,14 @@ package com.hdl.photovoltaic.internet; - import android.text.TextUtils; -import android.util.Log; -import com.hdl.log.utils.PointUtil; -import com.hdl.photovoltaic.other.HdlAccountLogic; -import com.hdl.sdk.link.common.exception.HDLLinkException; import com.hdl.sdk.link.core.callback.HDLLinkCallBack; import com.hdl.sdk.link.core.callback.ModbusCallBack; import com.hdl.sdk.link.core.connect.HDLModBusConnect; import com.hdl.sdk.link.gateway.HDLLinkLocalGateway; -import java.lang.reflect.Type; -import java.util.Arrays; +import java.nio.ByteBuffer; + /** * 瀹㈡埛绔搷浣滈�昏緫 @@ -48,8 +43,7 @@ * @param jObject 璐熻浇鏁版嵁<娌℃湁濉玭ull></> * @param sendPath 鍙戦�佽矾寰�<绫诲悕+鏂规硶鍚�>class->methodName</> */ - public void sendDataToLinkGateway(String mac, boolean isEncrypt, - String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { + public void sendDataToLinkGateway(String mac, boolean isEncrypt, String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { HDLLinkLocalGateway.getInstance().sendDataToLinkGateway(mac, isEncrypt, topic, jObject, sendPath, callBack); } @@ -62,8 +56,7 @@ * @param jObject 璐熻浇鏁版嵁<娌℃湁濉玭ull></> * @param sendPath 鍙戦�佽矾寰�<绫诲悕+鏂规硶鍚�>class->methodName</> */ - public void sendDataToLinkGateway(String mac, - String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { + public void sendDataToLinkGateway(String mac, String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { HDLLinkLocalGateway.getInstance().sendDataToLinkGateway(mac, topic, jObject, sendPath, callBack); } @@ -73,28 +66,28 @@ * 涓嬪彂涓婚搴曞眰榛樿 * * @param mac 缃戝叧mac - * @param oidAddresses oid閲岄潰Addresses鍦板潃 - * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� - * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� - * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛夈�愭敞鎰忥細鍔熻兘鐮�=3鏃�,濉暟鍊硷紱瀹為檯璇诲灏慴yte灏卞~澶氬皯锛屼緥濡傚~"20"銆� + * @param oidAddresses oid鐗╃悊淇℃伅閲岄潰Addresses鍦板潃 + * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒),6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧�(鏍规嵁鏂囨。涓婂~鍗佽繘鍒跺��) + * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛夈�愭敞鎰忥細鍔熻兘鐮�=3鏃�,鏍规嵁鏂囨。涓婂~鏁版嵁瀛楄妭鏁帮紝渚嬪璇诲彇璁惧澶囨敞锛屽~20Byte銆� */ - public void SendModBusDataToLinkGateway(String mac, String oidAddresses, int functionCode, int registerAddress, String contentData, ModbusCallBack modbusCallBack) { - String s = ""; + public void sendModBusDataToLinkGateway(String mac, String oidAddresses, FunctionCode functionCode, int registerAddress, String contentData, ModbusCallBack modbusCallBack) { + String data = ""; switch (functionCode) { - case 3: { - s = getReadModbusPassData(oidAddresses, registerAddress, functionCode, contentData); + case ReadMultipleRegisters: { + data = readModbusPassData(oidAddresses, registerAddress, functionCode, contentData); } break; - case 6: { - s = getWriteSingleModbusPassData(oidAddresses, registerAddress, functionCode, contentData); + case WriteSingleRegister: { + data = writeSingleModbusPassData(oidAddresses, registerAddress, functionCode, contentData); } break; - case 16: { - s = getWriteMultipleModbusPassData(oidAddresses, registerAddress, functionCode, contentData); + case WriteMultipleRegisters: { + data = writeMultipleModbusPassData(oidAddresses, registerAddress, functionCode, contentData); } break; } - HDLModBusConnect.getInstance().Send(mac, s.getBytes(), modbusCallBack); + HDLModBusConnect.getInstance().Send(mac, getDataByteArray(data), modbusCallBack); } /** @@ -107,23 +100,23 @@ * 瀵勫瓨鍣ㄩ暱搴�=(鍐呭鏁版嵁/2); * 渚嬪瓙:new byte[]{00,01,00,00,00,0x09,00,00,00,01,03,00,00,00,01}; * - * @param oidAddresses oid閲岄潰Addresses鐨勫�� + * @param oidAddresses oid鐗╃悊淇℃伅閲岄潰Addresses鍦板潃 * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� - * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧�(鏍规嵁鏂囨。涓婂崄杩涘埗鍊煎~) * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛� */ - public String getReadModbusPassData(String oidAddresses, int functionCode, int registerAddress, String contentData) { + private String readModbusPassData(String oidAddresses, int registerAddress, FunctionCode functionCode, String contentData) { String data = ""; try { String eventID = to2ByteHexString(registerAddress);//浜嬩欢ID(2byte) String agreement = "0000";//鍗忚锛�2byte锛� String dataByteLength = "";//闀垮害锛圢 byte锛� String oidAddresses_1 = oidAddresses;//鏍囪瘑绗︼紙4byte锛� - String functionCode_1 = to1ByteHexString(functionCode);//鍔熻兘鐮侊紙=1byte锛� + String functionCode_1 = to1ByteHexString(functionCode.value());//鍔熻兘鐮侊紙1byte锛� String registerAddress_1 = to2ByteHexString(registerAddress);//瀵勫瓨鍣ㄥ湴鍧�锛�2byte锛� - String registerLength_1 = to2ByteHexString(Integer.getInteger(contentData) / 2);//瀵勫瓨鍣ㄩ暱搴︼紙2byte锛� + String registerLength_1 = to2ByteHexString(Integer.parseInt(contentData) / 2);//瀵勫瓨鍣ㄩ暱搴︼紙2byte锛� byte[] bytes = (oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1).getBytes(); - dataByteLength = to1ByteHexString(bytes.length / 2); + dataByteLength = to2ByteHexString(bytes.length / 2); data = eventID + agreement + dataByteLength + oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1; return data; } catch (Exception ignored) { @@ -140,25 +133,25 @@ * 闀垮害(2涓猙yte)=鏍囪瘑绗�(4涓猙yte)+鍔熻兘鐮�(1涓猙yte)+璐熻浇鏁版嵁(N涓猙yte); * 璐熻浇鏁版嵁=瀵勫瓨鍣ㄥ湴鍧�(2涓猙yte)+瀵勫瓨鍣ㄩ暱搴�(2涓猙yte)+鍐呭闀垮害(1涓猙yte)+鍐呭鏁版嵁(N涓猙yte)銆愭敞鎰�:鍗曚釜鍐欏叆瀵勫瓨鍣�-->鍘绘帀<瀵勫瓨鍣ㄩ暱搴�>鍜�<鍐呭闀垮害>銆�; * 瀵勫瓨鍣ㄩ暱搴�=(鍐呭鏁版嵁/2); - * 渚嬪瓙:new byte[]{[0, 11, 0, 0, 0, 30, 0, 0, 0, 26, 6, 0, 11, 49, 50, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32]}; + * 渚嬪瓙:new byte[]{199, 112, 0, 0, 0, 9, 0, 0, 0, 26, 6, 199, 112, 0, 110}; * - * @param oidAddresses oid閲岄潰Addresses鐨勫�� + * @param oidAddresses oid鐗╃悊淇℃伅閲岄潰Addresses鍦板潃 * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� - * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧�(鏍规嵁鏂囨。涓婂崄杩涘埗鍊煎~) * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛� */ - public String getWriteSingleModbusPassData(String oidAddresses, int functionCode, int registerAddress, String contentData) { + private String writeSingleModbusPassData(String oidAddresses, int registerAddress, FunctionCode functionCode, String contentData) { String data = ""; try { String eventID = to2ByteHexString(registerAddress);//浜嬩欢ID(2byte) String agreement = "0000";//鍗忚锛�2byte锛� String dataByteLength = "";//闀垮害锛圢 byte锛� String oidAddresses_1 = oidAddresses;//鏍囪瘑绗︼紙4byte锛� - String functionCode_1 = to1ByteHexString(functionCode);//鍔熻兘鐮侊紙=1byte锛� + String functionCode_1 = to1ByteHexString(functionCode.value());//鍔熻兘鐮侊紙1byte锛� String registerAddress_1 = to2ByteHexString(registerAddress);//瀵勫瓨鍣ㄥ湴鍧�锛�2byte锛� String contentData_1 = contentData;//鍐呭鏁版嵁锛圢 byte锛� byte[] bytes = (oidAddresses_1 + functionCode_1 + registerAddress_1 + contentData_1).getBytes(); - dataByteLength = to1ByteHexString(bytes.length / 2); + dataByteLength = to2ByteHexString(bytes.length / 2); data = eventID + agreement + dataByteLength + oidAddresses_1 + functionCode_1 + registerAddress_1 + contentData_1; return data; } catch (Exception ignored) { @@ -178,10 +171,10 @@ * * @param oidAddresses oid閲岄潰Addresses鐨勫�� * @param functionCode 鍔熻兘鐮併��3=锛堣鍙栧涓瘎瀛樺櫒)锛�,6=锛堝啓鍏ュ崟涓瘎瀛樺櫒锛�,16=锛堝啓鍏ュ涓瘎瀛樺櫒锛夈�� - * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧� + * @param registerAddress 瀵勫瓨鍣ㄥ湴鍧�(鏍规嵁鏂囨。涓婂崄杩涘埗鍊煎~) * @param contentData 鍐呭鏁版嵁锛堜笉鍚瘎瀛樺櫒鍦板潃锛� */ - public String getWriteMultipleModbusPassData(String oidAddresses, int functionCode, int registerAddress, String contentData) { + private String writeMultipleModbusPassData(String oidAddresses, int registerAddress, FunctionCode functionCode, String contentData) { String data = ""; try { @@ -189,13 +182,13 @@ String agreement = "0000";//鍗忚锛�2byte锛� String dataByteLength = "";//闀垮害锛圢 byte锛� String oidAddresses_1 = oidAddresses;//鏍囪瘑绗︼紙4byte锛� - String functionCode_1 = to1ByteHexString(functionCode);//鍔熻兘鐮侊紙=1byte锛� + String functionCode_1 = to1ByteHexString(functionCode.value());//鍔熻兘鐮侊紙1byte锛� String registerAddress_1 = to2ByteHexString(registerAddress);//瀵勫瓨鍣ㄥ湴鍧�锛�2byte锛� String registerLength_1 = to2ByteHexString(contentData.length() / 2);//瀵勫瓨鍣ㄩ暱搴︼紙2byte锛� String contentLength_1 = to1ByteHexString(contentData.length());//鍐呭闀垮害锛�1byte锛� String contentData_1 = contentData;//鍐呭鏁版嵁锛圢 byte锛� byte[] bytes = (oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1 + contentLength_1 + contentData_1).getBytes(); - dataByteLength = to1ByteHexString(bytes.length / 2); + dataByteLength = to2ByteHexString(bytes.length / 2); data = eventID + agreement + dataByteLength + oidAddresses_1 + functionCode_1 + registerAddress_1 + registerLength_1 + contentLength_1 + contentData_1; return data; } catch (Exception ignored) { @@ -203,6 +196,36 @@ } } + /** + * 閫愪釜瑙f瀽涓や釜瀛楃锛屽皢鍏惰浆鎹负瀛楄妭 + * + * @param hexString 16杩涘埗鐨勫瓧绗︿覆 + * @return 杩斿洖鏁扮粍 + */ + private byte[] getDataByteArray(String hexString) { + try { + if (TextUtils.isEmpty(hexString)) { + return new byte[]{}; + } + //鍘婚櫎瀛楃涓插墠鍚庣殑绌烘牸 + hexString = hexString.trim(); + // 纭繚瀛楃涓茬殑闀垮害鏄伓鏁� + if (hexString.length() % 2 != 0) { + //鏃犳晥鐨勫崄鍏繘鍒跺瓧绗︿覆 + return new byte[]{}; + } + // 璁$畻瀛楄妭鏁扮粍鐨勯暱搴� + int byteArrayLength = hexString.length() / 2; + byte[] byteArray = new byte[byteArrayLength]; + //閫愪釜瑙f瀽涓や釜瀛楃锛屽皢鍏惰浆鎹负瀛楄妭 + for (int i = 0; i < byteArrayLength; i++) { + byteArray[i] = (byte) Integer.parseInt(hexString.substring(i * 2, i * 2 + 2), 16); + } + return byteArray; + } catch (Exception ignored) { + return new byte[]{}; + } + } /** * 鑾峰彇鍗佸叚杩涘埗瀛楃涓�(涓嶅涓や綅鍓嶉潰琛�0) @@ -210,7 +233,7 @@ * @param value 瀵勫瓨鍣ㄥ湴鍧�(鍗佽繘鍒�) * @return (2byte)鍗佸叚杩涘埗瀛楃涓� */ - public String to2ByteHexString(int value) { + private String to2ByteHexString(int value) { String high = ""; String low = ""; if (value > 255) { @@ -230,7 +253,7 @@ * @param value 鍗佽繘鍒� * @return (1byte)鍗佸叚杩涘埗瀛楃涓� */ - public String to1ByteHexString(int value) { + private String to1ByteHexString(int value) { try { String hexString = Integer.toHexString(value); if (hexString.length() == 1) { @@ -249,7 +272,7 @@ * @param dataBytes 鏁扮粍 * @return -(n byte)鍗佸叚杩涘埗瀛楃涓� */ - public String toNByteHexString(byte[] dataBytes) { + private String toNByteHexString(byte[] dataBytes) { StringBuilder stringBuilder = new StringBuilder(); for (byte dataByte : dataBytes) { String dataB = Integer.toHexString(dataByte & 0xFF); @@ -281,5 +304,46 @@ return high + low; } + /** + * bytes鏁扮粍杞琁nt鍊� + * + * @param bytes 鏁版嵁 + */ + public int toByteArrayInt(byte[] bytes) { + int ans = 0; + for (byte b : bytes) { + ans <<= 8; + ans |= (b & 0xff); + } + return ans; + } + + /** + * 鍔熻兘鐮� + */ + public enum FunctionCode { + + /** + * 璇诲彇鍗曚釜鎴栬�呭涓瘎瀛樺櫒 + */ + ReadMultipleRegisters(3), + /** + * 鍐欏叆鍗曚釜瀵勫瓨鍣� + */ + WriteSingleRegister(6), + /** + * 鍐欏叆澶氫釜瀵勫瓨鍣� + */ + WriteMultipleRegisters(16); + private int mValue; + + FunctionCode(int value) { + this.mValue = value; + } + + public int value() { + return this.mValue; + } + } } diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java index 0aad188..ec3c8a1 100644 --- a/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java +++ b/app/src/main/java/com/hdl/photovoltaic/ui/message/RecoverMessageFragment.java @@ -111,25 +111,6 @@ this.nullDataUpdateUi(); } - /** - * 鍒锋柊銆愬凡鎭㈠銆戜俊鎭暟閲忔�绘暟 - */ - private void refreshRecoverCount() { - HdlThreadLogic.runMainThread(new Runnable() { - @Override - public void run() { - TextView textView = _mActivity.findViewById(R.id.message_tab_recover_title_tv); - if (textView != null) { - textView.setText(getText(R.string.message_recover)); - if (mList.size() > 0) { - String s = getText(R.string.message_recover) + "(" + mList.size() + ")"; - textView.setText(s); - } - } - - } - }); - } @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void onEventMessage(BaseEventBus eventBus) { @@ -202,6 +183,26 @@ } /** + * 鍒锋柊銆愬凡鎭㈠銆戜俊鎭暟閲忔�绘暟 + */ + private void refreshRecoverCount() { + HdlThreadLogic.runMainThread(new Runnable() { + @Override + public void run() { + TextView textView = _mActivity.findViewById(R.id.message_tab_recover_title_tv); + if (textView != null) { + textView.setText(getText(R.string.message_recover)); + if (mList.size() > 0) { + String s = getText(R.string.message_recover) + "(" + mList.size() + ")"; + textView.setText(s); + } + } + + } + }); + } + + /** * 娌℃湁鐢电珯鍒楄〃鐨勬牱寮� */ private void nullDataUpdateUi() { @@ -210,4 +211,5 @@ viewBinding.nullDataIc.nullDataGifAnimationIv, viewBinding.nullDataIc.nullDataTv, getString(R.string.message_alarm_data_null), mList.size() > 0); } + } diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java index 3baa86d..b80a977 100644 --- a/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java +++ b/app/src/main/java/com/hdl/photovoltaic/ui/test/TestMainActivity.java @@ -16,6 +16,7 @@ import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityTestMainBinding; import com.hdl.photovoltaic.enums.ShowErrorMode; +import com.hdl.photovoltaic.internet.HttpClient; import com.hdl.photovoltaic.internet.TcpClient; import com.hdl.photovoltaic.internet.api.TopicApi; import com.hdl.photovoltaic.listener.CloudCallBeak; @@ -30,6 +31,7 @@ import com.hdl.sdk.link.core.bean.response.BaseLocalResponse; import com.hdl.sdk.link.core.callback.GatewayCallBack; import com.hdl.sdk.link.core.callback.HDLLinkCallBack; +import com.hdl.sdk.link.core.callback.ModbusCallBack; import java.lang.reflect.Type; import java.util.ArrayList; @@ -130,6 +132,7 @@ s.add("娓呴櫎閫嗗彉鍣ㄤ綇瀹匢d(4)"); s.add("涓婁紶oid鍒楄〃缁欎簯绔�(5)"); s.add("鑾峰彇閫嗗彉鍣ㄤ笅鎸傝澶囧垪琛�(6)"); +// s.add("鑾峰彇閫嗗彉鍣ㄧ殑淇℃伅(7)"); return s; } @@ -258,6 +261,20 @@ }); } break; + case "鑾峰彇閫嗗彉鍣ㄧ殑淇℃伅(7)": { + TcpClient.getInstance().sendModBusDataToLinkGateway(gatewayBean.getDevice_mac(), "0000001A", TcpClient.FunctionCode.ReadMultipleRegisters, 550, "8", new ModbusCallBack() { + @Override + public void onSuccess(int[] data) { + gsonConvertJsonStr(data); + } + + @Override + public void onError(HDLLinkException e) { + setError(e.getMsg(), e.getCode()); + } + }); + } + break; default: { HdlThreadLogic.runMainThread(new Runnable() { @Override diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/TimeUtils.java b/app/src/main/java/com/hdl/photovoltaic/utils/TimeUtils.java index fec90e3..b7d267e 100644 --- a/app/src/main/java/com/hdl/photovoltaic/utils/TimeUtils.java +++ b/app/src/main/java/com/hdl/photovoltaic/utils/TimeUtils.java @@ -2,6 +2,10 @@ import android.annotation.SuppressLint; +import com.hdl.photovoltaic.config.UserConfigManage; +import com.hdl.photovoltaic.other.HdlThreadLogic; +import com.hdl.sdk.link.core.utils.LanguageUtils; + import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; @@ -54,7 +58,11 @@ */ public static String getTimeFromTimestamp(long timestamp) { try { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH); + String pattern = "yyyy-MM-dd HH:mm"; + if (UserConfigManage.getInstance().getCurrentAppLanguage().equals(LocalManageUtil.en)) { + pattern = "dd-MM-yyyy HH:mm"; + } + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern, Locale.ENGLISH); Date date = new Date(timestamp); return dateFormat.format(date); } catch (Exception e) { diff --git a/build.gradle b/build.gradle index a255faa..05c8bec 100644 --- a/build.gradle +++ b/build.gradle @@ -10,12 +10,16 @@ maven { url "https://jitpack.io" } + maven { url 'https://developer.huawei.com/repo/' }//锛堝崕涓烘瀬鍏夋帹閫侊級 + } dependencies { classpath "com.android.tools.build:gradle:4.1.2" classpath 'io.github.didi.dokit:dokitx-plugin:3.5.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files + //澧炲姞AGC鎻掍欢閰嶇疆锛屼互渚胯兘鍚屾鈥渁gconnect-services.json鈥濇枃浠朵腑鐨勪俊鎭�.锛堝崕涓烘瀬鍏夋帹閫侊級 + classpath 'com.huawei.agconnect:agcp:1.6.1.300' } } @@ -39,6 +43,10 @@ } url 'https://packages.aliyun.com/maven/repository/2012126-release-Mc0DNo/' } + //锛堝崕涓烘瀬鍏夋帹閫侊級 + maven { + url 'https://developer.huawei.com/repo/' + } } } -- Gitblit v1.8.0