From 69afac92a320033297d71e901e3c5b65e690f0b2 Mon Sep 17 00:00:00 2001
From: panlili2024 <14743743+panlili2024@user.noreply.gitee.com>
Date: 星期二, 12 十一月 2024 11:42:15 +0800
Subject: [PATCH] 增加knx科技系统温度0.5支持

---
 app/src/main/java/com/hdl/sdk/ttl_sdk/HDLApplication.java                                           |    2 
 HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/AirTechSysBackInfo.java   |   63 ++++++++++++++-
 .idea/deploymentTargetSelector.xml                                                                  |    4 
 HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLCommand.java                    |   44 +++++++++++
 HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLSerialPortCore.java             |    2 
 HDL_TTLSDK485/build.gradle                                                                          |    4 
 HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/Parser/AirCtrlParser.java |   68 ++++++++++++++++
 README.md                                                                                           |   21 ++++-
 app/src/main/java/com/hdl/sdk/ttl_sdk/activity/CtrlAirKNXTechSysActivity.java                       |   27 ++++--
 9 files changed, 209 insertions(+), 26 deletions(-)

diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 72ad84c..d16ad6f 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-11-11T02:28:48.057319600Z">
+        <DropdownSelection timestamp="2024-11-12T03:27:29.888475400Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="Default" identifier="serial=192.168.1.113:5555;connection=edc26430" />
+              <DeviceId pluginId="Default" identifier="serial=192.168.1.103:5555;connection=3ecbcada" />
             </handle>
           </Target>
         </DropdownSelection>
