Forráskód Böngészése

[홈허브 메뉴 디자인가이드 적용 완료]
[노드 제어 적용 완료]

aaron 9 éve
szülő
commit
e6cab293c9

+ 12 - 0
kneet_v3/src/main/java/com/ntels/kneet/v3/common/Constants.java

@@ -873,12 +873,22 @@ public interface Constants {
     public static final String WEBSOCKET_KEY_ONLINE                     = "online";
     public static final String WEBSOCKET_KEY_NODE_ID                    = "node_id";
     public static final String WEBSOCKET_KEY_COMMAND_TYPE               = "command_type";
+    public static final String WEBSOCKET_KEY_CMDCLS_ID                  = "cmdcls_id";
+    public static final String WEBSOCKET_KEY_CMDCLS_VALUE               = "cmdcls_value";
+    public static final String WEBSOCKET_KEY_REQUEST_VALUE              = "request_value";
+    public static final String WEBSOCKET_KEY_REQUEST_TIME               = "request_time";
+    public static final String WEBSOCKET_KEY_RESPONSE_TIME              = "response_time";
+    public static final String WEBSOCKET_KEY_COMMAND_MESSAGE            = "command_message";
+    public static final String WEBSOCKET_KEY_COMMAND_STATUS             = "command_status";
+    public static final String WEBSOCKET_KEY_RESPONSE_VALUE             = "response_value";
+    public static final String WEBSOCKET_KEY_COLLECT_TIME               = "collect_time";
 
     /** WebSocket API 분류 코드 */
     public static final int WEBSOCKET_SEND_AUTH                 = 1001;
 
     public static final int WEBSOCKET_SEND_DEVICE_REGISTER      = 2001;
     public static final int WEBSOCKET_SEND_DEVICE_DELETE        = 2002;
+    public static final int WEBSOCKET_SEND_NODE_COMMAND         = 2003;
 
     /** WebSocket Message Type */
     public static final String WEBSOCKET_TYPE_AUTH                  = "auth";
@@ -890,6 +900,8 @@ public interface Constants {
     public static final String WEBSOCKET_TYPE_DEVICE_CONTENT        = "device.content";
 
     public static final String WEBSOCKET_TYPE_NODE_COMMAND          = "node.command";
+    public static final String WEBSOCKET_TYPE_NODE_COMMAND_RESULT   = "node.command.result";
+    public static final String WEBSOCKET_TYPE_NODE_CONTENT          = "node.content";
 
     /** Websocket parameter command type */
     public static final String WEBSOCKET_COMM_TYPE_CONTROL          = "control";

+ 24 - 2
kneet_v3/src/main/java/com/ntels/kneet/v3/common/websocket/WebSocketSender.java

@@ -10,6 +10,9 @@ import com.ntels.kneet.v3.common.Constants;
 import com.ntels.kneet.v3.common.util.LogUtil;
 import com.ntels.kneet.v3.common.util.Util;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import java.util.HashMap;
 
 /**
@@ -52,8 +55,28 @@ public class WebSocketSender {
         send(util.MapToJson(hmParams));
     }
 
+    public void send_node_command(HashMap<String, Object> hmParams) {
+        JSONObject joSendParams = null;
+        JSONObject joRequestValue = new JSONObject();
+
+        try {
+            joRequestValue.put(util.null2string(hmParams.get(Constants.WEBSOCKET_KEY_CMDCLS_ID)),
+                               util.null2string(hmParams.get(Constants.WEBSOCKET_KEY_CMDCLS_VALUE)));
+
+            hmParams.remove(Constants.WEBSOCKET_KEY_CMDCLS_ID);
+            hmParams.remove(Constants.WEBSOCKET_KEY_CMDCLS_VALUE);
+
+            joSendParams = new JSONObject(util.MapToJson(hmParams));
+            joSendParams.put(Constants.WEBSOCKET_KEY_REQUEST_VALUE, joRequestValue);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        send(joSendParams.toString());
+    }
+
     private void send(final String sParam) {
-        Log.i(TAG, "send parameter : " + sParam);
+        LogUtil.i(TAG, "send parameter : " + sParam);
         AsyncTask<String, Integer, Boolean> sendTask = new AsyncTask<String, Integer, Boolean>() {
 
             /**
@@ -87,5 +110,4 @@ public class WebSocketSender {
         new AsyncTaskCancelTimerTask(sendTask, 20000, 1000, true).start();
         sendTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
     }
-
 }

+ 13 - 5
kneet_v3/src/main/java/com/ntels/kneet/v3/common/websocket/WebSocketService.java

@@ -109,15 +109,20 @@ public class WebSocketService extends Service {
                 appConfig.setbWebSocketConn(true);
                 ws.setStringCallback(new WebSocket.StringCallback() {
                     @Override
-                    public void onStringAvailable(String message) {
+                    public void onStringAvailable(final String message) {
                         LogUtil.i(TAG, "WebSocket Response : " + message);
                         if ( checkBasicStatus(message) ) { return; }
 
-                        if ( webSocketResponses.size() > 0 ) {
-                            for ( onWebSocketResponse wsr : webSocketResponses ) {
-                                wsr.onWebSocketResponse(message);
+                        handler.post(new Runnable() {
+                            @Override
+                            public void run() {
+                                if ( webSocketResponses.size() > 0 ) {
+                                    for ( onWebSocketResponse wsr : webSocketResponses ) {
+                                        wsr.onWebSocketResponse(message);
+                                    }
+                                }
                             }
-                        }
+                        });
                     }
                 });
                 webSocket = ws;
@@ -213,6 +218,9 @@ public class WebSocketService extends Service {
             case Constants.WEBSOCKET_SEND_DEVICE_DELETE:
                 webSocketSender.send_device_delete(hmParams);
                 break;
+            case Constants.WEBSOCKET_SEND_NODE_COMMAND:
+                webSocketSender.send_node_command(hmParams);
+                break;
 
         }
     }

+ 140 - 8
kneet_v3/src/main/java/com/ntels/kneet/v3/view/things/Fragment_Things.java

@@ -70,7 +70,8 @@ public class Fragment_Things extends Fragment implements View.OnClickListener,
     private              int                                iType                                              = 0;
     private static final int                                MSG_COM_G_DEVICES                                  = 1;
     private static final int                                MSG_COM_G_DEVICES_NODES                            = 2;
-    private static final int                                MSG_COM_P_DEVICES_DEVICE_ID_NODES_NODE_ID_COMMANDS = 3;
+    private static final int                                MSG_COM_WS_NODE_COMMAND                            = 3;
+//    private static final int                                MSG_COM_P_DEVICES_DEVICE_ID_NODES_NODE_ID_COMMANDS = 3;
     private              WebSocketService                   webSocketService;
     private              boolean                            bBound                                             = false;
 
@@ -100,6 +101,7 @@ public class Fragment_Things extends Fragment implements View.OnClickListener,
     private String       sCall_HTTP_device_id     = "";
     private String       sCall_HTTP_node_id       = "";
     private String       sCall_HTTP_request_value = "";
+    private String       sCall_HTTP_cmdcls_id     = "";
     private Boolean      bPollingPause            = false;
     private Boolean      bPollingCancel           = false;
     private Boolean      bActStop                 = false;
@@ -114,11 +116,31 @@ public class Fragment_Things extends Fragment implements View.OnClickListener,
         @Override
         public void onWebSocketResponse(String result) {
             try {
+
                 JSONObject jsonObject = new JSONObject(result);
-                LogUtil.i(TAG, "websocket message type : " + jsonObject.get(Constants.WEBSOCKET_KEY_MESSAGE_TYPE));
-                        /*if ( util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_MESSAGE_TYPE)).equals(Constants.WEBSOCKET_TYPE_ONLINE)) {
-                            appConfig.setSelect_Homegrp_Homehub_Online_State(util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_DEVICE_ONLINE)));
-                        }*/
+                String messageType = util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_MESSAGE_TYPE));
+                LogUtil.i(TAG, "websocket message type : " + messageType);
+                String resultCode = "";
+                String resultMsg = "";
+                if ( jsonObject.has(Constants.WEBSOCKET_KEY_RESULT_CODE) ) {
+                    resultCode = util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_RESULT_CODE));
+                }
+                if ( jsonObject.has(Constants.WEBSOCKET_KEY_RESULT_MSG) ) {
+                    resultMsg = util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_RESULT_MSG));
+                }
+                if ( messageType.equals(Constants.WEBSOCKET_TYPE_NODE_COMMAND_RESULT) ) {
+                    result_WS_node_command(jsonObject);
+                } else if ( messageType.equals(Constants.WEBSOCKET_TYPE_NODE_CONTENT) ) {
+                    notification_WS_node_content(jsonObject);
+                } else {
+                    /*final String finalResultMsg = resultMsg;
+                    runOnUiThread(new Runnable() {
+                        @Override
+                        public void run() {
+                            util.setShowToast(act, finalResultMsg, Toast.LENGTH_SHORT);
+                        }
+                    });*/
+                }
             } catch (JSONException e) {
                 e.printStackTrace();
             }
