panlili2024
2024-09-19 071a8328823a2861f93ce556a4da3e4119cab1a3
app/src/main/java/com/hdl/sdk/ttl_sdk/activity/CtrlCurtainActivity.java
@@ -2,15 +2,20 @@
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.hdl.sdk.ttl.HDLAppliances.Config.HDLApConfig;
import com.hdl.sdk.ttl.HDLAppliances.HDLCurtain.Parser.CurtainCtrlParser;
import com.hdl.sdk.ttl.HDLDeviceManger.Bean.AppliancesInfo;
import com.hdl.sdk.ttl.HDLDeviceManger.Core.HDLCommand;
import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CurtainDeviceStateEvent;
import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.CurtainFeedBackEvent;
import com.hdl.sdk.ttl.HDLDeviceManger.EventBusEvent.DeviceStateEvent;
import com.hdl.sdk.ttl_sdk.R;
@@ -28,14 +33,18 @@
 * 窗帘类模块控制页面
 */
public class CtrlCurtainActivity extends BaseActivity {
    /**Topbar*/
    /**
     * Topbar
     */
    private RelativeLayout topBarBack;
    private TextView topBarTitle;
    private Button curtainBtn, curtainBtn2, curtainBtn3, curtainBtn4, curtainBtn5;
    private Button curtainBtn, curtainOpenBtn, curtainCloseBtn, curtainStopBtn, curtainPrecentBtn;
    private Button curtainUp, curtainDown;
    private TextView curText1, curText2;
    private AppliancesInfo appliancesInfo;
    private int curtainState;
    private String showMessage;
    private EditText etPrecent;
    /**
     * 复写isRegisterEventBus()  要注册使用EventBus,这里要设置返回true
@@ -82,15 +91,26 @@
    private void initView() {
        curtainBtn = findViewById(R.id.curtainbtn);
        curtainBtn2 = findViewById(R.id.curtainbtn2);
        curtainBtn3 = findViewById(R.id.curtainbtn3);
        curtainBtn4 = findViewById(R.id.curtainbtn4);
        curtainBtn5 = findViewById(R.id.curtainbtn5);
        curtainOpenBtn = findViewById(R.id.curtain_openbtn);
        curtainCloseBtn = findViewById(R.id.curtain_closebtn);
        curtainStopBtn = findViewById(R.id.curtain_stopbtn);
        curtainPrecentBtn = findViewById(R.id.curtain_precentbtn);
        curText1 = findViewById(R.id.curtainText1);
        curText2 = findViewById(R.id.curtainText2);
        curtainUp = findViewById(R.id.curtain_upbtn);
        curtainDown = findViewById(R.id.curtain_downbtn);
        etPrecent = findViewById(R.id.et_curtain_precent);
    }
    private void initOnClick() {
        /*type:
        0= HDL 窗帘控制版本V1.0(窗帘号<17 0 = 停止, 1 = 打开, 2 = 关闭
                              窗帘号>=17 0-100%,表示打开百分比)
        1=窗帘控制V1.1开关停
        2=窗帘控制V1.1百分比
        3=窗帘控制V1.1角度向上
        4=窗帘控制V1.1角度向下
        5=点动*/
        curtainBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
@@ -100,36 +120,56 @@
                } else {
                    curtainState = CurtainCtrlParser.curtainOn;
                }
                HDLCommand.curtainCtrl(appliancesInfo, curtainState);
                //窗帘模块用V1.0
                HDLCommand.curtainCtrl(appliancesInfo, curtainState, 0);
            }
        });
        curtainBtn2.setOnClickListener(new View.OnClickListener() {
        curtainOpenBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOn);
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOn, 1);
            }
        });
        curtainBtn3.setOnClickListener(new View.OnClickListener() {
        curtainCloseBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOff);
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOff, 1);
            }
        });
        curtainBtn4.setOnClickListener(new View.OnClickListener() {
        curtainStopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainPause);
                HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainPause, 1);
            }
        });
        curtainBtn5.setOnClickListener(new View.OnClickListener() {
        curtainPrecentBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, 50);
                if (TextUtils.isEmpty(etPrecent.getText().toString())) {
                    Toast.makeText(CtrlCurtainActivity.this, "请输入需要控制的窗帘百分比!", Toast.LENGTH_SHORT).show();
                    return;
                }
                HDLCommand.curtainCtrl(appliancesInfo, Integer.parseInt(etPrecent.getText().toString()), 2);//50为百分比
            }
        });
        curtainUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, 0, 5);//上点动0x00,state固定为0
            }
        });
        curtainDown.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                HDLCommand.curtainCtrl(appliancesInfo, 128, 5);//上点动0x80,state固定为128
            }
        });
    }
