AWS IoT Jobs 라이브러리 데모
중요
이 데모는 더 이상 사용되지 않는 Amazon-FreeRTOS 리포지토리에서 호스팅됩니다. 새 프로젝트를 생성할 때는 여기서 시작하는 것이 좋습니다. 현재 사용되지 않는 Amazon-FreeRTOS 리포지토리를 기반으로 하는 기존 FreeRTOS 프로젝트가 이미 있는 경우에는 Amazon-FreeRTOS Github 리포지토리 마이그레이션 가이드 섹션을 참조하세요.
소개
AWS IoT Jobs 라이브러리 데모는 MQTT 연결을 통해 AWS IoT Jobs 서비스에 연결하고, AWS IoT에서 작업을 검색하고, 디바이스에서 이 작업을 처리하는 방법을 보여줍니다. AWS IoT Jobs 데모 프로젝트는 FreeRTOS Windows 포트
참고
FreeRTOS 데모를 설정하고 실행하려면 FreeRTOS 시작하기의 단계를 따릅니다.
소스 코드 구성
데모 코드는 jobs_demo.c 파일에 있으며 GitHub 디렉터리에서 찾을 수 있습니다.freertos/demos/jobs_for_aws/
AWS IoT MQTT 브로커 연결 구성
이 데모에서는 AWS IoT MQTT 브로커에 대한 MQTT 연결을 사용합니다. 이 연결은 coreMQTT 상호 인증 데모와 동일한 방식으로 구성됩니다.
기능
이 데모에서는 AWS IoT에서 작업을 수신하고 디바이스에서 이 작업을 처리하는 데 사용되는 워크플로를 보여줍니다. 이 데모는 대화형이며 AWS IoT 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 작업을 생성해야 합니다. 작업 생성에 대한 자세한 내용은 AWS CLI 명령 참조의 create-job을 참조하세요. 이 데모는 메시지를 콘솔에 출력할 수 있도록 작업 문서에서 action 키가 print로 설정되어야 합니다.
이 작업 문서의 형식은 다음과 같습니다.
{ "action": "print", "message": "ADD_MESSAGE_HERE" }
AWS CLI를 사용하여 다음 예제 명령으로 작업을 생성할 수 있습니다.
aws iot create-job \ --job-id t12 \ --targets arn:aws:iot:region:123456789012:thing/device1 \ --document '{"action":"print","message":"hello world!"}'
또한 이 데모는 메시지를 주제에 다시 게시할 수 있도록 action 키가 publish로 설정된 작업 문서도 사용합니다. 이 작업 문서의 형식은 다음과 같습니다.
{ "action": "publish", "message": "ADD_MESSAGE_HERE", "topic": "topic/name/here" }
데모는 데모를 종료하도록 action 키가 exit로 설정된 작업 문서를 수신할 때까지 루프를 반복합니다. 이 작업 문서의 형식은 다음과 같습니다.
{ "action: "exit" }
Jobs 데모의 진입점
Jobs 데모 진입점 함수의 소스 코드는 GitHub
-
mqtt_demo_helpers.c의 헬퍼 함수를 사용하여 MQTT 연결을 설정합니다. -
mqtt_demo_helpers.c의 헬퍼 함수를 사용하여NextJobExecutionChangedAPI에 대한 MQTT 주제를 구독합니다. 주제 문자열은 AWS IoT Jobs 라이브러리에 정의된 매크로를 사용하여 이전에 어셈블되었습니다. -
mqtt_demo_helpers.c의 헬퍼 함수를 사용하여StartNextPendingJobExecutionAPI에 대한 MQTT 주제에 게시합니다. 주제 문자열은 AWS IoT Jobs 라이브러리에 정의된 매크로를 사용하여 이전에 어셈블되었습니다. -
prvEventCallback를 반복적으로 직접 호출하여 처리를 위해MQTT_ProcessLoop에 전달되는 메시지를 수신합니다. -
데모가 종료 작업을 수신하면
mqtt_demo_helpers.c파일의 헬퍼 함수를 사용하여 MQTT 주제 구독을 취소하고 연결을 끊습니다.
수신된 MQTT 메시지에 대한 콜백
prvEventCallbackJobs_MatchTopic 라이브러리에서 을 호출하여 들어오는 MQTT 메시지를 분류합니다. 메시지 유형이 새 작업에 해당하는 경우 prvNextJobHandler()가 호출됩니다.
PrvNextJobHandlerprvSendUpdateForJob 함수입니다.
실행 중인 작업에 대한 업데이트 전송
prvSendUpdateForJob()Jobs_Update()를 호출하여 바로 이어지는 MQTT 게시 작업에 사용되는 주제 문자열을 채웁니다.