diff --git a/HDL_TTLSDK485/build.gradle b/HDL_TTLSDK485/build.gradle
index 905b95b..d48ec72 100644
--- a/HDL_TTLSDK485/build.gradle
+++ b/HDL_TTLSDK485/build.gradle
@@ -7,8 +7,8 @@
     defaultConfig {
         minSdkVersion 17
         targetSdkVersion 30
-        versionCode 7
-        versionName "1.2.4"
+        versionCode 8
+        versionName "1.2.5"
 
         testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
         ndk {
diff --git a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/AirTechSysBackInfo.java b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/AirTechSysBackInfo.java
index c6b0aab..ca8446d 100644
--- a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/AirTechSysBackInfo.java
+++ b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/AirTechSysBackInfo.java
@@ -1,7 +1,5 @@
 package com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition;
 
-import android.util.Log;
-
 import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo;
 
 import java.io.Serializable;
@@ -18,8 +16,19 @@
     private String indoorHumidity;//瀹ゅ唴婀垮害 0-100
     private int indoorTempInt;//瀹ゅ唴娓╁害鐐规暣鏁伴儴鍒�
     private int indoorTempFloat;//瀹ゅ唴娓╁害鐐瑰皬鏁伴儴鍒�
-    private int refTemp;//鍒跺喎娓╁害鐐� 0-84
-    private int heatTemp;//鍒剁儹娓╁害鐐� 0-84
+
+    private String coldTemp;//鍒跺喎娓╁害鐐�,鏀寔灏忔暟鐨勭敤杩欎釜
+    private int refTemp;//鍒跺喎娓╁害鐐规暣鏁伴儴鍒� 0-84
+    private int refTempFloat;//鍒跺喎娓╁害鐐瑰皬鏁伴儴鍒�
+
+    private String hotTemp;//鍒跺喎娓╁害鐐癸紝鏀寔灏忔暟鐨勭敤杩欎釜
+    private int heatTemp;//鍒剁儹娓╁害鐐规暣鏁伴儴鍒� 0-84
+    private int heatTempFloat;//鍒剁儹娓╁害鐐瑰皬鏁伴儴鍒�
+
+    private String setTemp;//鍒跺喎娓╁害鐐� 0-84
+    private int setTempInt;//鍒剁儹娓╁害鐐规暣鏁伴儴鍒� 0-84
+    private int setTempFloat;//鍒剁儹娓╁害鐐瑰皬鏁伴儴鍒�
+
     private int airMode;//绌鸿皟妯″紡0 = 鍒跺喎, 1 = 鍒剁儹
     private byte[] curState;//鎺у埗鍥為淇℃伅
 
@@ -34,7 +43,27 @@
 
         if (this.curState == null) return;
 
-        if (this.curState.length >= 14) {
+        if (this.curState.length >= 19) {
+            this.channelNum = this.curState[0] & 0xFF;
+            this.indoorTempInt = this.curState[2] & 0xFF;
+            this.refTemp = this.curState[3] & 0xFF;//鍒跺喎娓╁害鐐� 0-84
+            this.heatTemp = this.curState[4] & 0xFF;//鍒剁儹娓╁害鐐� 0-84
+            this.isOn = this.curState[8] & 0xFF;//鍙彇浣�4浣�
+            this.airMode = this.curState[9] & 0xFF;
+            this.setTempInt = this.curState[11] & 0xFF;
+            this.indoorTempFloat = this.curState[13] & 0xFF;
+            this.indoorTemp = indoorTempInt + "." + indoorTempFloat;
+
+            this.refTempFloat = this.curState[14] & 0xFF;
+            this.coldTemp = refTemp + "." + refTempFloat;
+
+            this.heatTempFloat = this.curState[15] & 0xFF;
+            this.hotTemp = heatTemp + "." + heatTempFloat;
+
+            this.setTempFloat = this.curState[18] & 0xFF;
+            this.setTemp = setTempInt + "." + setTempFloat;
+
+        } else if (this.curState.length >= 14) {
             this.channelNum = this.curState[0] & 0xFF;
             this.indoorTempInt = this.curState[2] & 0xFF;
             this.refTemp = this.curState[3] & 0xFF;//鍒跺喎娓╁害鐐� 0-84
@@ -118,6 +147,30 @@
         this.airMode = airMode;
     }
 
+    public String getColdTemp() {
+        return coldTemp;
+    }
+
+    public void setColdTemp(String coldTemp) {
+        this.coldTemp = coldTemp;
+    }
+
+    public String getHotTemp() {
+        return hotTemp;
+    }
+
+    public void setHotTemp(String hotTemp) {
+        this.hotTemp = hotTemp;
+    }
+
+    public String getSetTemp() {
+        return setTemp;
+    }
+
+    public void setSetTemp(String setTemp) {
+        this.setTemp = setTemp;
+    }
+
     public byte[] getCurState() {
         return curState;
     }
diff --git a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/Parser/AirCtrlParser.java b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/Parser/AirCtrlParser.java
index 6b0ec25..bada758 100644
--- a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/Parser/AirCtrlParser.java
+++ b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLAppliances/HDLAirCondition/Parser/AirCtrlParser.java
@@ -413,4 +413,70 @@
         }
 
     }
-}
+
+    public static byte[] getAirKNXTechAddByte(AppliancesInfo appliancesInfo, int type, float temp) {
+
+        try {
+            AppliancesInfo newInfo = null;
+            byte[] airBytes = null;
+            outter:
+            for (int i = 0; i < HDLDeviceManager.devicesDataList.size(); i++) {
+                if (appliancesInfo.getDeviceSubnetID() == HDLDeviceManager.devicesDataList.get(i).getDeviceSubnetID()
+                        && appliancesInfo.getDeviceDeviceID() == HDLDeviceManager.devicesDataList.get(i).getDeviceDeviceID()) {
+                    for (int j = 0; j < HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().size(); j++) {
+                        if (HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getBigType() == Configuration.AIR_BIG_TYPE
+                                && HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getDeviceType() == HDLApConfig.TYPE_AC_KNXTECHSYS
+                                && appliancesInfo.getChannelNum() == HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j).getChannelNum()) {
+
+                            newInfo = HDLDeviceManager.devicesDataList.get(i).getAppliancesInfoList().get(j);
+                            if (newInfo.getArrCurState() == null) {
+                                newInfo.setArrCurState(new byte[19]);
+                            }
+                            airBytes = newInfo.getArrCurState();
+                            break outter;
+                        }
+                    }
+                }
+            }
+            byte[] addBytes = new byte[19];
+            if (airBytes != null && airBytes.length >= 19) {
+                System.arraycopy(airBytes, 0, addBytes, 0, airBytes.length);
+                addBytes[0] = (byte) newInfo.getChannelNum();
+
+                Log.d("panlili", "---temp=" + temp);
+                String tempStr = String.valueOf(temp).trim();
+                String[] strByte = tempStr.split("\\.");
+                int tempInt = Integer.parseInt(strByte[0]);
+                int tempFloat = Integer.parseInt(strByte[1]);
+
+                switch (type) {
+                    case refTem:
+                    case heatTem:
+                    case autoTem:
+                    case dehumTem://璁剧疆娓╁害
+                        addBytes[8] = 1;
+
+                        addBytes[3] = (byte) tempInt;
+                        addBytes[4] = (byte) tempInt;
+                        addBytes[5] = (byte) tempInt;
+                        addBytes[6] = (byte) tempInt;
+                        addBytes[11] = (byte) tempInt;
+
+                        addBytes[14] = (byte) tempFloat;
+                        addBytes[15] = (byte) tempFloat;
+                        addBytes[16] = (byte) tempFloat;
+                        addBytes[17] = (byte) tempFloat;
+                        addBytes[18] = (byte) tempFloat;
+
+                        break;
+                }
+            }
+
+            return addBytes;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new byte[]{fail};
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLCommand.java b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLCommand.java
index bbe4f12..9e7d2fc 100644
--- a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLCommand.java
+++ b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLCommand.java
@@ -7,6 +7,7 @@
 import com.hdl.sdk.ttl.Config.MCUConstants;
 import com.hdl.sdk.ttl.HDLAppliances.Config.HDLApConfig;
 import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirCtrlBackInfo;
+import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirTechSysBackInfo;
 import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.Parser.AirCtrlParser;
 import com.hdl.sdk.ttl.HDLAppliances.HDLAudio.HDLAudio;
 import com.hdl.sdk.ttl.HDLAppliances.HDLCommonSwitch.CommonSwitchBackInfo;
@@ -32,6 +33,7 @@
 import com.hdl.sdk.ttl.HDLDeviceManger.Bean.ScenesData;
 import com.hdl.sdk.ttl.HDLDeviceManger.Bean.SendDatas;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.AirFeedBackEvent;
+import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.AirTechSysFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.ColourLightFeedBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CommonSwitchCtrlBackEvent;
 import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CurtainFeedBackEvent;
@@ -411,6 +413,47 @@
                         AirCtrlBackInfo airCtrlBackInfo = new AirCtrlBackInfo();
                         airCtrlBackInfo.setAppliancesInfo(info);
                         EventBus.getDefault().post(new AirFeedBackEvent(airCtrlBackInfo, false));
+                    }
+                }
+            }, mRequestTimeout);
+
+
+        } else {
+            HDLLog.I("绌鸿皟璁惧鎺у埗涓嶅湪鑼冨洿鍐�"
+                    + " LittleType = " + info.getLittleType()
+                    + " BigType = " + info.getBigType()
+            );
+        }
+    }
+
+    /**
+     * 鎺у埗绌鸿皟娓╁害锛堟俯搴︿负娴偣鍨嬶級
+     *
+     * @param info
+     * @param type
+     * @param temp 娓╁害
+     */
+    public static void airCtrlTemp(final AppliancesInfo info, int type, float temp) {
+        HDLDeviceManager.setDeviceCtrlSuccessStateWithInfo(info, false);
+        if (acCtrlFailTimer != null) {
+            acCtrlFailTimer.cancel();
+            acCtrlFailTimer = null;
+        }
+        if (info.getBigType() == Configuration.AIR_BIG_TYPE) {
+            if (info.getDeviceType() == HDLApConfig.TYPE_AC_KNXTECHSYS) {
+                byte[] airbytes = AirCtrlParser.getAirKNXTechAddByte(info, type, temp);
+                if (airbytes != null) {
+                    addSendData(info, airbytes, Configuration.CONTROL);
+                }
+            }
+
+            acCtrlFailTimer = new Timer();
+            acCtrlFailTimer.schedule(new TimerTask() {
+                @Override
+                public void run() {
+                    if (!HDLDeviceManager.getDeviceCtrlSuccessStateWithInfo(info)) {
+                        AirTechSysBackInfo AirTechSysBackInfo = new AirTechSysBackInfo(info);
+                        EventBus.getDefault().post(new AirTechSysFeedBackEvent(AirTechSysBackInfo, false));
                     }
                 }
             }, mRequestTimeout);
@@ -1880,6 +1923,7 @@
             Crc sendDatas = new Crc(command, subnetID, deviceID, addBytes);
             HDLSerialPortCore.sendData(sendDatas);
         } else {
+
             SendDatas.AddSendData(command, subnetID, deviceID, addBytes);
         }
     }