@@ -594,9 +616,10 @@ public class Fragment_Things extends Fragment implements View.OnClickListener,
                     //dialog_show();
                     send_G_devices_nodes();
                     break;
-                case MSG_COM_P_DEVICES_DEVICE_ID_NODES_NODE_ID_COMMANDS:
+                case MSG_COM_WS_NODE_COMMAND:
                     //dialog_show();
-                    send_P_devices_device_id_nodes_node_id_commands();
+//                    send_P_devices_device_id_nodes_node_id_commands();
+                    send_WS_node_command();
                     break;
 
                 default:
@@ -606,6 +629,114 @@ public class Fragment_Things extends Fragment implements View.OnClickListener,
         }
     }
 
+    /**
+     * <PRE>
+     * 1. MethodName: send_WS_node_command
+     * 2. ClassName :
+     * 3. Comment   : [Send]서비스 허브에 노드 제어를 요청한다.
+     * 4. Developer : 정백호
+     * 5. Created   : 2016. 07.
+     * </PRE>
+     */
+    private void send_WS_node_command() {
+        HashMap<String, Object> sendParams = new HashMap<>();
+        sendParams.put(Constants.WEBSOCKET_KEY_MESSAGE_TYPE, Constants.WEBSOCKET_TYPE_NODE_COMMAND);
+        sendParams.put(Constants.WEBSOCKET_KEY_DEVICE_ID, sCall_HTTP_device_id);
+        sendParams.put(Constants.WEBSOCKET_KEY_NODE_ID, sCall_HTTP_node_id);
+        sendParams.put(Constants.WEBSOCKET_KEY_COMMAND_TYPE, Constants.WEBSOCKET_COMM_TYPE_CONTROL);
+        sendParams.put(Constants.WEBSOCKET_KEY_CMDCLS_ID, sCall_HTTP_cmdcls_id);
+        sendParams.put(Constants.WEBSOCKET_KEY_CMDCLS_VALUE, sCall_HTTP_request_value);
+        sendParams.put(Constants.WEBSOCKET_KEY_REQUEST_ID, appConfig.getiSelect_Servicehub_Request_Id());
+
+        webSocketService.send(Constants.WEBSOCKET_SEND_NODE_COMMAND, sendParams);
+    }
+
+    /**
+     * <PRE>
+     * 1. MethodName: result_WS_node_command
+     * 2. ClassName :
+     * 3. Comment   : [Result]서비스 허브에 노드 제어를 요청한다.
+     * 4. Developer : 정백호
+     * 5. Created   : 2016. 07.
+     * </PRE>
+     */
+    private void result_WS_node_command(JSONObject joResult) throws JSONException {
+        String sResultHTTP_device_id = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_DEVICE_ID));
+        String sResultHTTP_node_id = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_NODE_ID));
+        String sResultHTTP_request_time = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_REQUEST_TIME));
+        for ( int iRow = 0; iRow < alTotalList.size(); iRow++ ) {
+
+            String sHTTP_device_id = util.null2string(alTotalList.get(iRow).get(Constants.HTTP_device_id));
+            String sHTTP_node_id = util.null2string(alTotalList.get(iRow).get(Constants.HTTP_node_id));
+            if ( sResultHTTP_device_id.equals(sHTTP_device_id) && sResultHTTP_node_id.equals(sHTTP_node_id) ) {
+                alTotalList.get(iRow).put(Constants.HTTP_request_time, sResultHTTP_request_time);
+
+                Dlog.v("Things jino0 =" + sResultHTTP_request_time);
+                break;
+            }
+        }
+        setHomeHubStateList();
+    }
+
+    /**
+     * <PRE>
+     * 1. MethodName: notification_WS_node_content
+     * 2. ClassName :
+     * 3. Comment   : [notification]서비스 허브에서 노드 컨텐트 정보를 받는다.
+     * 4. Developer : 정백호
+     * 5. Created   : 2016. 07.
+     * </PRE>
+     */
+    private void notification_WS_node_content(JSONObject joResult) throws JSONException {
+        LogUtil.i(TAG, "notification_WS_node_content!!");
+        String sTempHTTP_device_id1 = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_DEVICE_ID));
+        String sTempHTTP_node_id1 = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_NODE_ID));
+        String sTempHTTP_collect_time1 = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_COLLECT_TIME));
+        HashMap<String, Object> hmContentValue = util.jsonToMap(joResult.get(Constants.WEBSOCKET_KEY_CONTENT_VALUE));
+        String sTempHTTP_online_state1 = util.null2string(hmContentValue.get(Constants.WEBSOCKET_KEY_ONLINE));
+
+        for ( int iRow1 = 0; iRow1 < alTotalList.size(); iRow1++ ) {
+            String sTempHTTP_device_id2 = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_device_id));
+            String sTempHTTP_node_id2 = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_node_id));
+            String sTempHTTP_request_time2 = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_request_time));
+            String sContentValue = util.null2string(hmContentValue.get(alTotalList.get(iRow1).get(Constants.HTTP_cmdcls_id)));
+            if ( sTempHTTP_device_id1.equals(sTempHTTP_device_id2) && sTempHTTP_node_id1.equals(sTempHTTP_node_id2) ) {
+                alTotalList.get(iRow1).put(Constants.HTTP_content_value, sContentValue);
+                alTotalList.get(iRow1).put(Constants.HTTP_collect_time, sTempHTTP_collect_time1);
+                alTotalList.get(iRow1).put(Constants.HTTP_online_state, sTempHTTP_online_state1);
+                LogUtil.i(TAG, "alTotalList : " + alTotalList.toString());
+                if ( !sTempHTTP_request_time2.equals("") ) {
+                    if ( !sTempHTTP_collect_time1.equals("") ) {
+                        if ( util.str2long(util.UTCtoLocal4(sTempHTTP_collect_time1.replaceAll("Z", ""))) > util.str2long(util.UTCtoLocal4(sTempHTTP_request_time2.replaceAll(
+                                "Z", ""))) ) {
+                            iThingsAction = 0;
+                            alTotalList.get(iRow1).put(Constants.HTTP_request_time, "");
+                            Dlog.v("Things jino1");
+                        }
+                    }
+                }
+                break;
+            }
+        }
+        for ( int iRow1 = 0; iRow1 < alTotalList.size(); iRow1++ ) {
+            String sHTTP_request_time = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_request_time));
+            if ( !sHTTP_request_time.equals("") ) {
+                Dlog.v("Things jino5");
+                Dlog.v("Things jino5 sHTTP_request_time=" + sHTTP_request_time);
+                Dlog.v("Things jino5 util.getRealTime1()=" + util.getRealTime1());
+                Dlog.v("Things jino5 10초후=" + util.stringDateAddTime(util.UTCtoLocal4(sHTTP_request_time.replaceAll("Z", "")), 10000));
+                if ( util.str2long(util.getRealTime1()) > util.str2long(util.stringDateAddTime(util.UTCtoLocal4(sHTTP_request_time.replaceAll("Z", "")), 10000)) ) {
+                    iThingsAction++;
+                    alTotalList.get(iRow1).put(Constants.HTTP_request_time, "");
+                }
+            }
+        }
+        if ( iThingsAction == 3 ) {
+            util.setShowToast(act, util.getString(act, R.string.MSG867), Toast.LENGTH_SHORT);
+        }
+        setHomeHubStateList();
+    }
+
     /**
      * <PRE>
      * 1. MethodName: send_G_devices_nodes
@@ -1167,6 +1298,7 @@ public class Fragment_Things extends Fragment implements View.OnClickListener,
             sCall_HTTP_request_value = dataAdapter.getHTTP_Value();
             sCall_HTTP_device_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_device_id));
             sCall_HTTP_node_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_node_id));
+            sCall_HTTP_cmdcls_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_cmdcls_id));
             String sHTTP_content_value = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_content_value));
             String sHTTP_cmdcls_type_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_cmdcls_type_id));
             String sHTTP_cmdcls_code = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_cmdcls_code));
@@ -1186,7 +1318,7 @@ public class Fragment_Things extends Fragment implements View.OnClickListener,
             } else {
                 util.setVibrator(100);
             }
-            ComHandler.sendMessageDelayed(ComHandler.obtainMessage(MSG_COM_P_DEVICES_DEVICE_ID_NODES_NODE_ID_COMMANDS), 10);
+            ComHandler.sendMessageDelayed(ComHandler.obtainMessage(MSG_COM_WS_NODE_COMMAND), 10);
         }
     }
 }

+ 2 - 0
kneet_v3/src/main/java/com/ntels/kneet/v3/view/things/Fragment_Things_Adapter.java

@@ -295,6 +295,8 @@ public class Fragment_Things_Adapter extends RecyclerView.Adapter<RecyclerView.V
                 String sHTTP_content_value = util.null2string(hmItem.get(Constants.HTTP_content_value));
                 /**하위 노드 개수*/
                 String sHTTP_cmdcls_count = util.null2string(hmItem.get(Constants.HTTP_cmdcls_count));
