|
@@ -82,7 +82,8 @@ public class KakaoMsgHandler {
|
|
|
String code = (String)param.get("code");
|
|
|
|
|
|
String targetIP = IPGenerator.getIPFromDongHo(dong, ho);
|
|
|
- String twinid = UUID.randomUUID().toString();
|
|
|
+// String twinid = UUID.randomUUID().toString();
|
|
|
+ String twinid = "KAKAO"+dong+"_"+ho;
|
|
|
String alias = "Kakao";
|
|
|
StringBuffer sb = new StringBuffer();
|
|
|
|
|
@@ -91,7 +92,7 @@ public class KakaoMsgHandler {
|
|
|
.append(" <device_info alias=\"").append(alias).append("\" twinid=\"").append(twinid).append("\" auth_number=\"" + code + "\" />\r\n")
|
|
|
.append(XMLGenerator.MakeXMLTail());
|
|
|
|
|
|
- logger.debug(sb.toString());
|
|
|
+ logger.info(sb.toString());
|
|
|
|
|
|
SSLClient.sendToWallpad(targetIP, sb.toString());
|
|
|
|
|
@@ -131,6 +132,37 @@ public class KakaoMsgHandler {
|
|
|
return retMap;
|
|
|
}
|
|
|
|
|
|
+ public Map<String, Object> remoteRegisterNewDevice(Map<String, Object> param) {
|
|
|
+Map<String, Object> retMap = new HashMap<String, Object>();
|
|
|
+
|
|
|
+ try {
|
|
|
+ int dong = Integer.parseInt((String)param.get("dong"));
|
|
|
+ int ho = Integer.parseInt((String)param.get("ho"));
|
|
|
+ String code = (String)param.get("code");
|
|
|
+
|
|
|
+ String targetIP = IPGenerator.getIPFromDongHo(dong, ho);
|
|
|
+ String twinid = "KAKAO_"+dong+"_"+ho;
|
|
|
+ String alias = "KAKAO HOME";
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+
|
|
|
+ sb.append(XMLGenerator.MakeXMLHeaderForSUBS("remote_register_new_device"))
|
|
|
+ .append(" <home_info dong=\"").append(dong).append("\" ho=\"").append(ho).append("\" ip=\"").append(targetIP).append("\" type=\"main\"/>\r\n")
|
|
|
+ .append(" <device_info alias=\"").append(alias).append("\" twinid=\"").append(twinid).append("\" />\r\n")
|
|
|
+ .append(XMLGenerator.MakeXMLTail());
|
|
|
+
|
|
|
+ logger.info(sb.toString());
|
|
|
+
|
|
|
+ SSLClient.sendToWallpad(targetIP, sb.toString());
|
|
|
+
|
|
|
+ retMap.put("result", ERROR_INFO.CODE.SUCCESS.getContents());
|
|
|
+ retMap.put("resultCode", ERROR_INFO.CODE.SUCCESS.getmIdx());
|
|
|
+ }catch(Exception e) {
|
|
|
+ retMap.put("result", ERROR_INFO.CODE.FAIL_999.getContents());
|
|
|
+ retMap.put("resultCode", ERROR_INFO.CODE.FAIL_999.getmIdx());
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return retMap;
|
|
|
+ }
|
|
|
/**
|
|
|
* 월패드와 연결된 기기들의 전체 상태를 월패드에 요청하고 응답 받는다.
|
|
|
* 지원 기기가 추가되면 해당 부분은 수정이 필요하다.
|
|
@@ -193,7 +225,7 @@ public class KakaoMsgHandler {
|
|
|
// status의 구성요소에 맞게 capability가 구성되어야 한다.
|
|
|
|
|
|
|
|
|
- if(tmpModelId.equalsIgnoreCase("light")) {
|
|
|
+ if(tmpModelId.equalsIgnoreCase("light") || tmpModelId.equalsIgnoreCase("electric")) {
|
|
|
for(int j=1; j <= childCount; j++) {
|
|
|
String childName = j < 10 ? tmpModelId+"0"+j : tmpModelId+j;
|
|
|
Node childNode = (Node)xpath.evaluate("//imap/service/devinfo/*[@name='"+ childName +"']", doc, XPathConstants.NODE);
|
|
@@ -310,7 +342,7 @@ public class KakaoMsgHandler {
|
|
|
Map<String, Object> retMap = new HashMap<String, Object>();
|
|
|
|
|
|
String[] tmpSplit = endpointId.split("_");
|
|
|
- String modelId = (tmpSplit[0].equals("dimmer") || tmpSplit[0].equals("colorDimmer"))?tmpSplit[0]:tmpSplit[1];
|
|
|
+ String modelId = (tmpSplit[0].equals("dimmer") || tmpSplit[0].equals("colorDimmer"))?tmpSplit[1]:tmpSplit[0];
|
|
|
|
|
|
if(tmpSplit.length == 1 && !modelId.equals(THINGS_INFO.THINGS.ELEVATOR.getKakaoDisplayName())) {
|
|
|
retMap.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_NONEXIST));
|
|
@@ -330,7 +362,7 @@ public class KakaoMsgHandler {
|
|
|
return retMap;
|
|
|
}
|
|
|
|
|
|
- String action = KakaoMsgHandler.setDeviceActionStr(modelId, actionName, desired);
|
|
|
+ String action = KakaoMsgHandler.setDeviceActionStr(endpointId, modelId, actionName, desired);
|
|
|
|
|
|
if(action.length() == 0) {
|
|
|
retMap.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INVALID_REQ));
|
|
@@ -455,6 +487,7 @@ public class KakaoMsgHandler {
|
|
|
break;
|
|
|
|
|
|
case THINGS_INFO.THINGS_ELECPLUG:
|
|
|
+ jsonString = THINGS_INFO.THINGS_CAPABILITY.ELECTRIC.getCapJsonStr();
|
|
|
break;
|
|
|
}
|
|
|
Map<String, Object> capabilities = CommonUtil.jsonToMap(jsonString);
|
|
@@ -485,14 +518,20 @@ public class KakaoMsgHandler {
|
|
|
if(cNodeName.contains("light")) {
|
|
|
String[] strSplit = status.split("/");
|
|
|
// split 이 안됐다면 on off만 되는 예전 방식으로 전등 상태를 받았다는 뜻.
|
|
|
- if(!strSplit[1].equals("null") && strSplit[2].equals("null"))
|
|
|
- endpointId = "dimmer_"+endpointId;
|
|
|
- else if(!strSplit[2].equals("null"))
|
|
|
- endpointId = "colorDimmer_"+endpointId;
|
|
|
+ if(strSplit.length > 1) {
|
|
|
+ if(!strSplit[1].equals("null") && strSplit[2].equals("null")) {
|
|
|
+ endpointId = "dimmer_"+endpointId;
|
|
|
+ cNodeName = "dimmer_" + cNodeName;
|
|
|
+ }
|
|
|
+ else if(!strSplit[2].equals("null")) {
|
|
|
+ endpointId = "colorDimmer_"+endpointId;
|
|
|
+ cNodeName = "colorDimmer_"+cNodeName;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
String tmpModelId = cNodeName.equals("temper")?endpointId:cNodeName;
|
|
|
-
|
|
|
+ logger.debug("tmpModelId = " + tmpModelId + " || endpointID = " + endpointId);
|
|
|
|
|
|
|
|
|
THINGS_INFO.DEVICE_DETAIL detailDev = THINGS_INFO.getDeviceInfo(tmpModelId, status);
|
|
@@ -575,14 +614,18 @@ public class KakaoMsgHandler {
|
|
|
* @return
|
|
|
*/
|
|
|
|
|
|
- public static String setDeviceActionStr(String modelId, String capability, Map<String, Object> desired) {
|
|
|
+ public static String setDeviceActionStr(String endPointId, String modelId, String capability, Map<String, Object> desired) {
|
|
|
StringBuffer sb = new StringBuffer();
|
|
|
|
|
|
- THINGS_INFO.THINGS things = THINGS_INFO.getThingsType(modelId);
|
|
|
+ THINGS_INFO.THINGS things = THINGS_INFO.getThingsType(endPointId);
|
|
|
|
|
|
logger.debug("[setDeiceActionStr] - modelId = " + modelId + " || capability = " + capability + " || things endpoint = " + things.getEndPoint());
|
|
|
+ logger.debug("ACTION STATUS --> " + desired.toString());
|
|
|
try {
|
|
|
+ int brightness = 1;
|
|
|
+ int colorTemer = 1;
|
|
|
switch(things.getEndPoint()) {
|
|
|
+
|
|
|
case THINGS_INFO.THINGS_LIGHT:
|
|
|
if(capability.equals("Power") && desired.containsKey("power")) {
|
|
|
String tmpState = (String)desired.get("power");
|
|
@@ -594,11 +637,15 @@ public class KakaoMsgHandler {
|
|
|
|
|
|
if(capability.equals("Power") && desired.containsKey("power")) {
|
|
|
String tmpState = (String)desired.get("power");
|
|
|
- if(tmpState.equals("on") || tmpState.equals("off")) sb.append(tmpState);
|
|
|
+ if(tmpState.equals("on") || tmpState.equals("off")) {
|
|
|
+ sb.append(tmpState);
|
|
|
+ sb.append("/null/null");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if(desired.containsKey("brightness")) {
|
|
|
- sb.append("/").append(((int)desired.get("brightness"))/10*10);
|
|
|
+ brightness = ((int)desired.get("brightness"))/10 == 0 ? 1: ((int)desired.get("brightness"))/10;
|
|
|
+ sb.append("on").append("/").append(brightness).append("/null");
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -607,30 +654,42 @@ public class KakaoMsgHandler {
|
|
|
|
|
|
if(capability.equals("Power") && desired.containsKey("power")) {
|
|
|
String tmpState = (String)desired.get("power");
|
|
|
- if(tmpState.equals("on") || tmpState.equals("off")) sb.append(tmpState);
|
|
|
+ if(tmpState.equals("on") || tmpState.equals("off")) {
|
|
|
+ sb.append(tmpState);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+
|
|
|
if(desired.containsKey("brightness")) {
|
|
|
- sb.append("/").append(((int)desired.get("brightness"))/10*10);
|
|
|
- }else if(!desired.containsKey("brightness") && desired.containsKey("colorTemperature")) {
|
|
|
+ brightness = ((int)desired.get("brightness"))/10 == 0 ? 1: ((int)desired.get("brightness"))/10;
|
|
|
+ sb.append("/").append(brightness);
|
|
|
+ }else {
|
|
|
sb.append("/null");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
if(desired.containsKey("colorTemperature")) {
|
|
|
- sb.append("/").append(((int)desired.get("colorTemperature"))/1000*10);
|
|
|
+ colorTemer = ((int)desired.get("colorTemperature"))/1000 == 0 ? 1:((int)desired.get("colorTemperature"))/1000;
|
|
|
+ sb.append("/").append(colorTemer);
|
|
|
+ }else {
|
|
|
+ sb.append("/null");
|
|
|
}
|
|
|
+
|
|
|
break;
|
|
|
|
|
|
case THINGS_INFO.THINGS_TEMPER:
|
|
|
if(capability.equals("Power") && desired.containsKey("power")) {
|
|
|
String tmpState = (String)desired.get("power");
|
|
|
if(tmpState.equals("on") || tmpState.equals("off")) sb.append(tmpState);
|
|
|
+
|
|
|
+ if(tmpState.equals("on") && desired.containsKey("targetSetpoint")) sb.append("/").append(desired.get("targetSetpoint"));
|
|
|
}
|
|
|
|
|
|
if(capability.equals("TemperatureSetpoint") && desired.containsKey("targetSetpoint")) {
|
|
|
sb.append("on/").append(desired.get("targetSetpoint"));
|
|
|
}
|
|
|
|
|
|
+
|
|
|
break;
|
|
|
|
|
|
case THINGS_INFO.THINGS_GAS:
|
|
@@ -644,6 +703,12 @@ public class KakaoMsgHandler {
|
|
|
if(capability.equals("Power") && desired.containsKey("power")) {
|
|
|
String tmpState = (String)desired.get("power");
|
|
|
if(tmpState.equals("on") || tmpState.equals("off")) sb.append(tmpState);
|
|
|
+
|
|
|
+ if(tmpState.equals("on") && desired.containsKey("fanSpeed")) {
|
|
|
+ String tmpFanSpeed = (String)desired.get("fanSpeed");
|
|
|
+ if(tmpFanSpeed.equals("low") || tmpFanSpeed.equals("middle") || tmpFanSpeed.equals("high"))
|
|
|
+ sb.append(desired.get("fanSpeed"));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if(capability.equals("AirFlow") && desired.containsKey("fanSpeed")) {
|
|
@@ -655,8 +720,12 @@ public class KakaoMsgHandler {
|
|
|
break;
|
|
|
|
|
|
case THINGS_INFO.THINGS_ELECPLUG: // 지원하지 않음
|
|
|
- if(desired.containsKey("power")) sb.append(desired.get("power"));
|
|
|
- else if(desired.containsKey("mode")) sb.append(desired.get("mode"));
|
|
|
+ if(capability.equals("Power") && desired.containsKey("power")) {
|
|
|
+ String tmpState = (String)desired.get("power");
|
|
|
+ if(tmpState.equals("on"))
|
|
|
+ sb.append("on");
|
|
|
+ else if(tmpState.equals("off")) sb.append("off");
|
|
|
+ }
|
|
|
break;
|
|
|
|
|
|
case THINGS_INFO.THINGS_ELEVATOR:
|
|
@@ -687,27 +756,24 @@ public class KakaoMsgHandler {
|
|
|
String[] splitStr = status.split("\\/");
|
|
|
int temp1, temp2 = 0;
|
|
|
switch(things.getEndPoint()) {
|
|
|
- case THINGS_INFO.THINGS_LIGHT:
|
|
|
- state.put("power", splitStr[0]);
|
|
|
+ case THINGS_INFO.THINGS_ELECPLUG:
|
|
|
+ state.put("power", splitStr[1]);
|
|
|
+
|
|
|
break;
|
|
|
+ case THINGS_INFO.THINGS_LIGHT:
|
|
|
case THINGS_INFO.THINGS_LIGHT_DIMMER:
|
|
|
- state.put("power", splitStr[0]);
|
|
|
- if(!splitStr[1].equals("null")) {
|
|
|
- temp1 = Integer.parseInt(splitStr[1]);
|
|
|
- state.put("brightness", temp1);
|
|
|
- }
|
|
|
- break;
|
|
|
case THINGS_INFO.THINGS_COLOR_LIGHT_DIMMER:
|
|
|
|
|
|
state.put("power", splitStr[0]);
|
|
|
|
|
|
-
|
|
|
- if(!splitStr[1].equals("null")) {
|
|
|
- temp1 = Integer.parseInt(splitStr[1]);
|
|
|
+ if(things.getEndPoint() == THINGS_INFO.THINGS_LIGHT) break;
|
|
|
+
|
|
|
+ if(splitStr[1] != null && !splitStr[1].equals("null")) {
|
|
|
+ temp1 = Integer.parseInt(splitStr[1]) * 10;
|
|
|
state.put("brightness", temp1);
|
|
|
}
|
|
|
|
|
|
- if(!splitStr[2].equals("null")) {
|
|
|
+ if(splitStr[2] != null && !splitStr[2].equals("null")) {
|
|
|
temp2 = (Integer.parseInt(splitStr[2])*1000);
|
|
|
state.put("colorMode", "colorTemperature");
|
|
|
state.put("colorTemperature", temp2);
|