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; } }