Procházet zdrojové kódy

모바일앱 제어 관련 수정. 퍼미션 추가.

jslee(madeinlab) před 3 roky
rodič
revize
af5bd91dac

+ 114 - 74
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/iMapServer.java

@@ -4928,24 +4928,22 @@ public class iMapServer extends Service {
 
     public String iCMDProcTemperControl(Document doc) {
         try {
+            String target = "null", tid = "null", msgno = "null";
             String retStr = CheckiCMDProc("remote_access_temper");
 
             if (retStr != null) return retStr;
             else
                 retStr = XMLHeader + "   <service type=\"reply\" name=\"remote_access_temper\" result=";
 
-            String target = "null", tid = "null", msgno = "null";
             NodeList items = doc.getElementsByTagName("target");
             Node item = items.item(0);
             if (item != null) {
                 NamedNodeMap attrs = item.getAttributes();
                 for (int j = 0; j < attrs.getLength(); j++) {
                     Node attr = attrs.item(j);
-
                     if (attr.getNodeName().equalsIgnoreCase("name")) target = attr.getNodeValue();
                     else if (attr.getNodeName().equalsIgnoreCase("id")) tid = attr.getNodeValue();
-                    else if (attr.getNodeName().equalsIgnoreCase("msg_no"))
-                        msgno = attr.getNodeValue();
+                    else if (attr.getNodeName().equalsIgnoreCase("msg_no")) msgno = attr.getNodeValue();
                 }
             }
 
@@ -4957,7 +4955,7 @@ public class iMapServer extends Service {
             }
 
             WallpadiCMDParser tempercmd = new WallpadiCMDParser(doc);
-            String[] RoomList = {"room1", "room2", "room3", "room4", "room5", "room6", "room7", "room8"};
+            //String[] RoomList = {"room1", "room2", "room3", "room4", "room5", "room6", "room7", "room8"};
             tempercmd.actionTXT = trimquotation(tempercmd.actionTXT);
 
             String[] knxRoomNameList = getRoomNameFromDBV2(define.ROOM_NAME_HEATING);
@@ -5007,8 +5005,8 @@ public class iMapServer extends Service {
                         }
                         heatingV1API.Refresh(define.DEVICE_ALL_OR_NOTHING, false);
                     } else {
-                        for (byte i = 0; i < RoomList.length; i++) {
-                            if (tempercmd.unitnum.equals(RoomList[i])) {
+                        for (byte i = 0; i < knxRoomNameList.length; i++) {
+                            if (tempercmd.unitnum.equals(knxRoomNameList[i])) {
                                 roomNum = i;
                                 break;
                             }
@@ -5044,28 +5042,21 @@ public class iMapServer extends Service {
                             heatingV2API.Refresh(define.DEVICE_ALL_OR_NOTHING, false);
                         }
                     } else {
-                        for (byte i = 0; i < RoomList.length; i++) {
-                            if (tempercmd.unitnum.equals(RoomList[i])) {
-                                roomNum = i;
-                                break;
-                            }
-                        }
-                        if (roomNum == (byte) 0xFF) {
-                            retStr += "\"fail\">\r\n      <target name=\"" + tempercmd.target + "\" id=\"" + tempercmd.tid + "\" msg_no=\"" + tempercmd.msgno + "\"/>\r\n   </service>\r\n</imap>";
-                            return retStr;
-                        }
+                        int nDevNum = Integer.parseInt(tempercmd.devnum);
 
                         if (heatingV2API != null) {
-                            int ret = heatingV2API.SetEachRoomStatus(roomNum, Mode, temp);
+                            int ret = heatingV2API.SetEachRoomStatus((byte) nDevNum, Mode, temp);
                             if (ret != APIErrorCode.C_SUCCESS) {
                                 retStr += "\"fail\">\r\n      <target name=\"" + tempercmd.target + "\" id=\"" + tempercmd.tid + "\" msg_no=\"" + tempercmd.msgno + "\"/>\r\n   </service>\r\n</imap>";
                                 return retStr;
+
                             }
-                            heatingV2API.Refresh(roomNum, false);
+                            heatingV2API.Refresh((byte) nDevNum, false);
                         }
 
                     }
-                } else {
+                }
+                else {
                     retStr += "\"fail\">\r\n      <target name=\"" + tempercmd.target + "\" id=\"" + tempercmd.tid + "\" msg_no=\"" + tempercmd.msgno + "\"/>\r\n   </service>\r\n</imap>";
                     return retStr;
                 }
@@ -5089,7 +5080,7 @@ public class iMapServer extends Service {
                             if (roomData.bOnOff) drvmode = "on";
                             else drvmode = "off";
                             drvmode += "/" + roomData.SetTemp + "/" + roomData.NowTemp;
-                            resultStr += "         <status_info unit_num=\"" + RoomList[i] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
+                            resultStr += "         <status_info unit_num=\"" + knxRoomNameList[i] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
                         }
 
                         resultStr += "   </service>\r\n</imap>\r\n";
@@ -5098,8 +5089,8 @@ public class iMapServer extends Service {
                     } else {
                         String drvmode = "off";
                         byte roomNum = (byte) 0xFF;
-                        for (byte i = 0; i < RoomList.length; i++) {
-                            if (tempercmd.unitnum.equals(RoomList[i])) {
+                        for (byte i = 0; i < knxRoomNameList.length; i++) {
+                            if (tempercmd.unitnum.equals(knxRoomNameList[i])) {
                                 roomNum = i;
                                 break;
                             }
@@ -5114,7 +5105,7 @@ public class iMapServer extends Service {
                         if (roomData.bOnOff) drvmode = "on";
                         else drvmode = "off";
                         drvmode += "/" + roomData.SetTemp + "/" + roomData.NowTemp;
-                        resultStr += "      <status_info unit_num=\"" + RoomList[roomNum] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
+                        resultStr += "      <status_info unit_num=\"" + knxRoomNameList[roomNum] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
                         resultStr += "   </service>\r\n</imap>\r\n";
                         retStr += ("\"ok\">\r\n" + resultStr);
                         return retStr;
@@ -5129,7 +5120,8 @@ public class iMapServer extends Service {
                     retStr += "\"fail\">\r\n      <target name=\"" + tempercmd.target + "\" id=\"" + tempercmd.tid + "\" msg_no=\"" + tempercmd.msgno + "\"/>\r\n   </service>\r\n</imap>";
                     return retStr;
                 }
-            } else if (HeatingKind == 2) {
+            }
+            else if (HeatingKind == 2) {
                 try {
                     if (heatingV2API == null) {
                         retStr += "\"fail\">\r\n      <target name=\"" + tempercmd.target + "\" id=\"" + tempercmd.tid + "\" msg_no=\"" + tempercmd.msgno + "\"/>\r\n   </service>\r\n</imap>";
@@ -5138,7 +5130,7 @@ public class iMapServer extends Service {
                     byte RoomCount = heatingV2API.data.Device.info.RoomCount;
                     resultStr += "      <action> \"" + tempercmd.actionTXT + "\"</action>\r\n";
                     //resultStr += "      <status_map dev_num=\"1\" unit_cnt = \"" + RoomCount + "\" />\r\n";
-                    if ((tempercmd.unitnum.equals("all")) || (tempercmd.unitnum.equals("null"))) {
+                    if ((tempercmd.devnum.equals("all"))) {
                         Log.d(TAG, "&&&&&&&&&&&&&&&&&&&&& all :" + RoomCount);
                         String drvmode = "off";
                         for (byte i = 0; i < RoomCount; i++) {
@@ -5150,38 +5142,28 @@ public class iMapServer extends Service {
                             resultStr += "      <status_map dev_num=\"" + (i+1) + "\" unit_cnt = \"1\"/>\r\n";
 
                             if (target.equalsIgnoreCase(REMOTETYPE_SVR2MOBILEAUTH) || target.equalsIgnoreCase(REMOTETYPE_SVR2WEB)) {
-                                resultStr += "         <status_info unit_num=\"" + RoomList[i] + "\" unit_status=\"" + drvmode + "\" room_name=\"" + knxRoomNameList[i] + "\"/>\r\n";
+                                resultStr += "         <status_info unit_num=\"" + knxRoomNameList[i] + "\" unit_status=\"" + drvmode + "\" room_name=\"" + knxRoomNameList[i] + "\"/>\r\n";
                             } else {
-                                resultStr += "         <status_info unit_num=\"" + RoomList[i] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
+                                resultStr += "         <status_info unit_num=\"" + knxRoomNameList[i] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
                             }
                         }
 
                         resultStr += "   </service>\r\n</imap>\r\n";
                         retStr += ("\"ok\">\r\n" + resultStr);
                         return retStr;
-                    } else {
+                    }
+                    else {
                         String drvmode = "off";
-                        byte roomNum = (byte) 0xFF;
-                        for (byte i = 0; i < RoomList.length; i++) {
-                            if (tempercmd.unitnum.equals(RoomList[i])) {
-                                roomNum = i;
-                                break;
-                            }
-                        }
+                        int nDevNum = Integer.parseInt(tempercmd.unitnum);
 
-                        if (roomNum == (byte) 0xFF) {
-                            retStr += "\"fail\">\r\n      <target name=\"" + tempercmd.target + "\" id=\"" + tempercmd.tid + "\" msg_no=\"" + tempercmd.msgno + "\"/>\r\n   </service>\r\n</imap>";
-                            return retStr;
-                        }
-
-                        HeatingV2.RoomData roomData = heatingV2API.data.Device.Room[roomNum];
+                        HeatingV2.RoomData roomData = heatingV2API.data.Device.Room[nDevNum];
 
                         if (HeatingV2.MODE.GetOnOff(roomData.Mode)) drvmode = "on";
                         else drvmode = "off";
 
                         drvmode += "/" + roomData.SetTemp + "/" + roomData.NowTemp;
-
-                        resultStr += "         <status_info unit_num=\"" + RoomList[roomNum] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
+                        resultStr += "      <status_map dev_num=\"" + (nDevNum) + "\" unit_cnt=\"1\"/>\r\n";
+                        resultStr += "         <status_info unit_num=\"" + knxRoomNameList[nDevNum] + "\" unit_status=\"" + drvmode + "\"/>\r\n";
                         resultStr += "   </service>\r\n</imap>\r\n";
                         retStr += ("\"ok\">\r\n" + resultStr);
                         return retStr;
@@ -8419,7 +8401,8 @@ public class iMapServer extends Service {
 
             int BadLightCount = KnxApi.data.MasterController.Info.Bad_EnergyMeterCount;
             int SwitchCount = KnxApi.data.MasterController.Info.Light_SwitchCount;
-            int totalLightCount = LivingLightCount + BadLightCount;
+            int totalLightCount = LivingLightCount + BadLightCount + SwitchCount;
+            int emCount = LivingLightCount + BadLightCount;
             //mData.MasterController.Info.Light_SwitchCount
 
             Log.w(TAG, "[iCMDProcChumDamSmartLightControl] LivingLightCount [" + LivingLightCount + "], mSdbAPI.data.BadConcentCount [" + BadLightCount + "], nTotalLightCnt [" + totalLightCount +"]");
@@ -8446,26 +8429,32 @@ public class iMapServer extends Service {
                                 retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
                             }
                             retStr += "      </status_map>\r\n";
-                        } else {
+                        } else if(i>0 && i<emCount){
                             retStr += "      <status_map dev_num=\"" + (i + 1) + "\" dev_mode=\"null\" dev_name=\"" + knxRoomNameList[i] + "\" unit_cnt=\"" + KnxApi.data.BadRoom_EnergyMeter[i - 1].Info.LightCount + "\">\r\n";
                             for (int j = 0; j < KnxApi.data.BadRoom_EnergyMeter[i - 1].Info.LightCount; j++) {
                                 String status_power = "off", status_dim = "null", status_color = "null";
-
                                 status_power = (KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Data.OnOff) ? "on" : "off";
-
-                                Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.OnOff : " + KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.OnOff);
-                                Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.Dimming : " + KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.Dimming);
-
                                 status_dim = Integer.toString((int) KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Data.Dimming);
-
                                 if( getLightType( KnxApi.data.BadRoom_EnergyMeter[i-1], j) == 0x0F)
                                     status_dim ="null";
+                                retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
+                            }
+                            retStr += "      </status_map>\r\n";
+
+                        } else{
+                            retStr += "      <status_map dev_num=\"" + (i + 1) + "\" dev_mode=\"null\" dev_name=\"" + knxRoomNameList[i] + "\" unit_cnt=\"" + KnxApi.data.Light_Switch[i - emCount].Info.LightCount + "\">\r\n";
+                            for (int j = 0; j < KnxApi.data.Light_Switch[i-emCount].Info.LightCount; j++) {
+                                String status_power = "off", status_dim = "null", status_color = "null";
+
+                                status_power = (KnxApi.data.Light_Switch[i - emCount].Data.LightSwitch[j].Data.OnOff) ? "on" : "off";
+                                status_dim ="null";
                                 // zzz
                                 //Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] ***** getLightType" + getLightType( KnxApi.data.BadRoom_EnergyMeter[i - 1], j) );
 
                                 retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
                             }
                             retStr += "      </status_map>\r\n";
+
                         }
                     }
                 }
@@ -8502,22 +8491,23 @@ public class iMapServer extends Service {
                             retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
                         }
                         retStr += "      </status_map>\r\n";
-                    } else {
+                    } else if(nDevNo>1 && nDevNo<emCount+1){
                         retStr += "      <status_map dev_num=\"" + (nDevNo) + "\" dev_mode=\"null\" dev_name=\"" + knxRoomNameList[nDevNo-1] + "\" unit_cnt=\"" + KnxApi.data.BadRoom_EnergyMeter[nDevNo-2].Info.LightCount + "\">\r\n";
                         for (int j = 0; j < KnxApi.data.BadRoom_EnergyMeter[nDevNo-2].Info.LightCount; j++) {
                             String status_power = "off", status_dim = "null", status_color = "null";
-
                             status_power = (KnxApi.data.BadRoom_EnergyMeter[nDevNo-2].Data.BadLight[j].Data.OnOff) ? "on" : "off";
-
-                            Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.OnOff : " + KnxApi.data.BadRoom_EnergyMeter[nDevNo-2].Data.BadLight[j].Info.Support.OnOff);
-                            Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.Dimming : " + KnxApi.data.BadRoom_EnergyMeter[nDevNo-2].Data.BadLight[j].Info.Support.Dimming);
-
                             status_dim = Integer.toString((int) KnxApi.data.BadRoom_EnergyMeter[nDevNo-2].Data.BadLight[j].Data.Dimming);
-                            // zzz
-                            //Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] ***** getLightType" + getLightType( KnxApi.data.BadRoom_EnergyMeter[nDevNo-2], j) );
                             if( getLightType( KnxApi.data.BadRoom_EnergyMeter[nDevNo-2], j) == 0x0F)
                                 status_dim ="null";
-
+                            retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
+                        }
+                        retStr += "      </status_map>\r\n";
+                    } else{
+                        retStr += "      <status_map dev_num=\"" + (nDevNo) + "\" dev_mode=\"null\" dev_name=\"" + knxRoomNameList[nDevNo-1] + "\" unit_cnt=\"" + KnxApi.data.Light_Switch[nDevNo-emCount-1].Info.LightCount + "\">\r\n";
+                        for (int j = 0; j < KnxApi.data.Light_Switch[nDevNo-emCount-1].Info.LightCount; j++) {
+                            String status_power = "off", status_dim = "null", status_color = "null";
+                            status_power = (KnxApi.data.Light_Switch[nDevNo-emCount-1].Data.LightSwitch[j].Data.OnOff) ? "on" : "off";
+                            status_dim ="null";
                             retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
                         }
                         retStr += "      </status_map>\r\n";
@@ -8574,21 +8564,23 @@ public class iMapServer extends Service {
                             }
                             retStr += "      </status_map>\r\n";
                         }
-                        else {
+                        else if(i>0 && i<emCount){
                             retStr += "      <status_map dev_num=\""+ (i + 1) + "\" dev_mode=\"null\" dev_name=\""+ knxRoomNameList[i] + "\" unit_cnt=\"" + KnxApi.data.BadRoom_EnergyMeter[i - 1].Info.LightCount  + "\">\r\n";
                             for (int j = 0; j < KnxApi.data.BadRoom_EnergyMeter[i - 1].Info.LightCount; j++) {
                                 String status_power = "off", status_dim = "null", status_color = "null";
-
                                 status_power = (KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Data.OnOff) ? "on" : "off";
-
-                                Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.OnOff : " +  KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.OnOff);
-                                Log.w(TAG, "yskim [iCMDProcChumDamSmartLightControl] KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.Dimming : " +  KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Info.Support.Dimming);
-
                                 status_dim = Integer.toString((int) KnxApi.data.BadRoom_EnergyMeter[i - 1].Data.BadLight[j].Data.Dimming);
-
                                 if( getLightType( KnxApi.data.BadRoom_EnergyMeter[i-1], j) == 0x0F)
                                     status_dim ="null";
-
+                                retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
+                            }
+                            retStr += "      </status_map>\r\n";
+                        } else {
+                            retStr += "      <status_map dev_num=\"" + (i + 1) + "\" dev_mode=\"null\" dev_name=\"" + knxRoomNameList[i] + "\" unit_cnt=\"" + KnxApi.data.Light_Switch[i - emCount].Info.LightCount + "\">\r\n";
+                            for (int j = 0; j < KnxApi.data.Light_Switch[i-emCount].Info.LightCount; j++) {
+                                String status_power = "off", status_dim = "null", status_color = "null";
+                                status_power = (KnxApi.data.Light_Switch[i - emCount].Data.LightSwitch[j].Data.OnOff) ? "on" : "off";
+                                status_dim ="null";
                                 retStr += "         <status_info unit_num=\"" + (j + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + status_color + "\"/>\r\n";
                             }
                             retStr += "      </status_map>\r\n";
@@ -8648,11 +8640,10 @@ public class iMapServer extends Service {
                                 retStr += "      <status_info unit_num=\"" + (i + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + "null" + "\"/>\r\n";
                             }
                         }
-                        else {
+                        else if(nDevNo>1 && nDevNo<emCount+1){
                             // 각각 EM 조명 일괄제어일 경우
                             if (!unit_status.equalsIgnoreCase("null")) {
                                 KnxApi.SetLightOnOff((byte) (nDevNo -2), define.DEVICE_ALL_OR_NOTHING, (unit_status.equalsIgnoreCase("on")) ? true : false);
-                                //mSdbAPI.SetLightOnOff((byte) (nDevNo -2), (byte) 0xFF, (unit_status.equalsIgnoreCase("on")) ? true : false);
                             }
 
                             if (!unit_dimming.equalsIgnoreCase("null")) {
@@ -8694,12 +8685,37 @@ public class iMapServer extends Service {
                                 //KnxApi.data.BadRoom_EnergyMeter[nDevNo - 2].Info.LightType_1
                                 String status_power = (KnxApi.data.BadRoom_EnergyMeter[nDevNo - 2].Data.BadLight[i].Data.OnOff) ? "on" : "off";
                                 String status_dim = Integer.toString((int) KnxApi.data.BadRoom_EnergyMeter[nDevNo - 2].Data.BadLight[i].Data.Dimming);
-
                                 if( getLightType( KnxApi.data.BadRoom_EnergyMeter[nDevNo - 2], i) == 0x0F)
                                     status_dim ="null";
+                                retStr += "      <status_info unit_num=\"" + (i + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + "null" + "\"/>\r\n";
+                            }
+                        } else {
+                            // 각각 EM 스위치 일괄제어일 경우
+                            if (!unit_status.equalsIgnoreCase("null")) {
+                                KnxApi.SetLightSwitchOnOff((byte) (nDevNo-emCount-1), define.DEVICE_ALL_OR_NOTHING, (unit_status.equalsIgnoreCase("on")) ? true : false);
+                            }
+                            if ( KnxApi.Refresh(KnxAPI.DEVICE_INDEX.ALL, (byte) define.DEVICE_ALL_OR_NOTHING) < 0 ) {
+                                retStr += " result=\"fail\">\r\n   </service>\r\n</imap>";
+                                Log.d(TAG, "yskim [iCMDProcChumDamSmartLightControl] Refreshing mSdbAPI is failed!!!");
+                                return retStr;
+                            }
+
+                            retStr += " result=\"ok\">\r\n";
+                            retStr += "      <target name=\"" + lightcmd.target + "\" id=\"" + lightcmd.tid + "\" msg_no=\"" + lightcmd.msgno + "\"/>\r\n";
+                            retStr += "      <action>\"" + lightcmd.actionTXT + "\"</action>\r\n";
+                            retStr += "      <dev_cnt>\"1\"</dev_cnt>\r\n";
 
+                            retStr += "      <status_map dev_num=\"" +  nDevNo + "\" dev_mode=\""+ "null" + "\" dev_name=\"" + knxRoomNameList[nDevNo-emCount-1]  +  "\" unit_cnt=\"" + KnxApi.data.Light_Switch[nDevNo-emCount-1].Info.LightCount  + "\">\r\n";
+
+                            nDevNo = Integer.parseInt(dev_num);
+
+                            for( int i = 0 ; i < KnxApi.data.Light_Switch[nDevNo-emCount-1].Info.LightCount ; i++) {
+                                //KnxApi.data.BadRoom_EnergyMeter[nDevNo - 2].Info.LightType_1
+                                String status_power = (KnxApi.data.Light_Switch[nDevNo-emCount-1].Data.LightSwitch[i].Data.OnOff) ? "on" : "off";
+                                String status_dim ="null";
                                 retStr += "      <status_info unit_num=\"" + (i + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + "null" + "\"/>\r\n";
                             }
+
                         }
 //                        retStr += "      </status_map>\r\n";
 //                        retStr += "   </service>\r\n</imap>\r\n";
@@ -8747,7 +8763,7 @@ public class iMapServer extends Service {
                             }
 
                         }
-                        else {
+                        else if(nDevNo>1 && nDevNo<emCount+1){
                             if (!unit_status.equalsIgnoreCase("null")) {
                                 KnxApi.SetLightOnOff((byte) (nDevNo -2), (byte)(nUnitNo-1), (unit_status.equalsIgnoreCase("on")) ? true : false);
                                 //mSdbAPI.SetLightOnOff((byte) (nDevNo -2), (byte) 0xFF, (unit_status.equalsIgnoreCase("on")) ? true : false);
@@ -8783,6 +8799,31 @@ public class iMapServer extends Service {
 
                                 retStr += "      <status_info unit_num=\"" + (i + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + "null" + "\"/>\r\n";
                             }
+                        } else{
+                            if (!unit_status.equalsIgnoreCase("null")) {
+                                KnxApi.SetLightSwitchOnOff((byte) (nDevNo-emCount-1), (byte)(nUnitNo-1), (unit_status.equalsIgnoreCase("on")) ? true : false);
+                            }
+                            if ( KnxApi.Refresh(KnxAPI.DEVICE_INDEX.ALL, (byte) define.DEVICE_ALL_OR_NOTHING) < 0 ) {
+                                retStr += " result=\"fail\">\r\n   </service>\r\n</imap>";
+                                Log.d(TAG, "yskim [iCMDProcChumDamSmartLightControl] Refreshing mSdbAPI is failed!!!");
+                                return retStr;
+                            }
+
+                            retStr += " result=\"ok\">\r\n";
+                            retStr += "      <target name=\"" + lightcmd.target + "\" id=\"" + lightcmd.tid + "\" msg_no=\"" + lightcmd.msgno + "\"/>\r\n";
+                            retStr += "      <action>\"" + lightcmd.actionTXT + "\"</action>\r\n";
+                            retStr += "      <dev_cnt>\"1\"</dev_cnt>\r\n";
+
+                            retStr += "      <status_map dev_num=\"" +  nDevNo + "\" dev_mode=\""+ "null" + "\" dev_name=\"" + knxRoomNameList[nDevNo-emCount-1]  +  "\" unit_cnt=\"" + KnxApi.data.Light_Switch[nDevNo-emCount-1].Info.LightCount  + "\">\r\n";
+
+                            nDevNo = Integer.parseInt(dev_num);
+
+                            for( int i = 0 ; i < KnxApi.data.Light_Switch[nDevNo-emCount-1].Info.LightCount ; i++) {
+                                //KnxApi.data.BadRoom_EnergyMeter[nDevNo - 2].Info.LightType_1
+                                String status_power = (KnxApi.data.Light_Switch[nDevNo-emCount-1].Data.LightSwitch[i].Data.OnOff) ? "on" : "off";
+                                String status_dim ="null";
+                                retStr += "      <status_info unit_num=\"" + (i + 1) + "\" unit_status=\"" + status_power + "\" unit_dimming=\"" + status_dim + "\" unit_color=\"" + "null" + "\"/>\r\n";
+                            }
                         }
 
                     }
@@ -9664,7 +9705,6 @@ public class iMapServer extends Service {
                     }
                     else
                     {
-
                         String sOnOff = "off";
                         //CtrList[1] = cool , CtrList[2] = 1 (바람세기) ,CtrList[3] = 설정온도 ,CtrList[4] = 현재온도 ,
                         byte hOnOff = 0x00;

+ 1 - 0
WallPadMultiControlService/src/main/AndroidManifest.xml

@@ -4,6 +4,7 @@
 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
     <uses-permission android:name="android.permission.INTERNET" />
 
     <application