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