본문 바로가기

프로젝트/AWS LED Button (WIFI, AWS)

[AWS IoT 프로젝트] AWS LED Button 목적 & 요구사항 & 시스템 흐름

제 블로그의 프로젝트 관련 포스트들은 모두 이용하는 제품이나 서비스에 대한 기본적인 이해를 가정하고 실제 구현을 목표로 하므로 기초적인 부분은 직접 공부해야 합니다.

 

목적

사물(Thing)과 클라이언트는 AWS IoT의 Thing Shadow를 얻어와 초기 동작/상태를 설정하고, AWS IoT를 통해 서로 통신한다.

 

클라이언트 (안드로이드 앱) 요구사항

  1. 회원가입을 하고 이메일 인증을 해야 해당 앱을 이용할 수 있다.
  2. 인증된 사용자라도 사물의 고유한 Device Serial Number(DSN)과 operation key를 알고 있어야 사물(Thing)에 접근할 수 있다.
  3. DSN과 operation key만 알고 있으면, 인증된 사용자(회원가입 + 이메일 인증)는 서로 다른 기기에서 로그인해도 해당 사물에 접근할 수 있다.
  4. 인증서가 디바이스에 저장되면 안된다.
  5. 데이터 패킷 자체가 암호화되어야 한다.

 

사물 (ESP32) 요구사항

  1. 각 사물은 AWS IoT에 자신의 고유한 인증서와 정책이 있다. 이 정책에 허용된 토픽만 송수신할 수 있다. 허용된 토픽은 DSN 기반이다. (예 : LEDButton<DSN>/command 토픽으로만 수신 가능, LEDButton<DSN>/result 토픽으로만 송신 가능)
  2. 사물은 operation key를 non-volatile memory에 저장하고 있어야 하며, 명령과 함께 수신된 operation key가 자신의 operation key와 동일한 경우에만 명령을 수행을 시작한다. 원격 클라이언트가 아닌 사용자가 직접 해당 사물의 버튼을 누른 경우 토글 동작 수행을 시작한다.
  3. Thing Shadow를 업데이트하고, 업데이트가 완료된 경우에만, 실제 그에 따른 동작을 수행한다. 동작과 Thing Shadow 업데이트의 우선순위는 시스템에 따라 달라질 수 있지만 일단 편의를 위해 Thing Shadow에 더 높은 우선순위를 부여했습니다.
  4. 최종 결과를 클라이언트에게 전달한다.
  5. 데이터 패킷 자체가 암호화되어야 한다.

 

시스템 흐름