package com.hdl.sdk.ttl_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.ttl.HDLAppliances.Config.HDLApConfig; import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.AirTechSysBackInfo; import com.hdl.sdk.ttl.HDLAppliances.HDLAirCondition.Parser.AirCtrlParser; import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo; import com.hdl.sdk.ttl.HDLDeviceManger.Core.HDLCommand; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.AirTechSysFeedBackEvent; import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DeviceStateEvent; import com.hdl.sdk.ttl_sdk.R; import com.hdl.sdk.ttl_sdk.base.BaseActivity; import com.hdl.sdk.ttl_sdk.utlis.HDLLog; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; /** * Created by panlili on 2024/5/28 * KNX科技希桐控制页面 * 科技系统 小类101 * 5~35摄氏度(℃) */ public class CtrlAirKNXTechSysActivity extends BaseActivity { /** * Topbar */ private RelativeLayout topBarBack; private TextView topBarTitle; private Button airBtnSwitch, airBtnMode, airBtnTemp; private TextView airText, airHumidity; private EditText airTempEd; private AppliancesInfo appliancesInfo; private int airSwitchState;//Demo仅以此作为演示,实际请根据需求开发设计 private int airModeState; private int airTempState; /** * 复写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_knxtechnology_system); initToolbar(); initView(); initOnClick(); initcurState(); showStateView(); HDLCommand.getTechSysDeviceStateFromNetwork(appliancesInfo); HDLCommand.getTechSysDeviceHumidityFromNetwork(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 initView() { airBtnSwitch = findViewById(R.id.airbtn_switch); airBtnMode = findViewById(R.id.airbtn_mode); airBtnTemp = findViewById(R.id.airbtn_tempBtn); airTempEd = findViewById(R.id.airet_tempet); airText = findViewById(R.id.airText); airHumidity = findViewById(R.id.airText_humidity); } 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.airModeRefTem);//空调模式制冷 break; } } }); airBtnTemp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String tempStr = airTempEd.getText().toString(); if (TextUtils.isEmpty(tempStr)) { showToast("设置的温度不能为空"); return; } //2024.5.30修改,温度修改为浮点型 Float temp = Float.parseFloat(tempStr); if (temp < 5 || temp > 35) { showToast("温度设置范围为:5~35摄氏度(℃)"); return; } switch (airModeState) { case 0: //当前空调模式为制冷 HDLCommand.airCtrlTemp(appliancesInfo, AirCtrlParser.refTem, temp);//制冷温度,2024.5.30修改,温度控制调用airCtrlTemp方法 break; case 1: //当前空调模式为制热 HDLCommand.airCtrlTemp(appliancesInfo, AirCtrlParser.heatTem, temp);//制热温度,2024.5.30修改,温度控制调用airCtrlTemp方法 break; } } }); } private void showStateView() { if (appliancesInfo.getArrCurState() != null) { AirTechSysBackInfo mAirTechSysBackInfo = new AirTechSysBackInfo(appliancesInfo); String stringState = ""; if (mAirTechSysBackInfo.getIsOn() == AirCtrlParser.airOff) { stringState = "KNX科技系统模块:关闭"; } else if (mAirTechSysBackInfo.getIsOn() == AirCtrlParser.airOn) { stringState = "KNX科技系统模块:打开"; stringState += "\n" + getModeStateString(mAirTechSysBackInfo.getAirMode());//模式 stringState += "\n室内温度:" + mAirTechSysBackInfo.getIndoorTemp(); if (AirCtrlParser.airModeRefTem == mAirTechSysBackInfo.getAirMode()) { stringState += "\n制冷模式温度:" + mAirTechSysBackInfo.getColdTemp();//2024.5.30更新 } else if (AirCtrlParser.airModeHeatTem == mAirTechSysBackInfo.getAirMode()) { stringState += "\n制热模式温度:" + mAirTechSysBackInfo.getHotTemp();//2024.5.30更新 } if (!TextUtils.isEmpty(mAirTechSysBackInfo.getSetTemp())){//2024.5.30更新 stringState += "\n设置温度:" + mAirTechSysBackInfo.getSetTemp(); } } else { stringState = "未知开关状态"; } airText.setText(stringState); } else { airText.setText("未获取到KNX科技系统模块状态"); } } /** * 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; default: mStrState = "未知模式状态"; break; } return mStrState; } /** * getSwichStateString * * @param mState * @return */ private String getSwichStateString(int mState) { String mStrState = "未知"; airSwitchState = mState; //更新开关状态 switch (mState) { case AirCtrlParser.airOn: mStrState = "KNX科技系统模块:打开"; break; case AirCtrlParser.airOff: mStrState = "KNX科技系统模块:关闭"; break; default: mStrState = "未知状态"; break; } return mStrState; } private void showAirTechSysBackInfo(AirTechSysBackInfo mAirTechSysBackInfo) { String message = ""; if (mAirTechSysBackInfo.getIsOn() == AirCtrlParser.airOn) { message = getSwichStateString(mAirTechSysBackInfo.getIsOn()); message += "\n" + getModeStateString(mAirTechSysBackInfo.getAirMode());//模式 message += "\n室内温度:" + mAirTechSysBackInfo.getIndoorTemp(); if (AirCtrlParser.airModeRefTem == mAirTechSysBackInfo.getAirMode()) { message += "\n制冷模式温度:" + mAirTechSysBackInfo.getColdTemp();//2024.5.30更新 } else if (AirCtrlParser.airModeHeatTem == mAirTechSysBackInfo.getAirMode()) { message += "\n制热模式温度:" + mAirTechSysBackInfo.getHotTemp();//2024.5.30更新 } if (!TextUtils.isEmpty(mAirTechSysBackInfo.getSetTemp())){//2024.5.30更新 message += "\n设置温度:" + mAirTechSysBackInfo.getSetTemp(); } } else { message = getSwichStateString(mAirTechSysBackInfo.getIsOn()); } airText.setText(message); // showToast(message); HDLLog.Log(message); HDLLog.Log("室内湿度:" + mAirTechSysBackInfo.getIndoorHumidity()); } /** * 科技系统模块控制回调Event * * @param event */ @Subscribe(threadMode = ThreadMode.MAIN) public void onAirTechSysFeedBackEventMain(AirTechSysFeedBackEvent event) { if (event.getAirTechSysBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID() && event.getAirTechSysBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID() && event.getAirTechSysBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum() ) { // 先判断是否超时 if (!event.isSuccess()) { showToast("KNX科技系统控制超时,请重新再试"); return; } AirTechSysBackInfo mAirTechSysBackInfo = event.getAirTechSysBackInfo(); showAirTechSysBackInfo(mAirTechSysBackInfo); if (!TextUtils.isEmpty(mAirTechSysBackInfo.getIndoorHumidity())) { airHumidity.setText("室内湿度:" + mAirTechSysBackInfo.getIndoorHumidity()); } } } /** * 获取单一设备状态回调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_KNXTECHSYS: if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) { if (!event.isSuccess()) { showToast("获取科技系统状态失败,请重新再试"); return; } AirTechSysBackInfo mAirTechSysBackInfo = new AirTechSysBackInfo(event.getAppliancesInfo()); if (mAirTechSysBackInfo == null) { showToast("获取科技状态失败,请重新再试"); return; } showAirTechSysBackInfo(mAirTechSysBackInfo); } break; default: //不处理 break; } } } }