diff --git a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLSerialPortCore.java b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLSerialPortCore.java
index bcf87ad..3b5acc8 100644
--- a/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLSerialPortCore.java
+++ b/HDL_TTLSDK485/src/main/java/com/hdl/sdk/ttl/HDLDeviceManger/Core/HDLSerialPortCore.java
@@ -26,7 +26,7 @@
  */
 public class HDLSerialPortCore {
     //涓插彛璁惧璺緞鍚�
-    private static String mPathname = "/dev/ttyS9";
+    private static String mPathname = "/dev/ttyS1";
     //娉㈢壒鐜�
     private static int mBaudrate = 115200;
 
diff --git a/README.md b/README.md
index f54660d..3f5b3de 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,19 @@
-## Android_HDL_SDK_TTL485
+## Android_HDL_SDK_TTL
 
-HDL TTL485 Android SDK  Copyright (c) 2019 HDL Inc.
+HDL TTL Android SDK  Copyright (c) 2019 HDL Inc.
 
-榄旈暅SDK椤圭洰
+485 BUS SDK椤圭洰
 
-2020-03-25
-1.鍘绘帀MCU灏忔澘鍗忚
+2024-5-31
+V1.2.4
+1.SDK鏂板KNX绉戞妧绯荤粺鏀寔锛屾俯搴︽帶鍒舵敮鎸佸皬鏁帮紝姝ヨ繘鏀寔0.5
+1锛夎缃俯搴︽樉绀猴細
+鏍规嵁鍒跺喎/鍒剁儹妯″紡锛屽彇getColdTemp()/getHotTemp()
+鏍规嵁璁剧疆娓╁害锛屽彇getSetTemp()
+2.璁剧疆娓╁害锛�
+璋冪敤airCtrlTemp(info,type,temp)鏂规硶
+
+2024-11-12
+V1.2.5
+1.淇敼鎼滅储璁惧澶囨敞鎸夌収index绱㈠紩
+2.浼樺寲鎼滅储璁惧娴佺▼
\ No newline at end of file
diff --git a/app/src/main/java/com/hdl/sdk/ttl_sdk/HDLApplication.java b/app/src/main/java/com/hdl/sdk/ttl_sdk/HDLApplication.java
index 728c877..e7ff760 100644
--- a/app/src/main/java/com/hdl/sdk/ttl_sdk/HDLApplication.java
+++ b/app/src/main/java/com/hdl/sdk/ttl_sdk/HDLApplication.java
@@ -9,7 +9,7 @@
  */
 public class HDLApplication extends Application {
 
-    public static final String HDL_UART_PATH = "/dev/ttyS9"; //涓插彛璁惧璺緞鍚�
+    public static final String HDL_UART_PATH = "/dev/ttyS1"; //涓插彛璁惧璺緞鍚�
     public static final int HDL_BAUDRATE = 115200;  //娉㈢壒鐜�
 
     @Override
diff --git a/app/src/main/java/com/hdl/sdk/ttl_sdk/activity/CtrlAirKNXTechSysActivity.java b/app/src/main/java/com/hdl/sdk/ttl_sdk/activity/CtrlAirKNXTechSysActivity.java
index be0c4b1..813a698 100644
--- a/app/src/main/java/com/hdl/sdk/ttl_sdk/activity/CtrlAirKNXTechSysActivity.java
+++ b/app/src/main/java/com/hdl/sdk/ttl_sdk/activity/CtrlAirKNXTechSysActivity.java
@@ -138,9 +138,10 @@
                     showToast("璁剧疆鐨勬俯搴︿笉鑳戒负绌�");
                     return;
                 }
-                int tempInt = Integer.parseInt(tempStr);
+                //2024.5.30淇敼锛屾俯搴︿慨鏀逛负娴偣鍨�
+                Float temp = Float.parseFloat(tempStr);
 
-                if (tempInt < 5 || tempInt > 35) {
+                if (temp < 5 || temp > 35) {
                     showToast("娓╁害璁剧疆鑼冨洿涓猴細5~35鎽勬皬搴�(鈩�)");
                     return;
                 }
@@ -148,11 +149,11 @@
                 switch (airModeState) {
                     case 0:
                         //褰撳墠绌鸿皟妯″紡涓哄埗鍐�
-                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.refTem, tempInt);//鍒跺喎娓╁害
+                        HDLCommand.airCtrlTemp(appliancesInfo, AirCtrlParser.refTem, temp);//鍒跺喎娓╁害锛�2024.5.30淇敼锛屾俯搴︽帶鍒惰皟鐢╝irCtrlTemp鏂规硶
                         break;
                     case 1:
                         //褰撳墠绌鸿皟妯″紡涓哄埗鐑�
-                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.heatTem, tempInt);//鍒剁儹娓╁害
+                        HDLCommand.airCtrlTemp(appliancesInfo, AirCtrlParser.heatTem, temp);//鍒剁儹娓╁害锛�2024.5.30淇敼锛屾俯搴︽帶鍒惰皟鐢╝irCtrlTemp鏂规硶
                         break;
                 }
             }
