package com.hdl.sdk.hdl_sdk.activity; import android.app.ProgressDialog; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import com.hdl.sdk.hdl_core.HDLAppliances.Config.HDLApConfig; import com.hdl.sdk.hdl_core.HDLAppliances.HDLGeothermal.GeothermalBackInfo; import com.hdl.sdk.hdl_core.HDLAppliances.HDLGeothermal.Parser.GeothermalParser; 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.EventCode; import com.hdl.sdk.hdl_core.HDLDeviceManger.EventBusEvent.GeothermalFeedBackEvent; 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; /** * 地热模块控制界面 */ public class GeothermalActivity extends BaseActivity { private Button btn_switch, btn_mode, btn_temp; private TextView mTextView; private EditText tempEditText; private AppliancesInfo appliancesInfo; private int gSwitchState;//Demo仅以此作为演示,实际请根据需求开发设计 private int gModeState; private int gTempState; 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(R.layout.activity_geothermal); initcurState(); initView(); initClickOnEvent(); showStateView(); //此方法为主动获取单一设备状态,逻辑模块、背景音乐模块没有这个api //目前仅支持灯光,窗帘,空调不发送获取状态命令只从SDK本地获取,传感器,地热模块,新风系统是发送获取状态命令从网络上获取。 HDLCommand.getDeviceState(appliancesInfo); } @Override protected void onDestroy() { super.onDestroy(); proDialog.dismiss(); HDLLog.I("onDestroy: GeothermalActivity"); } private void initcurState() { appliancesInfo = (AppliancesInfo) getIntent().getSerializableExtra("hdl"); } private void initView() { mTextView = findViewById(R.id.tv_geothermal); btn_switch = findViewById(R.id.btn_switch); btn_mode = findViewById(R.id.btn_mode); btn_temp = findViewById(R.id.btn_temp); tempEditText = findViewById(R.id.et_temp); 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 = GeothermalParser.gSwich; //演示当前状态为关,设置为开。开,设置为关。 if (gSwitchState == 0) { //地热开 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gSwich, GeothermalParser.gSwichOn); } else { //地热关 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gSwich, GeothermalParser.gSwichOff); } } }); // 0手动,1 自动,2 智能,3 定时 btn_mode.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { proDialog.show(); ctrlId = GeothermalParser.gMode; switch (gModeState) { case 1: //若当前模式为普通,则点击按钮设置为白天模式 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gMode, GeothermalParser.gModeDay); break; case 2: //若当前模式白天,则点击按钮设置为夜间模式 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gMode, GeothermalParser.gModeNight); break; case 3: //若当前模式夜间,则点击按钮设置为离开模式 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gMode, GeothermalParser.gModeLeave); break; case 4: //若当前模式离开,则点击按钮设置为自动模式 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gMode, GeothermalParser.gModeAuto); break; case 5: //若当前模式自动模式,则点击按钮设置为普通模式 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gMode, GeothermalParser.gModeNormal); break; default: // 普通模式 HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gMode, GeothermalParser.gModeNormal); break; } } }); btn_temp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String tempStr = tempEditText.getText().toString(); if (TextUtils.isEmpty(tempStr)) { showToast("设置的温度不能为空"); return; } int tempInt = Integer.parseInt(tempStr); if (tempInt < 16 || tempInt > 35) { showToast("温度设置范围为:16~35摄氏度(℃)"); return; } proDialog.show(); // HDLCommand.geothermalCtrlTemp(appliancesInfo, tempInt);//自动根据当前模式设置当前模式的温度。 switch (gModeState) { case 1: case 2: case 3: case 4: HDLCommand.geothermalCtrlTemp(appliancesInfo, tempInt);//自动根据当前模式设置当前模式的温度。 break; case 5: proDialog.dismiss(); //当前地热模式为自动 showToast("自动模式,不能控制温度"); break; default: proDialog.dismiss(); //当前地热模式为自动 showToast("未知模式,不能控制温度"); break; } // switch (gModeState) { // // case 1: // //当前地热模式为普通 // HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gNormalTemp, tempInt);//普通温度 // ctrlId = GeothermalParser.gNormalTemp; // break; // case 2: // //当前地热模式为白天 // HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gDayTemp, tempInt);//白天温度 // ctrlId = GeothermalParser.gDayTemp; // break; // case 3: // //当前地热模式为夜间 // HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gNightTemp, tempInt);//夜间温度 // ctrlId = GeothermalParser.gNightTemp; // break; // case 4: // //当前地热模式为离开 // HDLCommand.geothermalCtrl(appliancesInfo, GeothermalParser.gLeaveTemp, tempInt);//离开温度 // ctrlId = GeothermalParser.gLeaveTemp; // break; // case 5: // proDialog.dismiss(); // //当前地热模式为自动 // showToast("自动模式,不能控制温度"); // break; // default: // proDialog.dismiss(); // //当前地热模式为自动 // showToast("未知模式,不能控制温度"); // break; // // } } }); } private void showStateView() { if (appliancesInfo.getFeedbackState() != null) { GeothermalBackInfo mGeothermalBackInfo = new GeothermalBackInfo(appliancesInfo, false); String stringState = ""; if (mGeothermalBackInfo.getIsOn() == GeothermalParser.gSwichOff) { stringState = "地热模块:关闭"; } else if (mGeothermalBackInfo.getIsOn() == GeothermalParser.gSwichOn) { stringState = "地热模块:打开"; stringState += "\n" + getModeStateString(mGeothermalBackInfo.getgMode()); stringState += "\n普通模式温度:" + mGeothermalBackInfo.getgNormalTemp(); stringState += "\n白天模式温度:" + mGeothermalBackInfo.getgDayTemp(); stringState += "\n夜间模式温度:" + mGeothermalBackInfo.getgNightTemp(); stringState += "\n离开模式温度:" + mGeothermalBackInfo.getgLeaveTemp(); } else { stringState = "未知开关状态"; } mTextView.setText(stringState); } else { mTextView.setText("未获取到地热模块状态"); } } /** * getSwichStateString * * @param mState * @return */ private String getSwichStateString(int mState) { String mStrState = "未知"; gSwitchState = mState; //更新开关状态 switch (mState) { case GeothermalParser.gSwichOn: mStrState = "地热模块:打开"; break; case GeothermalParser.gSwichOff: mStrState = "地热模块:关闭"; break; default: mStrState = "未知状态"; break; } return mStrState; } /** * getModeStateString * * @param mState * @return */ private String getModeStateString(int mState) { String mStrState = "未知"; gModeState = mState; //更新模式状态 switch (mState) { case GeothermalParser.gModeNormal: mStrState = "模式:普通"; break; case GeothermalParser.gModeDay: mStrState = "模式:白天"; break; case GeothermalParser.gModeNight: mStrState = "模式:夜间"; break; case GeothermalParser.gModeLeave: mStrState = "模式:离开"; break; case GeothermalParser.gModeAuto: mStrState = "模式:自动"; break; default: mStrState = "未知模式状态"; break; } return mStrState; } @Subscribe(threadMode = ThreadMode.MAIN) public void onGeothermalFeedBackEventMain(GeothermalFeedBackEvent event) { proDialog.dismiss(); if (event.getGeothermalBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() && event.getGeothermalBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.getGeothermalBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum() ) { //先判断是否超时 if (event.getStatusID() == EventCode.FAILURE) { showToast("地热模块控制超时,请重新再试"); return; } if (event.getStatusID() == EventCode.DATAEMPTY) { showToast("地热模块,返回数据为空"); return; } GeothermalBackInfo mGeothermalBackInfo = event.getGeothermalBackInfo(); showGeothermalBackInfo(mGeothermalBackInfo); // String message = ""; // GeothermalBackInfo mGeothermalBackInfo = event.getGeothermalBackInfo(); // switch (ctrlId) { //ctrlId 当前控制类型,只反馈控制的状态 // case GeothermalParser.gSwich: // message = getSwichStateString(mGeothermalBackInfo.getIsOn()); // break; // case GeothermalParser.gMode: // message = getModeStateString(mGeothermalBackInfo.getgMode()); // break; // case GeothermalParser.gNormalTemp: //// gTempState = mGeothermalBackInfo.getgNormalTemp(); // message = "普通模式温度:" + mGeothermalBackInfo.getgNormalTemp(); // break; // // // case GeothermalParser.gDayTemp: // message = "白天模式温度:" + mGeothermalBackInfo.getgDayTemp(); // break; // case GeothermalParser.gNightTemp: // message = "夜间模式温度:" + mGeothermalBackInfo.getgNightTemp(); // break; // case GeothermalParser.gLeaveTemp: // message = "离开模式温度:" + mGeothermalBackInfo.getgLeaveTemp(); // break; // default: // break; // // } // // // 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_GEOTHERMAL_MODULE: if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) { if (!event.isSuccess()) { showToast("获取地热状态失败,请重新再试"); return; } String message = ""; GeothermalBackInfo mGeothermalBackInfo = new GeothermalBackInfo(event.appliancesInfo, false); if (mGeothermalBackInfo == null) { showToast("获取地热状态失败,请重新再试"); return; } showGeothermalBackInfo(mGeothermalBackInfo); } break; } } } /** * showGeothermalBackInfo * @param mGeothermalBackInfo */ private void showGeothermalBackInfo(GeothermalBackInfo mGeothermalBackInfo){ String message = ""; if(mGeothermalBackInfo.getIsOn() == GeothermalParser.gSwichOn) { message = getSwichStateString(mGeothermalBackInfo.getIsOn()); message += "\n" + getModeStateString(mGeothermalBackInfo.getgMode()); message += "\n" + "普通模式温度:" + mGeothermalBackInfo.getgNormalTemp(); message += "\n" + "白天模式温度:" + mGeothermalBackInfo.getgDayTemp(); message += "\n" + "夜间模式温度:" + mGeothermalBackInfo.getgNightTemp(); message += "\n" + "离开模式温度:" + mGeothermalBackInfo.getgLeaveTemp(); }else { message = getSwichStateString(mGeothermalBackInfo.getIsOn()); } mTextView.setText(message); showToast(message); HDLLog.I(message); } }