JLChen
2020-07-22 e2b362d11ae69f961bd702e26e22b7553704b81f
2020-07-22 1.更新
2个文件已添加
7个文件已修改
612 ■■■■■ 已修改文件
Android_HDL_SDK_TTL_DOC/README.md 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/SUMMARY.md 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/src/api_build_device.md 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/src/api_build_device_about.md 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/src/api_control.md 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/src/api_control_air.md 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/src/api_control_freshair.md 384 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/src/api_control_geothermal.md 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/src/update_log.md 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Android_HDL_SDK_TTL_DOC/README.md
@@ -14,5 +14,8 @@
    - 背景音乐功能类模块(不支持简易编程搜索,需要手动添加)
    - 安防功能类模块(不支持简易编程搜索,需要手动添加)
    - 通用开关类模块(不支持简易编程搜索,需要手动添加)
    - 新风类模块
    - 地热类模块
- 手动添加,模拟生成设备列表(在不支持简易编程搜索情况下使用,例如:RCU酒店模块)
Android_HDL_SDK_TTL_DOC/SUMMARY.md
@@ -11,6 +11,8 @@
    * [安防类模块](./src/api_control_security.md)
    * [场景控制(逻辑模块)](./src/api_control_scenes.md)
    * [通用开关模块](./src/api_control_switch.md)
    * [新风类模块](./src/api_control_freshair.md)
    * [地热类模块](./src/api_control_geothermal.md)
* [MCU功能接口](./src/api_mcu_about.md)
    * [MCU通信](./src/api_mcu.md)
* [非搜索设备解决方案](./src/api_build_device.md)
Android_HDL_SDK_TTL_DOC/src/api_build_device.md
@@ -16,16 +16,20 @@
 * Configuration.GLOBAL_LOGIC_BIG_TYPE
 * Configuration.SECURITY_BIG_TYPE
 * Configuration.COMMON_SWITCH_BIG_TYPE
 * Configuration.FRESH_AIR_BIG_TYPE
 * Configuration.GEOTHERMAL_BIG_TYPE
 * 
 * 灯光类1:0 ,1,9,10 (后面为小类ID号)
 * 窗帘类2:0,1,2
 * 传感器5:0~24
 * 空调类7:0,3
 * 灯光类1:0 ,1,9,10 (后面为小类ID号)****调光回路(0) 开关回路(1) 混合调光类(9) 混合开关类(10)
 * 窗帘类2:0,1,2       ****开合帘电机(0) 卷帘电机(1) 窗帘模块(2)
 * 传感器5:2,10,12,26,27,28  **** 红外感应传感器(2)煤气传感器(10) 烟雾传感器(12)水浸传感器(26) 门磁传感器(27) 紧急按钮(28)
 * 空调类7:0,3          ****HVAC 模块(0) 通用空调面板(3)
 * 背景音乐功能9:0
 * 逻辑功能12:0
 * 全局场景17:0
 * 安防10:0
 * 通用开关100:0
 * 通用开关100:0
 * 新风类设备19:0,1     ****标准新风系统(0) 定制新风协议设备(1)
 * 地热类8:0            ****地热模块(0)
 *
 * 该方法应用于提供项目交付前的提取批量数据生成好数据。
 * 模拟生成设备回路数据,在项目不支持简易编程搜索情况下,可以通过该方法,先快捷生成目标数据 得到 List<DevicesData> 格式的设备列表数据
