编辑 | blame | 历史 | 原始文档

新风类模块

新风类模块支持搜索和控制的类型

标准新风设备(大类 19 小类 0)
定制新风设备(大类 19 小类 1)

一、标准新风模块查询状态

接口描述

HDLCommand.getFreshAirDeviceStateFromNetwork(AppliancesInfo info)

调用该接口,获取标准新风设备状态。

代码范例

    //查询新风模块状态信息
    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高 **代码范例**
.......
//发送控制标准新风打开指令 
//新风开
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)是否一致,从而判断该消息事件为当前设备控制状态返回的消息,进行下一步处理,不一致则过滤不处理。 **代码范例**
/**
 * 标准新风设备控制回调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) 调用该接口,获取新风设备状态。 **代码范例**
//查询定制新风模块状态信息
HDLCommand.getFreshAirDeviceStateFromNetwork(appliancesInfo);

**查询状态回调事件监听** 查询状态超时或成功,都会收到DeviceStateEvent订阅事件,SDK所有状态回调都统一用这个事件,如果event.isSuccess()值为false,则代表查询超时,没收到设备回复; 开发者可以在所需要获取状态回调的地方,订阅该事件; 并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)、AppliancesInfo里面的设备类型(getDeviceType)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备查询状态返回的消息,进行下一步处理,不一致则过滤不处理。 **代码范例**
/**
 * 获取单一设备状态回调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% **代码范例**
.......
//发送控制定制新风设备 打开指令 
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)是否一致,从而判断该消息事件为当前设备控制状态返回的消息,进行下一步处理,不一致则过滤不处理。 **代码范例**
/**
 * 定制新风设备控制回调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("报警信息:滤网使用超时,需要更换!");
    }
}

.......

```