Notice
Recent Posts
Recent Comments
Link
투케이2K
934. (Android/Java) AWSIotMqttManager 사용해 Aws Template 템플릿 생성 요청 publish 소스 코드 본문
Android
934. (Android/Java) AWSIotMqttManager 사용해 Aws Template 템플릿 생성 요청 publish 소스 코드
투케이2K 2025. 1. 12. 16:49[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Aws / Provisioning / Template
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[사전) Aws Shadow 통신 설명]
// --------------------------------------------------------------------------------------
1. AWS IoT Shadow (섀도우) 란 사물 (객체) 을 따라 다니며, AWS IoT 에 연결되어 있는지 여부에 관계없이 앱 및 기타 서비스에서 디바이스의 상태를 사용할 수 있는 것 입니다
2. 섀도우는 디바이스, 앱 및 기타 클라우드 서비스가 데이터를 공유할 수 있는 신뢰할 수 있는 데이터 스토어를 제공하며, 이를 통해 디바이스, 앱 및 기타 클라우드 서비스가 디바이스 상태를 유지하면서 연결하거나 연결을 끊을 수 있습니다
3. 디바이스, 앱 및 기타 클라우드 서비스가 AWS IoT에 연결되어 있는 동안 해당 섀도우를 통해 디바이스의 현재 상태에 액세스하고 제어할 수 있습니다
4. 디바이스가 오프라인으로 전환되더라도 앱은 여전히 AWS IoT 및 디바이스의 섀도우와 통신할 수 있습니다. 디바이스가 다시 연결되면 섀도우의 현재 상태를 수신하여 섀도우와 일치하도록 상태를 업데이트한 다음 업데이트된 상태로 메시지를 게시할 수 있습니다
5. 섀도우는 JSON 섀도우 문서를 사용하여 데이터를 저장하고 검색합니다
>> desired : 앱은 desired 객체를 업데이트하여 디바이스 속성에 대해 원하는 상태를 지정합니다
>> reported : 디바이스는 reported 객체에 현재 상태를 보고합니다
>> delta : AWS IoT는 delta 객체에서 원하는 상태와 보고된 상태 간의 차이를 보고합니다
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// TODO [사전 라이브러리 추가 설정 : Build.gradle]
implementation 'com.amazonaws:aws-android-sdk-core:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-iot:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.57.0'
// TODO [객체 생성 실시 예시]
AWSIotMqttManager awsProvisioningMqttManager = new AWSIotMqttManager(
String.valueOf(CLIENT_ID), // [클라이언트 아이디 : 디바이스 고유값]
String.valueOf(END_POINT) // [엔드 포인트 : AWS 접속 정보]
);
// ---------------------------------
// TODO [템플릿 생성 요청 publish 수행]
// ---------------------------------
// TODO [템플릿 생성 요청 시 필요한 JSON 생성] : Parameters 부분에 추가 커스텀 가능
// ---------------------------------
/**
* "{\n" +
* " \"certificateOwnershipToken\": \""+S_Preference.getString(activity, parsing_certificateOwnershipToken)+"\",\n" +
* " \"parameters\": {\n" +
* " \"CertificateId\": \""+"abc123456789"+"\",\n" +
* " \"ThingName\": \""+clientId+"\",\n" +
* " \"SerialNumber\": \""+clientId+"\"\n" +
* " }\n" +
* "}";
* */
// ---------------------------------
// TODO [템플릿 포맷 참고 사이트]
// ---------------------------------
// TODO https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html
// ---------------------------------
// TODO https://docs.aws.amazon.com/iot/latest/developerguide/fleet-provision-api.html
// ---------------------------------
// ---------------------------------
// TODO [전체 json]
// ---------------------------------
JSONObject total = new JSONObject();
total.put("certificateOwnershipToken", String.valueOf(certificateOwnershipToken)); // TODO [필수 값 : 인증 사용 >> 프로비저닝 수행 시 클레임 및 private 인증서 확인 요청 후 전달 받은 데이터]
// ---------------------------------
// ---------------------------------
// TODO [파라미터 json] : [커스텀 추가 가능]
// ---------------------------------
JSONObject parameter = new JSONObject();
parameter.put("CertificateId", String.valueOf(certificateId)); // TODO [필수 값 : 인증 사용 >> 프로비저닝 수행 시 클레임 및 private 인증서 확인 요청 후 전달 받은 데이터]
parameter.put("ThingName", String.valueOf(request_Thing_Name)); // TODO [커스텀 추가]
parameter.put("SerialNumber", String.valueOf(request_Thing_Name)); // TODO [커스텀 추가]
// ---------------------------------
// ---------------------------------
// TODO [전체 json 에 추가]
// ---------------------------------
total.put("parameters", parameter);
// ---------------------------------
// ---------------------------------
// TODO [토픽 경로 확인 / publish 요청 수행]
// ---------------------------------
// ex : $aws/provisioning-templates/" + AWS_HC_TEMPLATE_NAME + "/provision/json
// ---------------------------------
String topic = String.valueOf(AWS_HC_Publish_Template_Create_Path);
awsProvisioningMqttManager.publishString(total.toString(), topic, QOS);
// ---------------------------------
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
https://blog.naver.com/kkh0977/222987213019?trackingCode=blog_bloghome_searchlist
https://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iot-device-shadows.html
https://dongwon18.github.io/aws_iot/AWS-IoT-Shadow-Tutorial/
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments