DAMDA Docs
  • DAMDA Overview
  • Quick Start
    • 개발환경 구성하기
    • Hello DAMDA 따라하기
    • ThinQ 연결하기
    • 내 컴포넌트 로그 확인하기
    • 내 컴포넌트 원격 제어하기
  • FUNDAMENTALS
    • DAMDA 기기
      • DAMDA Installer
        • DAMDA Installer 설치하기
        • DAMDA 설치하기
        • DAMDA 삭제하기
        • DAMDA Installer 삭제하기
      • DAMDA Debugging Console
      • DAMDA Home
        • 기기 등록 하기
        • 기기 등록 해제하기
      • Custom Sub Device
        • Capability
        • Profile
        • Functions
    • DAMDA Cloud
      • 계정 관리
        • 계정 생성하기
        • 기타
      • 컴포넌트 관리
        • DAMDA Components
        • 컴포넌트 초기화하기
        • 컴포넌트 개발하기
        • 컴포넌트 생성하기
        • 컴포넌트 배포하기
    • DAMDA Tools
      • DAMDA CLI
        • Configuration
        • Component
        • Device
        • Deployment
      • DAMDA Simulator
  • REFERENCE
    • API Reference
      • ThinQ API
        • APIs
          • ThinQ 계정 등록
          • 사용자 홈 목록 가져오기
          • 사용자 기기 목록 가져오기
          • 기기 등록하기
          • 기기 정보 가져오기
          • 기기 제어하기
          • 기기 삭제하기
          • 기기 정보 전달하기
        • Error / Exceptions
      • Hub API
        • APIs
          • 지원 기기타입 가져오기
          • 기기 profile 가져오기
          • Capability 가져오기
          • 서브 디바이스 등록하기
          • 서브 디바이스 삭제하기
          • 등록 / 삭제 결과 확인하기
          • 서브 디바이스 리스트 조회
          • 서브 디바이스 정보 조회
          • 서브 디바이스 상태 조회
          • 서브 디바이스 제어
          • 제어 결과 확인
          • 서브 디바이스 상태 모니터링
          • 전체 서브 디바이스 상태 모니터링
        • Types
          • Device
          • DeviceState
      • 가전 API
        • 가전 상태 조회
        • 가전 제어
        • APIs
          • 공통 | Headers
          • 공통 | Response
          • 공통 | Error
          • 가전 목록 조회
          • 가전 상태 조회
          • 가전 Profile 조회
          • 가전 제어
          • EMP Access Token 발급
          • Event/Push Callback (Websocket)
        • Types
          • Device Type
          • Device Profile
      • webOS TV API
        • TV 리스트 조회
        • TV 등록
        • Custom SSAP Command
        • Control
          • ON/OFF
          • Channel
          • Audio
          • App
          • UI 및 기타
        • Remote
        • Subscribe
    • Samples
      • Hello DAMDA
      • ThinQ 연결하기
      • Debugging App
      • 가전 App
      • Proto Sub Device
      • TV화면 캡쳐 + AWS Rekognition
      • DAMDA Hub
Powered by GitBook
On this page
  • 0. What you can get here
  • 1. 기본 구조
  • 2. 사용자 컴포넌트에서 제어명령 받기
  • 0. 준비
  • 1. 제어 메세지 받기
  • 2. 제어 결과 회신하기
  • 3. 다른 담다 기기 제어하기
  • 4. TPA에서 제어 명령 날리기
  1. Quick Start

내 컴포넌트 원격 제어하기

DAMDA 제품에 배포한 내 컴포넌트를 원격으로 제어하기 위한 방법을 설명합니다.

Previous내 컴포넌트 로그 확인하기NextDAMDA 기기

Last updated 2 years ago

0. What you can get here

원격제어 기능을 통해 TPA와 DAMDA 컴포넌트 간 통신할 수 있습니다. 혹은 하나의 DAMDA 디바이스에서 다른 DAMDA 디바이스를 제어할 수 있습니다.

1. 기본 구조

DAMDA 기기 내부는 다음과 같은 구조로 구되어 있습니다 .

  • ThinQ Agent : ThinQ Server와 담다 기기간의 Communication을 담당합니다.

  • MQTT Broker : ThinQ Agent와 사용자 컴포넌트간의 제어 명령을 전달합니다.

    • 'damda/control' : ThinQ Server로 부터 해당 기기로 전달되는 제어 명령이 저장됩니다.

    • 'damda/control/result' : 컴포넌트로 전달된 제어 명령에 대한 결과를 저장합니다.

2. 사용자 컴포넌트에서 제어명령 받기

0. 준비

기본적으로 TPA에서 (또는 다른 담다 기기에서) 전달되는 제어 명령은 사용자가 직접 정의하여 사용합니다.

TPA에서 명령을 보내는 경우는#4.-tpa를 참고해주세요

{
	"ctrlKey":"Hub",
	"command":"getSubDeviceList"
	"dataSetList":{}
}

1. 제어 메세지 받기