@@ -173,9 +174,13 @@
                 stringState += "\n瀹ゅ唴娓╁害锛�" + mAirTechSysBackInfo.getIndoorTemp();
 
                 if (AirCtrlParser.airModeRefTem == mAirTechSysBackInfo.getAirMode()) {
-                    stringState += "\n鍒跺喎妯″紡娓╁害锛�" + mAirTechSysBackInfo.getRefTemp();
+                    stringState += "\n鍒跺喎妯″紡娓╁害锛�" + mAirTechSysBackInfo.getColdTemp();//2024.5.30鏇存柊
                 } else if (AirCtrlParser.airModeHeatTem == mAirTechSysBackInfo.getAirMode()) {
-                    stringState += "\n鍒剁儹妯″紡娓╁害锛�" + mAirTechSysBackInfo.getHeatTemp();
+                    stringState += "\n鍒剁儹妯″紡娓╁害锛�" + mAirTechSysBackInfo.getHotTemp();//2024.5.30鏇存柊
+                }
+
+                if (!TextUtils.isEmpty(mAirTechSysBackInfo.getSetTemp())){//2024.5.30鏇存柊
+                    stringState += "\n璁剧疆娓╁害锛�" + mAirTechSysBackInfo.getSetTemp();
                 }
 
             } else {
@@ -244,9 +249,13 @@
             message += "\n瀹ゅ唴娓╁害锛�" + mAirTechSysBackInfo.getIndoorTemp();
 
             if (AirCtrlParser.airModeRefTem == mAirTechSysBackInfo.getAirMode()) {
-                message += "\n鍒跺喎妯″紡娓╁害锛�" + mAirTechSysBackInfo.getRefTemp();
+                message += "\n鍒跺喎妯″紡娓╁害锛�" + mAirTechSysBackInfo.getColdTemp();//2024.5.30鏇存柊
             } else if (AirCtrlParser.airModeHeatTem == mAirTechSysBackInfo.getAirMode()) {
-                message += "\n鍒剁儹妯″紡娓╁害锛�" + mAirTechSysBackInfo.getHeatTemp();
+                message += "\n鍒剁儹妯″紡娓╁害锛�" + mAirTechSysBackInfo.getHotTemp();//2024.5.30鏇存柊
+            }
+
+            if (!TextUtils.isEmpty(mAirTechSysBackInfo.getSetTemp())){//2024.5.30鏇存柊
+                message += "\n璁剧疆娓╁害锛�" + mAirTechSysBackInfo.getSetTemp();
             }
 
         } else {
@@ -276,7 +285,7 @@
             }
             AirTechSysBackInfo mAirTechSysBackInfo = event.getAirTechSysBackInfo();
             showAirTechSysBackInfo(mAirTechSysBackInfo);
-            if (!TextUtils.isEmpty(mAirTechSysBackInfo.getIndoorHumidity())){
+            if (!TextUtils.isEmpty(mAirTechSysBackInfo.getIndoorHumidity())) {
                 airHumidity.setText("瀹ゅ唴婀垮害锛�" + mAirTechSysBackInfo.getIndoorHumidity());
             }
         }

--
Gitblit v1.8.0