فهرست منبع

[WallPadMain]
1. 스마트홈2.0
- 조명(릴레이보드 + 에너지미터)
- 전체 제어 추가

jglee 2 سال پیش
والد
کامیت
8cf159c852
1فایلهای تغییر یافته به همراه62 افزوده شده و 14 حذف شده
  1. 62 14
      WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/iMapServer.java

+ 62 - 14
WallPadMain/src/main/java/kr/co/icontrols/wallpadmain/util/iMapServer.java

@@ -3500,6 +3500,10 @@ public class iMapServer extends Service {
 						else if (cmd.equalsIgnoreCase("remote_access_light")) {
                             if (ModelType == MODEL_TYPE.IHN_1020GL || ModelType == MODEL_TYPE.IHN_1010GL || ModelType == MODEL_TYPE.IHN_1010GL_I
                                     || Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_2443 || Version.getModelType() == Version.MODEL_TYPE.IHN_1010GL_I_6410) {
+                                WallpadDeviceSet devSet = new WallpadDeviceSet(getApplicationContext());
+                                nEnergyProductionUse = devSet.Get_Energy_Devices_Info(); //에너지 제품군
+                                devSet.closeDB();
+                                devSet = null;
                                 //에너지 제품군을 사용하는 경우(에너지미터(신규EMS))
                                 if(nEnergyProductionUse == WallpadDeviceSet.DO_USE)
                                 {
@@ -7399,32 +7403,76 @@ public class iMapServer extends Service {
                 }
             }
             else if (trimquotation(energymetercmd.actionTXT).equalsIgnoreCase("control")) {
-                int num = Integer.parseInt(energymetercmd.unitnum.replaceAll("switch", ""));
-                num--;
+
 
                 int deviceNum = Byte.parseByte(energymetercmd.devnum) - 1;
 
                 if (!energymetercmd.ctraction.equalsIgnoreCase("null"))
-
                     if(energymeter == null) return 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" +
-                                    "   <action>\"control\"</action>\r\n" +
-                                    "      <status_map dev_num=\""+energymetercmd.devnum+"\" unit_cnt=\""+energymeter.data.Em.eachRoom[deviceNum].LightCnt+"\"/>\r\n";
+                    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");
+                                            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 (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" +
+                                        "   <action>\"control\"</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+="\r\n</service>\r\n</imap>";
+                            }
+                            else {
+                                retStr += "result=\"fail\">\r\n</service>\r\n</imap> ";
                             }
-                            retStr+="\r\n</service>\r\n</imap>";
                         }
                         else {
                             retStr += "result=\"fail\">\r\n</service>\r\n</imap> ";
                         }
                     }
-                    else {
-                        retStr += "result=\"fail\">\r\n</service>\r\n</imap> ";
-                    }
+
             }
             else {
                 retStr += "result = \"fail\">\r\n</service>\r\n</imap>";