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