기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
허브 제어
허브 제어는 관리형 통합 엔드 디바이스 SDK의 확장으로, 이를 통해 Hub SDK의 MQTTProxy 구성 요소와 인터페이스할 수 있습니다. 허브 제어를 사용하면 엔드 디바이스 SDK를 사용하여 코드를 구현하고 관리형 통합 클라우드를 통해 허브를 별도의 디바이스로 제어할 수 있습니다. 허브 제어 SDK는 Hub SDK에 로 레이블이 지정된 별도의 패키지로 제공됩니다iot-managed-integrations-hub-control-x.x.x.
사전 조건
허브 제어를 설정하려면 다음이 필요합니다.
-
Hub SDK 버전 0.4.0 이상에 온보딩된 허브입니다.
-
에서 최신 버전의 End Device SDK를 다운로드합니다 AWS Management Console.
-
허브에서 실행되는 MQTT 프록시 구성 요소, 버전 0.5.0 이상.
엔드 디바이스 SDK 구성 요소
End 디바이스 SDK에서 다음 구성 요소를 사용합니다.
-
데이터 모델의 코드 생성기
-
데이터 모델 핸들러
Hub SDK에는 이미 온보딩 프로세스와 클라우드에 대한 연결이 있으므로 다음 구성 요소가 필요하지 않습니다.
-
프로비저닝 담당자
-
PKCS 인터페이스
-
작업 핸들러
-
MQTT 에이전트
엔드 디바이스 SDK와 통합
데이터 모델용 코드 생성기의 지침에 따라 하위 수준 C 코드를 생성합니다.
엔드 디바이스 SDK 통합의 지침에 따라 다음을 수행합니다.
-
빌드 환경 설정
Amazon Linux 2023/x86_64에서 개발 호스트로 코드를 빌드합니다. 필요한 빌드 종속성을 설치합니다.
dnf install make gcc gcc-c++ cmake -
하드웨어 콜백 함수 개발
하드웨어 콜백 함수를 구현하기 전에 API의 작동 방식을 이해합니다. 이 예제에서는 On/Off 클러스터 및 OnOff 속성을 사용하여 디바이스 함수를 제어합니다. API 세부 정보는 섹션을 참조하세요하위 수준 C-Function APIs.
struct DeviceState { struct iotmiDev_Agent *agent; struct iotmiDev_Endpoint *endpointLight; /* This simulates the HW state of OnOff */ bool hwState; }; /* This implementation for OnOff getter just reads the state from the DeviceState */ iotmiDev_DMStatus exampleGetOnOff(bool *value, void *user) { struct DeviceState *state = (struct DeviceState *)(user); *value = state->hwState; return iotmiDev_DMStatusOk; } -
엔드포인트 및 후크 하드웨어 콜백 함수 설정
함수를 구현한 후 엔드포인트를 생성하고 콜백을 등록합니다. 다음 작업을 완료합니다.
-
디바이스 에이전트 생성
-
지원하려는 각 클러스터 구조체의 콜백 함수 포인트 채우기
-
엔드포인트 설정 및 지원되는 클러스터 등록
struct DeviceState { struct iotmiDev_Agent * agent; struct iotmiDev_Endpoint *endpoint1; /* OnOff cluster states*/ bool hwState; }; /* This implementation for OnOff getter just reads the state from the DeviceState */ iotmiDev_DMStatus exampleGetOnOff( bool * value, void * user ) { struct DeviceState * state = ( struct DeviceState * ) ( user ); *value = state->hwState; printf( "%s(): state->hwState: %d\n", __func__, state->hwState ); return iotmiDev_DMStatusOk; } iotmiDev_DMStatus exampleGetOnTime( uint16_t * value, void * user ) { *value = 0; printf( "%s(): OnTime is %u\n", __func__, *value ); return iotmiDev_DMStatusOk; } iotmiDev_DMStatus exampleGetStartUpOnOff( iotmiDev_OnOff_StartUpOnOffEnum * value, void * user ) { *value = iotmiDev_OnOff_StartUpOnOffEnum_Off; printf( "%s(): StartUpOnOff is %d\n", __func__, *value ); return iotmiDev_DMStatusOk; } void setupOnOff( struct DeviceState *state ) { struct iotmiDev_clusterOnOff clusterOnOff = { .getOnOff = exampleGetOnOff, .getOnTime = exampleGetOnTime, .getStartUpOnOff = exampleGetStartUpOnOff, }; iotmiDev_OnOffRegisterCluster( state->endpoint1, &clusterOnOff, ( void * ) state); } /* Here is the sample setting up an endpoint 1 with OnOff cluster. Note all error handling code is omitted. */ void setupAgent(struct DeviceState *state) { struct iotmiDev_Agent_Config config = { .thingId = IOTMI_DEVICE_MANAGED_THING_ID, .clientId = IOTMI_DEVICE_CLIENT_ID, }; iotmiDev_Agent_InitDefaultConfig(&config); /* Create a device agent before calling other SDK APIs */ state->agent = iotmiDev_Agent_new(&config); /* Create endpoint#1 */ state->endpoint1 = iotmiDev_Agent_addEndpoint( state->agent, 1, "Data Model Handler Test Device", (const char*[]){ "Camera" }, 1 ); setupOnOff(state); } -
-
예: 허브 제어 구축
허브 제어는 Hub SDK 패키지의 일부로 제공됩니다. 허브 제어 하위 패키지에는 레이블이 지정되어 iot-managed-integrations-hub-control-x.x.x 있으며 수정되지 않은 디바이스 SDK와 다른 라이브러리가 포함되어 있습니다.
-
코드 생성 파일을
example폴더로 이동합니다.cp codegen/out/* example/dm -
허브 제어를 빌드하려면 다음 명령을 실행합니다.
cd <hub-control-root-folder>mkdir buildcd buildcmake -DBUILD_EXAMPLE_WITH_MQTT_PROXY=ON -DIOTMI_USE_MANAGED_INTEGRATIONS_DEVICE_LOG=ON ..cmake -build . -
HubOnboarding및MQTTProxy구성 요소가 실행 중인 상태에서 허브의MQTTProxy구성 요소를 사용하여 예제를 실행합니다../examples/iotmi_device_sample_camera/iotmi_device_sample_camera
데이터 모델은 섹션을 참조관리형 통합 데이터 모델하세요. 의 5단계End Device SDK 시작하기에 따라 엔드포인트를 설정하고 최종 사용자와 iot-managed-integrations 통신을 관리합니다.
지원되는 예제
다음 예제가 빌드 및 테스트되었습니다.
-
iotmi_device_dm_air_purifier_demo
-
iotmi_device_basic_diagnostics
-
iotmi_device_dm_camera_demo
지원하는 플랫폼
다음 표에는 허브 제어에 지원되는 플랫폼이 나와 있습니다.
| 아키텍처 | 운영 체제 | GCC 버전 | Binutils 버전 |
|---|---|---|---|
|
X86_64 |
Linux |
10.5.0 |
2.37 |
|
aarch64 |
Linux |
10.5.0 |
2.37 |