JLChen
2020-09-24 e91af284643d5e370b0d18c384fe8de65f59d9b3
2020-09-24 1.修改MQTTSDK引用方式,修复闪退问题。
4个文件已添加
3个文件已删除
11个文件已修改
1 文件已重命名
1163 ■■■■ 已修改文件
Android_HDL_SDK_XW/.idea/encodings.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/.idea/jarRepositories.xml 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/README.md 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/app/build.gradle 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/app/libs/HDL_ZigBeeSDK_V1.0.1.B1.20200923.aar 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/CtrlActivity.java 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/build.gradle 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/gradle/wrapper/gradle-wrapper.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/build.gradle 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/proguard-rules.pro 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/src/androidTest/java/com/hdl/sdk/hdl_core/ExampleInstrumentedTest.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommand.java 294 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommandText.java 314 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLZigbeeMqtt.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/SearchZigbeeGateway.java 191 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/hdl_core/src/test/java/com/hdl/sdk/hdl_core/ExampleUnitTest.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
org.eclipse.paho.client.mqttv3-1.2.0.jar 补丁 | 查看 | 原始文档 | blame | 历史
org.eclipse.paho.client.mqttv3-1.2.5.jar 补丁 | 查看 | 原始文档 | blame | 历史
打包aar/2020-09-23/HDL_ZigBeeSDK_V1.0.1.B1.20200923.aar 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_XW/.idea/encodings.xml
File was deleted
Android_HDL_SDK_XW/.idea/jarRepositories.xml
New file
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="RemoteRepositoriesConfiguration">
    <remote-repository>
      <option name="id" value="central" />
      <option name="name" value="Maven Central repository" />
      <option name="url" value="https://repo1.maven.org/maven2" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="jboss.community" />
      <option name="name" value="JBoss Community repository" />
      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="MavenRepo" />
      <option name="name" value="MavenRepo" />
      <option name="url" value="https://repo.maven.apache.org/maven2/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="maven" />
      <option name="name" value="maven" />
      <option name="url" value="https://maven.google.com" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="BintrayJCenter" />
      <option name="name" value="BintrayJCenter" />
      <option name="url" value="https://jcenter.bintray.com/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="Google" />
      <option name="name" value="Google" />
      <option name="url" value="https://dl.google.com/dl/android/maven2/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="$USER_HOME$/Library/Android/sdk/extras/google/m2repository" />
      <option name="name" value="$USER_HOME$/Library/Android/sdk/extras/google/m2repository" />
      <option name="url" value="file:$USER_HOME$/Library/Android/sdk/extras/google/m2repository" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="$USER_HOME$/Library/Android/sdk/extras/android/m2repository" />
      <option name="name" value="$USER_HOME$/Library/Android/sdk/extras/android/m2repository" />
      <option name="url" value="file:$USER_HOME$/Library/Android/sdk/extras/android/m2repository/" />
    </remote-repository>
    <remote-repository>
      <option name="id" value="$USER_HOME$/Library/Android/sdk/extras/m2repository" />
      <option name="name" value="$USER_HOME$/Library/Android/sdk/extras/m2repository" />
      <option name="url" value="file:$USER_HOME$/Library/Android/sdk/extras/m2repository" />
    </remote-repository>
  </component>
</project>
Android_HDL_SDK_XW/README.md
@@ -2,66 +2,7 @@
HDL XW Android SDK  Copyright (c) 2019 HDL Inc.
SDK ç‰ˆæœ¬ï¼šhdl_lib_v1.6.9.20200316_beta
1.增加小类是3的音乐播放器支持;
2.加地热模块单独控制温度接口,接口自动根据当前模式设置当前模式的温度参数,不需要上层自己判断;(HDLCommand.geothermalCtrlTemp())
3.增加简易编程搜索回复,通过配置大类小类,让声必可设备模拟成第三方音乐播放器被搜索 ;
//配置简易编程搜索的参数 (SDK åˆå§‹åŒ–的时候配置一次)
/**
 * é…ç½®ç®€æ˜“编程搜索返回的默认参数
 * @param mSDKLocalBigClass å¤§ç±»ID
 * @param mSDKLocalSmallClass å°ç±»ID
 * @param mSDKLocalRemark å¤‡æ³¨
 */
public static void setEasyProgrammingSearchLocalData(int mSDKLocalBigClass, int mSDKLocalSmallClass, String mSDKLocalRemark);
声必可设备setEasyProgrammingSearchLocalData(9,1,"声必可音乐");
原地热对应关系
HDL å£°å¿…可
普通 è‡ªåЍ
白天 æ‰‹åЍ
离开 ä¼‘眠
2020-03-15 ä¿®æ”¹ä¸º
HDL å£°å¿…可
普通 æ‰‹åЍ
白天 è‡ªåЍ
离开 ä¼‘眠
SDK ç‰ˆæœ¬ï¼šhdl_lib_v1.6.9.20200118_beta
1.修复RCU混合调光混合开关 ç±»æ¨¡å—,使用物理回路问题;
2.增加默认获取WiFi连接的广播配置方法;
SDK ç‰ˆæœ¬ï¼šhdl_lib_v1.6.8.20191016_beta
1.控制都改成广播形式了,不记录一端口的IP。
SDK ç‰ˆæœ¬ï¼šhdl_lib_v1.6.4.20191015_beta
1.增加搜索完设备或者备注刷新完,自动保存一次数据到本地。
2.增加读取本地数据接口;
3.增加刷新所有设备的备注和状态接口;
接口说明:
    /**
     * è¯»å–和加载本地数据
     */
    private void getLocalDevicesDataList() {
        devicesDatas = HDLDeviceManager.getLocalDevicesDataList();
        if (devicesDatas.size() > 0) {
            updateDeviceListView();
            HandleSearch.refreshAllDevicesStateAndRemarks();//如果本地有数据,可以调用该方法,遍历发送指令,刷新所有设备的备注和状态
        } else {
            //showToast("本地数据为空");
        }
    }
/**保存数据到本地接口,除SDK自动保存后,上层可以选择手动调用保存*/
HDLDeviceManager.saveDevicesDataList();
提供声必可SDK项目
##Version 1.0.2
1.新增地热模块和新风系统控制和读取状态接口;
2.新增地热模块和新风系统控制演示页面;
3.targetSdkVersion 28;
##Version HDL_ZigBeeSDK_V1.0.1.B1.20200923.aar
1.修改org.eclipse.paho.client.mqttv3引用方式,解决罗家乐之前,打包方法会丢失mqtt jar资源文件,导致闪退问题。
Android_HDL_SDK_XW/app/build.gradle
@@ -21,12 +21,14 @@
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
//    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28+'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation project(':hdl_core')
//    implementation project(':hdl_core')
    implementation 'org.greenrobot:eventbus:3.0.0'
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
}
Android_HDL_SDK_XW/app/libs/HDL_ZigBeeSDK_V1.0.1.B1.20200923.aar
Binary files differ
Android_HDL_SDK_XW/app/src/main/java/com/hdl/sdk/hdl_sdk/activity/CtrlActivity.java
@@ -60,7 +60,6 @@
    private boolean isZigbee = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -71,13 +70,12 @@
//        æ­¤æ–¹æ³•为主动获取单一设备状态,逻辑模块、背景音乐模块没有这个api,仅支持灯光,窗帘,空调。一般不需要用到。
 //       HDLCommand.getDeviceState(appliancesInfo);
        //       HDLCommand.getDeviceState(appliancesInfo);
        initcurState();
        initView();
        initClickOnEvent();
    }
@@ -433,9 +431,9 @@
    private void initcurState() {
        appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl");
        isZigbee = getIntent().getExtras().getBoolean("isZigbee2Item");
        if (isZigbee){
            HDLCommand.getDeviceState(CtrlActivity.this,appliancesInfo,isZigbee);//如果是zigbee的需要调用单一状态回复
        }else {
        if (isZigbee) {
            HDLCommand.getDeviceState(CtrlActivity.this, appliancesInfo, isZigbee);//如果是zigbee的需要调用单一状态回复
        } else {
            //        lightState = 100;//初始化灯光亮度100
            curtainState = CurtainCtrlParser.curtainOff;
//        èŽ·å–æ‰€æœ‰è®¾å¤‡çš„çŠ¶æ€ã€‚deviceStateBeanList为所有设备的状态列表
@@ -516,7 +514,7 @@
        lightBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    HDLCommand.lightCtrl(appliancesInfo, 50,isZigbee);//state值代表调光大小0-100
                HDLCommand.lightCtrl(appliancesInfo, 50, isZigbee);//state值代表调光大小0-100
//                HDLCommand.lightCtrl(appliancesInfo,50,isZigbee);
            }
        });
@@ -525,7 +523,7 @@
            @Override
            public void onClick(View view) {
                //窗帘模块第二个参数 ä¸ºCurtainCtrlParser.curtainOn,CurtainCtrlParser.curtainOff,CurtainCtrlParser.curtainPause其中一个
                HDLCommand.curtainCtrl(appliancesInfo, curtainState,isZigbee);
                HDLCommand.curtainCtrl(appliancesInfo, curtainState, isZigbee);
                if (curtainState == CurtainCtrlParser.curtainOn) {
                    curtainState = CurtainCtrlParser.curtainOff;
                } else {
@@ -538,14 +536,14 @@
        curtainBtn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOn,isZigbee);
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOn, isZigbee);
            }
        });
        curtainBtn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOff,isZigbee);
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOff, isZigbee);
            }
        });
@@ -553,14 +551,14 @@
        curtainBtn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainPause,isZigbee);
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainPause, isZigbee);
            }
        });
        curtainBtn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, 20,isZigbee);
                HDLCommand.curtainCtrl(appliancesInfo, 20, isZigbee);
            }
        });
@@ -568,11 +566,11 @@
            @Override
            public void onClick(View view) {
                //演示当前状态为关,设置为开。开,设置为关。
                    if (airSwitchState == 0) {
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOn,isZigbee);//空调开
                    } else {
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOff,isZigbee);//空调关
                    }
                if (airSwitchState == 0) {
                    HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOn, isZigbee);//空调开
                } else {
                    HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOff, isZigbee);//空调关
                }
            }
        });
@@ -583,26 +581,26 @@
                switch (airModeState) {
                    case 0:
                        //若当前空调模式为制冷,则点击按钮设置为制热
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeHeatTem,isZigbee);//空调模式制热
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeHeatTem, isZigbee);//空调模式制热
                        break;
                    case 1:
                        //若当前空调模式为制热,则点击按钮设置为通风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeVen,isZigbee);//空调模式通风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeVen, isZigbee);//空调模式通风
                        break;
                    case 2:
                        //若当前空调模式为通风,则点击按钮设置为自动
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeAuto,isZigbee);//空调模式自动
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeAuto, isZigbee);//空调模式自动
                        break;
                    case 3:
                        //若当前空调模式为自动,则点击按钮设置为抽湿
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeDehum,isZigbee);//空调模式抽湿
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeDehum, isZigbee);//空调模式抽湿
                        break;
                    case 4:
                        //若当前空调模式为抽湿,则点击按钮设置为制冷
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeRefTem,isZigbee);//空调模式制冷
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeRefTem, isZigbee);//空调模式制冷
                        break;
                    default:
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeRefTem,isZigbee);//空调模式制冷
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeRefTem, isZigbee);//空调模式制冷
                        break;
                }
