package com.hdl.sdk.hdl_core.HDLDeviceManger.Parser; import com.hdl.sdk.hdl_core.Config.Configuration; import com.hdl.sdk.hdl_core.HDLAppliances.Config.HDLApConfig; import com.hdl.sdk.hdl_core.HDLAppliances.HDLLogic.LogicMode; import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.AppliancesInfo; import com.hdl.sdk.hdl_core.HDLDeviceManger.Bean.DevicesData; import com.hdl.sdk.hdl_core.HDLDeviceManger.Core.HDLDeviceManager; import com.hdl.sdk.hdl_core.HDLDeviceManger.Core.HandleSearch; import com.hdl.sdk.hdl_core.Util.LogUtil.HDLLog; import java.util.ArrayList; import java.util.List; import static com.hdl.sdk.hdl_core.HDLDeviceManger.Core.HDLDeviceManager.devicesDataList; /** * Created by djl on 2017/3/29. */ public class DeviceParser { /** * 处ç†è§£æžã€è®¾ç½®æŸä¸€å›žè·¯çš„æ‰€æœ‰ä¿¡æ¯ * * @param addBytes * @param port * @param ipAddress * @param devicesData * @param parentRemarks * @return 172.168.52.51 固件版本å·2018/08/29 */ public static boolean parse(byte[] addBytes, int port, String ipAddress, DevicesData devicesData, String parentRemarks) { boolean isExitData = false; int residue = addBytes.length - 22; int sumCount = residue / 3;//记录总共有多少ç§è®¾å¤‡ List<AppliancesInfo> appliancesInfoList = new ArrayList<>(); if (sumCount == 0) { AppliancesInfo appliancesInfo = new AppliancesInfo(); appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); appliancesInfoList.add(appliancesInfo); } int curCount = 0;//循环é历所有设备次数 while (curCount < sumCount) { int bigType = addBytes[21 + (2 * curCount) + (curCount + 1)] & 0xFF; int littleType = addBytes[21 + (2 * curCount) + (curCount + 2)] & 0xFF; int channelNum = addBytes[21 + (2 * curCount) + (curCount + 3)] & 0xFF; curCount++; int curChannelNum = 0; while (curChannelNum < channelNum) { curChannelNum++; if (isWantData(bigType, littleType)) { AppliancesInfo appliancesInfo = new AppliancesInfo(); switch (bigType) { case Configuration.LIGTH_BIG_TYPE: parseLightData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; case Configuration.CURTAIN_BIG_TYPE: parseCurtainData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; case Configuration.AIR_BIG_TYPE: parseAirData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; case Configuration.AUDIO_BIG_TYPE: parseAudioData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; case Configuration.LOGIC_BIG_TYPE: parseLogicData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; case Configuration.GLOBAL_LOGIC_BIG_TYPE: parseGlobalLogicData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; case Configuration.SENSOR_BIG_TYPE: parseSensorData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; //2019-07-08 新增地çƒå’Œæ–°é£Žç±» case Configuration.GEOTHERMAL_BIG_TYPE://åœ°çƒ parseGeothermalData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; case Configuration.FRESH_AIR_BIG_TYPE: parseFreshAirData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ipAddress); break; default: // appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } isExitData = true; String key = "K" + appliancesInfo.getBigType() + "-" + appliancesInfo.getLittleType() + "-" + appliancesInfo.getDeviceSubnetID() + "-" + appliancesInfo.getDeviceDeviceID() + "-" + appliancesInfo.getChannelNum(); appliancesInfo.setDeviceKey(key);//2019-8-2 æ·»åŠ å”¯ä¸€æ ‡è¯†key appliancesInfoList.add(appliancesInfo); } else { HDLLog.info( "䏿˜¯è¦æ·»åŠ çš„è®¾å¤‡ï¼šå¤§ç±»ï¼š" + bigType + " å°ç±»ï¼š" + littleType); } } } if (isExitData && devicesData != null) { devicesData.setAppliancesInfoList(appliancesInfoList); } return isExitData; } /** * åˆ¤æ–æ˜¯å¦æ”¯æŒçš„è®¾å¤‡ï¼Œè‹¥ä¸æ˜¯æ”¯æŒè®¾å¤‡åˆ™è¿‡æ»¤æŽ‰ã€‚ * * @param bigType * @param littleType * @return */ private static boolean isWantData(int bigType, int littleType) { // HDLLog.info("isWantData:bigType:" + bigType + "littleType:" + littleType); boolean isWant; switch (bigType) { case Configuration.LIGTH_BIG_TYPE: switch (littleType) { case 0: isWant = true; break; case 1: isWant = true; break; case 9: isWant = true; break; case 10: isWant = true; break; default: isWant = false; break; } break; case Configuration.CURTAIN_BIG_TYPE: switch (littleType) { case 0: isWant = true; break; case 1: isWant = true; break; case 2: isWant = true; break; default: isWant = false; break; } break; case Configuration.AIR_BIG_TYPE: switch (littleType) { case 0: isWant = true; break; case 3: isWant = true; break; default: isWant = false; break; } break; case Configuration.AUDIO_BIG_TYPE: switch (littleType) { case 0: isWant = true; break; // case 1: // isWant = true; // break; case 3: isWant = true; break; default: isWant = false; break; } break; case Configuration.SENSOR_BIG_TYPE: if (littleType >= 0 && littleType <= 24) { isWant = true; } else { isWant = false; } break; case Configuration.LOGIC_BIG_TYPE: switch (littleType) { case 0: isWant = true; break; default: isWant = false; break; } break; case Configuration.GLOBAL_LOGIC_BIG_TYPE: switch (littleType) { case 0: isWant = true; break; default: isWant = false; break; } break; case Configuration.GEOTHERMAL_BIG_TYPE://20190711 新增 switch (littleType) { case Configuration.GEOTHERMAL_LITTLE_TYPE_0: isWant = true; break; default: isWant = false; break; } break; case Configuration.FRESH_AIR_BIG_TYPE: switch (littleType) { case Configuration.FRESH_AIR_LITTLE_TYPE_0: isWant = true; break; default: isWant = false; break; } break; default: isWant = false; break; } return isWant; } private static void parseLightData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("调光回路"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_LIGHT_DIMMER); break; case 1: appliancesInfo.setDeviceName("开关回路"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_LIGHT_RELAY); break; case 2: appliancesInfo.setDeviceName("é€»è¾‘ç¯æŽ§åˆ¶"); break; case 3: appliancesInfo.setDeviceName("逻辑ç¯RGB"); break; case 4: appliancesInfo.setDeviceName("逻辑ç¯RGBW"); break; case 5: appliancesInfo.setDeviceName("逻辑ç¯RGB+CCT"); break; case 6: appliancesInfo.setDeviceName("æ··åˆç±» Dimmer+Relay"); break; case 7: appliancesInfo.setDeviceName("DALI"); break; case 8: appliancesInfo.setDeviceName("自定义逻辑ç¯"); break; case 9: appliancesInfo.setDeviceName("æ··åˆè°ƒå…‰ç±»"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_LIGHT_MIX_DIMMER); break; case 10: appliancesInfo.setDeviceName("æ··åˆå¼€å…³ç±»"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_LIGHT_MIX_RELAY); break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.LIGTH_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setCtrlCommand(Configuration.LIGHT_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.LIGHT_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.LIGHT_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.LIGHT_STATE_BACK_COMMAND); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); } } private static void parseCurtainData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("å¼€åˆå¸˜ç”µæœº"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_CURTAIN_GLYSTRO); break; case 1: appliancesInfo.setDeviceName("å·å¸˜ç”µæœº"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_CURTAIN_ROLLER); break; case 2: appliancesInfo.setDeviceName("窗帘模å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_CURTAIN_MODULE); break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.CURTAIN_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setCtrlCommand(Configuration.CURTAIN_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.CURTAIN_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.CURTAIN_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.CURTAIN_STATE_BACK_COMMAND); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); } } private static void parseAirData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("HVAC 模å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_AC_HVAC); break; case 1: appliancesInfo.setDeviceName("Coolmaster 控制模å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_AC_COOLMASTER); break; case 2: appliancesInfo.setDeviceName("红外空调模å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_AC_INFRARED); break; case 3: appliancesInfo.setDeviceName("é€šç”¨ç©ºè°ƒé¢æ¿"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_AC_PANEL); break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.AIR_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); if (littleType == 0) { appliancesInfo.setCtrlCommand(Configuration.AIR_HVAC_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.AIR_HVAC_CTRL_BACK_COMMAND); // appliancesInfo.setStateCommand(Configuration.AIR_HVAC_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.AIR_HVAC_STATE_BACK_COMMAND); } else { appliancesInfo.setCtrlCommand(Configuration.AIR_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.AIR_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.AIR_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.AIR_STATE_BACK_COMMAND); } } } private static void parseAudioData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("èƒŒæ™¯éŸ³ä¹æ¨¡å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_MUSIC_MODULE); break; case 1: appliancesInfo.setDeviceName("ç¬¬ä¸‰æ–¹èƒŒæ™¯éŸ³ä¹æ¨¡å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_MUSIC_THIRD_PARTY_MODULE); break; case 3: appliancesInfo.setDeviceName("2018æ–°èƒŒæ™¯éŸ³ä¹æ¨¡å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_MUSIC_NEW_MODULE); break; default: break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.AUDIO_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setCtrlCommand(Configuration.AUDIO_CTRL_READ_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.AUDIO_CTRL_READ_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.AUDIO_MenuPlay_INSTRUCTION_COMMAND); appliancesInfo.setStateBackCommand(Configuration.AUDIO_MenuPlay_INSTRUCTION_BACK_COMMAND); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); } } private static void parseLogicData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("逻辑模å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_LOGIC_MODULE); break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.LOGIC_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setCtrlCommand(Configuration.LOGIC_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.LOGIC_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.LOGIC_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.LOGIC_STATE_BACK_COMMAND); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); } } private static void parseGlobalLogicData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("全局逻辑模å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_GLOBAL_LOGIC_MODULE); break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.GLOBAL_LOGIC_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setCtrlCommand(Configuration.LOGIC_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.LOGIC_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.LOGIC_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.LOGIC_STATE_BACK_COMMAND); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); } } private static void parseSensorData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int curChannelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 干结点"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_DRY_CONTACT); break; case 1: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 移动探测"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_MOVEMENT_DETECTOR); break; case 2: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 温度"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_TEMP); break; case 3: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 湿度"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_HUMIDITY); break; case 4: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 照度"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_ILLUMINACE); break; case 5: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ VOC"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_VOC); break; case 6: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ PM2.5"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_PM_2_POINT_5); break; case 7: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ CO2"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_C02); break; case 8: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 液化石油气"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_LPG); break; case 9: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 人工煤气(CO,H2"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_CO_H2); break; case 10: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 天然气(CH4)"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_CH4); break; case 11: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 烟雾"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_SMOG); break; case 12: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 风速"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_WIND_SPEED); break; case 13: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 风压"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_WIND_PRESSURE); break; case 14: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 液体æµé‡"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_LIQUID_FLOW); break; case 15: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 液体压力"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_LIQUID_PRESSURE); break; case 16: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 液体深度 "); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_LIQUID_DEPTH); break; case 17: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 雨é‡"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_RAIN_FALL); break; case 18: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ é‡é‡"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_WEIGHT); break; case 19: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 高度/长度"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_HEIGHT_LENGTH); break; case 20: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 物体速度"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_OBJECT_SPEED); break; case 21: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 震动"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_SHAKE); break; case 22: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 电压"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_VOLTAGE); break; case 23: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 电æµ"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_ELECTRICITY); break; case 24: appliancesInfo.setDeviceName("ä¼ æ„Ÿå™¨ 功率"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_SENSOR_POWER); break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(curChannelNum); appliancesInfo.setBigType(Configuration.SENSOR_BIG_TYPE); appliancesInfo.setLittleType(littleType); // appliancesInfo.setCtrlCommand(Configuration.LOGIC_CTRL_COMMAND); // appliancesInfo.setCtrlBackCommand(Configuration.LOGIC_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.SENSOR_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.SENSOR_STATE_BACK_COMMAND); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); } } /** *åœ°çƒ */ private static void parseGeothermalData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case Configuration.GEOTHERMAL_LITTLE_TYPE_0: appliancesInfo.setDeviceName("åœ°çƒæ¨¡å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_GEOTHERMAL_MODULE); break; // case 1: // appliancesInfo.setDeviceName("常规地çƒé¢æ¿"); // appliancesInfo.setDeviceType(HDLApConfig.TYPE_GEOTHERMAL_MODULE_PANEL); // break; // case 2: // appliancesInfo.setDeviceName("带PIè¿ç®—的地çƒé¢æ¿"); // appliancesInfo.setDeviceType(HDLApConfig.TYPE_GEOTHERMAL_MODULE_PI); // break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.GEOTHERMAL_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); appliancesInfo.setCtrlCommand(Configuration.GEOTHERMAL_MODULE_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.GEOTHERMAL_MODULE_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.GEOTHERMAL_MODULE_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.GEOTHERMAL_MODULE_STATE_BACK_COMMAND); // if (littleType == 1) { // appliancesInfo.setCtrlCommand(Configuration.GEOTHERMAL_MODULE_PANEL_CTRL_COMMAND); // appliancesInfo.setCtrlBackCommand(Configuration.GEOTHERMAL_MODULE_PANEL_CTRL_BACK_COMMAND); // appliancesInfo.setStateCommand(Configuration.GEOTHERMAL_MODULE_PANEL_STATE_COMMAND); // appliancesInfo.setStateBackCommand(Configuration.GEOTHERMAL_MODULE_PANEL_STATE_BACK_COMMAND); // } else if(littleType == 2) { // appliancesInfo.setCtrlCommand(Configuration.GEOTHERMAL_MODULE_PI_CTRL_COMMAND); // appliancesInfo.setCtrlBackCommand(Configuration.GEOTHERMAL_MODULE_PI_CTRL_BACK_COMMAND); // appliancesInfo.setStateCommand(Configuration.GEOTHERMAL_MODULE_PI_STATE_COMMAND); // appliancesInfo.setStateBackCommand(Configuration.GEOTHERMAL_MODULE_PI_STATE_BACK_COMMAND); // // } else { // appliancesInfo.setCtrlCommand(Configuration.GEOTHERMAL_MODULE_CTRL_COMMAND); // appliancesInfo.setCtrlBackCommand(Configuration.GEOTHERMAL_MODULE_CTRL_BACK_COMMAND); // appliancesInfo.setStateCommand(Configuration.GEOTHERMAL_MODULE_STATE_COMMAND); // appliancesInfo.setStateBackCommand(Configuration.GEOTHERMAL_MODULE_STATE_BACK_COMMAND); // // } } } /** * 新风系统 */ private static void parseFreshAirData(int littleType, AppliancesInfo appliancesInfo, DevicesData devicesData, String parentRemarks, int channelNum, int port, String ipAddress) { switch (littleType) { case 0: appliancesInfo.setDeviceName("新风系统模å—"); appliancesInfo.setDeviceType(HDLApConfig.TYPE_FRESH_AIR); break; default: appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } if (devicesData != null) { appliancesInfo.setChannelNum(channelNum); appliancesInfo.setBigType(Configuration.FRESH_AIR_BIG_TYPE); appliancesInfo.setLittleType(littleType); appliancesInfo.setCtrlCommand(Configuration.FRESH_AIR_CTRL_COMMAND); appliancesInfo.setCtrlBackCommand(Configuration.FRESH_AIR_CTRL_BACK_COMMAND); appliancesInfo.setStateCommand(Configuration.FRESH_AIR_STATE_COMMAND); appliancesInfo.setStateBackCommand(Configuration.FRESH_AIR_STATE_BACK_COMMAND); appliancesInfo.setDeviceSubnetID(devicesData.getSourceSubnetID()); appliancesInfo.setDeviceDeviceID(devicesData.getSourceDeviceID()); appliancesInfo.setParentRemarks(parentRemarks); appliancesInfo.setPort(port); appliancesInfo.setIpAddress(ipAddress); } } /** * * @param bigType * @param littleType * @param mSubnetID * @param mDeviceID * @param parentRemarks * @return */ public static DevicesData addDevicesManuallyWithoutSearchingAll(int bigType, int littleType, int mSubnetID, int mDeviceID, int port, String parentRemarks, ArrayList<String> parentRemarksList) { boolean bWantData = false; DevicesData devicesData = new DevicesData(); devicesData.setSourceSubnetID(mSubnetID); devicesData.setSourceDeviceID(mDeviceID); devicesData.setRemark(parentRemarks); List<AppliancesInfo> appliancesInfoList = new ArrayList<>(); if (isWantData(bigType, littleType)) { for(int i = 0; i<parentRemarksList.size();i++){ appliancesInfoList.add( getDevicesInfo(devicesData, bigType, littleType,i+1, port, parentRemarks, parentRemarksList.get(i))); } bWantData = true; // HDLLog.I( "呿¨¡å—æ·»åŠ å›žè·¯ï¼š"+"大类:" + mBigType + " å°ç±»ï¼š" + mLittleType +" 模å—备注" + mRemarks ); } else { // HDLLog.I( "䏿˜¯è¦æ·»åŠ çš„è®¾å¤‡ï¼šå¤§ç±»ï¼š" + mBigType + " å°ç±»ï¼š" + mLittleType +" 模å—备注" + mRemarks ); } if (bWantData) { devicesData.setAppliancesInfoList(appliancesInfoList); devicesDataList.add(devicesData); HandleSearch.OnDeviceListGetSuccessCallBack(); }else { devicesData = null; } return devicesData; } private static AppliancesInfo getDevicesInfo(DevicesData devicesData, int bigType, int littleType, int curChannelNum, int port, String parentRemarks, String mRemarks){ AppliancesInfo appliancesInfo = new AppliancesInfo(); /**æ ¹æ®ç±»åˆ«ï¼Œèµ‹å€¼æ“作ç ç‰ä¸€äº›é‡è¦ä¿¡æ¯*/ switch (bigType) { case Configuration.LIGTH_BIG_TYPE: parseLightData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; case Configuration.CURTAIN_BIG_TYPE: parseCurtainData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; case Configuration.AIR_BIG_TYPE: parseAirData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; case Configuration.AUDIO_BIG_TYPE: parseAudioData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; case Configuration.LOGIC_BIG_TYPE: parseLogicData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; case Configuration.GLOBAL_LOGIC_BIG_TYPE: parseGlobalLogicData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; case Configuration.SENSOR_BIG_TYPE: parseSensorData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; //2019-07-08 新增地çƒå’Œæ–°é£Žç±» case Configuration.GEOTHERMAL_BIG_TYPE://åœ°çƒ parseGeothermalData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; case Configuration.FRESH_AIR_BIG_TYPE: parseFreshAirData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, port, ""); break; default: // appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } String key = "K" + appliancesInfo.getBigType() + "-" + appliancesInfo.getLittleType() + "-" + appliancesInfo.getDeviceSubnetID() + "-" + appliancesInfo.getDeviceDeviceID() + "-" + appliancesInfo.getChannelNum(); appliancesInfo.setRemarks(mRemarks); appliancesInfo.setDeviceKey(key);//2019-8-2 æ·»åŠ å”¯ä¸€æ ‡è¯†key return appliancesInfo; } /**********************************************************以下代ç 为zigbee设备或场景返回对应Bus的转æ¢*************************************************/ /** * 获å–到zigbee设备åŽç”Ÿæˆå¯¹åº”çš„bus设备 * æ·»åŠ è®¾å¤‡å›žè·¯ * 如果å˜åœ¨ç›¸åŒåç½‘å· è®¾å¤‡å·ï¼Œåˆ™å½“æˆæ··åˆæ¨¡å—æ·»åŠ åˆ°è¯¥å›žè·¯ä¸‹ï¼Œä¸å˜åœ¨åˆ™æ–°æ·»åŠ æ¨¡å— * @param bigType 大类 * @param littleType å°ç±» * @param mSubnetID åç½‘å· * @param mDeviceID è®¾å¤‡å· * @param mChannelNum å›žè·¯å· * @param mChannelRemark 回路设备åç§° * @param parentRemarks 设备åç§° * @param bSaveAndCallBack 是å¦é©¬ä¸Šä¿å˜æœ¬åœ°å¹¶ä¸”推é€DevicesInfoEvent 事件 * @return */ public static DevicesData addDevicesListWithoutSearching(int bigType, int littleType, int mSubnetID, int mDeviceID, int mChannelNum, String mChannelRemark, String parentRemarks, boolean bSaveAndCallBack) { // boolean bWantData = false; if (isWantData(bigType, littleType)) { DevicesData devicesData = new DevicesData(); devicesData.setSourceSubnetID(mSubnetID); devicesData.setSourceDeviceID(mDeviceID); devicesData.setRemark(parentRemarks); Boolean isFindDevicesData = false; int index = 0; for (int i = 0; i < devicesDataList.size(); i++) { if (devicesDataList.get(i).getSourceSubnetID() == mSubnetID && devicesDataList.get(i).getSourceDeviceID() == mDeviceID) { index = i; isFindDevicesData = true; break; } } if (isFindDevicesData) { /* AppliancesInfo mAppliancesInfo = getDevicesInfo1(devicesData, bigType, littleType, mChannelNum, parentRemarks, mChannelRemark); devicesDataList.get(index).getAppliancesInfoList().add(mAppliancesInfo); devicesData = devicesDataList.get(index);*/ if(bSaveAndCallBack){ HandleSearch.OnDeviceListGetSuccessCallBack();} } else { List<AppliancesInfo> appliancesInfoList = new ArrayList<>(); appliancesInfoList.add(getDevicesInfo1(devicesData, bigType, littleType, mChannelNum, parentRemarks, mChannelRemark)); devicesData.setAppliancesInfoList(appliancesInfoList); devicesDataList.add(devicesData); if(bSaveAndCallBack){ HandleSearch.OnDeviceListGetSuccessCallBack();} } return devicesData; } else { return null; } } /** * 获å–到zigbee场景åŽç”Ÿæˆå¯¹åº”çš„bus场景 * æ·»åŠ åœºæ™¯è®¾å¤‡å›žè·¯ * 如果å˜åœ¨ç›¸åŒåç½‘å· è®¾å¤‡å·ï¼Œåˆ™å½“æˆæ··åˆæ¨¡å—æ·»åŠ åˆ°è¯¥å›žè·¯ä¸‹ï¼Œä¸å˜åœ¨åˆ™æ–°æ·»åŠ æ¨¡å— * @param mSubnetID * @param mDeviceID * @param mAreaNum //场景 åŒºåŸŸå· * @param mAreaSceneNum //场景 当å‰åŒºåŸŸåœºæ™¯å· * @param mChannelRemark * @param parentRemarks * @param bSaveAndCallBack 是å¦é©¬ä¸Šä¿å˜æœ¬åœ°å¹¶ä¸”推é€DevicesInfoEvent 事件 * @return */ public static DevicesData addScenesDevicesListWithoutSearching(int mSubnetID, int mDeviceID, int mAreaNum, int mAreaSceneNum, String mChannelRemark, String parentRemarks, boolean bSaveAndCallBack) { // boolean bWantData = false; int bigType = Configuration.GLOBAL_LOGIC_BIG_TYPE; int littleType = 0; if (isWantData(bigType, littleType)) { DevicesData devicesData = new DevicesData(); devicesData.setSourceSubnetID(mSubnetID); devicesData.setSourceDeviceID(mDeviceID); devicesData.setRemark(parentRemarks); Boolean isFindDevicesData = false; int index = 0; for (int i = 0; i < devicesDataList.size(); i++) { if (devicesDataList.get(i).getSourceSubnetID() == mSubnetID && devicesDataList.get(i).getSourceDeviceID() == mDeviceID) { index = i; isFindDevicesData = true; break; } } if (isFindDevicesData) { /* AppliancesInfo mAppliancesInfo = getDevicesInfo1(devicesData, bigType, littleType, mAreaNum, parentRemarks, mChannelRemark); LogicMode mLogicMode = new LogicMode(); mLogicMode.setAreaNum(mAreaNum); mLogicMode.setAreaSceneNum(mAreaSceneNum); mAppliancesInfo.setLogicMode(mLogicMode); devicesDataList.get(index).getAppliancesInfoList().add(mAppliancesInfo); devicesData = devicesDataList.get(index);*/ if(bSaveAndCallBack){ HandleSearch.OnDeviceListGetSuccessCallBack();} } else { List<AppliancesInfo> appliancesInfoList = new ArrayList<>(); AppliancesInfo mAppliancesInfo = getDevicesInfo1(devicesData, bigType, littleType, mAreaNum, parentRemarks, mChannelRemark); LogicMode mLogicMode = new LogicMode(); mLogicMode.setAreaNum(mAreaNum); mLogicMode.setAreaSceneNum(mAreaSceneNum); mAppliancesInfo.setLogicMode(mLogicMode); appliancesInfoList.add(mAppliancesInfo); devicesData.setAppliancesInfoList(appliancesInfoList); devicesDataList.add(devicesData); if(bSaveAndCallBack){ HandleSearch.OnDeviceListGetSuccessCallBack();} } return devicesData; } else { return null; } } public static AppliancesInfo getDevicesInfo1(DevicesData devicesData, int bigType, int littleType, int curChannelNum, String parentRemarks, String mRemarks) { AppliancesInfo appliancesInfo = new AppliancesInfo(); /**æ ¹æ®ç±»åˆ«ï¼Œèµ‹å€¼æ“作ç ç‰ä¸€äº›é‡è¦ä¿¡æ¯*/ switch (bigType) { case Configuration.LIGTH_BIG_TYPE: parseLightData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.CURTAIN_BIG_TYPE: parseCurtainData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.AIR_BIG_TYPE: parseAirData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.AUDIO_BIG_TYPE: parseAudioData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.LOGIC_BIG_TYPE: parseLogicData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.GLOBAL_LOGIC_BIG_TYPE: parseGlobalLogicData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.SENSOR_BIG_TYPE://2019-07-03 å±è”½ parseSensorData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.GEOTHERMAL_BIG_TYPE://åœ°çƒ parseGeothermalData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; case Configuration.FRESH_AIR_BIG_TYPE: parseFreshAirData(littleType, appliancesInfo, devicesData, parentRemarks, curChannelNum, 0, ""); break; default: // appliancesInfo.setDeviceName(Configuration.UNKNOW_TYPE); break; } String key = "K" + appliancesInfo.getBigType() + "-" + appliancesInfo.getLittleType() + "-" + appliancesInfo.getDeviceSubnetID() + "-" + appliancesInfo.getDeviceDeviceID() + "-" + appliancesInfo.getChannelNum(); appliancesInfo.setRemarks(mRemarks); appliancesInfo.setDeviceKey(key);//2019-8-2 æ·»åŠ å”¯ä¸€æ ‡è¯†key return appliancesInfo; } }