@@ -138,10 +178,12 @@
        if (appliancesInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE) {
            //窗帘模块
            curText2.setVisibility(View.GONE);
            curtainBtn2.setVisibility(View.GONE);
            curtainBtn3.setVisibility(View.GONE);
            curtainBtn4.setVisibility(View.GONE);
            curtainBtn5.setVisibility(View.GONE);
            curtainOpenBtn.setVisibility(View.GONE);
            curtainCloseBtn.setVisibility(View.GONE);
            curtainStopBtn.setVisibility(View.GONE);
            curtainPrecentBtn.setVisibility(View.GONE);
            curtainUp.setVisibility(View.GONE);
            curtainDown.setVisibility(View.GONE);
            if (appliancesInfo.getCurState() != null) {
                String stringCurtainState = "";
@@ -179,6 +221,17 @@
            //开合帘、卷帘
            curText1.setVisibility(View.GONE);
            curtainBtn.setVisibility(View.GONE);
            curtainUp.setVisibility(View.GONE);
            curtainDown.setVisibility(View.GONE);
            if (appliancesInfo.getCurState() != null) {
                curText2.setText("当前窗帘状态:" + HDLUtlis.getIntegerByObject(appliancesInfo.getCurState()));
            } else {
                curText2.setText("未获取到窗帘模块状态");
            }
        } else if (appliancesInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_SHANGRILA) {
            //香格里拉帘
            curText1.setVisibility(View.GONE);
            curtainBtn.setVisibility(View.GONE);
            if (appliancesInfo.getCurState() != null) {
                curText2.setText("当前窗帘状态:" + HDLUtlis.getIntegerByObject(appliancesInfo.getCurState()));
            } else {
@@ -202,11 +255,9 @@
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onCurtainFeedBackInfoEventMain(CurtainFeedBackEvent event) {
//        先判断是否超时
        HDLLog.Log("onCurtainFeedBackInfoEventMain in");
        if (event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getCurtainCtrlBackInfo().getNum() == appliancesInfo.getChannelNum()
        ) {
                && event.getCurtainCtrlBackInfo().getNum() == appliancesInfo.getChannelNum()) {
            if (!event.isSuccess()) {
                showToast("窗帘控制超时,请重新再试");
@@ -214,15 +265,15 @@
            }
            int curState = event.getCurtainCtrlBackInfo().getState();
            int precent = event.getCurtainCtrlBackInfo().getPrecent();
            //窗帘模块:curState:0=停止,1=打开,2=关闭。
            //开合帘电机,卷帘电机:curState:1-100开合度。也会返回0,1,2的状态
            //开合帘电机,卷帘电机,香格里拉帘:curState:1-100开合度。也会返回0,1,2的状态
            //                            precent:1-100开合度
            //建议开合帘电机,卷帘电机按停止后再读取当前状态来获取当前状态值
            String remarks = event.getCurtainCtrlBackInfo().getRemarks();
            String parentRemarks = event.getCurtainCtrlBackInfo().getParentRemarks();
            int num = event.getCurtainCtrlBackInfo().getNum();
//            showToast(parentRemarks+" 的 "+remarks+" 回路号:"+num+" 返回"+" 状态为:"+curState);
            HDLLog.Log(parentRemarks + " 的 " + remarks + " 回路号:" + num + " 返回" + " 状态为:" + curState);
            HDLLog.Log(remarks + " 回路号:" + num + " 返回" + " 状态为:" + curState);
            if (event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE) {
                showMessage = "";
                //判断是否为窗帘模块
@@ -251,14 +302,76 @@
                }
                showToast(showMessage);
            } else {
                //开合帘或卷帘 显示百分比
//                curtainBtn5.setText("窗帘开到" + curState + "%");
                curText2.setText("窗帘开到" + curState + "%");
                curtainState = curState;
                //新协议,type=2为百分比
                if (event.getCurtainCtrlBackInfo().getType() == 2) {
                    //开合帘或卷帘 显示百分比
                    curText2.setText("窗帘开到" + precent + "%");
                    curtainState = precent;
                } else if (event.getCurtainCtrlBackInfo().getType() == 0) {
                    //开合帘或卷帘 显示百分比
                    curText2.setText("窗帘开到" + curState + "%");
                    curtainState = curState;
                } else {
                    //开合帘或卷帘 显示百分比
                    curText2.setText("窗帘开到" + curState + "%");
                    curtainState = curState;
                }
            }
        }
    }
    /**
     * 窗帘新协议状态读取回调Event
     *
     * @param event
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onCurtainDeviceStateEventMain(CurtainDeviceStateEvent event) {
        if (event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
                && event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
                && event.getCurtainCtrlBackInfo().getAppliancesInfo().getChannelNum() == appliancesInfo.getChannelNum()) {
            if (!event.isSuccess()) {
                showToast("获取窗帘状态失败,请重新再试");
                return;
            }
            int curState = event.getCurtainCtrlBackInfo().getState();
            int curPrecent = event.getCurtainCtrlBackInfo().getPrecent();
            //窗帘模块:curState:0=停止,1=打开,2=关闭。
            //开合帘电机,卷帘电机,香格里拉帘:curState:1-100开合度。也会返回0,1,2的状态
            //                            precent:1-100开合度
            //建议开合帘电机,卷帘电机按停止后再读取当前状态来获取当前状态值
            String remarks = event.getCurtainCtrlBackInfo().getRemarks();
            int num = event.getCurtainCtrlBackInfo().getNum();
            HDLLog.Log(remarks + " 回路号:" + num + " 返回" + " 状态为:" + curState);
            switch (event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceType()) {
                case HDLApConfig.TYPE_CURTAIN_GLYSTRO:
                case HDLApConfig.TYPE_CURTAIN_ROLLER:
                case HDLApConfig.TYPE_CURTAIN_SHANGRILA:
                    if (event.getCurtainCtrlBackInfo().getType() == 2) {//新协议,type=2为百分比
                        //开合帘或卷帘 显示百分比
                        int precent = event.getCurtainCtrlBackInfo().getPrecent();
                        showMessage = "窗帘开到" + precent + "%";
                        curText2.setText(showMessage);
                        showToast("获取成功:" + showMessage);
                    } else if (event.getCurtainCtrlBackInfo().getType() == 0) {//旧协议,type=0为百分比
                        //开合帘或卷帘 显示百分比
                        int state = event.getCurtainCtrlBackInfo().getState();
                        showMessage = "窗帘开到" + state + "%";
                        curText2.setText(showMessage);
                        showToast("获取成功:" + showMessage);
                    }
                    break;
                default:
                    break;
            }
        }
    }
    /**
@@ -276,6 +389,7 @@
                case HDLApConfig.TYPE_CURTAIN_GLYSTRO:
                case HDLApConfig.TYPE_CURTAIN_ROLLER:
                case HDLApConfig.TYPE_CURTAIN_MODULE:
                case HDLApConfig.TYPE_CURTAIN_SHANGRILA:
                    if (appliancesInfo.getChannelNum() == event.getAppliancesInfo().getChannelNum()) {
                        if (!event.isSuccess()) {
                            showToast("获取窗帘状态失败,请重新再试");
@@ -308,7 +422,7 @@
                            }
                        } else {
                            showMessage = "窗帘开到" + curState + "%";
//                            curtainBtn5.setText(showMessage);
                            curText2.setText(showMessage);
                            curtainState = curState;
                        }
@@ -316,7 +430,6 @@
                    }
                    break;
                default:
                    //不处理
                    break;
            }
        }