+                /** 커맨드클래스 ID */
+                String sHTTP_cmdcls_id = util.null2string(hmItem.get(Constants.HTTP_cmdcls_id));
                 /**장치 생성 일시 (포맷 : 년월일시분초)*/
                 String sHTTP_create_datetime = util.null2string(hmItem.get(Constants.HTTP_create_datetime));
                 String sHTTP_collect_time = util.null2string(hmItem.get(Constants.HTTP_collect_time));

+ 119 - 16
kneet_v3/src/main/java/com/ntels/kneet/v3/view/things/Things_Detail.java

@@ -134,6 +134,7 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
     private String       sCall_HTTP_device_id     = "";
     private String       sCall_HTTP_node_id       = "";
     private String       sCall_HTTP_request_value = "";
+    private String       sCall_HTTP_cmdcls_id     = "";
     private Boolean      bPollingPause            = false;
     private Boolean      bPollingCancel           = false;
     private Boolean      bActStop                 = false;
@@ -176,6 +177,11 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
             scheduledFuture.cancel(false);
             bPollingPause = true;
         }
+        if ( bBound ) {
+            webSocketService.removeWebSocketResponse(webSocketResponse);
+            unbindService(serviceConnection);
+            bBound = false;
+        }
     }
 
     @Override protected void onNewIntent(Intent saveIntent) {
@@ -216,28 +222,30 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
         @Override
         public void onWebSocketResponse(String result) {
             try {
+
                 JSONObject jsonObject = new JSONObject(result);
-                LogUtil.i(TAG, "websocket message type : " + jsonObject.get(Constants.WEBSOCKET_KEY_MESSAGE_TYPE));
-                String resultCode = util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_RESULT_CODE));
+                String messageType = util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_MESSAGE_TYPE));
+                LogUtil.i(TAG, "websocket message type : " + messageType);
+                String resultCode = "";
                 String resultMsg = "";
