package com.hdl.sdk.hdl_sdk.activity;
|
|
|
import android.os.Bundle;
|
import android.text.TextUtils;
|
import android.view.View;
|
import android.widget.Button;
|
import android.widget.EditText;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
|
|
import com.hdl.sdk.hdl_core.HDLAppliances.Config.HDLApConfig;
|
import com.hdl.sdk.hdl_core.HDLAppliances.HDLAirCondition.Parser.AirCtrlParser;
|
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.AirFeedBackEvent;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
|
import com.hdl.sdk.hdl_sdk.R;
|
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;
|
|
|
/**
|
* Created by JLChen on 2019/7/4
|
* 空调类模块控制页面
|
* PANEL 类型空调模块
|
* 16~30摄氏度(℃)
|
*/
|
public class CtrlAirActivity extends BaseActivity {
|
// /**Topbar*/
|
// private RelativeLayout topBarBack;
|
// private TextView topBarTitle;
|
|
private Button airBtnSwitch, airBtnMode, airBtnTemp, airBtnSpeed;
|
private TextView airText;
|
private TextView tv_switch, tv_mode, tv_speed, tv_tempet, tv_indoorTempet;
|
private EditText airTempEd;
|
private AppliancesInfo appliancesInfo;
|
|
|
private int airSwitchState;//Demo仅以此作为演示,实际请根据需求开发设计
|
private int airModeState;
|
private int airTempState;
|
private int airSpeedState;
|
private int indoorTemp;
|
// /**
|
// * true为设置摄氏度 false为设置华氏度
|
// * 参数范围 16~30摄氏度(℃)
|
// * ~86华氏度(℉)
|
// */
|
// private boolean bCelsius = true;
|
|
/**
|
* 复写isRegisterEventBus() 要注册使用EventBus,这里要设置返回true
|
*
|
* @return true
|
*/
|
@Override
|
protected boolean isRegisterEventBus() {
|
return true;
|
}
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_ctrl_air);
|
initToolbar();
|
initView();
|
initOnClick();
|
initcurState();
|
displayStateView();
|
|
// if(appliancesInfo.getDeviceType() == HDLApConfig.TYPE_AC_HVAC) {
|
// HDLCommand.getHVACDeviceStateFromNetwork(appliancesInfo);
|
// }
|
// //从本地获取空调面板状态
|
// HDLCommand.getDeviceStateFromLocal(appliancesInfo);
|
}
|
|
|
|
/**
|
* 初始化Toolbar
|
*/
|
private void initToolbar() {
|
// topBarBack = findViewById(R.id.ll_top_b_left);
|
// setViewVisible(topBarBack);
|
// topBarTitle = findViewById(R.id.tv_top_b_header_title);
|
// topBarBack.setOnClickListener(new View.OnClickListener() {
|
// @Override
|
// public void onClick(View view) {
|
// finish();
|
// }
|
// });
|
}
|
|
private void initcurState() {
|
appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl");
|
String titleStr = appliancesInfo.getRemarks();
|
// topBarTitle.setText(titleStr);
|
}
|
|
private void displayStateView(){
|
switch (appliancesInfo.getDeviceType()) {
|
case HDLApConfig.TYPE_AC_HVAC:
|
HDLCommand.getHVACDeviceStateFromNetwork(appliancesInfo);
|
break;
|
case HDLApConfig.TYPE_AC_PANEL:
|
loadDeviceData();
|
break;
|
default:
|
finish();//设备类型不对结束页面
|
break;
|
}
|
/**根据需求是否发送一次获取刷新状态请求*/
|
}
|
|
private void initView() {
|
airBtnSwitch = findViewById(R.id.airbtn_switch);
|
airBtnMode = findViewById(R.id.airbtn_mode);
|
airBtnSpeed = findViewById(R.id.airbtn_speed);
|
airBtnTemp = findViewById(R.id.airbtn_tempBtn);
|
airTempEd = findViewById(R.id.airet_tempet);
|
airText = findViewById(R.id.airText);
|
|
tv_switch = findViewById(R.id.tv_switch);
|
tv_mode = findViewById(R.id.tv_mode);
|
tv_speed = findViewById(R.id.tv_speed);
|
tv_tempet = findViewById(R.id.tv_tempet);
|
|
tv_indoorTempet = findViewById(R.id.tv_indoorTempet);
|
}
|
|
private void initOnClick() {
|
airBtnSwitch.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
//演示当前状态为关,设置为开。开,设置为关。
|
if (airSwitchState == 0) {
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOn);//空调开
|
} else {
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSwich, AirCtrlParser.airOff);//空调关
|
}
|
}
|
});
|
|
|
airBtnMode.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
switch (airModeState) {
|
case 0:
|
//若当前空调模式为制冷,则点击按钮设置为制热
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeHeatTem);//空调模式制热
|
break;
|
case 1:
|
//若当前空调模式为制热,则点击按钮设置为通风
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeVen);//空调模式通风
|
break;
|
case 2:
|
//若当前空调模式为通风,则点击按钮设置为自动
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeAuto);//空调模式自动
|
break;
|
case 3:
|
//若当前空调模式为自动,则点击按钮设置为抽湿
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeDehum);//空调模式抽湿
|
break;
|
case 4:
|
//若当前空调模式为抽湿,则点击按钮设置为制冷
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeRefTem);//空调模式制冷
|
break;
|
default:
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airMode, AirCtrlParser.airModeRefTem);//空调模式制冷
|
break;
|
|
}
|
|
|
}
|
});
|
|
airBtnSpeed.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
switch (airSpeedState) {
|
case 0:
|
//若当前空调风速为自动,则点击按钮设置为高风
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedHigh);//风速高风
|
break;
|
case 1:
|
//若当前空调风速为高风,则点击按钮设置为中风
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedMid);//风速中风
|
break;
|
case 2:
|
//若当前空调风速为中风,则点击按钮设置为低风
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedLow);//风速低风
|
break;
|
case 3:
|
//若当前空调风速为低风,则点击按钮设置为自动
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.airSpeed, AirCtrlParser.airSpeedAuto);//风速自动
|
break;
|
|
|
}
|
}
|
});
|
|
airBtnTemp.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
String tempStr = airTempEd.getText().toString();
|
if (TextUtils.isEmpty(tempStr)) {
|
showToast("设置的温度不能为空");
|
return;
|
}
|
int tempInt = Integer.parseInt(tempStr);
|
|
if (tempInt < 16 || tempInt > 30) {
|
showToast("温度设置范围为:16~30摄氏度(℃)");
|
return;
|
}
|
|
switch (airModeState) {
|
case 0:
|
//当前空调模式为制冷
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.refTem, tempInt);//制冷温度
|
break;
|
case 1:
|
//当前空调模式为制热
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.heatTem, tempInt);//制热温度
|
break;
|
case 2:
|
//当前空调模式为通风
|
showToast("通风模式不能控制温度");
|
break;
|
case 3:
|
//当前空调模式为自动
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.autoTem, tempInt);//自动温度 范围16-30
|
break;
|
case 4:
|
//当前空调模式为抽湿
|
HDLCommand.airCtrl(appliancesInfo, AirCtrlParser.dehumTem, tempInt);//抽湿温度 范围16-30
|
break;
|
default:
|
break;
|
|
}
|
|
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.upTem,1);//上升温度 范围0-5
|
// HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.downTem,1);//下降温度 范围0-5
|
}
|
});
|
|
|
}
|
|
|
private void loadDeviceData() {
|
if (appliancesInfo.getArrCurState() != null) {
|
String stringACState = "";
|
byte[] acCurState = appliancesInfo.getArrCurState();
|
for (int index = 0; index < acCurState.length; index++) {
|
if (index == 0 && acCurState[index] == 0) {
|
airSwitchState = 0;
|
stringACState += "空调已关闭";
|
//如果空调关闭状态,则无需再遍历
|
break;
|
}
|
if (index == 0 && acCurState[index] == 1) {
|
airSwitchState = 1;
|
stringACState += "空调正在运行";
|
}
|
|
switch (index) {
|
|
case 1:
|
switch (acCurState[index]) {
|
case 0:
|
airModeState = 0;
|
stringACState += " 空调模式:制冷";
|
break;
|
case 1:
|
airModeState = 1;
|
stringACState += " 空调模式:制热";
|
break;
|
case 2:
|
airModeState = 2;
|
stringACState += " 空调模式:通风";
|
break;
|
case 3:
|
airModeState = 3;
|
stringACState += " 空调模式:自动";
|
break;
|
case 4:
|
airModeState = 4;
|
stringACState += " 空调模式:抽湿";
|
break;
|
default:
|
airModeState = -1;
|
stringACState += " 未知空调模式";
|
break;
|
}
|
break;
|
case 2:
|
switch (acCurState[1]) {
|
case 0:
|
airTempState = acCurState[index] & 0xff;
|
stringACState += " 制冷温度:" + (acCurState[index] & 0xff);
|
break;
|
case 1:
|
airTempState = acCurState[index] & 0xff;
|
stringACState += " 制热温度:" + (acCurState[index] & 0xff);
|
break;
|
case 2:
|
airTempState = -1;
|
stringACState += " 通风无温度显示";
|
break;
|
case 3:
|
airTempState = acCurState[index] & 0xff;
|
stringACState += " 自动温度:" + (acCurState[index] & 0xff);
|
break;
|
case 4:
|
airTempState = acCurState[index] & 0xff;
|
stringACState += " 抽湿温度:" + (acCurState[index] & 0xff);
|
break;
|
default:
|
airTempState = -2;
|
stringACState += " 未知温度";
|
break;
|
}
|
break;
|
case 3:
|
String curSpeed;
|
switch (appliancesInfo.getArrCurState()[index]) {
|
case 0:
|
airSpeedState = 0;
|
curSpeed = " 风速自动";
|
break;
|
case 1:
|
airSpeedState = 1;
|
curSpeed = " 风速高";
|
break;
|
case 2:
|
airSpeedState = 2;
|
curSpeed = " 风速中";
|
break;
|
case 3:
|
airSpeedState = 3;
|
curSpeed = " 风速低";
|
break;
|
default:
|
airSpeedState = -1;
|
curSpeed = " 未知风速";
|
break;
|
}
|
switch (appliancesInfo.getArrCurState()[1]) {
|
case 0:
|
stringACState += curSpeed;
|
break;
|
case 1:
|
stringACState += curSpeed;
|
break;
|
case 2:
|
stringACState += curSpeed;
|
break;
|
case 3:
|
stringACState += curSpeed;
|
break;
|
case 4:
|
stringACState += " 抽湿无风速";
|
break;
|
default:
|
stringACState += " 未知空调模式";
|
break;
|
}
|
break;
|
|
default:
|
break;
|
}
|
}
|
|
airText.setText(stringACState);
|
} else {
|
airText.setText("未获取到空调设备状态");
|
}
|
|
}
|
|
/**
|
* 空调模块控制回调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;
|
}
|
String mes = "";
|
byte[] curState = event.getAirCtrlBackInfo().getCurState();
|
readAirState(curState);
|
}
|
}
|
|
/**
|
* 获取单一设备状态回调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();
|
readAirState(curState);
|
|
}
|
break;
|
default:
|
//不处理
|
break;
|
}
|
}
|
}
|
|
private void readAirState( byte[] curState ){
|
HDLLog.I("readAirState 模式:"+ (curState[0] & 0xFF) + "状态:" +(curState[1] & 0xFF));
|
|
String mes = "";
|
switch (curState[0] & 0xFF) {
|
case AirCtrlParser.airSwich:
|
switch (curState[1] & 0xFF) {
|
case AirCtrlParser.airOff:
|
airSwitchState = 0;
|
|
tv_switch.setText("关");
|
|
mes = "空调关";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.airOn:
|
airSwitchState = 1;
|
// airText.setText("空调开");
|
// showToast("空调开");
|
// HDLLog.I("空调开");
|
tv_switch.setText("开");
|
|
mes = "空调开";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
default:
|
break;
|
}
|
|
break;
|
|
case AirCtrlParser.airSpeed:
|
switch (curState[1] & 0xFF) {
|
case AirCtrlParser.airSpeedAuto:
|
airSpeedState = 0;
|
tv_speed.setText("自动");
|
|
mes = "自动风速";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
|
break;
|
case AirCtrlParser.airSpeedHigh:
|
airSpeedState = 1;
|
|
tv_speed.setText("高速");
|
mes = "风速高";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.airSpeedMid:
|
airSpeedState = 2;
|
tv_speed.setText("中速");
|
mes = "风速中";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
|
break;
|
case AirCtrlParser.airSpeedLow:
|
airSpeedState = 3;
|
|
tv_speed.setText("低速");
|
mes = "风速低";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
|
break;
|
default:
|
break;
|
}
|
break;
|
case AirCtrlParser.airMode:
|
switch (curState[1] & 0xFF) {
|
case AirCtrlParser.airModeRefTem:
|
airModeState = 0;
|
|
tv_mode.setText("制冷");
|
|
mes = "模式为:制冷";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
|
break;
|
case AirCtrlParser.airModeHeatTem:
|
airModeState = 1;
|
tv_mode.setText("制热");
|
|
mes = "模式为:制热";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.airModeVen:
|
airModeState = 2;
|
tv_mode.setText("通风");
|
|
mes = "模式为:通风";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.airModeAuto:
|
airModeState = 3;
|
tv_mode.setText("自动");
|
|
mes = "模式为:自动";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.airModeDehum:
|
airModeState = 4;
|
tv_mode.setText("抽湿");
|
|
mes = "模式为:抽湿";
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
default:
|
airModeState = -1;
|
break;
|
}
|
break;
|
case AirCtrlParser.refTem:
|
airTempState = curState[1] & 0xFF;
|
|
tv_tempet.setText("" + airTempState);
|
mes = "空调制冷,温度为:" + (airTempState);
|
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
|
break;
|
case AirCtrlParser.heatTem:
|
airTempState = curState[1] & 0xFF;
|
tv_tempet.setText("" + airTempState);
|
mes = "空调制热,制热温度为:" + (airTempState);
|
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
|
break;
|
case AirCtrlParser.autoTem:
|
airTempState = curState[1] & 0xFF;
|
|
tv_tempet.setText(""+airTempState);
|
mes = "空调自动,自动温度为:" + (airTempState);
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.dehumTem:
|
airTempState = curState[1] & 0xFF;
|
|
tv_tempet.setText("" + airTempState);
|
mes = "空调抽湿,抽湿温度为:" + (airTempState);
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.upTem:
|
airTempState = curState[1] & 0xFF;
|
|
tv_tempet.setText("" + airTempState);
|
mes = "空调调温,上升温度:" + (airTempState);
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.downTem:
|
airTempState = curState[1] & 0xFF;
|
tv_tempet.setText("" + airTempState);
|
mes = "空调调温,下降温度:" + (airTempState);
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
case AirCtrlParser.airIndoorTemp:
|
indoorTemp = curState[1] & 0xFF;
|
tv_indoorTempet.setText("" + indoorTemp);
|
mes = "当前室内温度:" + (indoorTemp);
|
tv_mesSetText(mes);
|
HDLLog.I(mes);
|
break;
|
}
|
|
}
|
|
|
|
|
/**
|
* TextView 显示信息并且showToast提示
|
*
|
* @param mes
|
*/
|
private void tv_mesSetText(String mes) {
|
airText.setText(mes);
|
showToast(mes);
|
}
|
}
|