package com.hdl.sdk.hdl_sdk.activity;
|
|
|
import android.app.ProgressDialog;
|
import android.os.Bundle;
|
import android.view.View;
|
import android.widget.Button;
|
import android.widget.TextView;
|
|
import com.hdl.sdk.hdl_core.HDLAppliances.Config.HDLApConfig;
|
import com.hdl.sdk.hdl_core.HDLAppliances.HDLFreshAir.FreshAirBackInfo;
|
import com.hdl.sdk.hdl_core.HDLAppliances.HDLFreshAir.Parser.FreshAirParser;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.AppliancesInfo;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Core.HDLCommand;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.FreshAirFeedBackEvent;
|
import com.hdl.sdk.hdl_sdk.base.BaseActivity;
|
import com.hdl.sdk.hdl_sdk.utlis.HDLLog;
|
|
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.ThreadMode;
|
|
|
/**
|
* 新风系统控制界面
|
*/
|
public class FreshAirActivity extends BaseActivity {
|
|
private Button btn_switch, btn_mode, btn_speed;
|
private TextView mTextView;
|
private AppliancesInfo appliancesInfo;
|
|
private int airSwitchState;//Demo仅以此作为演示,实际请根据需求开发设计
|
private int airModeState;
|
private int airSpeedState;
|
private int ctrlId;
|
|
private ProgressDialog proDialog;
|
|
/**
|
* 要注册使用EventBus,这里要设置返回true
|
*
|
* @return true
|
*/
|
@Override
|
protected boolean isRegisterEventBus() {
|
return true;
|
}
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(com.hdl.sdk.hdl_sdk.R.layout.activity_fresh_air);
|
initcurState();
|
initView();
|
initClickOnEvent();
|
showStateView();
|
//此方法为主动获取单一设备状态,逻辑模块、背景音乐模块没有这个api
|
//目前仅支持灯光,窗帘,空调不发送获取状态命令只从SDK本地获取,传感器,地热模块,新风系统是发送获取状态命令从网络上获取。
|
HDLCommand.getDeviceState(appliancesInfo);
|
}
|
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
proDialog.dismiss();
|
HDLLog.I("onDestroy: FreshAirActivity");
|
}
|
|
private void initcurState() {
|
appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl");
|
}
|
|
private void initView() {
|
mTextView = findViewById(com.hdl.sdk.hdl_sdk.R.id.tv_fresh_air);
|
btn_switch = findViewById(com.hdl.sdk.hdl_sdk.R.id.btn_switch);
|
btn_speed = findViewById(com.hdl.sdk.hdl_sdk.R.id.btn_speed);
|
btn_mode = findViewById(com.hdl.sdk.hdl_sdk.R.id.btn_mode);
|
|
proDialog = new ProgressDialog(this);
|
proDialog.setTitle("正在发送控制命令...");
|
proDialog.setMessage("请耐心等待");
|
proDialog.onStart();
|
}
|
|
private void initClickOnEvent() {
|
|
btn_switch.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
proDialog.show();
|
ctrlId = FreshAirParser.freshAirSwich;
|
//演示当前状态为关,设置为开。开,设置为关。
|
if (airSwitchState == 0) {
|
//新风开
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSwich, FreshAirParser.freshAirOn);
|
} else {
|
//新风关
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSwich, FreshAirParser.freshAirOff);
|
}
|
}
|
});
|
|
// 0 关,1低,2中,3高
|
btn_speed.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
proDialog.show();
|
ctrlId = FreshAirParser.freshAirSpeed;
|
switch (airSpeedState) {
|
case 0:
|
//若当前风速为关,则点击按钮设置为低速
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSpeed, FreshAirParser.freshAirSpeedLow);
|
break;
|
case 1:
|
//若当前风速为低速,则点击按钮设置为中速
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSpeed, FreshAirParser.freshAirSpeedMid);
|
break;
|
case 2:
|
//若当前风速为中速,则点击按钮设置为高速
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSpeed, FreshAirParser.freshAirSpeedHigh);
|
break;
|
case 3:
|
//若当前风速为高速,则点击按钮设置为关
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSpeed, FreshAirParser.freshAirSpeedOff);
|
break;
|
default:
|
//设置为关
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirSpeed, FreshAirParser.freshAirSpeedOff);
|
break;
|
|
|
}
|
}
|
});
|
|
|
// 0手动,1 自动,2 智能,3 定时
|
btn_mode.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
proDialog.show();
|
ctrlId = FreshAirParser.freshAirMode;
|
switch (airModeState) {
|
case 0:
|
//若当前模式为手动,则点击按钮设置为自动
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeAuto);
|
break;
|
case 1:
|
//若当前模式为自动,则点击按钮设置为智能
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeIntelligent);
|
break;
|
case 2:
|
//若当前模式智能,则点击按钮设置为定时
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeTiming);
|
break;
|
case 3:
|
//若当前模式定时,则点击按钮设置为手动
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeManual);
|
break;
|
default:
|
// 手动
|
HDLCommand.freshAirCtrl(appliancesInfo, FreshAirParser.freshAirMode, FreshAirParser.freshAirModeManual);
|
break;
|
|
}
|
|
|
}
|
});
|
|
|
}
|
|
/**
|
* mTextView 上显示当前状态
|
*/
|
private void showStateView() {
|
if (appliancesInfo.getFeedbackState() != null) {
|
String stringFAState = "";
|
// //方法1:
|
// byte[] freshAirCurState = appliancesInfo.getFeedbackState();
|
// for (int index = 0; index < freshAirCurState.length; index++) {
|
// if (index == 1 && (freshAirCurState[index] & 0xFF) == 0) {
|
// airSwitchState = 0;
|
// stringFAState += " 新风系统:关闭";
|
// //如果空调关闭状态,则无需再遍历
|
// break;
|
// }
|
// if (index == 1 && (freshAirCurState[index] & 0xFF) == 1) {
|
// airSwitchState = 1;
|
// stringFAState += " 新风系统:打开";
|
// }
|
//
|
// switch (index) {
|
// case 2:
|
// stringFAState += "\n" + getSpeedStateString(freshAirCurState[index] & 0xFF);
|
// case 3:
|
// //模式(0手动,1 自动,2 智能,3 定时)
|
// stringFAState += "\n" + getModeStateString(freshAirCurState[index] & 0xFF);
|
// default:
|
// break;
|
// }
|
// }
|
//方法2:
|
FreshAirBackInfo mFreshAirBackInfo = new FreshAirBackInfo(appliancesInfo);
|
if (mFreshAirBackInfo == null) {
|
stringFAState = "未获取到新风系统状态";
|
} else {
|
|
if (mFreshAirBackInfo.getIsOn() == 0) {
|
stringFAState = "新风系统:关闭";
|
} else if (mFreshAirBackInfo.getIsOn() == 1) {
|
stringFAState = "新风系统:打开";
|
stringFAState += "\n" + getSpeedStateString(mFreshAirBackInfo.getFreshAirSpeed());
|
stringFAState += "\n" + getModeStateString(mFreshAirBackInfo.getFreshAirMode());
|
} else {
|
stringFAState = "未知开关状态";
|
}
|
|
}
|
mTextView.setText(stringFAState);
|
} else {
|
mTextView.setText("未获取到新风设备状态");
|
}
|
|
}
|
|
@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);
|
}
|
}
|
|
@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;
|
}
|
}
|
}
|
|
|
/**
|
* getSwichStateString
|
*
|
* @param mState
|
* @return
|
*/
|
private String getSwichStateString(int mState) {
|
String mStrState = "未知";
|
airSwitchState = mState; //更新开关状态
|
|
switch (mState) {
|
case FreshAirParser.freshAirOn:
|
mStrState = "新风系统:打开";
|
break;
|
case FreshAirParser.freshAirOff:
|
mStrState = "新风系统:关闭";
|
break;
|
|
default:
|
mStrState = "未知状态";
|
break;
|
}
|
return mStrState;
|
}
|
|
/**
|
* getSpeedStateString
|
*
|
* @param mState
|
* @return
|
*/
|
private String getSpeedStateString(int mState) {
|
String mStrState = "未知";
|
airSpeedState = mState; //更新当前风速状态
|
switch (mState) {
|
case FreshAirParser.freshAirSpeedOff:
|
mStrState = "风速:关";
|
break;
|
case FreshAirParser.freshAirSpeedLow:
|
mStrState = "风速:低";
|
break;
|
case FreshAirParser.freshAirSpeedMid:
|
mStrState = "风速:中";
|
break;
|
case FreshAirParser.freshAirSpeedHigh:
|
mStrState = "风速:高";
|
break;
|
|
default:
|
mStrState = "未知风速状态";
|
break;
|
}
|
return mStrState;
|
}
|
|
/**
|
* getModeStateString
|
*
|
* @param mState
|
* @return
|
*/
|
private String getModeStateString(int mState) {
|
String mStrState = "未知";
|
airModeState = mState; //更新模式状态
|
switch (mState) {
|
case FreshAirParser.freshAirModeManual:
|
mStrState = "模式:手动";
|
break;
|
case FreshAirParser.freshAirModeAuto:
|
mStrState = "模式:自动";
|
break;
|
case FreshAirParser.freshAirModeIntelligent:
|
mStrState = "模式:智能";
|
break;
|
case FreshAirParser.freshAirModeTiming:
|
mStrState = "模式:定时";
|
break;
|
|
default:
|
mStrState = "未知模式状态";
|
break;
|
}
|
return mStrState;
|
}
|
}
|