package com.hdl.sdk.hdl_sdk.activity; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.hdl.sdk.hdl_core.Config.Configuration; import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.DevicesData; import com.hdl.sdk.hdl_core.HDLDeviceManger.Parser.DeviceParser; import com.hdl.sdk.hdl_sdk.R; import java.util.ArrayList; /** SDK目前支持手动添加的大类:小类 * 灯光类(大类1):调光回路(0)、开关回路(1)、混合调光类(9)、混合开关类(10) * 窗帘类(大类2):开合帘电机(0)、卷帘电机(1)、窗帘模块(2) * 空调功能(大类7):HVAC 模块(0)、通用空调面板(3) * 背景音乐功能(大类9):背景音乐模块 2018新背景音乐模块小类3 * 传感器(大类5):干结点0 到 功率24 * 逻辑功能(大类12):逻辑模块(0) * 全局场景(大类17):全局场景(0) * 地热功能:地热模块(0) * 新风(大类19):新风系统(0) * 通用开关(大类100):通用开关(0) * 格式 支持的模块名字 大类ID:小类ID * * 灯光类 1:0 ,1,9,10 * 窗帘类 2:0,1,2 * 传感器 5:0~24 * 空调类 7:0,3 * 地热模块 8:0 * 背景音乐功能 9:0 * 逻辑功能 12:0 * 全局场景 17:0 * 新风模块 19:0 * 通用开关 100:0 * * 该方法应用于提供项目交付前的提取批量数据生成好数据。 * 模拟生成设备回路数据,在项目不支持简易编程搜索情况下,可以通过该方法,先快捷生成目标数据 得到 List 格式的设备列表数据 * * 上层做本地保存或者云端备份,App启动时读取恢复 * 每次启动时先加载生成好的设备列表数据,然后在 SDK 初始化后,赋值给 HDLDeviceManager.devicesDataList */ public class AddDevicesActivity extends Activity { private int bigType; private int littleType; private int mSubnetID; private int mDeviceID; private int mChannelNum; private int port = 6000; private String parentRemarks; private ArrayList parentRemarksList = new ArrayList(); private EditText et_subnetID, et_deviceID, et_bitType, et_littleType, et_remarks, et_remarks_mk, et_mChannelNum,et_scene,et_mPort,et_scene2; private Button btn_add,btn_scene,btn_addAll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_devices); et_subnetID = findViewById(R.id.et_subnetID); et_deviceID = findViewById(R.id.et_deviceID); et_bitType = findViewById(R.id.et_bitType); et_littleType = findViewById(R.id.et_littleType); et_remarks = findViewById(R.id.et_remarks); // et_port = findViewById(R.id.et_port); et_remarks_mk = findViewById(R.id.et_remarks_mk); et_mChannelNum = findViewById(R.id.et_mChannelNum); et_mPort = findViewById(R.id.et_mPort); et_scene = findViewById(R.id.et_scene); et_scene2 = findViewById(R.id.et_scene2); btn_add = findViewById(R.id.btn_add); btn_scene = findViewById(R.id.btn_scene); btn_addAll= findViewById(R.id.btn_addAll); btn_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addDevicesManuallyWithoutSearchingAll(); } }); btn_scene.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addScene(); } }); btn_addAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addMultipleDevices(); } }); } private void addDevicesManuallyWithoutSearchingAll() { // parentRemarksList.clear(); String subnetIDStr = et_subnetID.getText().toString(); if (TextUtils.isEmpty(subnetIDStr)) { showToast("子网号不能为空"); return; } String deviceIDStr = et_deviceID.getText().toString(); if (TextUtils.isEmpty(deviceIDStr)) { showToast("设备号不能为空"); return; } String bitTypeStr = et_bitType.getText().toString(); if (TextUtils.isEmpty(bitTypeStr)) { showToast("大类不能为空"); return; } String littleTypeStr = et_littleType.getText().toString(); if (TextUtils.isEmpty(littleTypeStr)) { showToast("小类不能为空"); return; } String mChannelNumStr = et_mChannelNum.getText().toString(); if (TextUtils.isEmpty(mChannelNumStr)) { showToast("回路号不能为空"); return; } String mPortStr = et_mPort.getText().toString(); if (TextUtils.isEmpty(mPortStr)) { showToast("端口号不能为空"); return; } String remarksMkString = et_remarks_mk.getText().toString(); if (TextUtils.isEmpty(remarksMkString)) { showToast("模块备注不能为空"); return; } String remarksString = et_remarks.getText().toString(); if (TextUtils.isEmpty(remarksString)) { showToast("备注不能为空"); return; } // String et_portString = et_port.getText().toString(); // if (TextUtils.isEmpty(et_portString)) { // showToast("端口不能为空"); // return; // } mSubnetID = Integer.parseInt(subnetIDStr); mDeviceID = Integer.parseInt(deviceIDStr); bigType = Integer.parseInt(bitTypeStr); littleType = Integer.parseInt(littleTypeStr); mChannelNum = Integer.parseInt(mChannelNumStr); parentRemarks = remarksMkString; port = Integer.parseInt(mPortStr); /** * 添加设备回路 * 如果存在相同子网号 设备号,则当成混合模块添加到该回路下,不存在则新添加模块 * @param bigType 回路大类 * @param littleType 回路小类 * @param mSubnetID 回路子网ID * @param mDeviceID 回路设备ID * @param mChannelNum 回路号 * @param mChannelRemark 回路备注 例如:窗帘、吊灯、厕所灯、电视 * @param parentRemarks 当前回路模块的备注 例如: 酒店RCU模块 * @return */ //如果存在相同子网号 设备号,则当成混合模块添加到该回路下,不存在则新添加模块 DevicesData mDevicesData = DeviceParser.addDevicesListWithoutSearching(port, bigType, littleType, mSubnetID, mDeviceID, mChannelNum, remarksString, parentRemarks,true); if (mDevicesData != null) { showToast("添加成功"); } else { showToast("添加失败"); } } /** * 添加场景设备回路 需指定 场景区号 和 场景号 * 如果存在相同子网号 设备号,则当成混合模块添加到该回路下,不存在则新添加模块 * * @param mSubnetID * @param mDeviceID * @param mChannelNum 回路号 这里的回路号需要注意,相同子网号和设备号下的场景需要累加不重复,逻辑模块为例:1区有3个表,2区有2个表 总共5个场景,所以(2区表1 回路号为4、2区表2 回路号为5) * @param mAreaNum //场景 区域号 * @param mAreaSceneNum //场景 当前区域场景号 * @param mChannelRemark 读取场景的备注名称 例如: 入住、起床模式、阅读模式 * @param parentRemarks 当前回路模块的备注 例如: 酒店RCU模块 * @param bSaveAndCallBack 是否马上保存本地并且推送DevicesInfoEvent 事件 * @return */ private void AddScenesDevices(int mSubnetID, int mDeviceID, int mChannelNum, int mAreaNum, int mAreaSceneNum, String mChannelRemark, String parentRemarks, boolean bSaveAndCallBack) { //添加场景 DevicesData mScenesData = DeviceParser.addScenesDevicesListWithoutSearching(port, mSubnetID, mDeviceID, mChannelNum, mAreaNum, mAreaSceneNum, mChannelRemark, parentRemarks,true); } /** * 添加场景回路 */ private void addScene(){ String subnetIDStr = et_subnetID.getText().toString(); if (TextUtils.isEmpty(subnetIDStr)) { showToast("子网号不能为空"); return; } String deviceIDStr = et_deviceID.getText().toString(); if (TextUtils.isEmpty(deviceIDStr)) { showToast("设备号不能为空"); return; } String mPortStr = et_mPort.getText().toString(); if (TextUtils.isEmpty(mPortStr)) { showToast("端口号不能为空"); return; } String mChannelNumStr = et_mChannelNum.getText().toString(); if (TextUtils.isEmpty(mChannelNumStr)) { showToast("回路号不能为空"); return; } // String bitTypeStr = et_bitType.getText().toString(); // if (TextUtils.isEmpty(bitTypeStr)) { // showToast("大类不能为空"); // return; // } // // String littleTypeStr = et_littleType.getText().toString(); // if (TextUtils.isEmpty(littleTypeStr)) { // showToast("小类不能为空"); // return; // } // String mChannelNumStr = et_mChannelNum.getText().toString(); // if (TextUtils.isEmpty(littleTypeStr)) { // showToast("回路号不能为空"); // return; // } String remarksMkString = et_remarks_mk.getText().toString(); if (TextUtils.isEmpty(remarksMkString)) { showToast("模块备注不能为空"); return; } String remarksString = et_remarks.getText().toString(); if (TextUtils.isEmpty(remarksString)) { showToast("备注不能为空"); return; } String et_AreaNumString = et_scene.getText().toString(); if (TextUtils.isEmpty(et_AreaNumString)) { showToast("场景:区号不能为空"); return; } String et_scene2String = et_scene2.getText().toString(); if (TextUtils.isEmpty(et_scene2String)) { showToast("场景:场景号不能为空"); return; } mSubnetID = Integer.parseInt(subnetIDStr); mDeviceID = Integer.parseInt(deviceIDStr); port = Integer.parseInt(mPortStr); // bigType = Integer.parseInt(bitTypeStr); // littleType = Integer.parseInt(littleTypeStr); mChannelNum = Integer.parseInt(mChannelNumStr); parentRemarks = remarksMkString; int areaID = Integer.parseInt(et_AreaNumString); int sceneID = Integer.parseInt(et_scene2String); DevicesData mScenesData = DeviceParser.addScenesDevicesListWithoutSearching(port, mSubnetID, mDeviceID, mChannelNum, areaID, sceneID, remarksString, parentRemarks,true); if (mScenesData != null) { showToast("添加成功"); } else { showToast("添加失败"); } } /** * 批量添加 * 仅做演示用 */ private void addMultipleDevices(){ String subnetIDStr = et_subnetID.getText().toString(); if (TextUtils.isEmpty(subnetIDStr)) { showToast("子网号不能为空"); return; } String deviceIDStr = et_deviceID.getText().toString(); if (TextUtils.isEmpty(deviceIDStr)) { showToast("设备号不能为空"); return; } String remarksMkString = et_remarks_mk.getText().toString(); if (TextUtils.isEmpty(remarksMkString)) { showToast("模块备注不能为空"); return; } mSubnetID = Integer.parseInt(subnetIDStr); mDeviceID = Integer.parseInt(deviceIDStr); parentRemarks = remarksMkString; // //添加一个灯 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, mSubnetID, mDeviceID, 1, "吧台灯", parentRemarks,false); // //添加一个灯 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, mSubnetID, mDeviceID, 2, "休闲灯", parentRemarks,false); // //添加一个灯 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, mSubnetID, mDeviceID, 3, "电视灯", parentRemarks,false); // //添加一个灯 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, mSubnetID, mDeviceID, 6, "廊灯", parentRemarks,false); // // //添加一个窗帘 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.CURTAIN_BIG_TYPE, 2, mSubnetID, mDeviceID, 1, "窗帘", parentRemarks,false); // //添加一个窗帘 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.CURTAIN_BIG_TYPE, 2, mSubnetID, mDeviceID, 2, "纱窗", parentRemarks,false); // // //添加一个空调 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.AIR_BIG_TYPE, 0, mSubnetID, mDeviceID, 1, "房间空调", parentRemarks,false); // //// //添加通用开关 清理 //// DeviceParser.addDevicesListWithoutSearching(port, Configuration.COMMON_SWITCH_BIG_TYPE, 0, mSubnetID, mDeviceID, 15, "清理", parentRemarks,false); //// //添加通用开关 入住 //// DeviceParser.addDevicesListWithoutSearching(port, Configuration.COMMON_SWITCH_BIG_TYPE, 0, mSubnetID, mDeviceID, 16, "入住", parentRemarks,false); //// //添加通用开关 稍后 //// DeviceParser.addDevicesListWithoutSearching(port, Configuration.COMMON_SWITCH_BIG_TYPE, 0, mSubnetID, mDeviceID, 13, "稍后", parentRemarks,false); //// //添加通用开关 勿扰 //// DeviceParser.addDevicesListWithoutSearching(port, Configuration.COMMON_SWITCH_BIG_TYPE, 0, mSubnetID, mDeviceID, 14, "勿扰", parentRemarks,false); //// //添加一个安防模块 //// DeviceParser.addDevicesListWithoutSearching(port, Configuration.SECURITY_BIG_TYPE, 0, 12, 1, 1, "安防模块", "安防模块",false); // // //添加一个场景 这里场景号和区号 默认一样 // DeviceParser.addScenesDevicesListWithoutSearching(port, mSubnetID, mDeviceID, 2, 2, "空置无卡", parentRemarks,false); // //添加一个场景 // DeviceParser.addScenesDevicesListWithoutSearching(port, mSubnetID, mDeviceID, 3, 3, "插卡场景", parentRemarks,false); // //添加一个场景 // DeviceParser.addScenesDevicesListWithoutSearching(port, mSubnetID, mDeviceID, 4, 4, "房灯", parentRemarks,false); // //添加一个场景 最后一个bSaveAndCallBack 设置为true // DeviceParser.addScenesDevicesListWithoutSearching(port, mSubnetID, mDeviceID, 5, 5, "会客模式", parentRemarks,true); // //添加一个4路继电器 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, 111, 3, 1, "吧台灯", "4路继电器",false); // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, 111, 3, 2, "休闲灯", "4路继电器",false); // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, 111, 3, 3, "电视灯", "4路继电器",false); // DeviceParser.addDevicesListWithoutSearching(port, Configuration.LIGTH_BIG_TYPE, 0, 111, 3, 4, "廊灯", "4路继电器",false); // // //添加一个干节点传感器 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.SENSOR_BIG_TYPE, 0, 111, 99, 1, "干节点", "干节点",false); // // // //添加一个2路窗帘 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.CURTAIN_BIG_TYPE, 2, 111, 8, 1, "窗帘", "2路窗帘",false); // DeviceParser.addDevicesListWithoutSearching(port, Configuration.CURTAIN_BIG_TYPE, 2, 111, 8, 2, "纱窗", "2路窗帘",false); // //添加一个开合帘 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.CURTAIN_BIG_TYPE, 1, 111, 92, 1, "开合帘", "开合帘",false); // // //添加一个空调 // DeviceParser.addDevicesListWithoutSearching(port, Configuration.AIR_BIG_TYPE, 0, 111, 9, 1, "房间空调", "HVAC空调模块",false); /** * 场景这里的回路号需要注意: 相同子网号和设备号下的场景需要累加不重复,逻辑模块为例:1区有3个表,2区有2个表 总共5个场景,所以(2区表1 回路号为4、2区表2 回路号为5) * 不然如果回路号不对简易编程搜索备注的话会出错 */ //添加一个场景 DeviceParser.addLogicScenesDevicesListWithoutSearching(port, 1, 16, 4, 2, 1, "卧室开灯", "逻辑模块",false); //添加一个场景 最后一个bSaveAndCallBack 设置为true DeviceParser.addLogicScenesDevicesListWithoutSearching(port, 1, 16, 5,2, 2, "卧室关灯", "逻辑模块",true); } private void showToast(String text) { Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); } }