@@ -617,19 +615,19 @@
                switch (airSpeedState) {
                    case 0:
                        //若当前空调风速为自动,则点击按钮设置为高风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedHigh,isZigbee);//风速高风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedHigh, isZigbee);//风速高风
                        break;
                    case 1:
                        //若当前空调风速为高风,则点击按钮设置为中风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedMid,isZigbee);//风速中风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedMid, isZigbee);//风速中风
                        break;
                    case 2:
                        //若当前空调风速为中风,则点击按钮设置为低风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedLow,isZigbee);//风速低风
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedLow, isZigbee);//风速低风
                        break;
                    case 3:
                        //若当前空调风速为低风,则点击按钮设置为自动
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedAuto,isZigbee);//风速自动
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedAuto, isZigbee);//风速自动
                        break;
                }
            }
@@ -653,11 +651,11 @@
                switch (airModeState) {
                    case 0:
                        //当前空调模式为制冷
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.refTem, tempInt,isZigbee);//制冷温度
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.refTem, tempInt, isZigbee);//制冷温度
                        break;
                    case 1:
                        //当前空调模式为制热
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.heatTem, tempInt,isZigbee);//制热温度
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.heatTem, tempInt, isZigbee);//制热温度
                        break;
                    case 2:
                        //当前空调模式为通风
@@ -665,11 +663,11 @@
                        break;
                    case 3:
                        //当前空调模式为自动
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.autoTem, tempInt,isZigbee);//自动温度
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.autoTem, tempInt, isZigbee);//自动温度
                        break;
                    case 4:
                        //当前空调模式为抽湿
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.dehumTem, tempInt,isZigbee);//抽湿温度
                        HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.dehumTem, tempInt, isZigbee);//抽湿温度
                        break;
                    default:
                        break;
@@ -685,14 +683,14 @@
        logicBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.logicCtrl(appliancesInfo,isZigbee);
                HDLCommand.logicCtrl(appliancesInfo, isZigbee);
            }
        });
        sensorBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.getDeviceState(CtrlActivity.this,appliancesInfo,isZigbee);
                HDLCommand.getDeviceState(CtrlActivity.this, appliancesInfo, isZigbee);
            }
        });
    }