+                if ( jsonObject.has(Constants.WEBSOCKET_KEY_RESULT_CODE) ) {
+                    resultCode = util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_RESULT_CODE));
+                }
                 if ( jsonObject.has(Constants.WEBSOCKET_KEY_RESULT_MSG) ) {
                     resultMsg = util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_RESULT_MSG));
                 }
-                if ( resultCode.equals("00") ) {
-                    appConfig.setSelect_Homegrp_Id(util.null2string(jsonObject.get(Constants.WEBSOCKET_KEY_HOME_GROUP_ID)));
-                    appConfig.setSelect_Homegrp_Homehub_Device_Id(util.null2string(Constants.WEBSOCKET_KEY_DEVICE_ID));
-                    appConfig.setsSelect_Homegrp_Homehub_Device_Key(util.null2string(Constants.WEBSOCKET_KEY_DEVICE_KEY));
-                    intent = new Intent();
-                    act.setResult(RESULT_OK, intent);
-                    finish();
+                if ( messageType.equals(Constants.WEBSOCKET_TYPE_NODE_COMMAND_RESULT) ) {
+                    result_WS_node_command(jsonObject);
+                } else if ( messageType.equals(Constants.WEBSOCKET_TYPE_NODE_CONTENT) ) {
+                    notification_WS_node_content(jsonObject);
                 } else {
-                    final String finalResultMsg = resultMsg;
+                    /*final String finalResultMsg = resultMsg;
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
                             util.setShowToast(act, finalResultMsg, Toast.LENGTH_SHORT);
                         }
-                    });
+                    });*/
                 }
             } catch (JSONException e) {
                 e.printStackTrace();
@@ -579,7 +587,8 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
                     break;
                 case MSG_COM_WS_NODE_COMMAND:
                     //dialog_show();
-                    send_P_devices_device_id_nodes_node_id_commands();
+//                    send_P_devices_device_id_nodes_node_id_commands();
+                    send_WS_node_command();
                     break;
                 default:
                     break;
@@ -838,14 +847,16 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
                 util.getTextView(act, R.id.tvThingsName).setText(sHTTP_device_name);
 
                 ArrayList<HashMap<String, Object>> alList = util.jsonToArrayListMap(sCmdclsList);
+                LogUtil.i(TAG, "alList : " + alList.toString());
                 if ( alList.size() > 0 ) {
                     for ( int iRow = 0; iRow < alList.size(); iRow++ ) {
                         HashMap<String, Object> hmTemp = new HashMap<String, Object>();
                         hmTemp = alList.get(iRow);
                         hmTemp.put(Constants.HTTP_device_id, sHTTP_device_id);
+                        hmTemp.put(Constants.HTTP_node_id, sHTTP_node_id);
                         hmTemp.put(Constants.HTTP_device_mf_id, sHTTP_device_mf_id);
                         hmTemp.put(Constants.HTTP_online_state, sHTTP_online_state);
-                        hmTemp.put(Constants.HTTP_cmdcls_id, sHTTP_cmdcls_id);
+                        LogUtil.i(TAG, "hmTemp : " + hmTemp.toString());
                         alTotalList.add(hmTemp);
                     }
                 }
@@ -1430,6 +1441,7 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
             sCall_HTTP_request_value = pageAdapter.getHTTP_Value();
             sCall_HTTP_device_id = util.null2string(alTotalList_M.get(iPosition).get(Constants.HTTP_device_id));
             sCall_HTTP_node_id = util.null2string(alTotalList_M.get(iPosition).get(Constants.HTTP_node_id));
+            sCall_HTTP_cmdcls_id = util.null2string(alTotalList_M.get(iPosition).get(Constants.HTTP_cmdcls_id));
             String sHTTP_content_value = util.null2string(alTotalList_M.get(iPosition).get(Constants.HTTP_content_value));
             String sHTTP_cmdcls_type_id = util.null2string(alTotalList_M.get(iPosition).get(Constants.HTTP_cmdcls_type_id));
             String sHTTP_cmdcls_code = util.null2string(alTotalList_M.get(iPosition).get(Constants.HTTP_cmdcls_code));
@@ -1437,8 +1449,10 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
 
             util.callBtnGoogleAnalytics(act, "Control_Things", sHTTP_cmdcls_code + "_2depth");
 
+            LogUtil.i(TAG, "Row info : " + alTotalList_M.get(iPosition).toString());
             Dlog.v("sCall_HTTP_request_value", sCall_HTTP_request_value);
             Dlog.v("sHTTP_content_value", sHTTP_content_value);
+            Dlog.v("sHTTP_cmdcls_id", sCall_HTTP_cmdcls_id);
 
             String sTempValue = util.getStringValues(act, "CMDCLS_TYPE_ID_" + sHTTP_cmdcls_type_id + "_" + sCall_HTTP_request_value);
 
@@ -1461,6 +1475,7 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
         sCall_HTTP_request_value = sValue;
         sCall_HTTP_device_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_device_id));
         sCall_HTTP_node_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_node_id));