Android_HDL_SDK_TTL_DOC/src/api_build_device_about.md
@@ -13,16 +13,20 @@
 * Configuration.GLOBAL_LOGIC_BIG_TYPE
 * Configuration.SECURITY_BIG_TYPE
 * Configuration.COMMON_SWITCH_BIG_TYPE
 * Configuration.FRESH_AIR_BIG_TYPE
 * Configuration.GEOTHERMAL_BIG_TYPE
 *
 * 灯光类1:0 ,1,9,10
 * 窗帘类2:0,1,2
 * 传感器5:0~24
 * 空调类7:0,3
 * 灯光类1:0 ,1,9,10 (后面为小类ID号)****调光回路(0) 开关回路(1) 混合调光类(9) 混合开关类(10)
 * 窗帘类2:0,1,2       ****开合帘电机(0) 卷帘电机(1) 窗帘模块(2)
 * 传感器5:2,10,12,26,27,28  **** 红外感应传感器(2)煤气传感器(10) 烟雾传感器(12)水浸传感器(26) 门磁传感器(27) 紧急按钮(28)
 * 空调类7:0,3          ****HVAC 模块(0) 通用空调面板(3)
 * 背景音乐功能9:0
 * 逻辑功能12:0
 * 全局场景17:0
 * 安防10:0
 * 通用开关100:0
 * 新风类设备19:0,1     ****标准新风系统(0) 定制新风协议设备(1)
 * 地热类8:0            ****地热模块(0)
 *
 * 该方法应用于提供项目交付前的提取批量数据生成好数据。
 * 模拟生成设备回路数据,在项目不支持简易编程搜索情况下,可以通过该方法,先快捷生成目标数据 得到 List<DevicesData> 格式的设备列表数据
Android_HDL_SDK_TTL_DOC/src/api_control.md
@@ -48,10 +48,28 @@
    case Configuration.SECURITY_BIG_TYPE:
        //安防模块
        break;
    case Configuration.SENSOR_BIG_TYPE:
        //大类是传感器
        break;
    case Configuration.COMMON_SWITCH_BIG_TYPE:
        //大类是通用开关
        break;
    case Configuration.FRESH_AIR_BIG_TYPE:
        //新风模块
        if(appliancesInfos.get(position).getDeviceType() == HDLApConfig.TYPE_FRESH_AIR_JINMAO){
            //定制新风设备
        }else {
            //标准新风设备
        }
        break;
    case Configuration.GEOTHERMAL_BIG_TYPE:
        //大类是地热模块
        break;
    default:
        break;
}
```
Android_HDL_SDK_TTL_DOC/src/api_control_air.md
@@ -79,7 +79,7 @@
state:需要控制功能对应的状态值
调用该接口,可以控制改变HVAC空调模块的,开、光、模式、风速、温度等状态。
调用该接口,可以控制改变HVAC空调模块的,开、关、模式、风速、温度等状态。
模式:制冷、制热、通风、自动、抽湿5种模式。
Android_HDL_SDK_TTL_DOC/src/api_control_freshair.md
New file
@@ -0,0 +1,384 @@
# 新风类模块
**新风类模块支持搜索和控制的类型**
标准新风设备(大类 19 小类 0)
定制新风设备(大类 19 小类 1)
### 一、标准新风模块查询状态
**接口描述**
HDLCommand.getFreshAirDeviceStateFromNetwork(AppliancesInfo info)
调用该接口,获取标准新风设备状态。
**代码范例**
```java
    //查询新风模块状态信息
    HDLCommand.getFreshAirDeviceStateFromNetwork(appliancesInfo);
```
**查询状态回调事件监听**
查询状态超时或成功,都会收到DeviceStateEvent订阅事件,SDK所有状态回调都统一用这个事件,如果event.isSuccess()值为false,则代表查询超时,没收到设备回复;
开发者可以在所需要获取状态回调的地方,订阅该事件;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)、AppliancesInfo里面的设备类型(getDeviceType)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备查询状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
```java
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onDeviceStateEventMain(DeviceStateEvent event) {
        proDialog.dismiss();
        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
        ) {
            //这个返回的信息是当前状态的
            switch (event.getAppliancesInfo().getDeviceType()) {
                case HDLApConfig.TYPE_FRESH_AIR:
                    if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
                        if (!event.isSuccess()) {
                            showToast("获取新风状态失败,请重新再试");
                            return;
                        }
                        String message = "";
                        FreshAirBackInfo mFreshAirBackInfo = new FreshAirBackInfo(event.getAppliancesInfo());
                        if (mFreshAirBackInfo == null) {
                            showToast("获取新风状态失败,请重新再试");
                            return;
                        }
                        if(mFreshAirBackInfo.getIsOn() == FreshAirParser.freshAirOn) {
                            message = getSwichStateString(mFreshAirBackInfo.getIsOn());
                            message += "\n" + getSpeedStateString(mFreshAirBackInfo.getFreshAirSpeed());
                            message += "\n" + getModeStateString(mFreshAirBackInfo.getFreshAirMode());
                            message += "\n" + "室内温度:" + mFreshAirBackInfo.getInTemp();
                            message += "\n" + "室外温度:" + mFreshAirBackInfo.getOutTemp();
                            message += "\n" + "室内湿度:" + mFreshAirBackInfo.getHumidty();
                            message += "\n" + "PM2.5:" + mFreshAirBackInfo.getInTemp();
                            message += "\n" + "TVOC:" + mFreshAirBackInfo.getInTemp();
                            message += "\n" + "CO2:" + mFreshAirBackInfo.getInTemp();
                        }else {
                            message = getSwichStateString(mFreshAirBackInfo.getIsOn());
                        }
                        mTextView.setText(message);
                        showToast(message);
                        HDLLog.I(message);
                    }
                    break;
            }
        }
    }
