空调类模块支持搜索和控制的类型
HVAC 模块(0)
通用空调面板(3)
接口描述
HDLCommand.getHVACDeviceStateFromNetwork(AppliancesInfo info)
调用该接口,获取HVAC空调设备状态。
注:HVAC空调DeviceType设备类型为HDLApConfig.TYPE_AC_HVAC。
代码范例
//查询HVAC空调模块状态信息
HDLCommand.getHVACDeviceStateFromNetwork(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_AC_HVAC:
if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
if (!event.isSuccess()) {
showToast("获取空调状态失败,请重新再试");
return;
}
AirHVACBackInfo mAirHVACBackInfo = new AirHVACBackInfo(event.getAppliancesInfo());
if (mAirHVACBackInfo == null) {
showToast("获取空调状态失败,请重新再试");
return;
}
showAirHVACBackInfo(mAirHVACBackInfo);
}
break;
default:
//不处理
break;
}
}
}
### 二、HVAC模块控制改变状态
**接口描述**
HDLCommand.airCtrl(AppliancesInfo info, int type, int state)
type:需要控制功能命令参数
state:需要控制功能对应的状态值
调用该接口,可以控制改变HVAC空调模块的,开、光、模式、风速、温度等状态。
模式:制冷、制热、通风、自动、抽湿5种模式。
风速:自动、高风、中风、低风
温度:温度范围16~30
**代码范例**
.......
//发送控制空调模块打开指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOn);//空调开
.......
.......
//发送控制空调模块改变模式指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeAuto);//空调模式自动
.......
.......
//发送控制空调模块改变风速指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedHigh);//风速高风
.......
.......
//发送控制空调模块改变温度指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.refTem, tempInt);//制冷温度
.......
**控制状态回调事件监听**
控制状态超时或成功,都会收到AirHVACFeedBackEvent订阅事件,如果event.isSuccess()值为false,则代表控制超时,没收到设备回复;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备控制状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
/**
* 空调模块控制回调Event
*
* @param event
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onAirHVACFeedBackEventMain(AirHVACFeedBackEvent event) {
if (event.getAirHVACBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
&& event.getAirHVACBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
&& event.getAirHVACBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
) {
// 先判断是否超时
if (!event.isSuccess()) {
showToast("空调控制超时,请重新再试");
return;
}
AirHVACBackInfo mAirHVACBackInfo = event.getAirHVACBackInfo();
showAirHVACBackInfo(mAirHVACBackInfo);
}
}
.......
private void showAirHVACBackInfo(AirHVACBackInfo mAirHVACBackInfo){
String message = "";
if(mAirHVACBackInfo.getIsOn() == AirCtrlParser.airOn) {
message = getSwichStateString(mAirHVACBackInfo.getIsOn());
message += "\n" + getModeStateString(mAirHVACBackInfo.getAirMode());//模式
message += "\n" + getSpeedStateString(mAirHVACBackInfo.getAirSpeed());//风速
message += "\n制冷模式温度:" + mAirHVACBackInfo.getRefTemp();
message += "\n制热模式温度:" + mAirHVACBackInfo.getHeatTemp();
message += "\n自动模式温度:" + mAirHVACBackInfo.getAutoTemp();
message += "\n抽湿模式温度:" + mAirHVACBackInfo.getWettedTemp();
}else {
message = getSwichStateString(mAirHVACBackInfo.getIsOn());
}
airText.setText(message);
showToast(message);
HDLLog.Log(message);
}
### 三、通用空调面板查询状态
**接口描述**
通用空调面板不支持查询状态,
注:通用空调面板空调DeviceType设备类型为HDLApConfig.TYPE_AC_PANEL。
**状态改变回调事件监听**
空调面板状态改变会收到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_AC_HVAC:
case HDLApConfig.TYPE_AC_PANEL:
if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
if (!event.isSuccess()) {
showToast("获取空调状态失败,请重新再试");
return;
}
byte[] curState = event.getAppliancesInfo().getArrCurState();
switch (curState[0] & 0xFF) {
case AirCtrlParser.airSwich:
//是空调开关状态返回
break;
case AirCtrlParser.airSpeed:
//是风速状态返回
break;
case AirCtrlParser.airMode:
//是空调模式状态返回
break;
case AirCtrlParser.refTem:
//是空调制冷温度状态返回
break;
case AirCtrlParser.heatTem:
//是空调制热温度状态返回
break;
case AirCtrlParser.autoTem:
//是空调自动温度状态返回
break;
case AirCtrlParser.dehumTem:
//是空调抽湿温度状态返回
break;
case AirCtrlParser.upTem:
airTempState = curState[1] & 0xFF;
airText.setText("空调调温,上升温度:" + (curState[1] & 0xFF));
showToast("空调调温,上升温度:" + (curState[1] & 0xFF));
HDLLog.Log("空调调温,上升温度:" + (curState[1] & 0xFF));
break;
case AirCtrlParser.downTem:
airTempState = curState[1] & 0xFF;
airText.setText("空调调温,下降温度:" + (curState[1] & 0xFF));
showToast("空调调温,下降温度:" + (curState[1] & 0xFF));
HDLLog.Log("空调调温,下降温度:" + (curState[1] & 0xFF));
break;
}
}
break;
default:
//不处理
break;
}
}
}
### 四、通用空调面板控制改变状态
**接口描述**
HDLCommand.airCtrl(AppliancesInfo info, int type, int state)
type:需要控制功能命令参数
state:需要控制功能对应的状态值
调用该接口,可以控制改变通用空调面板模块的,开、光、模式、风速、温度等状态。
模式:制冷、制热、通风、自动、抽湿5种模式。
风速:自动、高风、中风、低风
温度:温度范围16~30
注:通用空调面板和HVAC空调模块不一样,通用空调面板控制什么状态就返回什么状态。
例如:控制开关状态,空调面板只会回复当前开关状态,模式、风速、温度等其他状态不会返回,所以监听回调方法时需先判断,当前回复的是什么状态参数,再进行下一步处理。
**代码范例**
.......
//发送控制空调模块打开指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOn);//空调开
.......
.......
//发送控制空调模块改变模式指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeAuto);//空调模式自动
.......
.......
//发送控制空调模块改变风速指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedHigh);//风速高风
.......
.......
//发送控制空调模块改变温度指令
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.refTem, tempInt);//制冷温度
.......
**控制状态回调事件监听**
控制状态超时或成功,都会收到AirFeedBackEvent订阅事件,如果event.isSuccess()值为false,则代表控制超时,没收到设备回复;
并通过比较前设备和回调状态设备的子网号(getDeviceSubnetID)、设备号(getDeviceDeviceID)和回路号(getChannelNum)是否一致,从而判断该消息事件为当前设备控制状态返回的消息,进行下一步处理,不一致则过滤不处理。
**代码范例**
/**
* 空调模块控制回调Event
*
* @param event
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onAirFeedBackInfoEventMain(AirFeedBackEvent event) {
if (event.getAirCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
&& event.getAirCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
&& event.getAirCtrlBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()
) {
// 先判断是否超时
if (!event.isSuccess()) {
showToast("空调控制超时,请重新再试");
return;
}
byte[] curState = event.getAirCtrlBackInfo().getCurState();
switch (curState[0] & 0xFF) {
case AirCtrlParser.airSwich:
//是空调开关状态返回
break;
case AirCtrlParser.airSpeed:
//是风速状态返回
break;
case AirCtrlParser.airMode:
//是空调模式状态返回
break;
case AirCtrlParser.refTem:
//是空调制冷温度状态返回
break;
case AirCtrlParser.heatTem:
//是空调制热温度返回
break;
case AirCtrlParser.autoTem:
//是空调自动温度返回
break;
case AirCtrlParser.dehumTem:
//是空调抽湿热温度返回
break;
case AirCtrlParser.upTem:
airTempState = curState[1] & 0xFF;
airText.setText("空调调温,上升温度:" + (curState[1] & 0xFF));
showToast("空调调温,上升温度:" + (curState[1] & 0xFF));
HDLLog.Log("空调调温,上升温度:" + (curState[1] & 0xFF));
break;
case AirCtrlParser.downTem:
airTempState = curState[1] & 0xFF;
airText.setText("空调调温,下降温度:" + (curState[1] & 0xFF));
showToast("空调调温,下降温度:" + (curState[1] & 0xFF));
HDLLog.Log("空调调温,下降温度:" + (curState[1] & 0xFF));
break;
}
}
}
```