+        sCall_HTTP_cmdcls_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_cmdcls_id));
         String sHTTP_content_value = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_content_value));
         String sHTTP_cmdcls_type_id = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_cmdcls_type_id));
         String sHTTP_cmdcls_code = util.null2string(alTotalList.get(iPosition).get(Constants.HTTP_cmdcls_code));
@@ -1470,6 +1485,7 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
 
         Dlog.v("sCall_HTTP_request_value", sCall_HTTP_request_value);
         Dlog.v("sHTTP_content_value", sHTTP_content_value);
+        Dlog.v("sHTTP_cmdcls_id", sCall_HTTP_cmdcls_id);
 
         String sTempValue = util.getStringValues(act, "CMDCLS_TYPE_ID_" + sHTTP_cmdcls_type_id + "_" + sCall_HTTP_request_value);
 
@@ -1499,10 +1515,97 @@ public class Things_Detail extends CustomActionBarActivity implements View.OnCli
         sendParams.put(Constants.WEBSOCKET_KEY_DEVICE_ID, sDEVICE_ID);
         sendParams.put(Constants.WEBSOCKET_KEY_NODE_ID, sNODE_ID);
         sendParams.put(Constants.WEBSOCKET_KEY_COMMAND_TYPE, Constants.WEBSOCKET_COMM_TYPE_CONTROL);