```
### 二、标准新风模块控制改变状态
**接口描述**
HDLCommand.freshAirCtrl(AppliancesInfo info, int type, int state)
type:需要控制功能命令参数
state:需要控制功能对应的状态值
调用该接口,可以控制改变标准新风模块的,开、关、模式、风速等状态。
模式:0手动,1 自动, 2智能,3 定时。
风速:0自动,1低,2中,3高
**代码范例**
```java
    .......
    //发送控制标准新风打开指令
    //新风开
    HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSwich, FreshAirParser.freshAirOn);
    .......
    .......
    //发送控制标准新风模块改变模式指令
    HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeManual);//手动模式
    .......
    .......
    //发送控制标准新风模块改变风速指令
    HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSpeed, FreshAirParser.freshAirSpeedHigh);//风速高风
    .......
```
**控制状态回调事件监听**
控制状态超时或成功,都会收到FreshAirFeedBackEvent订阅事件,如果event.isSuccess()值为false,则代表控制超时,没收到设备回复;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备控制状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
```java
    /**
     * 标准新风设备控制回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onFreshAirFeedBackEventMain(FreshAirFeedBackEvent event) {
        proDialog.dismiss();
        if (event.getFreshAirBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getFreshAirBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getFreshAirBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
        ) {
            //先判断是否超时
            if (!event.isSuccess()) {
                showToast("新风控制超时,请重新再试");
                return;
            }
            String message = "";
            FreshAirBackInfo mFreshAirBackInfo = event.getFreshAirBackInfo();
            switch (ctrlId) {   //ctrlId 当前控制类型
                case FreshAirParser.freshAirSwich:
                    message = getSwichStateString(mFreshAirBackInfo.getIsOn());
                    break;
                case FreshAirParser.freshAirSpeed:
                    message = getSpeedStateString(mFreshAirBackInfo.getFreshAirSpeed());
                    break;
                case FreshAirParser.freshAirMode:
                    message = getModeStateString(mFreshAirBackInfo.getFreshAirMode());
                    break;
                default:
                    break;
            }
            //*********根据需求显示*********
            message += "\n" + "室内温度:" + mFreshAirBackInfo.getInTemp();
            message += "\n" + "室外温度:" + mFreshAirBackInfo.getOutTemp();
            message += "\n" + "室内湿度:" + mFreshAirBackInfo.getHumidty();
            message += "\n" + "PM2.5:" + mFreshAirBackInfo.getInTemp();
            message += "\n" + "TVOC:" + mFreshAirBackInfo.getInTemp();
            message += "\n" + "CO2:" + mFreshAirBackInfo.getInTemp();
            //*********根据需求显示*********
            mTextView.setText(message);
            showToast(message);
            HDLLog.I(message);
        }
    }
```
### 三、定制新风设备查询状态
**接口描述**
HDLCommand.getFreshAirDeviceStateFromNetwork(AppliancesInfo info)
调用该接口,获取新风设备状态。
**代码范例**
```java
    //查询定制新风模块状态信息
    HDLCommand.getFreshAirDeviceStateFromNetwork(appliancesInfo);
```
**查询状态回调事件监听**
查询状态超时或成功,都会收到DeviceStateEvent订阅事件,SDK所有状态回调都统一用这个事件,如果event.isSuccess()值为false,则代表查询超时,没收到设备回复;
开发者可以在所需要获取状态回调的地方,订阅该事件;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)、AppliancesInfo里面的设备类型(getDeviceType)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备查询状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
```java
    /**
     * 获取单一设备状态回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onDeviceStateEventMain(DeviceStateEvent event) {
        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
        ) {
            //这个返回的信息是当前状态的
            switch (event.getAppliancesInfo().getDeviceType()) {
                case HDLApConfig.TYPE_FRESH_AIR_JINMAO://定制新风设备类型
                    if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
                        if (!event.isSuccess()) {
                            showToast("获取新风状态失败,请重新再试");
                            return;
                        }
                        FreshAirJinMaoBackInfo mFreshAirJinMaoBackInfo = new FreshAirJinMaoBackInfo(event.getAppliancesInfo());
                        if (mFreshAirJinMaoBackInfo == null) {
                            showToast("获取新风状态失败,请重新再试");
                            return;
                        }
                        showFreshAirJinMaoBackInfo(mFreshAirJinMaoBackInfo);
                    }
                    break;
                default:
                    //不处理
                    break;
            }
        }
    }
```
### 四、定制新风设备控制改变状态
**接口描述**
HDLCommand.freshAirJinMaoCtrl(AppliancesInfo info, int type, int state)
type:需要控制功能命令参数
state:需要控制功能对应的状态值
调用该接口,可以控制改变定制新风设备的,开、关、运行模式、节能模式、风速、湿度等状态。
运行模式:        1-通风,2-加湿
节能舒适选择:     1-舒适,2-节能
风速档位:        0-自动,1-低速,2-中速,3-高速
湿度:湿度范围   0~100%
**代码范例**
```java
    .......
    //发送控制定制新风设备 打开指令
    HDLCommand.freshAirJinMaoCtrl(appliancesInfo, FreshAirJinMaoParser.SetSwich, FreshAirJinMaoParser.freshAirOn);//打开
    .......
    .......
    //发送控制定制新风设备 运行模式指令
    //若当前新风运行模式为通风,则点击按钮设置为加湿
    HDLCommand.freshAirJinMaoCtrl(appliancesInfo, FreshAirJinMaoParser.SetMode, FreshAirJinMaoParser.freshAirModeHumidify);
    .......
    .......
    //发送控制定制新风设备 节能舒适选择
    //若当前新风为节能,则点击按钮设置为舒适
    HDLCommand.freshAirJinMaoCtrl(appliancesInfo, FreshAirJinMaoParser.SetEnergySavingMode, FreshAirJinMaoParser.energySavingModeComfortable);
    .......
    .......
    //发送控制定制新风设备 改变风速指令
    //设置为自动
    HDLCommand.freshAirJinMaoCtrl(appliancesInfo, FreshAirJinMaoParser.SetSpeed, FreshAirJinMaoParser.freshAirSpeedAuto);
    .......
    .......
    //发送控制定制新风设备 改变湿度指令
   HDLCommand.freshAirJinMaoCtrl(appliancesInfo, FreshAirJinMaoParser.SetHumidty, mHumidtyInt);
    .......
```
**控制状态回调事件监听**
控制状态超时或成功,都会收到FreshAirJinMaoFeedBackEvent订阅事件,如果event.isSuccess()值为false,则代表控制超时,没收到设备回复;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备控制状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
```java
    /**
     * 定制新风设备控制回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onFreshAirJinMaoFeedBackEventEventMain(FreshAirJinMaoFeedBackEvent event) {
        if (event.getFreshAirJinMaoBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getFreshAirJinMaoBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getFreshAirJinMaoBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
        ) {
            //        先判断是否超时
            if (!event.isSuccess()) {
                showToast("新风控制超时,请重新再试");
                return;
            }
            FreshAirJinMaoBackInfo mFreshAirJinMaoBackInfo = event.getFreshAirJinMaoBackInfo();
            showFreshAirJinMaoBackInfo(mFreshAirJinMaoBackInfo);
        }
    }
    .......
    /**
     * 处理设备状态
     * @param mFreshAirJinMaoBackInfo
     */
    private void showFreshAirJinMaoBackInfo(FreshAirJinMaoBackInfo mFreshAirJinMaoBackInfo){
        if(mFreshAirJinMaoBackInfo != null) {
            String message = "";
            if (mFreshAirJinMaoBackInfo.getIsOn() == FreshAirJinMaoParser.freshAirOn) {
                message = getSwichStateString(mFreshAirJinMaoBackInfo.getIsOn());
                message += "\n" + getModeStateString(mFreshAirJinMaoBackInfo.getFreshAirMode());//运行模式
                message += "\n" + getMode2StateString(mFreshAirJinMaoBackInfo.getEnergySavingMode());//节能模式
                message += "\n" + getSpeedStateString(mFreshAirJinMaoBackInfo.getFreshAirSpeed());//风速
                message += "\n当前设置湿度:" + mFreshAirJinMaoBackInfo.getSetHumidty();//当前湿度设置值
                refreshState(mFreshAirJinMaoBackInfo);
            } else {
                message = getSwichStateString(mFreshAirJinMaoBackInfo.getIsOn());
            }
            mesText.setText(message);
            showToast(message);
            HDLLog.Log(message);
        }else{
            mesText.setText("未获取到新风状态");
        }
    }
    /**
     * 刷新设备状态
     */
    private void refreshState(FreshAirJinMaoBackInfo mFreshAirJinMaoBackInfo){
        switchState = mFreshAirJinMaoBackInfo.getIsOn();
        modeState = mFreshAirJinMaoBackInfo.getFreshAirMode();
        mode2State = mFreshAirJinMaoBackInfo.getEnergySavingMode();
        speedState = mFreshAirJinMaoBackInfo.getFreshAirSpeed();
        humidtyState = mFreshAirJinMaoBackInfo.getSetHumidty();
        tv_nowInTemp.setText(mFreshAirJinMaoBackInfo.getNowInTemp()+"℃");
        tv_nowInHumidty.setText(mFreshAirJinMaoBackInfo.getNowInHumidty() + "%");
        tv_filterRemaining.setText(mFreshAirJinMaoBackInfo.getFilterRemaining() + "%");
        String timeoutStateStr = mFreshAirJinMaoBackInfo.getUseTimeoutState() > 0 ? "超时,请更换" : "正常";
        tv_timeout.setText(timeoutStateStr);
        if(mFreshAirJinMaoBackInfo.getUseTimeoutState() > 0) {
            showToast("报警信息:滤网使用超时,需要更换!");
        }
    }
    .......