ThinQ Agent 는 서버로 부터 전달받은 제어 명령을 기기 내부의 MQTT Broker에 그대로 publish 합니다. 이때 사용되는 MQTT Broker의 정보는 다음과 같습니다.

MQTT Broker Information

  • host : localhost

  • port : 1883

  • topic : damda/control

사용자 컴포넌트는 위 정보로, 내부 MQTT의 Topic을 Subscribe하여 제어 명령을 획득할 수 있습니다.

Control mqtt 메세지 형식

{
	"messageId": 제어메세지에서 받은 messageId,
	{사용자가 보낸 제어 명령 dictionary}
}
{
	"messageId": "KTf3aZiwQTmTQlTUMDJN6w",
	"ctrlKey":"Hub",
	"command":"getSubDeviceList"
	ode"dataSetList":{}
}

2. 제어 결과 회신하기

ThinQ Server는 제어 명령을 전달한 뒤 특정시간 동안 결과를 대기합니다. (만약 결과가 회신되지 않는 경우 Timeout Exception이 발생합니다)

따라서 원할한 컴포넌트 제어를 진행하기 위해서는 반드시 제어 결과를 회신하여야 합니다.

Control Result mqtt 메세지 형식

{
	"messageId": 제어메세지에서 받은 messageId,
	"result": 제어 결과 dictionary
}
Key
Value Type
Mandatory
Description

messageId

string

Yes

제어명령에서 받은 messageId를 그대로 사용

result

dictionary

Yes

응답으로 보내고자 하는 결과 정보

messageId는 control 명령에서 받은 값과 반드시 동일한 값이어야 합

제어 결과에 대한 응답은 하나의 응답만 리턴되게 됩니다.

여러 컴포넌트가 같은 messageId로 응답을 보내게 되면, 먼저 응답한 컴포넌트의 결과만 보내지게 됩니다. 따라서 damda/control/result로 응답 메세지를 보낼 때 , 반드시 본인이 정의한 메세지만 응답하도록 구현해야 합니다.

제어 결과에 대한 MQTT Broker 정보는 다음과 같습니다. 사용자 컴포넌트는 내부 MQTT의 Topic에 제어 결과를 Publish 할 수 있습니다.

MQTT Broker Information

  • host : localhost

  • port : 1883

  • topic : damda/control/result

[제어 명령 수신 및 결과 회신 예시 - control_app : index.js
var mqtt = require('mqtt');
var request = require('request');
const Gpio = require('onoff').Gpio;
const led = new Gpio(21, 'out');

options = {
    host:"localhost",
    port:1883,
    protocol:'mqtt'
}

const client = mqtt.connect("localhost", options);
http_options = {
	uri : "localhost:8951",
	path : "/monitoring",
	method : "POST",
	json:true
}
result = {
	"messageId" : data.messageId,
	"result" : "success"
}
client.on("connect", ()=> {
        console.log("Connected" + client.connected);
    }
);

client.on("error", (error) => {
  console.log("Can't connect" + error);
});

// control 명령 수신
client.subscribe("damda/control", function(){
	console.log("subscribed");
});

client.on("message", (topic, message, packet) => {
	console.log("message is ", message.toString());
	console.log("topic is ", topic);
	data = JSON.parse(message.toString());   
	if (data["command"] == "ledon") {
		console.log("ledon is called")
		led.writeSync(1);
		body = 
			{ "monitoring" : 
				{ "component" : "com.damda.sample.control_app", 
				  "led" : "ON"
				}
			}
		
	} else if (data["command"] == "ledoff"){
		console.log("ledoff is called")
		led.writeSync(0);   
		body = 
			{ "monitoring" : 
				{ "component" : "com.damda.sample.control_app", 
				  "led" : "OFF"
				}
			}

	}
	// Control 결과 회신 
	client.publish("damda/control/result", JSON.stringify(result));
	req = request.post({
		"url":"http://localhost:8951/monitoring", 
		"body": JSON.stringify(body)
		},  
		function(err, res, body){
			console.log(res);
	});
});

3. 다른 담다 기기 제어하기

4. TPA에서 제어 명령 날리기

정의한 메세지를 API를 포출하여 제어 명령을 보냅니다.

[제어 명령 예시 - : 서브기기 조회하기 ]

예를들어,'에서 보낸 제어명령은 아래와 같은 형태의 mqtt 메세지로 전달 됩니다.

와 마찬가지로 사용자 컴포넌트와 ThinQ Agent는 MQTT 기반 통신을 진행합니다. 즉, 사용자 컴포넌트가 기기 내부의 MQTT Broker (Topic : damda/control/result)로 결과를 publish하면, ThinQ Agent는 그 값을 subscribe하여 ThinQ Server로 전달합니다.

ThinQ API의 를 이용하면 내 계정에 연결된 담다 기기를 원격으로 제어할 수 있습니다.

를 이용하면 DAMDA 기기 제어 명령을 쉽게 연동할 수 있습니다.

POST /device/control
담다 허브 (com.damda.sample.damda-hub)
Control API
TPA API
'0.준비
'1. 제어 메시지 받기'