package com.hdl.sdk.ttl_sdk.activity;
|
|
|
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;
|
import com.hdl.sdk.ttl_sdk.base.BaseActivity;
|
import com.hdl.sdk.ttl_sdk.utlis.HDLLog;
|
import com.hdl.sdk.ttl_sdk.utlis.HDLUtlis;
|
|
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.ThreadMode;
|
|
import java.math.BigDecimal;
|
|
/**
|
* Created by JLChen on 2019/7/4
|
* 窗帘类模块控制页面
|
*/
|
public class CtrlCurtainActivity extends BaseActivity {
|
/**
|
* Topbar
|
*/
|
private RelativeLayout topBarBack;
|
private TextView topBarTitle;
|
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
|
*
|
* @return true
|
*/
|
@Override
|
protected boolean isRegisterEventBus() {
|
return true;
|
}
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_ctrl_curtain);
|
initToolbar();
|
initView();
|
initOnClick();
|
initcurState();
|
displayStateView();
|
HDLCommand.getCurtainDeviceStateFromNetwork(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() {
|
curtainBtn = findViewById(R.id.curtainbtn);
|
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) {
|
//窗帘模块第二个参数 为CurtainCtrlParser.curtainOn,CurtainCtrlParser.curtainOff,CurtainCtrlParser.curtainPause其中一个
|
if (curtainState == CurtainCtrlParser.curtainOn) {
|
curtainState = CurtainCtrlParser.curtainOff;
|
} else {
|
curtainState = CurtainCtrlParser.curtainOn;
|
}
|
//窗帘模块用V1.0
|
HDLCommand.curtainCtrl(appliancesInfo, curtainState, 0);
|
|
}
|
});
|
|
curtainOpenBtn.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOn, 1);
|
}
|
});
|
|
curtainCloseBtn.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainOff, 1);
|
}
|
});
|
|
curtainStopBtn.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
HDLCommand.curtainCtrl(appliancesInfo, CurtainCtrlParser.curtainPause, 1);
|
}
|
});
|
|
curtainPrecentBtn.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
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
|
}
|
});
|
}
|
|
private void displayStateView() {
|
if (appliancesInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE) {
|
//窗帘模块
|
curText2.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 = "";
|
/**注意类型 curState保存本地再获取后后变成Double类型了*/
|
int curCurtainState = HDLUtlis.getIntegerByObject(appliancesInfo.getCurState());
|
|
HDLLog.Log("curCurtainState = " + curCurtainState);
|
switch (curCurtainState) {
|
case CurtainCtrlParser.TYPE_STATE_PAUSE:
|
stringCurtainState += "窗帘模块停止状态";
|
curtainState = CurtainCtrlParser.curtainOn;//初始化窗帘控制状态
|
break;
|
case CurtainCtrlParser.TYPE_STATE_OPEN:
|
stringCurtainState += "窗帘模块开状态";
|
curtainState = CurtainCtrlParser.curtainOff;//初始化窗帘控制状态
|
break;
|
case CurtainCtrlParser.TYPE_STATE_CLOSE:
|
stringCurtainState += "窗帘模块关状态";
|
curtainState = CurtainCtrlParser.curtainOn;//初始化窗帘控制状态
|
break;
|
default:
|
stringCurtainState = "未获取到窗帘模块状态";
|
curtainState = CurtainCtrlParser.curtainOff;//初始化窗帘控制状态
|
break;
|
}
|
curText1.setText(stringCurtainState);
|
curtainBtn.setText(stringCurtainState);
|
} else {
|
curText1.setText("未获取到窗帘模块状态");
|
curtainBtn.setText("未获取到窗帘模块状态");
|
}
|
|
} else if (appliancesInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_ROLLER
|
|| appliancesInfo.getDeviceType() == HDLApConfig.TYPE_CURTAIN_GLYSTRO) {
|
//开合帘、卷帘
|
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 {
|
curText2.setText("未获取到窗帘模块状态");
|
}
|
} else {
|
//设备类型不对结束页面
|
finish();
|
}
|
|
/**根据需求是否发送一次获取刷新状态请求*/
|
|
}
|
|
|
/**
|
* 窗帘模块控制回调Event
|
*
|
* @param event
|
*/
|
@Subscribe(threadMode = ThreadMode.MAIN)
|
public void onCurtainFeedBackInfoEventMain(CurtainFeedBackEvent event) {
|
// 先判断是否超时
|
if (event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceSubnetID() == appliancesInfo.getDeviceSubnetID()
|
&& event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceDeviceID() == appliancesInfo.getDeviceDeviceID()
|
&& event.getCurtainCtrlBackInfo().getNum() == appliancesInfo.getChannelNum()) {
|
|
if (!event.isSuccess()) {
|
showToast("窗帘控制超时,请重新再试");
|
return;
|
}
|
|
int curState = event.getCurtainCtrlBackInfo().getState();
|
int precent = 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);
|
if (event.getCurtainCtrlBackInfo().getAppliancesInfo().getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE) {
|
showMessage = "";
|
//判断是否为窗帘模块
|
switch (curState) {
|
case CurtainCtrlParser.curtainOff:
|
showMessage = "窗帘关";
|
curtainBtn.setText(showMessage);
|
curText1.setText(showMessage);
|
curtainState = curState;
|
HDLLog.Log("窗帘控制 :窗帘关" + " 回路号:" + num);
|
break;
|
case CurtainCtrlParser.curtainOn:
|
showMessage = "窗帘开";
|
curtainBtn.setText(showMessage);
|
curText1.setText(showMessage);
|
curtainState = curState;
|
HDLLog.Log("窗帘控制 :窗帘开" + " 回路号:" + num);
|
break;
|
case CurtainCtrlParser.curtainPause:
|
showMessage = "窗帘暂停";
|
curtainBtn.setText(showMessage);
|
curText1.setText(showMessage);
|
curtainState = curState;
|
HDLLog.Log("窗帘控制 :窗帘暂停" + " 回路号:" + num);
|
break;
|
}
|
showToast(showMessage);
|
} else {
|
//新协议,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;
|
}
|
}
|
}
|
|
/**
|
* 获取单一设备状态回调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_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("获取窗帘状态失败,请重新再试");
|
return;
|
}
|
showMessage = "";
|
//窗帘模块:curState:0=停止,1=打开,2=关闭。
|
//开合帘电机,卷帘电机:curState:1-100开合度。
|
int curState = HDLUtlis.getIntegerByObject(event.getAppliancesInfo().getCurState());
|
if (event.getAppliancesInfo().getDeviceType() == HDLApConfig.TYPE_CURTAIN_MODULE) {//判断是否为窗帘模块,否则为开合帘或卷帘电机
|
switch (curState) {
|
case CurtainCtrlParser.curtainOff:
|
showMessage = "窗帘关";
|
curtainBtn.setText(showMessage);
|
curText1.setText(showMessage);
|
curtainState = curState;
|
break;
|
case CurtainCtrlParser.curtainOn:
|
showMessage = "窗帘开";
|
curtainBtn.setText(showMessage);
|
curText1.setText(showMessage);
|
curtainState = curState;
|
break;
|
case CurtainCtrlParser.curtainPause:
|
showMessage = "窗帘暂停";
|
curtainBtn.setText(showMessage);
|
curText1.setText(showMessage);
|
curtainState = curState;
|
break;
|
}
|
} else {
|
showMessage = "窗帘开到" + curState + "%";
|
curText2.setText(showMessage);
|
curtainState = curState;
|
}
|
|
showToast("获取成功:" + showMessage);
|
}
|
break;
|
default:
|
break;
|
}
|
}
|
}
|
|
}
|