[AWS] IoT Core Shadow

Joney의 SW 공부 블로그·2023년 5월 17일
0

AWS IoT Core

목록 보기
4/7

IoT Shadow란?

  • IoT device의 Online/Offline 상태에 관계없이 application이나 다른 서비스에서 장치에 명령을 내리거나 상태를 조회할 수 있게 하는 서비스
  • Shadow는 신뢰할 수 있는 저장 공간을 제공
    • device, application, 클라우드 서비스들이 데이터를 공유 가능
    • device 상태 정보를 손실 없이 device와 서비스를 연결
  • Shadow를 통해 device 상태를 수정하거나 조회할 수 있음
    • application은 shadow를 업데이트 하면서 device 상태를 업데이트할 수 있음
      • shadow 상태가 업데이트 되면 AWS IoT는 device에 message를 전달
      • device는 메세지를 받고 상태를 업데이트하고 업데이트 된 상태를 publish
    • application은 shadow update를 구독하거나 get으로 조회할 수 있음
  • device나 application이 오프라인일 경우에 device나 application은 shadow를 통해 소통할 수 있음
    • device가 offline 되었다가 reconnect되면 shadow로부터 현재 상태를 받아서 업데이트 후 shadow에 update된 상태 공지
    • application이 offline 상태여도 device는 shadow에 device의 상태를 지속적으로 업데이트 할 수 있음

Shadow 사용하기

unnamed shadow 및 named shadow

  • 이름이 있고 없고의 차이
  • unnamed는 기본적으로 제공(디바이스마다 하나만 가질 수 있음)
    • topic
      • $aws/things/{thingName}/shadow
  • named shadow
    • topic
      • $aws/things/{thingName}/shadow/name/{shadowName}

Shadow 데이터 접근

  • reserved된 MQTT topic이나 HTTP로 shadow에 접근할 수 있음
  • desired
    • App이 원하는 장치 상태를 명시
  • reported
    • 장치가 현재 장치의 상태를 명시
  • delta
    • desired와 reported 상태의 다른점을 명시
  "state": {
    "desired": {
        "volume": 10,
        "brightness": 20
    },
    "reported": {
        "volume": 20,
        "brightness": 30
    },
    "delta": {
        "volume": 10,
        "brightness": 20
    }
  }

shadow 사용하기

device에서 shadow 사용 준비

  • device에서 아래 topic을 모두 subscribe 필요
    • ShadowTopicPrefix
      • $aws/things/{thingName}/shadow
      • $aws/things/{thingName}/shadow/name/{shadowName}
    • Shadow 삭제 여부 (Shadow 삭제 명령에 대한 accept/reject)
      • ShadowTopicPrefix/delete/accepted
      • ShadowTopicPrefix/delete/rejected
    • /get topic에 메시지를 게시했을 때, 결과를 받을 수 있는 topic
      • ShadowTopicPrefix/get/accepted
      • ShadowTopicPrefix/get/rejected
    • Shadow의 데이터가 Update됐을 때, 결과를 받을 수 있는 topic
      • ShadowTopicPrefix/update/accepted
      • ShadowTopicPrefix/update/rejected
      • ShadowTopicPrefix/update/delta

device의 shadow 사용 시나리오

  • subscribe됐는지 /get topic을 publish해서 테스트
    • /get/accepted message를 받으면 body를 initial state로 사용
    • /get/rejected message를 받으면 /update를 publish해서 shadow 생성 필요
  • Message 처리 방법
    • 장치가 AWS IoT에 연결되어있을 때
      • /update/delta topic으로부터 메세지를 받고 장치의 상태를 업데이트
      • /update topic에 reported 값에 장치의 현재 상태를 업데이트 (장치의 상태가 변할때 계속)
    • 장치가 AWS IoT에 재연결 될때
      • /update/delta topic으로부터 메세지를 받고 장치의 상태를 업데이트
      • /update topic에 reported 값에 장치의 현재 상태를 업데이트

application의 shadow 사용 시나리오

  • /update topic에 desired 값에 변경하고 싶은 device의 상태 값을 업데이트
  • device의 상태 변경 결과 받기
    • /update topic을 사용해서 push 받기
      • ShadowTopicPrefix/update/accepted
      • ShadowTopicPrefix/update/rejected
    • /get topic에 메시지를 게시해서 /get topic으로 push 받기
      • ShadowTopicPrefix/get/accepted
      • ShadowTopicPrefix/get/rejected
    • http get request로 데이터를 가져오기
profile
SW 지식 노트 블로그

0개의 댓글