New file |
| | |
| | | # 新风类模块 |
| | | |
| | | **新风类模块支持搜索和控制的类型** |
| | | |
| | | 标准新风设备(大类 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("报警信息:滤网使用超时,需要更换!"); |
| | | } |
| | | } |
| | | |
| | | ....... |
| | | |
| | | ``` |