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.AirHVACBackInfo; 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.AirHVACFeedBackEvent; 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 * 空调类模块控制页面 * HVAC 类型空调模块 * 16~30摄氏度(℃) */ public class CtrlAirHVACActivity extends BaseActivity { private Button airBtnSwitch, airBtnMode, airBtnTemp, airBtnSpeed; private TextView airText; private EditText airTempEd; private AppliancesInfo appliancesInfo; private int airSwitchState;//Demo仅以此作为演示,实际请根据需求开发设计 private int airModeState; private int airTempState; private int airSpeedState; // /** // * 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_hvac); initToolbar(); initView(); initOnClick(); initcurState(); showStateView(); // if(appliancesInfo.getDeviceType() == HDLApConfig.TYPE_AC_HVAC) { // HDLCommand.getHVACDeviceStateFromNetwork(appliancesInfo); // } HDLCommand.getHVACDeviceStateFromNetwork(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(); } 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); } 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) { HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.downTem,1);//上升温度 范围0-5 return; // 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) { HDLCommand.airCtrl(appliancesInfo,AirCtrlParser.upTem,1);//上升温度 范围0-5 return; // 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 showStateView() { if (appliancesInfo.getArrCurState() != null) { AirHVACBackInfo mAirHVACBackInfo = new AirHVACBackInfo(appliancesInfo); String stringState = ""; if (mAirHVACBackInfo.getIsOn() == AirCtrlParser.airOff) { stringState = "HVAC空调模块:关闭"; } else if (mAirHVACBackInfo.getIsOn() == AirCtrlParser.airOn) { stringState = "HVAC空调模块:打开"; stringState += "\n" + getModeStateString(mAirHVACBackInfo.getAirMode());//模式 stringState += "\n" + getSpeedStateString(mAirHVACBackInfo.getAirSpeed());//风速 stringState += "\n室内温度:" + mAirHVACBackInfo.getIndoorTemp(); stringState += "\n制冷模式温度:" + mAirHVACBackInfo.getRefTemp(); stringState += "\n制热模式温度:" + mAirHVACBackInfo.getHeatTemp(); stringState += "\n自动模式温度:" + mAirHVACBackInfo.getAutoTemp(); stringState += "\n抽湿模式温度:" + mAirHVACBackInfo.getWettedTemp(); } else { stringState = "未知开关状态"; } airText.setText(stringState); } else { airText.setText("未获取到HVAC空调模块状态"); } } /** * getModeStateString * * @param mState * @return */ private String getModeStateString(int mState) { String mStrState = "未知"; airModeState = mState; //更新模式状态 switch (mState) { case AirCtrlParser.airModeRefTem: mStrState = "模式:制冷"; break; case AirCtrlParser.airModeHeatTem: mStrState = "模式:制热"; break; case AirCtrlParser.airModeVen: mStrState = "模式:通风"; break; case AirCtrlParser.airModeAuto: mStrState = "模式:自动"; break; case AirCtrlParser.airModeDehum: mStrState = "模式:抽湿"; break; default: mStrState = "未知模式状态"; break; } return mStrState; } /** * getSpeedStateString * * @param mState * @return */ private String getSpeedStateString(int mState) { String mStrState = "未知"; airSpeedState = mState; //更新当前风速状态 switch (mState) { case AirCtrlParser.airSpeedAuto: mStrState = "风速:自动"; break; case AirCtrlParser.airSpeedHigh: mStrState = "风速:高"; break; case AirCtrlParser.airSpeedMid: mStrState = "风速:中"; break; case AirCtrlParser.airSpeedLow: mStrState = "风速:低"; break; default: mStrState = "未知风速状态"; break; } return mStrState; } /** * getSwichStateString * * @param mState * @return */ private String getSwichStateString(int mState) { String mStrState = "未知"; airSwitchState = mState; //更新开关状态 switch (mState) { case AirCtrlParser.airOn: mStrState = "HVAC空调模块:打开"; break; case AirCtrlParser.airOff: mStrState = "HVAC空调模块:关闭"; break; default: mStrState = "未知状态"; break; } return mStrState; } 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.getIndoorTemp(); 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.I(message); } /** * 空调模块控制回调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); } } /** * 获取单一设备状态回调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; } } } }