```
Android_HDL_SDK_TTL_DOC/src/api_control_geothermal.md
New file
@@ -0,0 +1,170 @@
# 地热类模块
**地热类模块支持搜索和控制的类型**
地热模块(大类 8 小类 0)
### 一、地热模块查询状态
**接口描述**
HDLCommand.getGeothermalStateFromNetwork(AppliancesInfo info)
调用该接口,获取地热模块设备状态。
**代码范例**
```java
    //查询地热模块状态信息
    HDLCommand.getGeothermalStateFromNetwork(appliancesInfo);
```
**查询状态回调事件监听**
查询状态超时或成功,都会收到DeviceStateEvent订阅事件,SDK所有状态回调都统一用这个事件,如果event.isSuccess()值为false,则代表查询超时,没收到设备回复;
开发者可以在所需要获取状态回调的地方,订阅该事件;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)、AppliancesInfo里面的设备类型(getDeviceType)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备查询状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
```java
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onDeviceStateEventMain(DeviceStateEvent event) {
        proDialog.dismiss();
        if (event.getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
        ) {
            //这个返回的信息是当前状态的
            switch (event.getAppliancesInfo().getDeviceType()) {
                case HDLApConfig.TYPE_GEOTHERMAL_MODULE:
                    if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
                        if (!event.isSuccess()) {
                            showToast("获取地热状态失败,请重新再试");
                            return;
                        }
                        String message = "";
                        GeothermalBackInfo mGeothermalBackInfo = new GeothermalBackInfo(event.appliancesInfo, false);
                        if (mGeothermalBackInfo == null) {
                            showToast("获取地热状态失败,请重新再试");
                            return;
                        }
                        showGeothermalBackInfo(mGeothermalBackInfo);
                    }
                    break;
            }
        }
    }
