package com.hdl.sdk.hdl_core.HDLDeviceManger.Core;
|
|
import android.util.Log;
|
|
import com.google.gson.Gson;
|
import com.hdl.sdk.hdl_core.Config.ZigbeeDeviceID;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.CommonErrorBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.ZigbeeDeviceListBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.ZigbeeDeviceSaveBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.ZigbeeSceneListBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.gatewaybeans.GatewayCommondBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.gatewaybeans.GatewayCurtainBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.gatewaybeans.StatusReadBackBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.gatewaybeans.StatusThermostatReadBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeCtrlBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeDimmableCtrlBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeReadBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeReportBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeSceneCtrlBackBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeSceneCtrlBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeThermostatCtrlBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.ZigbeeBean.mqttbeans.ZigbeeWriteCtrlBean;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Callback.StateEvent;
|
import com.hdl.sdk.hdl_core.HDLDeviceManger.Callback.StateListener;
|
import com.hdl.sdk.hdl_core.Util.LogUtil.HDLLog;
|
import com.hdl.sdk.hdl_core.Util.TransformUtil.JsonUtil;
|
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Timer;
|
import java.util.TimerTask;
|
|
|
public class HDLCommandText {
|
private static List<ZigbeeDeviceListBean> zigbeeDeviceListBeans;//设备列表
|
private static ZigbeeSceneListBean zigbeeSceneListBean;//场景列表
|
private static StatusThermostatReadBean thermostatReadBackBean = new StatusThermostatReadBean();//恒温器状态返回
|
private static StateListener stateListener;//设备状态回调
|
private static boolean isFinished = false;//标记回调和场景设备数据
|
public static Timer timer = null;//设置设备和场景回调
|
private static String ipAddr;//设定控制时的ip地址
|
private static boolean is1 = false, is2 = false;//标记获取的温度和风扇强度
|
private static int airTag = 0;//标记传进来控制空调的是什么方式(开关、模式、风速、设定温度)
|
private static int airMode = 1;//标注更改温度时,控制的模式
|
private static int scenesId = 0;//发场景时传入,方便收场景
|
|
|
public static void setStateListener(StateListener newStateListener) {
|
stateListener = newStateListener;
|
}
|
|
public void setIpAddr(String ipAddr) {
|
this.ipAddr = ipAddr;
|
}
|
|
public static void initData() {
|
zigbeeDeviceListBeans = new ArrayList<>();//搜索或控制时候需初始化
|
}
|
|
public interface DataCallBack {
|
void onSuccess(List<ZigbeeDeviceListBean> zigbeeDeviceListBeans, ZigbeeSceneListBean zigbeeSceneListBeans);
|
}
|
|
//处理接收的数据
|
public static void handleDeviceInfoReportData(String topic, String message) {
|
// 过滤是否有网关id与topic
|
String[] arrTopic = topic.split("/");
|
String gatewayId = arrTopic[0];
|
String topicString = arrTopic[1];
|
//所有信息获取完处理
|
//选择网关的话要在判断中加)
|
|
if (topic.contains("Scene/GetInfo_Respon")) {
|
//处理搜索到的场景
|
handleSceneList(message);
|
}
|
|
if (topic.contains("DeviceInfoRespon")) {
|
//处理获取到的设备
|
handleDeviceList(message);
|
}
|
|
if (topic.contains("Scene/Open_Respon")) {
|
//返回场景被执行
|
reportSceneStatus(message);
|
return;
|
}
|
|
if (topic.contains("DeviceInfoResponEnd") &&
|
zigbeeDeviceListBeans.get(0).getData().getGwId().equals(gatewayId)) {
|
Log.d("11113", "程序接受完进来处理: ");
|
isFinished = true;
|
}
|
|
if (!(topicString.equalsIgnoreCase("DeviceStatusReport"))) {
|
HDLLog.info("不处理的topic:" + topicString);
|
return;
|
}
|
|
ZigbeeReportBean zigbeeReportBean = JsonUtil.parseJsonWithGson(message, ZigbeeReportBean.class);
|
int cluterId = zigbeeReportBean.getData().getCluterID();
|
if (!(cluterId == 6 || cluterId == 8 || cluterId == 258 || cluterId == 513 || cluterId == 514)) {
|
HDLLog.info("不处理的cluterId:" + cluterId);
|
return;
|
}
|
int deviceID = zigbeeReportBean.getDevice_ID();
|
switch (deviceID) {
|
case ZigbeeDeviceID.OnOffOutput:
|
//灯光设备
|
StatusReadBackBean lightReadBackBean = new StatusReadBackBean();
|
for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData()
|
.getAttriBute()) {
|
if (attriButeBean.getAttriButeId() == 0) {
|
lightReadBackBean.setValue(attriButeBean.getAttriButeData());
|
}
|
}
|
String lightReadBackJson = JsonUtil.toJson(lightReadBackBean);
|
if (stateListener != null) {
|
StateEvent event = new StateEvent(lightReadBackJson);
|
stateListener.onData(event);
|
}
|
break;
|
case ZigbeeDeviceID.WindowCoveringDevice:
|
//窗帘设备
|
StatusReadBackBean curtainReadBackBean = new StatusReadBackBean();
|
for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData()
|
.getAttriBute()) {
|
if (attriButeBean.getAttriButeId() == 8) {
|
curtainReadBackBean.setValue(attriButeBean.getAttriButeData());
|
}
|
}
|
String curtainReadBackJson = JsonUtil.toJson(curtainReadBackBean);
|
if (stateListener != null) {
|
StateEvent event = new StateEvent(curtainReadBackJson);
|
stateListener.onData(event);
|
}
|
break;
|
case ZigbeeDeviceID.DimmableLight:
|
//调光器设备
|
StatusReadBackBean dimmableLightReadBackBean = new StatusReadBackBean();
|
for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData()
|
.getAttriBute()) {
|
if (attriButeBean.getAttriButeId() == 0 && cluterId == 8) {
|
Log.d("2222", "调光器数据: " + attriButeBean.getAttriButeData());
|
dimmableLightReadBackBean.setValue((int) (attriButeBean.getAttriButeData() / 2.55));
|
}
|
}
|
String dimmableLightReadBackJson = JsonUtil.toJson(dimmableLightReadBackBean);
|
if (stateListener != null) {
|
StateEvent event = new StateEvent(dimmableLightReadBackJson);
|
stateListener.onData(event);
|
}
|
break;
|
case ZigbeeDeviceID.Thermostat:
|
//空调设备
|
for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData().getAttriBute()) {
|
|
if (attriButeBean.getAttriButeId() == 28 && attriButeBean.getAttriButeDataType() == 48) {
|
//当前的空调模式
|
int thermostatmode = attriButeBean.getAttriButeData();
|
thermostatReadBackBean.setThermostatmode(thermostatmode);
|
is1 = true;
|
}
|
|
if (attriButeBean.getAttriButeId() == 0 && attriButeBean.getAttriButeDataType() == 0x30) {
|
//当前的新风模式
|
int fanmode = attriButeBean.getAttriButeData();
|
thermostatReadBackBean.setFanmode(fanmode);
|
is2 = true;
|
}
|
if (attriButeBean.getAttriButeId() == 17 && attriButeBean.getAttriButeDataType() == 41) {
|
//制冷温度
|
int coolingSetpoint = attriButeBean.getAttriButeData() / 100;
|
thermostatReadBackBean.setCoolingSetpoint(coolingSetpoint);
|
//Log.d("11113", "制冷温度为: "+coolingSetpoint);
|
|
}
|
if (attriButeBean.getAttriButeId() == 18 && attriButeBean.getAttriButeDataType() == 41) {
|
//制热温度
|
int heatingSetpoint = attriButeBean.getAttriButeData() / 100;
|
thermostatReadBackBean.setHeatingSetpoint(heatingSetpoint);
|
//Log.d("11113", "制热温度为: "+heatingSetpoint);
|
|
}
|
}
|
if (is1 && is2) { //代表获取恒温器和风扇的状态后的回调
|
is1 = false;
|
is2 = false;
|
thermostatReadBackBean.setTag(airTag);
|
String thermostatReadJson = JsonUtil.toJson(thermostatReadBackBean);
|
//Log.d("11113", "数据数据数据"+thermostatReadJson);
|
if (stateListener != null) {
|
StateEvent event = new StateEvent(thermostatReadJson);
|
stateListener.onData(event);
|
}
|
}
|
break;
|
case ZigbeeDeviceID.AirPanel:
|
//新风设备
|
StatusReadBackBean airPanelReadBackBean = new StatusReadBackBean();
|
for (ZigbeeReportBean.DataBean.AttriButeBean attriButeBean : zigbeeReportBean.getData().getAttriBute()) {
|
if (attriButeBean.getAttriButeId() == 0 && attriButeBean.getAttriButeDataType() == 0x30) {
|
//当前的新风模式
|
int fanmode = attriButeBean.getAttriButeData();
|
airPanelReadBackBean.setValue(fanmode);
|
}
|
}
|
String airPanelReadBackJson = JsonUtil.toJson(airPanelReadBackBean);
|
if (stateListener != null) {
|
StateEvent event = new StateEvent(airPanelReadBackJson);
|
stateListener.onData(event);
|
}
|
break;
|
}
|
}
|
|
public static void sendThirdPartyJson(final ZigbeeDeviceSaveBean zigbeeJson, String statusJson, int type) {
|
HDLZigbeeMqtt.connect1(ipAddr);
|
// 判断是write 还是 read,控制时判断传递参数
|
switch (type) {
|
case ZigbeeDeviceID.OnOffOutput:
|
//继电器
|
GatewayCommondBean gatewayCommondBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
|
if (gatewayCommondBean.getCmd() == null) {
|
reportError("cmd parameter error, please check it out");
|
return;
|
}
|
switch (gatewayCommondBean.getCmd()) {
|
case "write":
|
// 灯光控制,0关 1开
|
if (!(gatewayCommondBean.getValue() == 1 || gatewayCommondBean.getValue() == 0)) {
|
reportError("Wrong lighting control parameters");
|
return;
|
}
|
ZigbeeCtrlBean light = new ZigbeeCtrlBean();
|
light.setCluster_ID(6);
|
light.setSendMode(2);
|
light.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
light.setEpoint(zigbeeJson.getEpoint());
|
light.setCommand(gatewayCommondBean.getValue());
|
final String ctrlLightjson = JsonUtil.toJson(light);
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
HDLZigbeeMqtt.sendMqttData1("DeviceControl", ctrlLightjson);
|
}
|
}).start();
|
break;
|
case "read":
|
ZigbeeReadBean lightReadBean = new ZigbeeReadBean();
|
lightReadBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
lightReadBean.setEpoint(zigbeeJson.getEpoint());
|
lightReadBean.setCluster_ID(6);
|
lightReadBean.setCommand(108);
|
lightReadBean.setSendMode(2);
|
|
ZigbeeReadBean.DataBean lightBean = new ZigbeeReadBean.DataBean();
|
List<ZigbeeReadBean.DataBean.AttriButeBean> lightAttriButeBeanList = new ArrayList<>();
|
ZigbeeReadBean.DataBean.AttriButeBean lightAttriButeBean = new ZigbeeReadBean.DataBean.AttriButeBean();
|
lightAttriButeBean.setAttriButeId(0);
|
lightAttriButeBeanList.add(lightAttriButeBean);
|
lightBean.setAttriBute(lightAttriButeBeanList);
|
lightReadBean.setData(lightBean);
|
String lightReadJson = JsonUtil.toJson(lightReadBean);
|
HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", lightReadJson);
|
break;
|
}
|
break;
|
case ZigbeeDeviceID.WindowCoveringDevice:
|
GatewayCurtainBean gatewayCurtainBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCurtainBean.class);
|
if (gatewayCurtainBean.getCmd() == null) {
|
reportError("cmd parameter error, please check it out");
|
return;
|
}
|
//窗帘控制
|
switch (gatewayCurtainBean.getCmd()) {
|
case "write":
|
ZigbeeCtrlBean curtainCtrl = new ZigbeeCtrlBean();
|
curtainCtrl.setCluster_ID(258);
|
int curtainCmd;
|
switch (gatewayCurtainBean.getTag()) {
|
case 0:
|
switch (gatewayCurtainBean.getValue()) {
|
case 0:
|
curtainCmd = 0;
|
break;
|
case 1:
|
curtainCmd = 1;
|
break;
|
case 2:
|
curtainCmd = 2;
|
break;
|
default:
|
curtainCmd = 1;
|
break;
|
}
|
break;
|
case 1:
|
curtainCmd = 5;
|
ZigbeeCtrlBean.DataBean dataBean = new ZigbeeCtrlBean.DataBean();
|
dataBean.setValue(gatewayCurtainBean.getValue());
|
curtainCtrl.setData(dataBean);
|
break;
|
default:
|
curtainCmd = 0;
|
break;
|
}
|
|
curtainCtrl.setCommand(curtainCmd);
|
curtainCtrl.setSendMode(2);
|
curtainCtrl.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
curtainCtrl.setEpoint(zigbeeJson.getEpoint());
|
String curtainCtrlJson = JsonUtil.toJson(curtainCtrl);
|
HDLZigbeeMqtt.sendMqttData1("DeviceControl", curtainCtrlJson);
|
break;
|
case "read":
|
ZigbeeReadBean curtainReadBean = new ZigbeeReadBean();
|
curtainReadBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
curtainReadBean.setEpoint(zigbeeJson.getEpoint());
|
curtainReadBean.setCluster_ID(258);
|
curtainReadBean.setCommand(108);
|
curtainReadBean.setSendMode(2);
|
|
ZigbeeReadBean.DataBean curtainBean = new ZigbeeReadBean.DataBean();
|
List<ZigbeeReadBean.DataBean.AttriButeBean> curtainAttriButeBeanList = new ArrayList<>();
|
ZigbeeReadBean.DataBean.AttriButeBean curtainAttriButeBean = new ZigbeeReadBean.DataBean.AttriButeBean();
|
curtainAttriButeBean.setAttriButeId(8);
|
curtainAttriButeBeanList.add(curtainAttriButeBean);
|
curtainBean.setAttriBute(curtainAttriButeBeanList);
|
curtainReadBean.setData(curtainBean);
|
String curtainReadJson = JsonUtil.toJson(curtainReadBean);
|
HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", curtainReadJson);
|
break;
|
}
|
break;
|
case ZigbeeDeviceID.DimmableLight:
|
//调光灯
|
GatewayCommondBean dimmableLightBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
|
if (dimmableLightBean.getCmd() == null) {
|
reportError("cmd parameter error, please check it out");
|
return;
|
}
|
switch (dimmableLightBean.getCmd()) {
|
case "write":
|
// 调光控制
|
ZigbeeDimmableCtrlBean light = new ZigbeeDimmableCtrlBean();
|
ZigbeeDimmableCtrlBean.Data data = new ZigbeeDimmableCtrlBean.Data();
|
light.setCluster_ID(8);
|
light.setSendMode(2);
|
light.setCommand(4);
|
light.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
light.setEpoint(zigbeeJson.getEpoint());
|
data.setLevel(dimmableLightBean.getValue());
|
data.setTransitionTime(2);
|
light.setData(data);
|
String ctrlLightjson = JsonUtil.toJson(light);
|
HDLZigbeeMqtt.sendMqttData1("DeviceControl", ctrlLightjson);
|
break;
|
case "read":
|
ZigbeeReadBean lightReadBean = new ZigbeeReadBean();
|
lightReadBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
lightReadBean.setEpoint(zigbeeJson.getEpoint());
|
lightReadBean.setCluster_ID(8);
|
lightReadBean.setCommand(108);
|
lightReadBean.setSendMode(2);
|
|
ZigbeeReadBean.DataBean lightBean = new ZigbeeReadBean.DataBean();
|
List<ZigbeeReadBean.DataBean.AttriButeBean> lightAttriButeBeanList = new ArrayList<>();
|
ZigbeeReadBean.DataBean.AttriButeBean lightAttriButeBean = new ZigbeeReadBean.DataBean.AttriButeBean();
|
lightAttriButeBean.setAttriButeId(0);
|
lightAttriButeBeanList.add(lightAttriButeBean);
|
lightBean.setAttriBute(lightAttriButeBeanList);
|
lightReadBean.setData(lightBean);
|
String lightReadJson = JsonUtil.toJson(lightReadBean);
|
HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", lightReadJson);
|
break;
|
}
|
break;
|
case ZigbeeDeviceID.Thermostat:
|
//空调
|
final GatewayCommondBean thermostatBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
|
if (thermostatBean.getCmd() == null) {
|
reportError("cmd parameter error, please check it out");
|
return;
|
}
|
switch (thermostatBean.getCmd()) {
|
case "write":
|
switch (airTag) {
|
case 0://开关,开关传入开关01
|
switch (thermostatBean.getValue()) {
|
case 0://空调关
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
sendFan(zigbeeJson, 0);//发送风扇控制
|
sendThermostat(zigbeeJson, 0);//发送恒温器
|
}
|
}).start();
|
break;
|
case 1://空调开
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
sendThermostat(zigbeeJson, 1);
|
sendFan(zigbeeJson, 4);
|
}
|
}).start();
|
|
break;
|
}
|
break;
|
case 1://控制恒温器
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
sendThermostat(zigbeeJson, thermostatBean.getValue());
|
}
|
}).start();
|
break;
|
case 2://控制通风器
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
sendFan(zigbeeJson, thermostatBean.getValue());
|
}
|
}).start();
|
break;
|
case 3://控制温度
|
switch (airMode) {
|
case 0://制热
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
contrlThermostat(zigbeeJson, thermostatBean.getValue(), 0);
|
}
|
}).start();
|
break;
|
case 1://制冷
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
contrlThermostat(zigbeeJson, thermostatBean.getValue(), 1);
|
}
|
}).start();
|
break;
|
case 2://自动
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
contrlThermostat(zigbeeJson, thermostatBean.getValue(), 2);
|
}
|
}).start();
|
break;
|
}
|
break;
|
}
|
break;
|
case "read":
|
//获取当前恒温器信息
|
ZigbeeReadBean thermostatReadBean = new ZigbeeReadBean();
|
ZigbeeReadBean.DataBean thermostat = new ZigbeeReadBean.DataBean();
|
List<ZigbeeReadBean.DataBean.AttriButeBean> thermostats = new ArrayList<>();
|
ZigbeeReadBean.DataBean.AttriButeBean thermostatAttr = new ZigbeeReadBean.DataBean.AttriButeBean();
|
ZigbeeReadBean.DataBean.AttriButeBean thermostatAttr1 = new ZigbeeReadBean.DataBean.AttriButeBean();
|
ZigbeeReadBean.DataBean.AttriButeBean thermostatAttr2 = new ZigbeeReadBean.DataBean.AttriButeBean();
|
thermostatReadBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
thermostatReadBean.setEpoint(zigbeeJson.getEpoint());
|
thermostatReadBean.setCluster_ID(513);
|
thermostatReadBean.setCommand(108);
|
thermostatReadBean.setSendMode(2);
|
thermostatAttr.setAttriButeId(28);
|
thermostats.add(thermostatAttr);
|
thermostatAttr1.setAttriButeId(17);
|
thermostats.add(thermostatAttr1);
|
thermostatAttr2.setAttriButeId(18);
|
thermostats.add(thermostatAttr2);
|
thermostat.setAttriBute(thermostats);
|
thermostatReadBean.setData(thermostat);
|
final String thermostatReadJson = JsonUtil.toJson(thermostatReadBean);
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", thermostatReadJson);
|
readFan(zigbeeJson);
|
}
|
}).start();
|
//获取风速状态
|
break;
|
}
|
break;
|
case ZigbeeDeviceID.AirPanel:
|
GatewayCommondBean airpanelBean = JsonUtil.parseJsonWithGson(statusJson, GatewayCommondBean.class);
|
if (airpanelBean.getCmd() == null) {
|
reportError("cmd parameter error, please check it out");
|
return;
|
}
|
switch (airpanelBean.getCmd()) {
|
case "write":
|
sendNewFan(zigbeeJson, airpanelBean.getValue());
|
break;
|
case "read":
|
readFan(zigbeeJson);
|
break;
|
}
|
break;
|
|
}
|
}
|
|
//初始化状态信息
|
public static void initStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type) {
|
initData();
|
airTag = 0;
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
String sendStatus = HDLCommandText.setSendStatus("read", 0);//读不需要知道状态,随便填一个
|
HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
|
}
|
}).start();
|
}
|
|
//更新空调状态
|
public static void initAirStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type, int tag) {
|
airTag = tag;
|
String sendStatus = HDLCommandText.setSendStatus("read", 0);//读不需要知道状态,随便填一个
|
HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
|
}
|
|
|
//发送空调控制
|
public static void sendAirStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type, final int value,
|
int tag, int mode) {
|
airTag = tag;
|
airMode = mode;
|
String sendStatus = HDLCommandText.setSendStatus("write", value);
|
HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
|
}
|
|
//发送开关控制控制
|
public static void sendStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type, final int value) {
|
String sendStatus = HDLCommandText.setSendStatus("write", value);
|
HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
|
}
|
|
//初始化窗帘控制
|
public static void sendCurtainStatus(final ZigbeeDeviceSaveBean zigbeeDevice, final int type,
|
final int value, final int tag) {
|
String sendStatus = HDLCommandText.setSendCurtainStatus("write", value, tag);
|
HDLCommandText.sendThirdPartyJson(zigbeeDevice, sendStatus, type);
|
}
|
|
//设置继电器的状态
|
private static String setSendStatus(String status, int value) {
|
GatewayCommondBean gatewayCommondBean = new GatewayCommondBean();
|
gatewayCommondBean.setCmd(status);
|
gatewayCommondBean.setValue(value);
|
String jsonObjext = JsonUtil.toJson(gatewayCommondBean);
|
return jsonObjext;
|
}
|
|
//设置窗帘的状态
|
private static String setSendCurtainStatus(String status, int value, int tag) {
|
GatewayCurtainBean gatewayCurtainBean = new GatewayCurtainBean();
|
gatewayCurtainBean.setCmd(status);
|
gatewayCurtainBean.setValue(value);
|
gatewayCurtainBean.setTag(tag);
|
String jsonObject = JsonUtil.toJson(gatewayCurtainBean);
|
return jsonObject;
|
}
|
|
//发送恒温器模式
|
private static void sendThermostat(ZigbeeDeviceSaveBean zigbeeJson, int value) {
|
ZigbeeWriteCtrlBean zigbeeOffBean = new ZigbeeWriteCtrlBean();
|
zigbeeOffBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
zigbeeOffBean.setEpoint(zigbeeJson.getEpoint());
|
zigbeeOffBean.setCluster_ID(513);
|
zigbeeOffBean.setCommand(120);
|
ZigbeeWriteCtrlBean.Data zigbeeOffDataBean = new ZigbeeWriteCtrlBean.Data();
|
zigbeeOffDataBean.setAttributeId(28);
|
zigbeeOffDataBean.setAttributeDataType(48);
|
zigbeeOffDataBean.setAttributeData(value);
|
zigbeeOffBean.setData(zigbeeOffDataBean);
|
String zigbeeoffJson = JsonUtil.toJson(zigbeeOffBean);
|
HDLZigbeeMqtt.sendMqttData1("SetWritableValue", zigbeeoffJson);
|
initAirStatus(zigbeeJson, ZigbeeDeviceID.Thermostat, airTag);
|
}
|
|
//发送风模式
|
private static void sendFan(final ZigbeeDeviceSaveBean zigbeeJson, int value) {
|
ZigbeeWriteCtrlBean zigbeeOffBean = new ZigbeeWriteCtrlBean();
|
zigbeeOffBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
zigbeeOffBean.setEpoint(zigbeeJson.getEpoint());
|
zigbeeOffBean.setCluster_ID(514);
|
zigbeeOffBean.setCommand(120);
|
ZigbeeWriteCtrlBean.Data zigbeeOffDataBean = new ZigbeeWriteCtrlBean.Data();
|
zigbeeOffDataBean.setAttributeId(0);
|
zigbeeOffDataBean.setAttributeDataType(0x30);
|
zigbeeOffDataBean.setAttributeData(value);
|
zigbeeOffBean.setData(zigbeeOffDataBean);
|
String zigbeeoffJson = JsonUtil.toJson(zigbeeOffBean);
|
HDLZigbeeMqtt.sendMqttData1("SetWritableValue", zigbeeoffJson);
|
initAirStatus(zigbeeJson, ZigbeeDeviceID.Thermostat, airTag);
|
}
|
|
//新风状态下发送新风模式
|
private static void sendNewFan(final ZigbeeDeviceSaveBean zigbeeJson, int value) {
|
ZigbeeWriteCtrlBean zigbeeOffBean = new ZigbeeWriteCtrlBean();
|
zigbeeOffBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
zigbeeOffBean.setEpoint(zigbeeJson.getEpoint());
|
zigbeeOffBean.setCluster_ID(514);
|
zigbeeOffBean.setCommand(120);
|
ZigbeeWriteCtrlBean.Data zigbeeOffDataBean = new ZigbeeWriteCtrlBean.Data();
|
zigbeeOffDataBean.setAttributeId(0);
|
zigbeeOffDataBean.setAttributeDataType(0x30);
|
zigbeeOffDataBean.setAttributeData(value);
|
zigbeeOffBean.setData(zigbeeOffDataBean);
|
String zigbeeoffJson = JsonUtil.toJson(zigbeeOffBean);
|
HDLZigbeeMqtt.sendMqttData1("SetWritableValue", zigbeeoffJson);
|
initStatus(zigbeeJson, ZigbeeDeviceID.AirPanel);
|
}
|
|
//温度控制
|
private static void contrlThermostat(ZigbeeDeviceSaveBean zigbeeJson, int value, int mode) {
|
ZigbeeThermostatCtrlBean zigbeeThermostatCtrlBean = new ZigbeeThermostatCtrlBean();
|
zigbeeThermostatCtrlBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
zigbeeThermostatCtrlBean.setEpoint(zigbeeJson.getEpoint());
|
zigbeeThermostatCtrlBean.setCluster_ID(513);
|
zigbeeThermostatCtrlBean.setCommand(0);
|
zigbeeThermostatCtrlBean.setSendMode(2);
|
ZigbeeThermostatCtrlBean.Data zigbeeData = new ZigbeeThermostatCtrlBean.Data();
|
zigbeeData.setMode(mode);//模式0:加热、1:制冷、2:自助调节
|
zigbeeData.setAmount(value);
|
zigbeeThermostatCtrlBean.setData(zigbeeData);
|
String zigbeeCtrlJson = JsonUtil.toJson(zigbeeThermostatCtrlBean);
|
HDLZigbeeMqtt.sendMqttData1("DeviceControl", zigbeeCtrlJson);
|
initAirStatus(zigbeeJson, ZigbeeDeviceID.Thermostat, airTag);
|
}
|
|
//查看风速
|
private static void readFan(ZigbeeDeviceSaveBean zigbeeJson) {
|
|
//获取当前通风信息
|
ZigbeeReadBean fanBean = new ZigbeeReadBean();
|
ZigbeeReadBean.DataBean fanDataBean = new ZigbeeReadBean.DataBean();
|
List<ZigbeeReadBean.DataBean.AttriButeBean> fanDataBeanList = new ArrayList<>();
|
ZigbeeReadBean.DataBean.AttriButeBean fanDataBeanAttr = new ZigbeeReadBean.DataBean.AttriButeBean();
|
fanBean.setDeviceAddr(zigbeeJson.getDeviceAddr());
|
fanBean.setEpoint(zigbeeJson.getEpoint());
|
fanBean.setCluster_ID(514);
|
fanBean.setCommand(108);
|
fanBean.setSendMode(2);
|
fanDataBeanAttr.setAttriButeId(0);
|
fanDataBeanList.add(fanDataBeanAttr);
|
fanDataBean.setAttriBute(fanDataBeanList);
|
fanBean.setData(fanDataBean);
|
String fanReadJson = JsonUtil.toJson(fanBean);
|
HDLZigbeeMqtt.sendMqttData1("GetDeviceStatus", fanReadJson);
|
}
|
|
//发送场景数据
|
public static void sendSceneStatus(int ScenesId, int DelayTime) {
|
scenesId = ScenesId;
|
ZigbeeSceneCtrlBean zigbeeSceneCtrlBean = new ZigbeeSceneCtrlBean();
|
zigbeeSceneCtrlBean.setCluster_ID(0);
|
zigbeeSceneCtrlBean.setCommand(808);
|
ZigbeeSceneCtrlBean.DataBean dataBean = new ZigbeeSceneCtrlBean.DataBean();
|
dataBean.setScenesId(ScenesId);
|
dataBean.setDelayTime(DelayTime);
|
zigbeeSceneCtrlBean.setData(dataBean);
|
String json = JsonUtil.toJson(zigbeeSceneCtrlBean);
|
HDLZigbeeMqtt.sendMqttData1("Scene/Open", json);
|
}
|
|
//处理设备信息
|
private static void handleDeviceList(String message) {
|
ZigbeeDeviceListBean zigbeeDeviceListBean = JsonUtil.parseJsonWithGson(message, ZigbeeDeviceListBean.class);
|
zigbeeDeviceListBeans.add(zigbeeDeviceListBean);
|
}
|
|
//处理场景信息
|
private static void handleSceneList(String message) {
|
Gson gson = new Gson();
|
zigbeeSceneListBean = gson.fromJson(message, ZigbeeSceneListBean.class);
|
}
|
|
//处理场景的数据
|
private static void reportSceneStatus(String message) {
|
ZigbeeSceneCtrlBackBean sceneCtrlBackBean = JsonUtil.parseJsonWithGson(message, ZigbeeSceneCtrlBackBean.class);
|
if (sceneCtrlBackBean.getData() == null) {
|
reportError("scene status error");
|
return;
|
}
|
StatusReadBackBean statusReadBackBean = new StatusReadBackBean();
|
if (sceneCtrlBackBean.getData().getScenesId() == scenesId) {
|
statusReadBackBean.setValue(sceneCtrlBackBean.getData().getResult());
|
}
|
String Json = JsonUtil.toJson(statusReadBackBean);
|
Log.d("11114", "处理数据回调: " + Json);
|
if (stateListener != null) {
|
StateEvent event = new StateEvent(Json);
|
stateListener.onData(event);
|
}
|
}
|
|
//回调获取到的设备信息
|
public static void handleDeviceData(final DataCallBack dataCallBack) {
|
timer = new Timer();
|
timer.schedule(new TimerTask() {
|
@Override
|
public void run() {
|
if (!isFinished) {
|
Log.d("11112", "run: 程序执行中");
|
} else {
|
timer.cancel();
|
timer.purge();
|
timer = null;
|
isFinished = false;
|
dataCallBack.onSuccess(zigbeeDeviceListBeans, zigbeeSceneListBean);
|
}
|
}
|
}, 1, 500);
|
}
|
|
public static void reSearch() {
|
if (timer != null) {
|
timer.cancel();
|
timer.purge();
|
timer = null;
|
}
|
}
|
|
//错误报告
|
public static void reportError(String reason) {
|
HDLLog.info(reason);
|
if (stateListener != null) {
|
CommonErrorBean errorBean = new CommonErrorBean();
|
errorBean.setCmd("error");
|
errorBean.setReason(reason);
|
String errorJson = JsonUtil.toJson(errorBean);
|
StateEvent event = new StateEvent(errorJson);
|
stateListener.onData(event);
|
}
|
}
|
}
|