-        sendParams.put(Constants.WEBSOCKET_KEY_DEVICE_PROFILE_VERSION, sWS_device_profile_version);
-        sendParams.put(Constants.WEBSOCKET_KEY_DEVICE_PASSWORD, sPass);
+        sendParams.put(Constants.WEBSOCKET_KEY_CMDCLS_ID, sCall_HTTP_cmdcls_id);
+        sendParams.put(Constants.WEBSOCKET_KEY_CMDCLS_VALUE, sCall_HTTP_request_value);
         sendParams.put(Constants.WEBSOCKET_KEY_REQUEST_ID, appConfig.getiSelect_Servicehub_Request_Id());
 
-        webSocketService.send(Constants.WEBSOCKET_SEND_DEVICE_REGISTER, sendParams);
+        webSocketService.send(Constants.WEBSOCKET_SEND_NODE_COMMAND, sendParams);
+    }
+
+    /**
+     * <PRE>
+     * 1. MethodName: result_WS_node_command
+     * 2. ClassName :
+     * 3. Comment   : [Result]서비스 허브에 노드 제어를 요청한다.
+     * 4. Developer : 정백호
+     * 5. Created   : 2016. 07.
+     * </PRE>
+     */
+    private void result_WS_node_command(JSONObject joResult) throws JSONException {
+        String sResultHTTP_device_id = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_DEVICE_ID));
+        String sResultHTTP_node_id = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_NODE_ID));
+        String sResultHTTP_request_time = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_REQUEST_TIME));
+        for ( int iRow = 0; iRow < alTotalList.size(); iRow++ ) {
+
+            String sHTTP_device_id = util.null2string(alTotalList.get(iRow).get(Constants.HTTP_device_id));
+            String sHTTP_node_id = util.null2string(alTotalList.get(iRow).get(Constants.HTTP_node_id));
+            if ( sResultHTTP_device_id.equals(sHTTP_device_id) && sResultHTTP_node_id.equals(sHTTP_node_id) ) {
+                alTotalList.get(iRow).put(Constants.HTTP_request_time, sResultHTTP_request_time);
+
+                Dlog.v("Things jino0 =" + sResultHTTP_request_time);
+                break;
+            }
+        }
+        setHomeHubStateList();
+    }
+
+    /**
+     * <PRE>
+     * 1. MethodName: notification_WS_node_content
+     * 2. ClassName :
+     * 3. Comment   : [notification]서비스 허브에서 노드 컨텐트 정보를 받는다.
+     * 4. Developer : 정백호
+     * 5. Created   : 2016. 07.
+     * </PRE>
+     */
+    private void notification_WS_node_content(JSONObject joResult) throws JSONException {
+        LogUtil.i(TAG, "notification_WS_node_content!!");
+        String sTempHTTP_device_id1 = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_DEVICE_ID));
+        String sTempHTTP_node_id1 = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_NODE_ID));
+        String sTempHTTP_collect_time1 = util.null2string(joResult.get(Constants.WEBSOCKET_KEY_COLLECT_TIME));
+        HashMap<String, Object> hmContentValue = util.jsonToMap(joResult.get(Constants.WEBSOCKET_KEY_CONTENT_VALUE));
+        String sTempHTTP_online_state1 = util.null2string(hmContentValue.get(Constants.WEBSOCKET_KEY_ONLINE));
+
+        for ( int iRow1 = 0; iRow1 < alTotalList.size(); iRow1++ ) {
+            String sTempHTTP_device_id2 = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_device_id));
+            String sTempHTTP_node_id2 = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_node_id));
+            String sTempHTTP_request_time2 = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_request_time));
+            String sContentValue = util.null2string(hmContentValue.get(alTotalList.get(iRow1).get(Constants.HTTP_cmdcls_id)));
+            if ( sTempHTTP_device_id1.equals(sTempHTTP_device_id2) && sTempHTTP_node_id1.equals(sTempHTTP_node_id2) ) {
+                alTotalList.get(iRow1).put(Constants.HTTP_content_value, sContentValue);
+                alTotalList.get(iRow1).put(Constants.HTTP_collect_time, sTempHTTP_collect_time1);
+                alTotalList.get(iRow1).put(Constants.HTTP_online_state, sTempHTTP_online_state1);
+                LogUtil.i(TAG, "alTotalList : " + alTotalList.toString());
+                if ( !sTempHTTP_request_time2.equals("") ) {
+                    if ( !sTempHTTP_collect_time1.equals("") ) {
+                        if ( util.str2long(util.UTCtoLocal4(sTempHTTP_collect_time1.replaceAll("Z", ""))) > util.str2long(util.UTCtoLocal4(sTempHTTP_request_time2.replaceAll(
+                                "Z", ""))) ) {
+                            iThingsAction = 0;
+                            alTotalList.get(iRow1).put(Constants.HTTP_request_time, "");
+                            Dlog.v("Things jino1");
+                        }
+                    }
+                }
+                break;
+            }
+        }
+        for ( int iRow1 = 0; iRow1 < alTotalList.size(); iRow1++ ) {
+            String sHTTP_request_time = util.null2string(alTotalList.get(iRow1).get(Constants.HTTP_request_time));
+            if ( !sHTTP_request_time.equals("") ) {
+                Dlog.v("Things jino5");
+                Dlog.v("Things jino5 sHTTP_request_time=" + sHTTP_request_time);
+                Dlog.v("Things jino5 util.getRealTime1()=" + util.getRealTime1());
+                Dlog.v("Things jino5 10초후=" + util.stringDateAddTime(util.UTCtoLocal4(sHTTP_request_time.replaceAll("Z", "")), 10000));
+                if ( util.str2long(util.getRealTime1()) > util.str2long(util.stringDateAddTime(util.UTCtoLocal4(sHTTP_request_time.replaceAll("Z", "")), 10000)) ) {
+                    iThingsAction++;
+                    alTotalList.get(iRow1).put(Constants.HTTP_request_time, "");
+                }
+            }
+        }
+        if ( iThingsAction == 3 ) {
+            util.setShowToast(act, util.getString(act, R.string.MSG867), Toast.LENGTH_SHORT);
+        }
+        setNode_Disp();
+        setHomeHubStateList();
     }
 }