```
### 二、地热模块控制改变状态
**接口描述**
HDLCommand.geothermalCtrl(AppliancesInfo info, int type, int state)
type:需要控制功能命令参数
state:需要控制功能对应的状态值
调用该接口,可以控制改变地热模块的,开、关、模式、温度等状态。
模式:1 = 普通模式, 2 = 白天模式 , 3 = 夜间模式, 4 = 离开模式, 5 = 自动模式。
温度:普通温度,白天温度,夜间温度,离开温度
**代码范例**
```java
    .......
    //发送控制地热模块 打开指令
    //地热开
    HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gSwich, GeothermalParser.gSwichOn);
    .......
    .......
    //发送控制地热模块 改变模式指令
    //若当前模式自动模式,则点击按钮设置为普通模式
    HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gMode, GeothermalParser.gModeNormal);
    .......
    .......
    //发送控制地热模块 改变温度指令
    HDLCommand.geothermalCtrlTemp(appliancesInfo, tempInt);//自动根据当前模式设置当前模式的温度。
    .......
```
**控制状态回调事件监听**
控制状态超时或成功,都会收到GeothermalFeedBackEvent订阅事件,如果event.isSuccess()值为false,则代表控制超时,没收到设备回复;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备控制状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
```java
    /**
     * 地热控制回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onGeothermalFeedBackEventMain(GeothermalFeedBackEvent event) {
        proDialog.dismiss();
        if (event.getGeothermalBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getGeothermalBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getGeothermalBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
        ) {
            //先判断是否超时
            if (event.getStatusID() == EventCode.FAILURE_TIMEOUT) {
                showToast("地热模块控制超时,请重新再试");
                return;
            }
            if (event.getStatusID() == EventCode.FAILURE_DATA_ERROR) {
                showToast("地热模块,返回数据为空");
                return;
            }
            GeothermalBackInfo mGeothermalBackInfo = event.getGeothermalBackInfo();
            showGeothermalBackInfo(mGeothermalBackInfo);
        }
    }
    .......
    /**
     * showGeothermalBackInfo
     * @param mGeothermalBackInfo
     */
    private void showGeothermalBackInfo(GeothermalBackInfo mGeothermalBackInfo){
        String message = "";
        if(mGeothermalBackInfo.getIsOn() == GeothermalParser.gSwichOn) {
            message = getSwichStateString(mGeothermalBackInfo.getIsOn());
            message += "\n" + getModeStateString(mGeothermalBackInfo.getgMode());
            message += "\n" + "普通模式温度:" + mGeothermalBackInfo.getgNormalTemp();
            message += "\n" + "白天模式温度:" + mGeothermalBackInfo.getgDayTemp();
            message += "\n" + "夜间模式温度:" + mGeothermalBackInfo.getgNightTemp();
            message += "\n" + "离开模式温度:" + mGeothermalBackInfo.getgLeaveTemp();
        }else {
            message = getSwichStateString(mGeothermalBackInfo.getIsOn());
        }
        mTextView.setText(message);
        showToast(message);
        HDLLog.I(message);
    }
    .......
```
Android_HDL_SDK_TTL_DOC/src/update_log.md
@@ -1,3 +1,8 @@
### 1.1.2+  2020-07-20
* 1.增加新风类型设备支持(支持标准新风和目前定制新风设备2种类型)。
* 2.增加地热类型设备支持。
### 1.0.7+  2020-4-1
* 1.增加小类是3的音乐播放器支持。 
* 2.增加RCU混合调光混合开关 类模块,使用物理回路问题。