Procházet zdrojové kódy

[WallPadMain]
1. 스마트홈2.0 조명 제어
- 에너지미터만 사용하는 경우
- 전체 제어 내용 추가

jglee před 2 roky
rodič
revize
2b78c2b406

+ 45 - 3
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/iMapServer.java

@@ -7540,12 +7540,53 @@ public class iMapServer extends Service {
                 }
             }
             else if (trimquotation(energymetercmd.actionTXT).equalsIgnoreCase("control")) {
-                int num = Integer.parseInt(energymetercmd.unitnum.replaceAll("switch", ""));
-                num--;
 
+                if(energymeter == null) return null;
                 int deviceNum = Byte.parseByte(energymetercmd.devnum) - 1;
+                if(energymetercmd.unitnum.equalsIgnoreCase("all"))
+                {
+                    if (energymeter != null) {
+                        int nResultRefresh = energymeter.Refresh((byte)0xFF, false);
+                        if (nResultRefresh == 0) {
+                            int nCtrlResult = energymeter.SetAllLightOnOff(energymetercmd.ctraction.equalsIgnoreCase("on") ? true : false);
+                            if (nCtrlResult == 0) {
+                                int nResult = energymeter.Refresh((byte) 0xFF, false);
+                                if (nResult == 0) {
+                                    if (energymeter.data.Em.eachRoom[deviceNum].LightCnt > 0) {
+                                        retStr += "result=\"ok\">\r\n" +
+                                                "      <action>\"status\"</action>\r\n" +
+                                                "         <status_map dev_num=\"" + energymetercmd.devnum + "\" unit_cnt=\"" + energymeter.data.Em.eachRoom[deviceNum].LightCnt + "\"/>\r\n";
+
+                                        for (int i = 0; i < energymeter.data.Em.eachRoom[deviceNum].LightCnt; i++) {
+                                            retStr+= "         <status_info unit_num=\"" + String.format("switch%d\" unit_status=\"%s\" />\r\n", i + 1, energymeter.data.Em.eachRoom[deviceNum].LightOnOff[i] ? "on" : "off");
+                                        }
+                                        retStr += "   </service>\r\n</imap>";
+                                    } else {
+                                        Log.w(TAG, "[iCMDProcSDPLightControl] energymeter.data.Em.eachRoom[" + deviceNum + "].LightCnt is unavailable!! -> " + energymeter.data.Em.eachRoom[deviceNum].LightCnt);
+                                        retStr += "result=\"fail\">\r\n   </service>\r\n</imap> ";
+                                    }
+                                } else {
+                                    Log.w(TAG, "[iCMDProcSDPLightControl] energymeter refresh fail!!");
+                                    retStr += "result=\"fail\">\r\n   </service>\r\n</imap> ";
+                                }
+                            } else {
+                                Log.w(TAG, "[iCMDProcSDPLightControl] energymeter light ctrl fail!!");
+                                retStr += "result=\"fail\">\r\n   </service>\r\n</imap> ";
+                            }
+                        } else {
+                            Log.w(TAG, "[iCMDProcSDPLightControl] energymeter refresh fail!!");
+                            retStr += "result=\"fail\">\r\n   </service>\r\n</imap> ";
+                        }
+                    } else {
+                        Log.w(TAG, "[iCMDProcSDPLightControl] energymeter is null!!");
+                        retStr += "result=\"fail\">\r\n   </service>\r\n</imap> ";
+                    }
+                }
+                else
+                {
+                    int num = Integer.parseInt(energymetercmd.unitnum.replaceAll("switch", ""));
+                    num--;
 
-                if (!energymetercmd.ctraction.equalsIgnoreCase("null"))
                     if (energymeter!=null && energymeter.SetLightOnOff( (byte) deviceNum, (byte) num, energymetercmd.ctraction.equalsIgnoreCase("on") ? true : false) == 0) {
                         if ((energymeter.Refresh((byte)0xFF, false) == 0) && (energymeter.data.Em.eachRoom[deviceNum].LightCnt > 0)) {
                             retStr += "result=\"ok\">\r\n" +
@@ -7564,6 +7605,7 @@ public class iMapServer extends Service {
                     else {
                         retStr += "result=\"fail\">\r\n</service>\r\n</imap> ";
                     }
+                }
             }
             else {
                 retStr += "result = \"fail\">\r\n</service>\r\n</imap>";