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