@@ -712,7 +710,7 @@
                && event.getLightCtrlBackInfo().getChannelNum() == appliancesInfo.getChannelNum()
                && event.getLightCtrlBackInfo().getPhysicsChannelNum() == appliancesInfo.getPhysicsChannelNum()
                && event.getLightCtrlBackInfo().getAppliancesInfo().getDeviceType() == appliancesInfo.getDeviceType()
                ) {
        ) {
            //        å…ˆåˆ¤æ–­æ˜¯å¦è¶…æ—¶
            if (!event.isSuccess()) {
                showToast("灯光控制超时,请重新再试");
@@ -739,7 +737,7 @@
        if (event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getCurtainCtrlBackInfo().getNum() == appliancesInfo.getChannelNum()
                ) {
        ) {
            if (!event.isSuccess()) {
                showToast("窗帘控制超时,请重新再试");
@@ -790,7 +788,7 @@
        if (event.getAirCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getAirCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAirCtrlBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
                ) {
        ) {
            //        å…ˆåˆ¤æ–­æ˜¯å¦è¶…æ—¶
            if (!event.isSuccess()) {
                showToast("空调控制超时,请重新再试");
@@ -932,7 +930,7 @@
//        å…ˆåˆ¤æ–­æ˜¯å¦è¶…æ—¶
        if (event.getLogicCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getLogicCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                ) {
        ) {
            if (!event.isSuccess()) {
                showToast("场景控制超时,请重新再试");
                return;
@@ -946,7 +944,7 @@
    public void onDeviceStateEventMain(DeviceStateEvent event) {
        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                ) {
        ) {
            //这个返回的信息是当前状态的
            switch (event.getAppliancesInfo().getDeviceType()) {
                case HDLApConfig.TYPE_LIGHT_DIMMER:
@@ -1409,7 +1407,6 @@
            }
        }
    }
    public void showToast(String text) {
Android_HDL_SDK_XW/build.gradle
@@ -1,15 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://maven.google.com' }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.0'
        classpath 'com.android.tools.build:gradle:3.4.1'
//        classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0'
//        classpath 'com.novoda:bintray-release:+'
@@ -19,8 +18,6 @@
allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://maven.google.com' }
        jcenter()
    }
}
Android_HDL_SDK_XW/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
Android_HDL_SDK_XW/hdl_core/build.gradle
@@ -1,15 +1,13 @@
apply plugin: 'com.android.library'
//apply plugin: 'com.novoda.bintray-release'
android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 17
        targetSdkVersion 28
        versionCode 2
        versionName "1.0.8"
        versionCode 1
        versionName "1.0.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
@@ -20,47 +18,34 @@
    }
    buildToolsVersion '28.0.3'
    /**
     * æ‰“包自动命名
     */
    android.libraryVariants.all { variant ->
        variant.outputs.all {
            outputFileName = "HDL_ZigBeeSDK_V" +
                    defaultConfig.versionName + ".B" + defaultConfig.versionCode + "." + releaseTime() + ".aar"
        }
    }
//    lintOptions {
//        abortOnError false
//        warning 'InvalidPackage'
//    }
}
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28+'
    api 'org.greenrobot:eventbus:3.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation files('libs/org.eclipse.paho.client.mqttv3-1.2.0.jar')
def releaseTime() {
    return new Date().format("yyyyMMdd")
}
//task makeJar(type: Copy) {
////删除存在的
//      delete'build/libs/test.jar'
////设置拷贝的文件
//      from('build/intermediates/packaged-classes/release/')
////打进jar包后的文件目录
//      into('build/libs/')
////将casses.jar放入build/libs/目录下
////include ,exclude参数来设置过滤
////(我们只关心classes.jar这个文件)
//      include('classes.jar')
////重命名
//    rename ('classes.jar','test.jar')
//}
//makeJar.dependsOn(build)
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'
    api 'org.greenrobot:eventbus:3.0.0'
    api 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
    testImplementation 'junit:junit:4.12'
//publish {
//    userOrg = 'tommydai'
//    groupId = 'com.hdl.sdk'
//    artifactId = 'hdlsdk'
//    publishVersion = '1.5.8'
//    desc = 'HDL core libray'
//}
}
Android_HDL_SDK_XW/hdl_core/proguard-rules.pro
@@ -19,3 +19,6 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#-keep class org.eclipse.paho.client.mqttv3.logging.JSR47Logger { *; }
#-keep class org.eclipse.paho.* { *; }
Android_HDL_SDK_XW/hdl_core/src/androidTest/java/com/hdl/sdk/hdl_core/ExampleInstrumentedTest.java
File was deleted
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommand.java
@@ -84,7 +84,6 @@
    }
//    /**
//     * èŽ·å–æœ¬åœ°å¹¿æ’­IP
//     * @return
@@ -95,15 +94,17 @@
    /**
     * èŽ·å–æœ¬åœ°å¹¿æ’­IP
     *
     * @return
     */
    public static String getLocalBroadCastIp(){
    public static String getLocalBroadCastIp() {
        return NetWorkUtil.getLocalBroadCast();
    }
    /**
     * æ˜¯å¦å¼€å¯SDK日志打印
     * 2019-07-10新增
     *
     * @param bOpen
     */
    public static void setHDLLogOpen(boolean bOpen) {
@@ -123,7 +124,6 @@
//    }
    /**
     * èŽ·å–RCU模块的设备
     *
@@ -138,14 +138,13 @@
    }
    /**
     * èŽ·å–å®¶å±…è®¾å¤‡
     *
     * @param context
     */
    public static void getHomeDevices(Context context ,Boolean isZigbee) {
        HandleSearch.getHomeDevices(context,isZigbee);
    public static void getHomeDevices(Context context, Boolean isZigbee) {
        HandleSearch.getHomeDevices(context, isZigbee);
    }
//    public static void cancelSearching(){
@@ -173,31 +172,31 @@
     * @param info
     * @param state
     */
    public static void lightCtrl(final AppliancesInfo info, int state,boolean isZigbee) {
        if (isZigbee){
            if (statusReadBackBean != null){
                if (info.getBigType() == Configuration.LIGTH_BIG_TYPE  && info.getLittleType() == 1){//继电器 å¼€å…³
                    if (statusReadBackBean.getValue() == Configuration.RELAY_ON){
                        HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.OnOffOutput,Configuration.RELAY_OFF);
                    }else {
                        HDLCommandText.sendStatus(zigbeeDeviceBean,ZigbeeDeviceID.OnOffOutput,Configuration.RELAY_ON);
    public static void lightCtrl(final AppliancesInfo info, int state, boolean isZigbee) {
        if (isZigbee) {
            if (statusReadBackBean != null) {
                if (info.getBigType() == Configuration.LIGTH_BIG_TYPE && info.getLittleType() == 1) {//继电器 å¼€å…³
                    if (statusReadBackBean.getValue() == Configuration.RELAY_ON) {
                        HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.OnOffOutput, Configuration.RELAY_OFF);
                    } else {
                        HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.OnOffOutput, Configuration.RELAY_ON);
                    }
                }
                if (info.getBigType() == Configuration.LIGTH_BIG_TYPE  && info.getLittleType() == 0){//调光器 å¼€åˆ°å›ºå®šçš„值或者开到0
                if (info.getBigType() == Configuration.LIGTH_BIG_TYPE && info.getLittleType() == 0) {//调光器 å¼€åˆ°å›ºå®šçš„值或者开到0
                    int value = (int) (state * 2.55);
                    if (statusReadBackBean.getValue()!=0){
                    if (statusReadBackBean.getValue() != 0) {
                        //lightStatus = 0;
                        HDLCommandText.sendStatus(zigbeeDeviceBean,ZigbeeDeviceID.DimmableLight,0);
                    }else {
                        HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.DimmableLight, 0);
                    } else {
                        //lightStatus = value;
                        HDLCommandText.sendStatus(zigbeeDeviceBean,ZigbeeDeviceID.DimmableLight,value);
                        HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.DimmableLight, value);
                    }
                }
            }else {
            } else {
                HDLLog.info("为获取到设备状态");
            }
        }else {
        } else {
            //        HDLDeviceManager.isLightCtrlSuccess = false;
            HDLDeviceManager.setDeviceCtrlSuccessStateWithInfo(info, false);
            if (lightCtrlFailTimer != null) {
@@ -261,23 +260,23 @@
     * @param info
     * @param state è°ƒæ•´çš„值
     */
    public static void curtainCtrl(final AppliancesInfo info, int state,boolean isZigbee) {
        if (isZigbee){
            switch (state){
                case  CurtainCtrlParser.curtainOn:
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean,ZigbeeDeviceID.WindowCoveringDevice,0,0);//value = 0为开,tag = 0为标记控制
    public static void curtainCtrl(final AppliancesInfo info, int state, boolean isZigbee) {
        if (isZigbee) {
            switch (state) {
                case CurtainCtrlParser.curtainOn:
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean, ZigbeeDeviceID.WindowCoveringDevice, 0, 0);//value = 0为开,tag = 0为标记控制
                    break;
                case  CurtainCtrlParser.curtainOff:
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean,ZigbeeDeviceID.WindowCoveringDevice,1,0);//value = 1为关,tag = 0为标记控制
                case CurtainCtrlParser.curtainOff:
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean, ZigbeeDeviceID.WindowCoveringDevice, 1, 0);//value = 1为关,tag = 0为标记控制
                    break;
                case CurtainCtrlParser.curtainPause:
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean,ZigbeeDeviceID.WindowCoveringDevice,2,0);//value = 2为暂停,tag = 0为标记控制
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean, ZigbeeDeviceID.WindowCoveringDevice, 2, 0);//value = 2为暂停,tag = 0为标记控制
                    break;
                default:
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean,ZigbeeDeviceID.WindowCoveringDevice,state,1);//value = state为调整数值,tag = 1为标记数值控制
                    HDLCommandText.sendCurtainStatus(zigbeeDeviceBean, ZigbeeDeviceID.WindowCoveringDevice, state, 1);//value = state为调整数值,tag = 1为标记数值控制
                    break;
            }
        }else {
        } else {
            HDLDeviceManager.setDeviceCtrlSuccessStateWithInfo(info, false);
            if (curtainCtrlFailTimer != null) {
                curtainCtrlFailTimer.cancel();
@@ -336,69 +335,69 @@
     * @param type
     * @param state
     */
    public static void airCtrl(final AppliancesInfo info, int type, int state , boolean isZigbee) {
        if (isZigbee){
            switch (type){
    public static void airCtrl(final AppliancesInfo info, int type, int state, boolean isZigbee) {
        if (isZigbee) {
            switch (type) {
                case AirCtrlParser.airSwich:
                    //开关选择
                    switch (state){
                    switch (state) {
                        case AirCtrlParser.airOn://空调开
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,1,0,0);//value = 1为空调开 tag = 0为标志为开关控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 1, 0, 0);//value = 1为空调开 tag = 0为标志为开关控制 mode忽略
                            break;
                        case AirCtrlParser.airOff://空调关
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,0,0,0);//value = 0为空调开 tag = 0为标志为开关控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 0, 0, 0);//value = 0为空调开 tag = 0为标志为开关控制 mode忽略
                            break;
                    }
                    break;
                case AirCtrlParser.airMode:
                    //恒温器模式选择
                    switch (state){
                    switch (state) {
                        case AirCtrlParser.airModeHeatTem://空调模式制热
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,4,1,0);//value = 4为恒温器制热 tag = 1为标志为恒温器控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 4, 1, 0);//value = 4为恒温器制热 tag = 1为标志为恒温器控制 mode忽略
                            break;
                        case AirCtrlParser.airModeVen://空调模式通风
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,7,1,0);//value = 7为恒温器通风 tag = 1为标志为恒温器控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 7, 1, 0);//value = 7为恒温器通风 tag = 1为标志为恒温器控制 mode忽略
                            break;
                        case AirCtrlParser.airModeAuto://空调模式自动
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,1,1,0);//value = 1为恒温器自动 tag = 1为标志为恒温器控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 1, 1, 0);//value = 1为恒温器自动 tag = 1为标志为恒温器控制 mode忽略
                            break;
                        case AirCtrlParser.airModeDehum://空调模式抽湿
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,8,1,0);//value = 8为恒温器抽湿 tag = 1为标志为恒温器控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 8, 1, 0);//value = 8为恒温器抽湿 tag = 1为标志为恒温器控制 mode忽略
                            break;
                        case AirCtrlParser.airModeRefTem://空调模式制冷
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,3,1,0);//value = 3为恒温器制冷 tag = 1为标志为恒温器控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 3, 1, 0);//value = 3为恒温器制冷 tag = 1为标志为恒温器控制 mode忽略
                            break;
                    }
                    break;
                case AirCtrlParser.airSpeed:
                    //风速模式选择
                    switch (state){
                    switch (state) {
                        case AirCtrlParser.airSpeedHigh://风速高风
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,3,2,0);//value = 3为风速高风 tag = 2为标志为风速控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 3, 2, 0);//value = 3为风速高风 tag = 2为标志为风速控制 mode忽略
                            break;
                        case AirCtrlParser.airSpeedMid://风速中风
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,2,2,0);//value = 2为风速中风 tag = 2为标志为风速控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 2, 2, 0);//value = 2为风速中风 tag = 2为标志为风速控制 mode忽略
                            break;
                        case AirCtrlParser.airSpeedLow://风速低风
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,1,2,0);//value = 1为风速低风 tag = 2为标志为风速控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 1, 2, 0);//value = 1为风速低风 tag = 2为标志为风速控制 mode忽略
                            break;
                        case AirCtrlParser.airSpeedAuto://风速自动
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,5,2,0);//value = 5为风速自动 tag = 2为标志为风速控制 mode忽略
                            HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, 5, 2, 0);//value = 5为风速自动 tag = 2为标志为风速控制 mode忽略
                            break;
                    }
                    break;
                case AirCtrlParser.dehumTem://当前空调模式为抽湿
                case AirCtrlParser.refTem: //当前空调模式为制冷
                    HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,state,3,1);//value = state为温度值 tag = 3为标志为温度控制 mode = 1为制冷
                    HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, state, 3, 1);//value = state为温度值 tag = 3为标志为温度控制 mode = 1为制冷
                    break;
                case AirCtrlParser.heatTem://当前空调模式为制热
                    HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,state,3,0);//value = state为温度值 tag = 3为标志为温度控制 mode = 0为制热
                    HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, state, 3, 0);//value = state为温度值 tag = 3为标志为温度控制 mode = 0为制热
                    break;
                case AirCtrlParser.autoTem://当前空调模式为自动
                    HDLCommandText.sendAirStatus(zigbeeDeviceBean,ZigbeeDeviceID.Thermostat,state,3,2);//value = state为温度值 tag = 3为标志为温度控制 mode = 2为自动
                    HDLCommandText.sendAirStatus(zigbeeDeviceBean, ZigbeeDeviceID.Thermostat, state, 3, 2);//value = state为温度值 tag = 3为标志为温度控制 mode = 2为自动
                    break;
            }
        }else {
        } else {
            //        HDLDeviceManager.isACCtrlSuccess = false;
            HDLDeviceManager.setDeviceCtrlSuccessStateWithInfo(info, false);
            if (acCtrlFailTimer != null) {
@@ -451,32 +450,32 @@
     * @param type
     * @param state 2019-07-09
     */
    public static void freshAirCtrl(final AppliancesInfo info, int type, int state,boolean isZigbee) {
        if (isZigbee){
            switch (type){
    public static void freshAirCtrl(final AppliancesInfo info, int type, int state, boolean isZigbee) {
        if (isZigbee) {
            switch (type) {
                case FreshAirParser.freshAirSwich:
                switch (state){
                    case  FreshAirParser.freshAirOn:
                        HDLCommandText.sendStatus(zigbeeDeviceBean,ZigbeeDeviceID.AirPanel,1);//value = 1为新风开
                        break;
                    case  FreshAirParser.freshAirOff:
                        HDLCommandText.sendStatus(zigbeeDeviceBean,ZigbeeDeviceID.AirPanel,0);//value = 0为新风关
                        break;
                }
                break;
                    switch (state) {
                        case FreshAirParser.freshAirOn:
                            HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.AirPanel, 1);//value = 1为新风开
                            break;
                        case FreshAirParser.freshAirOff:
                            HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.AirPanel, 0);//value = 0为新风关
                            break;
                    }
                    break;
                case FreshAirParser.freshAirSpeed://高风、低风
                    switch (state){
                    switch (state) {
                        case FreshAirParser.freshAirSpeedMid://控制成高风
                            HDLCommandText.sendStatus(zigbeeDeviceBean,ZigbeeDeviceID.AirPanel,3);//value = 3为新风高风
                            HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.AirPanel, 3);//value = 3为新风高风
                            break;
                        case FreshAirParser.freshAirSpeedLow://控制成低速
                        case FreshAirParser.freshAirSpeedOff:
                            HDLCommandText.sendStatus(zigbeeDeviceBean,ZigbeeDeviceID.AirPanel,1);//value = 1为新风低风
                            HDLCommandText.sendStatus(zigbeeDeviceBean, ZigbeeDeviceID.AirPanel, 1);//value = 1为新风低风
                            break;
                    }
                    break;
            }
        }else {
        } else {
            //        HDLDeviceManager.isFreshAirCtrlSuccess = false;
            HDLDeviceManager.setDeviceCtrlSuccessStateWithInfo(info, false);
            if (freshAirCtrlFailTimer != null) {
@@ -513,10 +512,10 @@
     *
     * @param info
     */
    public static void logicCtrl(final AppliancesInfo info,final boolean isZigbee) {
        if (isZigbee){
                HDLCommandText.sendSceneStatus(zigbeeSceneBean.getScenesId(),0);//控制场景的id,延时时间为0
        }else {
    public static void logicCtrl(final AppliancesInfo info, final boolean isZigbee) {
        if (isZigbee) {
            HDLCommandText.sendSceneStatus(zigbeeSceneBean.getScenesId(), 0);//控制场景的id,延时时间为0
        } else {
            //        HDLDeviceManager.isSceneCtrlSuccess = false;
            HDLDeviceManager.setDeviceCtrlSuccessStateWithInfo(info, false);
@@ -678,16 +677,17 @@
//        }, 5000);
//
//    }
    /**
     * èŽ·å–å•ä¸€è®¾å¤‡çŠ¶æ€
     */
    public static void getDeviceState(Context context,final AppliancesInfo appliancesInfo,boolean isZigbee) {
        if (isZigbee){
            zigbeeDeviceDatas = SPUtils.getZigbeeDeviceSaveBean(context,SPUtils.KEY_ZIGBEE_IP);
            zigbeeSceneDatas = SPUtils.getZigbeeSceneSaveBean(context,SPUtils.KEY_ZIGBEE_SCENE_IP);
    public static void getDeviceState(Context context, final AppliancesInfo appliancesInfo, boolean isZigbee) {
        if (isZigbee) {
            zigbeeDeviceDatas = SPUtils.getZigbeeDeviceSaveBean(context, SPUtils.KEY_ZIGBEE_IP);
            zigbeeSceneDatas = SPUtils.getZigbeeSceneSaveBean(context, SPUtils.KEY_ZIGBEE_SCENE_IP);
            HDLCommandText hdlCommandText = new HDLCommandText();
            for (ZigbeeDeviceSaveBean zigbeeDeviceSaveBean : zigbeeDeviceDatas){
                if (appliancesInfo.getBigType() == Configuration.LIGTH_BIG_TYPE && appliancesInfo.getLittleType() == 1){
            for (ZigbeeDeviceSaveBean zigbeeDeviceSaveBean : zigbeeDeviceDatas) {
                if (appliancesInfo.getBigType() == Configuration.LIGTH_BIG_TYPE && appliancesInfo.getLittleType() == 1) {
                    //继电器
                    type = ZigbeeDeviceID.OnOffOutput;
                    if (zigbeeDeviceSaveBean.getmSubnetID() == appliancesInfo.getDeviceSubnetID() &&
@@ -701,7 +701,7 @@
                    }
                }
                if (appliancesInfo.getBigType() == Configuration.LIGTH_BIG_TYPE && appliancesInfo.getLittleType() == 0){
                if (appliancesInfo.getBigType() == Configuration.LIGTH_BIG_TYPE && appliancesInfo.getLittleType() == 0) {
                    //调光器
                    type = ZigbeeDeviceID.DimmableLight;
                    if (zigbeeDeviceSaveBean.getmSubnetID() == appliancesInfo.getDeviceSubnetID() &&
@@ -714,7 +714,7 @@
                        HDLCommandText.initStatus(zigbeeDeviceSaveBean, ZigbeeDeviceID.DimmableLight);
                    }
                }
                if (appliancesInfo.getBigType() == Configuration.CURTAIN_BIG_TYPE && appliancesInfo.getLittleType() == 0){
                if (appliancesInfo.getBigType() == Configuration.CURTAIN_BIG_TYPE && appliancesInfo.getLittleType() == 0) {
                    //窗帘
                    type = ZigbeeDeviceID.WindowCoveringDevice;
                    if (zigbeeDeviceSaveBean.getmSubnetID() == appliancesInfo.getDeviceSubnetID() &&
@@ -727,7 +727,7 @@
                        HDLCommandText.initStatus(zigbeeDeviceSaveBean, ZigbeeDeviceID.WindowCoveringDevice);
                    }
                }
                if (appliancesInfo.getBigType() ==Configuration.AIR_BIG_TYPE && appliancesInfo.getLittleType() == 0){
                if (appliancesInfo.getBigType() == Configuration.AIR_BIG_TYPE && appliancesInfo.getLittleType() == 0) {
                    //空调
                    type = ZigbeeDeviceID.Thermostat;
                    if (zigbeeDeviceSaveBean.getmSubnetID() == appliancesInfo.getDeviceSubnetID() &&
@@ -740,7 +740,7 @@
                        HDLCommandText.initStatus(zigbeeDeviceSaveBean, ZigbeeDeviceID.Thermostat);
                    }
                }
                if (appliancesInfo.getBigType() ==Configuration.FRESH_AIR_BIG_TYPE && appliancesInfo.getLittleType() == 0){
                if (appliancesInfo.getBigType() == Configuration.FRESH_AIR_BIG_TYPE && appliancesInfo.getLittleType() == 0) {
                    //新风
                    type = ZigbeeDeviceID.AirPanel;
                    if (zigbeeDeviceSaveBean.getmSubnetID() == appliancesInfo.getDeviceSubnetID() &&
@@ -754,8 +754,8 @@
                    }
                }
            }
            for (ZigbeeSceneSaveBean zigbeeSceneSaveBean : zigbeeSceneDatas){
                if (appliancesInfo.getBigType() == Configuration.GLOBAL_LOGIC_BIG_TYPE && appliancesInfo.getLittleType() == 0){
            for (ZigbeeSceneSaveBean zigbeeSceneSaveBean : zigbeeSceneDatas) {
                if (appliancesInfo.getBigType() == Configuration.GLOBAL_LOGIC_BIG_TYPE && appliancesInfo.getLittleType() == 0) {
                    //场景
                    type = ZigbeeDeviceID.SceneMark;
                    if (zigbeeSceneSaveBean.getSubnetId() == appliancesInfo.getDeviceSubnetID() &&
@@ -767,133 +767,133 @@
                    }
                }
            }
            Log.d("11113", "type: "+type);
            Log.d("11113", "type: " + type);
            //读写状态信息回调
            HDLCommandText.setStateListener(new StateListener() {
                @Override
                public void onData(final StateEvent event) {
                    //上报zigbee回馈信息
                    Log.d("11113", "zigbee å›žé¦ˆjson:" + event.getJson());
                    switch (type){
                    switch (type) {
                        case ZigbeeDeviceID.OnOffOutput:
                            //继电器设备回调
                            statusReadBackBean = JsonUtil.parseJsonWithGson(event.getJson(), StatusReadBackBean.class);
                            if (statusReadBackBean.getValue() == Configuration.RELAY_ON){
                            if (statusReadBackBean.getValue() == Configuration.RELAY_ON) {
                                //继电器关
                                appliancesInfo.setCurState(0);
                                EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo, true));
                            }else {
                            } else {
                                //继电器开
                                appliancesInfo.setCurState(100);
                                EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo, true));
                            }
                            break;
                         case ZigbeeDeviceID.WindowCoveringDevice:
                             //窗帘设备回调
                             statusReadBackBean = JsonUtil.parseJsonWithGson(event.getJson(), StatusReadBackBean.class);
                        case ZigbeeDeviceID.WindowCoveringDevice:
                            //窗帘设备回调
                            statusReadBackBean = JsonUtil.parseJsonWithGson(event.getJson(), StatusReadBackBean.class);
                            appliancesInfo.setCurState(statusReadBackBean.getValue());
                            EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo,true));
                            EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo, true));
                            break;
                        case ZigbeeDeviceID.DimmableLight:
                            //调光器设备
                            statusReadBackBean = JsonUtil.parseJsonWithGson(event.getJson(), StatusReadBackBean.class);
                            Log.d("2222", "回调数据: "+statusReadBackBean.getValue());
                            Log.d("2222", "回调数据: " + statusReadBackBean.getValue());
                            appliancesInfo.setCurState(statusReadBackBean.getValue());
                            EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo,true));
                            EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo, true));
                            break;
                        case ZigbeeDeviceID.Thermostat:
                            //温度设备
                            thermostatReadBean = JsonUtil.parseJsonWithGson(event.getJson(),StatusThermostatReadBean.class);
                            thermostatReadBean = JsonUtil.parseJsonWithGson(event.getJson(), StatusThermostatReadBean.class);
                            int fanMode = thermostatReadBean.getFanmode(); //新风模式 0:Off、1:Low、2:Medium、3:High、4:On、5:Auto、6:Smart
                            int thermostatMode = thermostatReadBean.getThermostatmode();//恒温模式 0:Off、1:Auto、3:Cool、4:Heat、5:Emergency heating、6:Precooling、7:Fan only、8:Dry、9:Sleep;
                            int coolingSetpoint = thermostatReadBean.getCoolingSetpoint();//制冷温度
                            int heatingSetpoint = thermostatReadBean.getHeatingSetpoint();//制热温度
                            int tag = thermostatReadBean.getTag();
                            switch (tag){
                            switch (tag) {
                                case 0://开关模式返回
                                    if (fanMode == 0 && thermostatMode == 0){
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich,AirCtrlParser.airOff)); //空调关
                                    }else {
                                       appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich,AirCtrlParser.airOn));//空调开
                                    if (fanMode == 0 && thermostatMode == 0) {
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich, AirCtrlParser.airOff)); //空调关
                                    } else {
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich, AirCtrlParser.airOn));//空调开
                                    }
                                    break;
                                case 1://恒温器模式返回
                                        if (fanMode ==0 && thermostatMode == 0){
                                            appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich,AirCtrlParser.airOff));//空调关
                                        }else {
                                            switch (thermostatMode){
                                                case 1://自动模式
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode,AirCtrlParser.airModeAuto));
                                                    break;
                                                case 3://制冷模式
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode,AirCtrlParser.airModeRefTem));
                                                    break;
                                                case 4://制热模式
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode,AirCtrlParser.airModeHeatTem));
                                                    break;
                                                case 7://通风模式
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode,AirCtrlParser.airModeVen));
                                                    break;
                                                case 8://抽湿模式
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode,AirCtrlParser.airModeDehum));
                                                    break;
                                            }
                                    if (fanMode == 0 && thermostatMode == 0) {
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich, AirCtrlParser.airOff));//空调关
                                    } else {
                                        switch (thermostatMode) {
                                            case 1://自动模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode, AirCtrlParser.airModeAuto));
                                                break;
                                            case 3://制冷模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode, AirCtrlParser.airModeRefTem));
                                                break;
                                            case 4://制热模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode, AirCtrlParser.airModeHeatTem));
                                                break;
                                            case 7://通风模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode, AirCtrlParser.airModeVen));
                                                break;
                                            case 8://抽湿模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airMode, AirCtrlParser.airModeDehum));
                                                break;
                                        }
                                    }
                                    break;
                                case 2://通风器模式返回
                                    if (fanMode == 0 && thermostatMode == 0){
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich,AirCtrlParser.airOff)); //空调关
                                    }else {
                                        switch (fanMode){
                                    if (fanMode == 0 && thermostatMode == 0) {
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich, AirCtrlParser.airOff)); //空调关
                                    } else {
                                        switch (fanMode) {
                                            case 1://低风
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed,AirCtrlParser.airSpeedLow));
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed, AirCtrlParser.airSpeedLow));
                                                break;
                                            case 2://中风
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed,AirCtrlParser.airSpeedMid));
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed, AirCtrlParser.airSpeedMid));
                                                break;
                                            case 3://高风
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed,AirCtrlParser.airSpeedHigh));
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed, AirCtrlParser.airSpeedHigh));
                                                break;
                                            case 5://自动
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed,AirCtrlParser.airSpeedAuto));
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSpeed, AirCtrlParser.airSpeedAuto));
                                                break;
                                        }
                                    }
                                    break;
                                case 3://设置温度模式返回
                                    if (fanMode == 0 && thermostatMode == 0){
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich,AirCtrlParser.airOff)); //空调关
                                    }else {
                                        switch (thermostatMode){
                                    if (fanMode == 0 && thermostatMode == 0) {
                                        appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.airSwich, AirCtrlParser.airOff)); //空调关
                                    } else {
                                        switch (thermostatMode) {
                                            case 1://TODO è‡ªåŠ¨æ¨¡å¼æ¸©åº¦è¿”å›žéœ€è¦åè®®ä¸Šçš„
                                                if (coolingSetpoint !=0 && heatingSetpoint ==0 ){
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.autoTem,coolingSetpoint));
                                                }else {
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.autoTem,heatingSetpoint));
                                                if (coolingSetpoint != 0 && heatingSetpoint == 0) {
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.autoTem, coolingSetpoint));
                                                } else {
                                                    appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.autoTem, heatingSetpoint));
                                                }
                                                break;
                                            case 3://制冷模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.refTem,coolingSetpoint));
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.refTem, coolingSetpoint));
                                                break;
                                            case 4://制热模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.heatTem,heatingSetpoint));
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.heatTem, heatingSetpoint));
                                                break;
                                            case 8://抽湿模式
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.dehumTem,coolingSetpoint));
                                                appliancesInfo.setArrCurState(AirCtrlParser.getAirPanelAddByte(AirCtrlParser.dehumTem, coolingSetpoint));
                                                break;
                                        }
                                    }
                                    break;
                            }
                            EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo,true));
                            EventBus.getDefault().post(new DeviceStateEvent(appliancesInfo, true));
                            break;
                        case ZigbeeDeviceID.AirPanel:
                            //新风设备回调
                            statusReadBackBean = JsonUtil.parseJsonWithGson(event.getJson(), StatusReadBackBean.class);
                            FreshAirBackInfo freshAirBackInfo = new FreshAirBackInfo();
                            freshAirBackInfo.setAppliancesInfo(appliancesInfo);
                            switch (statusReadBackBean.getValue()){
                            switch (statusReadBackBean.getValue()) {
                                case 0://风扇关
                                    freshAirBackInfo.setIsOn(0);
                                    freshAirBackInfo.setFreshAirSpeed(0);
@@ -909,12 +909,12 @@
                                case 255:
                                    break;
                            }
                            EventBus.getDefault().post(new FreshAirFeedBackEvent(freshAirBackInfo,true));
                            EventBus.getDefault().post(new FreshAirFeedBackEvent(freshAirBackInfo, true));
                            break;
                        case ZigbeeDeviceID.SceneMark:
                            //场景回调
                            statusReadBackBean = JsonUtil.parseJsonWithGson(event.getJson(),StatusReadBackBean.class);
                            if (statusReadBackBean.getValue() == 1){
                            statusReadBackBean = JsonUtil.parseJsonWithGson(event.getJson(), StatusReadBackBean.class);
                            if (statusReadBackBean.getValue() == 1) {
                                LogicCtrlBackInfo logicCtrlBackInfo = new LogicCtrlBackInfo();
                                logicCtrlBackInfo.setAppliancesInfo(appliancesInfo);
                                EventBus.getDefault().post(new LogicFeedBackEvent(logicCtrlBackInfo, true));
@@ -923,7 +923,7 @@
                    }
                }
            });
        }else {
        } else {
            if (appliancesInfo == null) {
                return;
            }
@@ -1131,8 +1131,8 @@
                            && info.getChannelNum() == infos.get(j).getChannelNum()
                    ) {
                        //这里应该是要修复的,暂时未找到。
                         //20190712解决强制转换int类型闪退
                        int  state = HDLUtlis.getIntegerByObject(infos.get(j).getCurStateObject());
                        //20190712解决强制转换int类型闪退
                        int state = HDLUtlis.getIntegerByObject(infos.get(j).getCurStateObject());
                        switch (state) {
                            case -1:
                                curState = 0;
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLCommandText.java
@@ -1,6 +1,7 @@
package com.hdl.sdk.hdl_core.HDLDeviceManger.Core;
import android.util.Log;
import com.google.gson.Gson;
import com.hdl.sdk.hdl_core.Config.ZigbeeDeviceID;
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.CommonErrorBean;
@@ -39,7 +40,7 @@
    private static boolean isFinished = false;//标记回调和场景设备数据
    public static Timer timer = null;//设置设备和场景回调
    private static String ipAddr;//设定控制时的ip地址
    private static boolean is1 = false,is2 = false;//标记获取的温度和风扇强度
    private static boolean is1 = false, is2 = false;//标记获取的温度和风扇强度
    private static int airTag = 0;//标记传进来控制空调的是什么方式(开关、模式、风速、设定温度)
    private static int airMode = 1;//标注更改温度时,控制的模式
    private static int scenesId = 0;//发场景时传入,方便收场景
@@ -53,12 +54,12 @@
        this.ipAddr = ipAddr;
    }
    public static void initData(){
    public static void initData() {
        zigbeeDeviceListBeans = new ArrayList<>();//搜索或控制时候需初始化
    }
    public interface DataCallBack{
        void onSuccess( List<ZigbeeDeviceListBean> zigbeeDeviceListBeans,ZigbeeSceneListBean zigbeeSceneListBeans);
    public interface DataCallBack {
        void onSuccess(List<ZigbeeDeviceListBean> zigbeeDeviceListBeans, ZigbeeSceneListBean zigbeeSceneListBeans);
    }
    //处理接收的数据
@@ -70,24 +71,24 @@
        //所有信息获取完处理
        //选择网关的话要在判断中加)
        if (topic.contains("Scene/GetInfo_Respon")){
        if (topic.contains("Scene/GetInfo_Respon")) {
            //处理搜索到的场景
            handleSceneList(message);
        }
        if (topic.contains("DeviceInfoRespon")){
        if (topic.contains("DeviceInfoRespon")) {
            //处理获取到的设备
            handleDeviceList(message);
        }
        if (topic.contains("Scene/Open_Respon")){
        if (topic.contains("Scene/Open_Respon")) {
            //返回场景被执行
            reportSceneStatus(message);
            return;
        }
        if (topic.contains("DeviceInfoResponEnd")&&
                zigbeeDeviceListBeans.get(0).getData().getGwId().equals(gatewayId)){
        if (topic.contains("DeviceInfoResponEnd") &&
                zigbeeDeviceListBeans.get(0).getData().getGwId().equals(gatewayId)) {
            Log.d("11113", "程序接受完进来处理: ");
            isFinished = true;
        }
@@ -97,14 +98,14 @@
            return;
        }
        ZigbeeReportBean zigbeeReportBean =JsonUtil.parseJsonWithGson(message, ZigbeeReportBean.class);
        ZigbeeReportBean zigbeeReportBean = JsonUtil.parseJsonWithGson(message, ZigbeeReportBean.class);
        int cluterId = zigbeeReportBean.getData().getCluterID();
        if (!(cluterId == 6 || cluterId==8 || cluterId == 258 || cluterId == 513 || cluterId == 514)) {
        if (!(cluterId == 6 || cluterId == 8 || cluterId == 258 || cluterId == 513 || cluterId == 514)) {
            HDLLog.info("不处理的cluterId:" + cluterId);
            return;
        }
        int deviceID = zigbeeReportBean.getDevice_ID();
        switch (deviceID){
        switch (deviceID) {
            case ZigbeeDeviceID.OnOffOutput:
                //灯光设备
                StatusReadBackBean lightReadBackBean = new StatusReadBackBean();
@@ -121,28 +122,28 @@
                }
                break;
            case ZigbeeDeviceID.WindowCoveringDevice:
                 //窗帘设备
                 StatusReadBackBean curtainReadBackBean = new StatusReadBackBean();
                  for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData()
                     .getAttriBute()){
                     if (attriButeBean.getAttriButeId() == 8){
                         curtainReadBackBean.setValue(attriButeBean.getAttriButeData());
                     }
                  }
                  String curtainReadBackJson = JsonUtil.toJson(curtainReadBackBean);
                  if (stateListener != null) {
                      StateEvent event = new StateEvent(curtainReadBackJson);
                      stateListener.onData(event);
                  }
                //窗帘设备
                StatusReadBackBean curtainReadBackBean = new StatusReadBackBean();
                for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData()
                        .getAttriBute()) {
                    if (attriButeBean.getAttriButeId() == 8) {
                        curtainReadBackBean.setValue(attriButeBean.getAttriButeData());
                    }
                }
                String curtainReadBackJson = JsonUtil.toJson(curtainReadBackBean);
                if (stateListener != null) {
                    StateEvent event = new StateEvent(curtainReadBackJson);
                    stateListener.onData(event);
                }
                break;
            case ZigbeeDeviceID.DimmableLight:
                //调光器设备
                StatusReadBackBean dimmableLightReadBackBean = new StatusReadBackBean();
                for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData()
                        .getAttriBute()) {
                    if (attriButeBean.getAttriButeId() == 0 && cluterId==8 ) {
                        Log.d("2222", "调光器数据: "+attriButeBean.getAttriButeData());
                        dimmableLightReadBackBean.setValue((int) (attriButeBean.getAttriButeData()/2.55));
                    if (attriButeBean.getAttriButeId() == 0 && cluterId == 8) {
                        Log.d("2222", "调光器数据: " + attriButeBean.getAttriButeData());
                        dimmableLightReadBackBean.setValue((int) (attriButeBean.getAttriButeData() / 2.55));
                    }
                }
                String dimmableLightReadBackJson = JsonUtil.toJson(dimmableLightReadBackBean);
@@ -153,42 +154,43 @@
                break;
            case ZigbeeDeviceID.Thermostat:
                //空调设备
                for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean:zigbeeReportBean.getData().getAttriBute()){
                for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData().getAttriBute()) {
                    if (attriButeBean.getAttriButeId() == 28 && attriButeBean.getAttriButeDataType() == 48){
                    if (attriButeBean.getAttriButeId() == 28 && attriButeBean.getAttriButeDataType() == 48) {
                        //当前的空调模式
                        int thermostatmode = attriButeBean.getAttriButeData();
                        thermostatReadBackBean.setThermostatmode(thermostatmode);
                        is1 = true;
                    }
                    if (attriButeBean.getAttriButeId() == 0 && attriButeBean.getAttriButeDataType() == 0x30){
                    if (attriButeBean.getAttriButeId() == 0 && attriButeBean.getAttriButeDataType() == 0x30) {
                        //当前的新风模式
                        int fanmode = attriButeBean.getAttriButeData();
                        thermostatReadBackBean.setFanmode(fanmode);
                        is2 = true;
                    }
                    if (attriButeBean.getAttriButeId() == 17 && attriButeBean.getAttriButeDataType() == 41){
                    if (attriButeBean.getAttriButeId() == 17 && attriButeBean.getAttriButeDataType() == 41) {
                        //制冷温度
                        int coolingSetpoint = attriButeBean.getAttriButeData()/100;
                        int coolingSetpoint = attriButeBean.getAttriButeData() / 100;
                        thermostatReadBackBean.setCoolingSetpoint(coolingSetpoint);
                        //Log.d("11113", "制冷温度为: "+coolingSetpoint);
                    }
                    if (attriButeBean.getAttriButeId() == 18 && attriButeBean.getAttriButeDataType() == 41){
                    if (attriButeBean.getAttriButeId() == 18 && attriButeBean.getAttriButeDataType() == 41) {
                        //制热温度
                        int heatingSetpoint = attriButeBean.getAttriButeData()/100;
                        int heatingSetpoint = attriButeBean.getAttriButeData() / 100;
                        thermostatReadBackBean.setHeatingSetpoint(heatingSetpoint);
                        //Log.d("11113", "制热温度为: "+heatingSetpoint);
                    }
                }
                if (is1 && is2 ){ //代表获取恒温器和风扇的状态后的回调
                    is1 = false;is2 = false;
                if (is1 && is2) { //代表获取恒温器和风扇的状态后的回调
                    is1 = false;
                    is2 = false;
                    thermostatReadBackBean.setTag(airTag);
                    String thermostatReadJson = JsonUtil.toJson(thermostatReadBackBean);
                    //Log.d("11113", "数据数据数据"+thermostatReadJson);
                    if (stateListener != null ){
                    if (stateListener != null) {
                        StateEvent event = new StateEvent(thermostatReadJson);
                        stateListener.onData(event);
                    }
@@ -197,8 +199,8 @@
            case ZigbeeDeviceID.AirPanel:
                //新风设备
                StatusReadBackBean airPanelReadBackBean = new StatusReadBackBean();
                for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData().getAttriBute()){
                    if (attriButeBean.getAttriButeId() == 0 && attriButeBean.getAttriButeDataType() == 0x30){
                for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData().getAttriBute()) {
                    if (attriButeBean.getAttriButeId() == 0 && attriButeBean.getAttriButeDataType() == 0x30) {
                        //当前的新风模式
                        int fanmode = attriButeBean.getAttriButeData();
                        airPanelReadBackBean.setValue(fanmode);
@@ -213,10 +215,10 @@
        }
    }
    public static void sendThirdPartyJson(final ZigbeeDeviceSaveBean zigbeeJson, String statusJson, int type){
    public static void sendThirdPartyJson(final ZigbeeDeviceSaveBean zigbeeJson, String statusJson, int type) {
        HDLZigbeeMqtt.connect1(ipAddr);
        // åˆ¤æ–­æ˜¯write è¿˜æ˜¯ read,控制时判断传递参数
        switch (type){
        switch (type) {
            case ZigbeeDeviceID.OnOffOutput:
                //继电器
                GatewayCommondBean gatewayCommondBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
@@ -224,10 +226,10 @@
                    reportError("cmd parameter error, please check it out");
                    return;
                }
                switch (gatewayCommondBean.getCmd()){
                switch (gatewayCommondBean.getCmd()) {
                    case "write":
                        // ç¯å…‰æŽ§åˆ¶ï¼Œ0关 1开
                        if (!(gatewayCommondBean.getValue()==1||gatewayCommondBean.getValue()==0)){
                        if (!(gatewayCommondBean.getValue() == 1 || gatewayCommondBean.getValue() == 0)) {
                            reportError("Wrong lighting control parameters");
                            return;
                        }
@@ -241,7 +243,7 @@
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                HDLZigbeeMqtt.sendMqttData1( "DeviceControl", ctrlLightjson);
                                HDLZigbeeMqtt.sendMqttData1("DeviceControl", ctrlLightjson);
                            }
                        }).start();
                        break;
@@ -272,14 +274,14 @@
                    return;
                }
                //窗帘控制
                switch (gatewayCurtainBean.getCmd()){
                switch (gatewayCurtainBean.getCmd()) {
                    case "write":
                        ZigbeeCtrlBean curtainCtrl = new ZigbeeCtrlBean();
                        curtainCtrl.setCluster_ID(258);
                        int curtainCmd;
                        switch (gatewayCurtainBean.getTag()){
                        switch (gatewayCurtainBean.getTag()) {
                            case 0:
                                switch (gatewayCurtainBean.getValue()){
                                switch (gatewayCurtainBean.getValue()) {
                                    case 0:
                                        curtainCmd = 0;
                                        break;
@@ -328,53 +330,53 @@
                        curtainBean.setAttriBute(curtainAttriButeBeanList);
                        curtainReadBean.setData(curtainBean);
                        String curtainReadJson = JsonUtil.toJson(curtainReadBean);
                        HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus",curtainReadJson);
                        HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", curtainReadJson);
                        break;
                }
                break;
                case ZigbeeDeviceID.DimmableLight:
                    //调光灯
                    GatewayCommondBean dimmableLightBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
                    if (dimmableLightBean.getCmd() == null) {
                        reportError("cmd parameter error, please check it out");
                        return;
                    }
                    switch (dimmableLightBean.getCmd()){
                        case "write":
                            // è°ƒå…‰æŽ§åˆ¶
                            ZigbeeDimmableCtrlBean light = new ZigbeeDimmableCtrlBean();
                            ZigbeeDimmableCtrlBean.Data data = new ZigbeeDimmableCtrlBean.Data();
                            light.setCluster_ID(8);
                            light.setSendMode(2);
                            light.setCommand(4);
                            light.setDeviceAddr(zigbeeJson.getDeviceAddr());
                            light.setEpoint(zigbeeJson.getEpoint());
                            data.setLevel(dimmableLightBean.getValue());
                            data.setTransitionTime(2);
                            light.setData(data);
                            String ctrlLightjson = JsonUtil.toJson(light);
                            HDLZigbeeMqtt.sendMqttData1( "DeviceControl", ctrlLightjson);
                            break;
                        case "read":
                            ZigbeeReadBean lightReadBean = new ZigbeeReadBean();
                            lightReadBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
                            lightReadBean.setEpoint(zigbeeJson.getEpoint());
                            lightReadBean.setCluster_ID(8);
                            lightReadBean.setCommand(108);
                            lightReadBean.setSendMode(2);
            case ZigbeeDeviceID.DimmableLight:
                //调光灯
                GatewayCommondBean dimmableLightBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
                if (dimmableLightBean.getCmd() == null) {
                    reportError("cmd parameter error, please check it out");
                    return;
                }
                switch (dimmableLightBean.getCmd()) {
                    case "write":
                        // è°ƒå…‰æŽ§åˆ¶
                        ZigbeeDimmableCtrlBean light = new ZigbeeDimmableCtrlBean();
                        ZigbeeDimmableCtrlBean.Data data = new ZigbeeDimmableCtrlBean.Data();
                        light.setCluster_ID(8);
                        light.setSendMode(2);
                        light.setCommand(4);
                        light.setDeviceAddr(zigbeeJson.getDeviceAddr());
                        light.setEpoint(zigbeeJson.getEpoint());
                        data.setLevel(dimmableLightBean.getValue());
                        data.setTransitionTime(2);
                        light.setData(data);
                        String ctrlLightjson = JsonUtil.toJson(light);
                        HDLZigbeeMqtt.sendMqttData1("DeviceControl", ctrlLightjson);
                        break;
                    case "read":
                        ZigbeeReadBean lightReadBean = new ZigbeeReadBean();
                        lightReadBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
                        lightReadBean.setEpoint(zigbeeJson.getEpoint());
                        lightReadBean.setCluster_ID(8);
                        lightReadBean.setCommand(108);
                        lightReadBean.setSendMode(2);
                            ZigbeeReadBean.DataBean lightBean = new ZigbeeReadBean.DataBean();
                            List<ZigbeeReadBean.DataBean.AttriButeBean> lightAttriButeBeanList = new ArrayList<>();
                            ZigbeeReadBean.DataBean.AttriButeBean lightAttriButeBean = new ZigbeeReadBean.DataBean.AttriButeBean();
                            lightAttriButeBean.setAttriButeId(0);
                            lightAttriButeBeanList.add(lightAttriButeBean);
                            lightBean.setAttriBute(lightAttriButeBeanList);
                            lightReadBean.setData(lightBean);
                            String lightReadJson = JsonUtil.toJson(lightReadBean);
                            HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", lightReadJson);
                            break;
                    }
                    break;
                        ZigbeeReadBean.DataBean lightBean = new ZigbeeReadBean.DataBean();
                        List<ZigbeeReadBean.DataBean.AttriButeBean> lightAttriButeBeanList = new ArrayList<>();
                        ZigbeeReadBean.DataBean.AttriButeBean lightAttriButeBean = new ZigbeeReadBean.DataBean.AttriButeBean();
                        lightAttriButeBean.setAttriButeId(0);
                        lightAttriButeBeanList.add(lightAttriButeBean);
                        lightBean.setAttriBute(lightAttriButeBeanList);
                        lightReadBean.setData(lightBean);
                        String lightReadJson = JsonUtil.toJson(lightReadBean);
                        HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", lightReadJson);
                        break;
                }
                break;
            case ZigbeeDeviceID.Thermostat:
                //空调
                final GatewayCommondBean thermostatBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
@@ -382,17 +384,17 @@
                    reportError("cmd parameter error, please check it out");
                    return;
                }
                switch (thermostatBean.getCmd()){
                    case  "write":
                        switch (airTag){
                switch (thermostatBean.getCmd()) {
                    case "write":
                        switch (airTag) {
                            case 0://开关,开关传入开关01
                                switch (thermostatBean.getValue()){
                                switch (thermostatBean.getValue()) {
                                    case 0://空调关
                                        new Thread(new Runnable() {
                                            @Override
                                            public void run() {
                                                sendFan(zigbeeJson,0);//发送风扇控制
                                                sendThermostat(zigbeeJson,0);//发送恒温器
                                                sendFan(zigbeeJson, 0);//发送风扇控制
                                                sendThermostat(zigbeeJson, 0);//发送恒温器
                                            }
                                        }).start();
                                        break;
@@ -400,8 +402,8 @@
                                        new Thread(new Runnable() {
                                            @Override
                                            public void run() {
                                                sendThermostat(zigbeeJson,1);
                                                sendFan(zigbeeJson,4);
                                                sendThermostat(zigbeeJson, 1);
                                                sendFan(zigbeeJson, 4);
                                            }
                                        }).start();
@@ -412,7 +414,7 @@
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        sendThermostat(zigbeeJson,thermostatBean.getValue());
                                        sendThermostat(zigbeeJson, thermostatBean.getValue());
                                    }
                                }).start();
                                break;
@@ -420,17 +422,17 @@
                                new Thread(new Runnable() {
                                    @Override
                                    public void run() {
                                        sendFan(zigbeeJson,thermostatBean.getValue());
                                        sendFan(zigbeeJson, thermostatBean.getValue());
                                    }
                                }).start();
                                break;
                            case 3://控制温度
                                switch (airMode){
                                switch (airMode) {
                                    case 0://制热
                                        new Thread(new Runnable() {
                                            @Override
                                            public void run() {
                                                contrlThermostat(zigbeeJson,thermostatBean.getValue(),0);
                                                contrlThermostat(zigbeeJson, thermostatBean.getValue(), 0);
                                            }
                                        }).start();
                                        break;
@@ -438,7 +440,7 @@
                                        new Thread(new Runnable() {
                                            @Override
                                            public void run() {
                                                contrlThermostat(zigbeeJson,thermostatBean.getValue(),1);
                                                contrlThermostat(zigbeeJson, thermostatBean.getValue(), 1);
                                            }
                                        }).start();
                                        break;
@@ -446,7 +448,7 @@
                                        new Thread(new Runnable() {
                                            @Override
                                            public void run() {
                                                contrlThermostat(zigbeeJson,thermostatBean.getValue(),2);
                                                contrlThermostat(zigbeeJson, thermostatBean.getValue(), 2);
                                            }
                                        }).start();
                                        break;
@@ -493,9 +495,9 @@
                    reportError("cmd parameter error, please check it out");
                    return;
                }
                switch (airpanelBean.getCmd()){
                    case  "write":
                        sendNewFan(zigbeeJson,airpanelBean.getValue());
                switch (airpanelBean.getCmd()) {
                    case "write":
                        sendNewFan(zigbeeJson, airpanelBean.getValue());
                        break;
                    case "read":
                        readFan(zigbeeJson);
@@ -507,49 +509,50 @@
    }
    //初始化状态信息
    public static void initStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type){
    public static void initStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type) {
        initData();
        airTag = 0;
        new Thread(new Runnable() {
            @Override
            public void run() {
                String sendStatus = HDLCommandText.setSendStatus("read",0);//读不需要知道状态,随便填一个
                HDLCommandText.sendThirdPartyJson(zigbeeDevice,sendStatus, type);
                String sendStatus = HDLCommandText.setSendStatus("read", 0);//读不需要知道状态,随便填一个
                HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
            }
        }).start();
    }
    //更新空调状态
    public static void initAirStatus(final ZigbeeDeviceSaveBean zigbeeDevice,final int type ,int tag){
    public static void initAirStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type, int tag) {
        airTag = tag;
        String sendStatus = HDLCommandText.setSendStatus("read",0);//读不需要知道状态,随便填一个
        HDLCommandText.sendThirdPartyJson(zigbeeDevice,sendStatus, type);
        String sendStatus = HDLCommandText.setSendStatus("read", 0);//读不需要知道状态,随便填一个
        HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
    }
    //发送空调控制
    public static void sendAirStatus(final ZigbeeDeviceSaveBean zigbeeDevice,final int type ,final int value,
                                     int tag,int mode){
        airTag = tag;  airMode = mode;
        String sendStatus = HDLCommandText.setSendStatus("write",value);
        HDLCommandText.sendThirdPartyJson(zigbeeDevice,sendStatus,type);
    public static void sendAirStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type, final int value,
                                     int tag, int mode) {
        airTag = tag;
        airMode = mode;
        String sendStatus = HDLCommandText.setSendStatus("write", value);
        HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
    }
    //发送开关控制控制
    public static void sendStatus(final ZigbeeDeviceSaveBean zigbeeDevice,final int type,final int value){
        String sendStatus = HDLCommandText.setSendStatus("write",value);
        HDLCommandText.sendThirdPartyJson(zigbeeDevice,sendStatus,type);
    public static void sendStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type, final int value) {
        String sendStatus = HDLCommandText.setSendStatus("write", value);
        HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
    }
    //初始化窗帘控制
    public static void sendCurtainStatus(final ZigbeeDeviceSaveBean zigbeeDevice,final int type,
                                         final int value,final int tag){
        String sendStatus = HDLCommandText.setSendCurtainStatus("write",value,tag);
        HDLCommandText.sendThirdPartyJson(zigbeeDevice,sendStatus,type);
    public static void sendCurtainStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type,
                                         final int value, final int tag) {
        String sendStatus = HDLCommandText.setSendCurtainStatus("write", value, tag);
        HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
    }
    //设置继电器的状态
    private static String setSendStatus(String status,int value){
    private static String setSendStatus(String status, int value) {
        GatewayCommondBean gatewayCommondBean = new GatewayCommondBean();
        gatewayCommondBean.setCmd(status);
        gatewayCommondBean.setValue(value);
@@ -558,7 +561,7 @@
    }
    //设置窗帘的状态
    private static String setSendCurtainStatus(String status,int value,int tag){
    private static String setSendCurtainStatus(String status, int value, int tag) {
        GatewayCurtainBean gatewayCurtainBean = new GatewayCurtainBean();
        gatewayCurtainBean.setCmd(status);
        gatewayCurtainBean.setValue(value);
@@ -568,7 +571,7 @@
    }
    //发送恒温器模式
    private static void sendThermostat(ZigbeeDeviceSaveBean zigbeeJson,int value){
    private static void sendThermostat(ZigbeeDeviceSaveBean zigbeeJson, int value) {
        ZigbeeWriteCtrlBean zigbeeOffBean = new ZigbeeWriteCtrlBean();
        zigbeeOffBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
        zigbeeOffBean.setEpoint(zigbeeJson.getEpoint());
@@ -580,12 +583,12 @@
        zigbeeOffDataBean.setAttributeData(value);
        zigbeeOffBean.setData(zigbeeOffDataBean);
        String zigbeeoffJson = JsonUtil.toJson(zigbeeOffBean);
        HDLZigbeeMqtt.sendMqttData1("SetWritableValue",zigbeeoffJson);
        initAirStatus(zigbeeJson,ZigbeeDeviceID.Thermostat,airTag);
        HDLZigbeeMqtt.sendMqttData1("SetWritableValue", zigbeeoffJson);
        initAirStatus(zigbeeJson, ZigbeeDeviceID.Thermostat, airTag);
    }
    //发送风模式
    private static void sendFan(final ZigbeeDeviceSaveBean zigbeeJson, int value){
    private static void sendFan(final ZigbeeDeviceSaveBean zigbeeJson, int value) {
        ZigbeeWriteCtrlBean zigbeeOffBean = new ZigbeeWriteCtrlBean();
        zigbeeOffBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
        zigbeeOffBean.setEpoint(zigbeeJson.getEpoint());
@@ -597,12 +600,12 @@
        zigbeeOffDataBean.setAttributeData(value);
        zigbeeOffBean.setData(zigbeeOffDataBean);
        String zigbeeoffJson = JsonUtil.toJson(zigbeeOffBean);
        HDLZigbeeMqtt.sendMqttData1("SetWritableValue",zigbeeoffJson);
        initAirStatus(zigbeeJson,ZigbeeDeviceID.Thermostat,airTag);
        HDLZigbeeMqtt.sendMqttData1("SetWritableValue", zigbeeoffJson);
        initAirStatus(zigbeeJson, ZigbeeDeviceID.Thermostat, airTag);
    }
    //新风状态下发送新风模式
    private static void sendNewFan(final ZigbeeDeviceSaveBean zigbeeJson, int value){
    private static void sendNewFan(final ZigbeeDeviceSaveBean zigbeeJson, int value) {
        ZigbeeWriteCtrlBean zigbeeOffBean = new ZigbeeWriteCtrlBean();
        zigbeeOffBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
        zigbeeOffBean.setEpoint(zigbeeJson.getEpoint());
@@ -614,12 +617,12 @@
        zigbeeOffDataBean.setAttributeData(value);
        zigbeeOffBean.setData(zigbeeOffDataBean);
        String zigbeeoffJson = JsonUtil.toJson(zigbeeOffBean);
        HDLZigbeeMqtt.sendMqttData1("SetWritableValue",zigbeeoffJson);
        initStatus(zigbeeJson,ZigbeeDeviceID.AirPanel);
        HDLZigbeeMqtt.sendMqttData1("SetWritableValue", zigbeeoffJson);
        initStatus(zigbeeJson, ZigbeeDeviceID.AirPanel);
    }
    //温度控制
    private static void contrlThermostat(ZigbeeDeviceSaveBean zigbeeJson,int value, int mode){
    private static void contrlThermostat(ZigbeeDeviceSaveBean zigbeeJson, int value, int mode) {
        ZigbeeThermostatCtrlBean zigbeeThermostatCtrlBean = new ZigbeeThermostatCtrlBean();
        zigbeeThermostatCtrlBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
        zigbeeThermostatCtrlBean.setEpoint(zigbeeJson.getEpoint());
@@ -631,12 +634,12 @@
        zigbeeData.setAmount(value);
        zigbeeThermostatCtrlBean.setData(zigbeeData);
        String zigbeeCtrlJson = JsonUtil.toJson(zigbeeThermostatCtrlBean);
        HDLZigbeeMqtt.sendMqttData1("DeviceControl",zigbeeCtrlJson);
        initAirStatus(zigbeeJson,ZigbeeDeviceID.Thermostat,airTag);
        HDLZigbeeMqtt.sendMqttData1("DeviceControl", zigbeeCtrlJson);
        initAirStatus(zigbeeJson, ZigbeeDeviceID.Thermostat, airTag);
    }
    //查看风速
    private static void readFan(ZigbeeDeviceSaveBean zigbeeJson){
    private static void readFan(ZigbeeDeviceSaveBean zigbeeJson) {
        //获取当前通风信息
        ZigbeeReadBean fanBean = new ZigbeeReadBean();
@@ -657,7 +660,7 @@
    }
    //发送场景数据
    public static void sendSceneStatus(int ScenesId,int DelayTime){
    public static void sendSceneStatus(int ScenesId, int DelayTime) {
        scenesId = ScenesId;
        ZigbeeSceneCtrlBean zigbeeSceneCtrlBean = new ZigbeeSceneCtrlBean();
        zigbeeSceneCtrlBean.setCluster_ID(0);
@@ -667,19 +670,19 @@
        dataBean.setDelayTime(DelayTime);
        zigbeeSceneCtrlBean.setData(dataBean);
        String json = JsonUtil.toJson(zigbeeSceneCtrlBean);
        HDLZigbeeMqtt.sendMqttData1("Scene/Open",json);
        HDLZigbeeMqtt.sendMqttData1("Scene/Open", json);
    }
    //处理设备信息
    private static void handleDeviceList(String message) {
        ZigbeeDeviceListBean zigbeeDeviceListBean = JsonUtil.parseJsonWithGson(message,ZigbeeDeviceListBean.class);
        ZigbeeDeviceListBean zigbeeDeviceListBean = JsonUtil.parseJsonWithGson(message, ZigbeeDeviceListBean.class);
        zigbeeDeviceListBeans.add(zigbeeDeviceListBean);
    }
    //处理场景信息
    private static void handleSceneList(String message) {
        Gson gson = new Gson();
        zigbeeSceneListBean = gson.fromJson(message,ZigbeeSceneListBean.class);
        zigbeeSceneListBean = gson.fromJson(message, ZigbeeSceneListBean.class);
    }
    //处理场景的数据
@@ -690,11 +693,11 @@
            return;
        }
        StatusReadBackBean statusReadBackBean = new StatusReadBackBean();
        if (sceneCtrlBackBean.getData().getScenesId() == scenesId){
        if (sceneCtrlBackBean.getData().getScenesId() == scenesId) {
            statusReadBackBean.setValue(sceneCtrlBackBean.getData().getResult());
        }
        String Json = JsonUtil.toJson(statusReadBackBean);
        Log.d("11114", "处理数据回调: "+Json);
        Log.d("11114", "处理数据回调: " + Json);
        if (stateListener != null) {
            StateEvent event = new StateEvent(Json);
            stateListener.onData(event);
@@ -702,25 +705,26 @@
    }
    //回调获取到的设备信息
    public static void handleDeviceData(final DataCallBack dataCallBack){
    public static void handleDeviceData(final DataCallBack dataCallBack) {
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if (!isFinished){
                if (!isFinished) {
                    Log.d("11112", "run: ç¨‹åºæ‰§è¡Œä¸­");
                }else {
                } else {
                    timer.cancel();
                    timer.purge();
                    timer = null;
                    isFinished = false;
                    dataCallBack.onSuccess(zigbeeDeviceListBeans,zigbeeSceneListBean);
                    dataCallBack.onSuccess(zigbeeDeviceListBeans, zigbeeSceneListBean);
                }
            }
        },1,500);
        }, 1, 500);
    }
    public static void reSearch(){
        if (timer != null){
    public static void reSearch() {
        if (timer != null) {
            timer.cancel();
            timer.purge();
            timer = null;
@@ -734,7 +738,7 @@
            CommonErrorBean errorBean = new CommonErrorBean();
            errorBean.setCmd("error");
            errorBean.setReason(reason);
            String errorJson =JsonUtil.toJson(errorBean);
            String errorJson = JsonUtil.toJson(errorBean);
            StateEvent event = new StateEvent(errorJson);
            stateListener.onData(event);
        }
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/HDLZigbeeMqtt.java
@@ -9,6 +9,7 @@
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import com.hdl.sdk.hdl_core.HDLDeviceManger.Callback.PushCallback;
import com.hdl.sdk.hdl_core.Util.LogUtil.HDLLog;
@@ -17,7 +18,8 @@
    private static final String clientid = "HDLZigbeeDriver";
    private static MqttClient client;
    private static boolean isCancel  = false;
    private static boolean isCancel = false;
    public static void setIsCancel(boolean isCancel) {
        HDLZigbeeMqtt.isCancel = isCancel;
    }
@@ -28,25 +30,25 @@
     */
    public static void connect1(String host) {
        try {
                    client = new MqttClient("tcp://"+host+":1883", clientid, new MemoryPersistence());
                    MqttConnectOptions options = new MqttConnectOptions();
                    options.setCleanSession(false);
                    options.setUserName("admin");
                    options.setPassword("password".toCharArray());
                    //设置自动重连
                    options.setAutomaticReconnect(true);
                    // è®¾ç½®è¶…æ—¶æ—¶é—´
                    options.setConnectionTimeout(10);
                    // è®¾ç½®ä¼šè¯å¿ƒè·³æ—¶é—´
                    options.setKeepAliveInterval(20);
                    PushCallback pushCallback = new PushCallback();
                    pushCallback.setHost(host);
                    client.setCallback(pushCallback);
                    client.connect(options);
                    if (isCancel){
                        client.close();
                        isCancel = false;
                    }
            client = new MqttClient("tcp://" + host + ":1883", clientid, new MemoryPersistence());
            MqttConnectOptions options = new MqttConnectOptions();
            options.setCleanSession(false);
            options.setUserName("admin");
            options.setPassword("password".toCharArray());
            //设置自动重连
            options.setAutomaticReconnect(true);
            // è®¾ç½®è¶…æ—¶æ—¶é—´
            options.setConnectionTimeout(10);
            // è®¾ç½®ä¼šè¯å¿ƒè·³æ—¶é—´
            options.setKeepAliveInterval(20);
            PushCallback pushCallback = new PushCallback();
            pushCallback.setHost(host);
            client.setCallback(pushCallback);
            client.connect(options);
            if (isCancel) {
                client.close();
                isCancel = false;
            }
        } catch (MqttException e) {
            e.printStackTrace();
        }
@@ -55,9 +57,9 @@
    /**
     * å‘送mqtt信息
     */
    public static void sendMqttData1(String topic, String json)  {
        HDLLog.info("send Mqtt to gateway:"+json);
        Log.d("111133", "sendMqttData1: "+json);
    public static void sendMqttData1(String topic, String json) {
        HDLLog.info("send Mqtt to gateway:" + json);
        Log.d("111133", "sendMqttData1: " + json);
        try {
            MqttMessage message = new MqttMessage();
            message.setQos(2);
@@ -68,7 +70,7 @@
            Log.d("111133", "已经发送");
            HDLLog.info("message is published completely!");
        } catch (MqttException e) {
            Log.d("111133", "sendMqttData1: "+e.getMessage());
            Log.d("111133", "sendMqttData1: " + e.getMessage());
            HDLLog.info("发送mqtt信息出错");
            e.printStackTrace();
        }
Android_HDL_SDK_XW/hdl_core/src/main/java/com/hdl/sdk/hdl_core/HDLDeviceManger/Core/SearchZigbeeGateway.java
@@ -12,7 +12,6 @@
import java.util.TimerTask;
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.ZigbeeGatewayInfoBean;
import com.hdl.sdk.hdl_core.HDLDeviceManger.Callback.PushCallback;
import com.hdl.sdk.hdl_core.Util.LogUtil.HDLLog;
@@ -30,13 +29,15 @@
    public static Timer searchTimer = null;
    private static DatagramSocket datagramSocket; // æ•°æ®æŠ¥å¥—接字
    private static boolean isStop = false;
    public interface OnSearchListener{
         void onSuccess( List<ZigbeeGatewayInfoBean> zigbeeGatewayInfoBeanList);
         void onEorror(Exception e);
    public interface OnSearchListener {
        void onSuccess(List<ZigbeeGatewayInfoBean> zigbeeGatewayInfoBeanList);
        void onEorror(Exception e);
    }
    public static void release() {
        if (datagramSocket != null){
        if (datagramSocket != null) {
            isStop = true;
            datagramSocket.disconnect();
            datagramSocket = null;
@@ -58,99 +59,99 @@
            public void run() {
                if (zigbeeGatewayInfoBean.getCount() < 20) {
                    zigbeeGatewayInfoBean.setCount(zigbeeGatewayInfoBean.getCount() + 1);
                            try {
                                    byte[] sendBytes = new byte[44];
                                    sendBytes[0] = (byte) 0xFE;
                                    sendBytes[1] = 0x29;
                                    sendBytes[2] = 0;
                                    sendBytes[3] = 0;
                                    sendBytes[4] = 0;
                                    sendBytes[5] = 0;
                                    sendBytes[6] = 0;
                                    //获取所有网关(无需houseID模式),后面要改
                                    sendBytes[7] = 0x67;
                                    sendBytes[8] = 0x65;
                                    sendBytes[9] = 0x74;
                                    sendBytes[10] = 0x61;
                                    sendBytes[11] = 0x6c;
                                    sendBytes[12] = 0x6c;
                                    sendBytes[13] = 0x67;
                                    sendBytes[14] = 0x77;
                                    for (int i = 15; i<sendBytes.length-1;i++){
                                        sendBytes[i] = 0;
                                    }
                                    sendBytes[sendBytes.length - 1] = 0x02;
                                    //Log.d(TAG, "sendBytes: "+StringUtil.ByteArrToHex(sendBytes,0,sendBytes.length));
                                    InetAddress address = InetAddress.getByName(NetWorkUtil.getLocalBroadCast());
                                    DatagramPacket packet = new DatagramPacket(
                                            sendBytes,
                                            sendBytes.length,
                                            address, 7624);
                                    datagramSocket= new DatagramSocket();
                                    datagramSocket.send(packet);
                    try {
                        byte[] sendBytes = new byte[44];
                        sendBytes[0] = (byte) 0xFE;
                        sendBytes[1] = 0x29;
                        sendBytes[2] = 0;
                        sendBytes[3] = 0;
                        sendBytes[4] = 0;
                        sendBytes[5] = 0;
                        sendBytes[6] = 0;
                        //获取所有网关(无需houseID模式),后面要改
                        sendBytes[7] = 0x67;
                        sendBytes[8] = 0x65;
                        sendBytes[9] = 0x74;
                        sendBytes[10] = 0x61;
                        sendBytes[11] = 0x6c;
                        sendBytes[12] = 0x6c;
                        sendBytes[13] = 0x67;
                        sendBytes[14] = 0x77;
                        for (int i = 15; i < sendBytes.length - 1; i++) {
                            sendBytes[i] = 0;
                        }
                        sendBytes[sendBytes.length - 1] = 0x02;
                        //Log.d(TAG, "sendBytes: "+StringUtil.ByteArrToHex(sendBytes,0,sendBytes.length));
                        InetAddress address = InetAddress.getByName(NetWorkUtil.getLocalBroadCast());
                        DatagramPacket packet = new DatagramPacket(
                                sendBytes,
                                sendBytes.length,
                                address, 7624);
                        datagramSocket = new DatagramSocket();
                        datagramSocket.send(packet);
                                    byte[] receiveBytes = new byte[1024];
                                    DatagramPacket dataPacket = new DatagramPacket(receiveBytes, receiveBytes.length);
                                    datagramSocket.receive(dataPacket);
                                    //是否主网关-01为主网关-00为从网关
                                    String IsDomain = StringUtil.Byte2Hex(dataPacket.getData()[44]);
                                    int headLength = 1 + 2 + 4 + 36 + 1 + 1 + 4 ;
                                    if (receiveBytes.length > headLength) {
                                        //网关名称长度
                                        String str = StringUtil.Byte2Hex(dataPacket.getData()[49]);
                                        int GwNameLength = Integer.parseInt(str,16);
                        byte[] receiveBytes = new byte[1024];
                        DatagramPacket dataPacket = new DatagramPacket(receiveBytes, receiveBytes.length);
                        datagramSocket.receive(dataPacket);
                        //是否主网关-01为主网关-00为从网关
                        String IsDomain = StringUtil.Byte2Hex(dataPacket.getData()[44]);
                        int headLength = 1 + 2 + 4 + 36 + 1 + 1 + 4;
                        if (receiveBytes.length > headLength) {
                            //网关名称长度
                            String str = StringUtil.Byte2Hex(dataPacket.getData()[49]);
                            int GwNameLength = Integer.parseInt(str, 16);
                                        //网关名称
                                        byte[] gwnamebyte = new byte[GwNameLength];
                                        for (int i = 0 ;i< GwNameLength ; i++){
                                            gwnamebyte[i] = dataPacket.getData()[i+50];
                                        }
                                        String GwName =new String(gwnamebyte,0,gwnamebyte.length);
                                        //网关id长度
                                        String str1 = StringUtil.Byte2Hex(dataPacket.getData()[50+GwNameLength]);
                                        int GwIdLength = Integer.parseInt(str1,16);
                                        //获取网关id
                                        byte[] gatewayId = new byte[GwIdLength];
                                        for (int i = 0 ;i< GwIdLength ; i++){
                                            gatewayId[i] = dataPacket.getData()[i+51+GwNameLength];
                                        }
                                        if (gatewayId.length > 1) {
                                            String stringGateWayId = new String(gatewayId,0,gatewayId.length);
                                            Log.d(TAG, "网关id: "+stringGateWayId);
                                            ZigbeeGatewayInfoBean zigbeeGatewayInfoBean = new ZigbeeGatewayInfoBean();
                                            zigbeeGatewayInfoBean.setGatewayId(stringGateWayId);
                                            zigbeeGatewayInfoBean.setIpAddress(dataPacket.getAddress().getHostAddress());
                                            if (IsDomain.equals("01")){
                                                zigbeeGatewayInfoBean.setDomain(true);
                                            }else {
                                                zigbeeGatewayInfoBean.setDomain(false);
                                            }
                                            zigbeeGatewayInfoBean.setGatewayName(GwName);
                                            boolean isExit = false;
                                            for (int i = 0; i < zigbeeGatewayInfoBeanList.size(); i++) {
                                                if (zigbeeGatewayInfoBeanList.get(i).getGatewayId()
                                                        .equals(zigbeeGatewayInfoBean.getGatewayId())) {
                                                        isExit = true;
                                                        break;
                                                }
                                            }
                                            if (!isExit) {
                                                zigbeeGatewayInfoBeanList.add(zigbeeGatewayInfoBean);
                                                Log.d(TAG, "addList:成功添加 ");
                                            }
                                        }
                                    }
                                datagramSocket.close();
                            } catch (Exception e) {
                                Log.d(TAG, "run: "+e.toString());
                                e.printStackTrace();
                                datagramSocket.close();
                                onSearchListener.onEorror(e);
                            //网关名称
                            byte[] gwnamebyte = new byte[GwNameLength];
                            for (int i = 0; i < GwNameLength; i++) {
                                gwnamebyte[i] = dataPacket.getData()[i + 50];
                            }
                            String GwName = new String(gwnamebyte, 0, gwnamebyte.length);
                            //网关id长度
                            String str1 = StringUtil.Byte2Hex(dataPacket.getData()[50 + GwNameLength]);
                            int GwIdLength = Integer.parseInt(str1, 16);
                            //获取网关id
                            byte[] gatewayId = new byte[GwIdLength];
                            for (int i = 0; i < GwIdLength; i++) {
                                gatewayId[i] = dataPacket.getData()[i + 51 + GwNameLength];
                            }
                            if (gatewayId.length > 1) {
                                String stringGateWayId = new String(gatewayId, 0, gatewayId.length);
                                Log.d(TAG, "网关id: " + stringGateWayId);
                                ZigbeeGatewayInfoBean zigbeeGatewayInfoBean = new ZigbeeGatewayInfoBean();
                                zigbeeGatewayInfoBean.setGatewayId(stringGateWayId);
                                zigbeeGatewayInfoBean.setIpAddress(dataPacket.getAddress().getHostAddress());
                                if (IsDomain.equals("01")) {
                                    zigbeeGatewayInfoBean.setDomain(true);
                                } else {
                                    zigbeeGatewayInfoBean.setDomain(false);
                                }
                                zigbeeGatewayInfoBean.setGatewayName(GwName);
                                boolean isExit = false;
                                for (int i = 0; i < zigbeeGatewayInfoBeanList.size(); i++) {
                                    if (zigbeeGatewayInfoBeanList.get(i).getGatewayId()
                                            .equals(zigbeeGatewayInfoBean.getGatewayId())) {
                                        isExit = true;
                                        break;
                                    }
                                }
                                if (!isExit) {
                                    zigbeeGatewayInfoBeanList.add(zigbeeGatewayInfoBean);
                                    Log.d(TAG, "addList:成功添加 ");
                                }
                            }
                        }
                        datagramSocket.close();
                    } catch (Exception e) {
                        Log.d(TAG, "run: " + e.toString());
                        e.printStackTrace();
                        datagramSocket.close();
                        onSearchListener.onEorror(e);
                    }
                } else {
                    if (searchTimer != null) {
                        //执行完搜索后到这
Android_HDL_SDK_XW/hdl_core/src/test/java/com/hdl/sdk/hdl_core/ExampleUnitTest.java
File was deleted
org.eclipse.paho.client.mqttv3-1.2.0.jar
Binary files differ
org.eclipse.paho.client.mqttv3-1.2.5.jar
Binary files differ
´ò°üaar/2020-09-23/HDL_ZigBeeSDK_V1.0.1.B1.20200923.aar
Binary files differ