Functions

hub와 기기를 연동하기위하여 필요한 코드를 정의합니다. python 으로 작성해야 합니다.

/opt/damda/sub-devices/user-devices/user-functions 하위에 위치합니다

코드 작성 가이드

파일명

디바이스 타입명과 동일하게 파일명을 작성합니다. {deviceType}.py

모든 기기 코드는 아래와 같은 코드로 시작합니다.

from devices import get_register, get_unregister, get_control, get_state, update_state
 
register = get_register()
unregister = get_unregister()
control = get_control()
state = get_state()

코드에서 사용하는 커스텀 라이브러리 추가

기기에서 추가로 필요한 모듈이 있다면, functions 밑에 디렉토리를 만들어 함께 포함시킵니다. 예를 들어 기기를 실제로 제어하기위해서 필요한 모듈 같은 것들이 포함될 수 있습니다. 추가한 모듈, 라이브러리의 디렉토리 명은 자유롭게 정의 가능합니다. 모듈을 import 할 때, 상대 경로로 작성합니다.

등록/삭제/제어/상태 함수 작성

등록 / 삭제 함수는 반드시 하나씩 만들어주어야 합니다.

제어 함수는 기기가 할 수 있는 제어 명령 별로 하나씩 존재합니다.

상태 함수가 없을 경우 기기 상태 정보가 바뀌는 것을 알 수 없습니다.

모든 함수는 device_info를 첫번째 인자로 받습니다. device_info에 포함된 정보는 다음과 같습니다.

device_info

json 형태로 정의되어 있습니다.

key
description

deviceId

등록된 기기 ID

deviceType

등록된 기기의 타입

deviceState

기기의 최근 상태 정보

alias

기기를 식별할 수 있는 이름

registeredAt

기기가 등록된 시간

preferences

기기와 연결하기 위해 필요한 정보

profile

기기의 profile (상세 정의는 Profile 참고)

등록 함수 작성

  • hub에서 서브 기기를 등록할 호출되는 함수입니다

  • @register 데코레이터 사용합니다

  • 함수명은 자유롭게 정의 가능합니다

  • 파리미터로 device_info 받습니다

삭제 함수 작성

  • hub에서 서브 기기를 삭제할 때 호출되는 함수입니다

  • @unregister 데코레이터 사용합니다

  • 함수명은 자유롭게 정의 가능합니다

  • device_info를 파라미터로 받습니다

제어 함수 작성

  • hub에서 서브 기기를 제어할 때 호출되는 함수입니다

  • @control 데코레이터 사용합니다

  • 서브기기가 수행할 수 있는 각 제어 명령 별로 하나의 함수를 작성합니다. 함수 이름은 capability에 정의된 command의 name과 연결됩니다

  • 제어 명령은 device_info 이외에 기본 인자로 component 정보와 capability 정보를 추가로 받습니다

  • API의 응답 값으로 전달해줄 결과를 return 합니다. 없는 경우는 생략합니다

  • 제어명령에 추가 arguments 가 필요한 경우 2가지 작업이 필요합니다. sync가 안맞으면 정상적으로 실행되지 않습니다

    • capability에 명시합니다

    • python 코드에 method parameter 마지막에 추가합니다

상태 함수 작성

  • hub에서 서브기기의 상태값을 모니터링 하기위해 호출하는 함수입니다

  • @state 데코레이터 사용하고, exception과 countdown을 함께 작성해주어야 합니다

  • 함수명은 자유롭게 정의 가능합니다.

  • 파리미터로 device_info 받습니다

  • 상태값 변화를 감지하면, set_attribute를 호출하여 hub에 상태값이 변했음을 알려줍니다

  • set_attribute를 호출하지 않으면 상태값 변화가 저장되지 않습니다

  • set_attribute 호출 방법

    • 기기 id 는 device_info로 부터 받아옵니다. device_info["device_id"]

    • 규칙에 맞춰 attribute의 key값을 만들어줍니다. {profile의 components id}{capability의 id}{attribute name} 이때 capability의 id와 attribute name의 첫글자는 대문자로 작성

    • 기기로 부터 받은 상태값을 넘겨줍니다

Functions Example

webOSTV.py
sensorLight.py

Last updated