AWS IoT 1-Click에서 사용 - AWS IoT 1-Click

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS IoT 1-Click에서 사용

AWS Command Line Interface (AWS CLI) 를 사용하기 위해 AWS IoT 1-Click ck을 사용하여 쓰레기 수거 서비스를 효율화하려는 쓰레기 수거 업체의 시나리오를 살펴보겠습니다.

이 시나리오에서는 각 쓰레기 수거통이 AWS IoT Enterprise Button 과 연결됩니다. 쓰레기 수거통이 가득 차면 고객이 쓰레기 수거통을 교체하도록 요청하기 위해 연결된 버튼을 누르기만 하면 됩니다.

참고

모든 AWS IoT Enterprise Button 디바이스 ID는 “G030PM”으로 시작합니다.

다음은 쓰레기 수거 업체에서 고객이 사용할 AWS IoT Enterprise Button 준비하는 단계입니다.

고객이 사용할 AWS IoT Enterprise Button 준비하려면

  1. AWS IoT 1-Click 모바일 앱을 사용하는 유일한 방법은 AWS IoT (IoT 1-Click) 을 사용하는 것입니다. 앱을 설치하려면 AWS IoT 1-Click 모바일 앱 단원을 참조하십시오. 앱을 설치한 후 보통 때처럼 AWS 계정에 로그인을 누르지 마십시오. 이 연습은 AWS CLI를 사용하는 방법을 알아보기 위한 것입니다. AWS 계정에 로그인을 누르면 initiate-device-claimfinalize-device-claim 명령이 호출되는데, 다음 단계와 같이 CLI를 사용하여 “수동으로” 이 작업을 수행하려고 합니다.

  2. AWS CLI 데모를 위해AWS 계정에 로그인의 오른쪽 위 모서리에 있는 작은 원 모양의 Wi-Fi 아이콘을 선택합니다. 그런 다음 Wi-Fi 구성을 선택합니다. 디바이스 ID를 스캔하거나 입력하고 모바일 앱의 나머지 지침을 따릅니다.

  3. AWS CLI가 설치되지 않은 경우AWS CLI 설치. 사용 가능한 AWS IoT 1-Click AWS CLI 명령을 보려면 다음 두 명령을 실행합니다.

    aws iot1click-projects help
    aws iot1click-devices help
  4. 이제 Wi-Fi에 연결된 AWS IoT Enterprise Button 쓰레기 수거 업체의 AWS 계정에 연결하려면 디바이스의 디바이스 ID를 사용하여 다음 명령을 실행합니다.

    aws iot1click-devices initiate-device-claim --device-id G030PM0123456789 { "State": "CLAIM_INITIATED" }

    디바이스에서 해당 버튼을 누릅니다. 흰색 불이 간헐적으로 깜박인 후 약 1초 동안 녹색 불이 켜집니다. 그렇지 않은 경우 이전 Wi-Fi 연결 절차를 다시 수행합니다.

  5. 앞 단계에서 녹색 불이 켜진 후에 디바이스의 ID 값을 사용하여 다음 명령을 실행합니다.

    aws iot1click-devices finalize-device-claim --device-id G030PM0123456789 { "State": "CLAIMED" }

    "State": "CLAIMED"응답은 디바이스가 AWS IoT 1-Click 서비스에 성공적으로 등록되었음을 나타냅니다.

    참고

    디바이스 제조업체에서 “C-”로 시작하는 신청 코드를 제공한 경우 다음 예와 같이 aws iot1click-devices claim-devices-by-claim-code 명령으로 단일 신청 코드를 사용하여 하나 이상의 디바이스를 신청할 수 있습니다.

    aws iot1click-devices claim-devices-by-claim-code --claim-code C-123EXAMPLE { "Total": 9 "ClaimCode": "C-123EXAMPLE" }

    이 예에서는"Total": 9은 9개의 디바이스가 클레임 코드와 연결되어 있음을 나타냅니다.C-123EXAMPLE가 AWS IoT 1-Click 서비스에서 성공적으로 신청되었습니다.

  6. 다음으로 이라는 JSON 텍스트 파일을 만들어 쓰레기 수거 업체에 적합한 AWS IoT 1-Click 프로젝트를 생성할 준비를 합니다.create-project.json. 이 파일에는 다음이 포함되어 있습니다.

    { "projectName": "SeattleDumpsters", "description": "All dumpsters in the Seattle region.", "placementTemplate": { "defaultAttributes": { "City" : "Seattle" }, "deviceTemplates": { "empty-dumpster-request" : { "deviceType": "button" } } } }

    placementTemplatedeviceTemplates 키-값 페어는 SeattleDumpsters 프로젝트의 일부인 모든 버튼에 적용되는 속성입니다. 이 프로젝트를 만들려면 다음 명령을 실행합니다 (create-project.json에 있는현재 작업 디렉터리AWS CLI 명령 프롬프트) 입니다.

    aws iot1click-projects create-project --cli-input-json file://create-project.json

    새로 생성된 프로젝트를 보려면 다음 명령을 실행합니다.

    aws iot1click-projects list-projects { "projects": [ { "arn": "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters", "projectName": "SeattleDumpsters", "createdDate": 1563483100, "updatedDate": 1563483100, "tags": {} } ] }

    자세한 내용을 보려면 다음과 같이 describe-project 명령을 실행합니다.

    aws iot1click-projects describe-project --project-name SeattleDumpsters { "project": { "arn": "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters", "projectName": "SeattleDumpsters", "description": "All dumpsters in the Seattle region.", "createdDate": 1563483100, "updatedDate": 1563483100, "placementTemplate": { "defaultAttributes": { "City": "Seattle" }, "deviceTemplates": { "empty-dumpster-request": { "deviceType": "button", "callbackOverrides": {} } } }, "tags": {} } }
  7. 시애틀 리전에 대한 프로젝트가 생성되었으니 다음과 같이 특정 쓰레기 수거통(고객 217용)에 대한 배치를 생성합니다. 이스케이프된 따옴표는 Windows에 필요합니다.

    aws iot1click-projects create-placement --project-name SeattleDumpsters --placement-name customer217 --attributes "{\"location\": \"1800 9th Ave Seattle, WA 98101\", \"phone\": \"206-123-4567\"}"

    새로 생성된 배치를 보려면 다음 명령을 실행합니다.

    aws iot1click-projects list-placements --project-name SeattleDumpsters { "placements": [ { "projectName": "SeattleDumpsters", "placementName": "customer217", "createdDate": 1563488454, "updatedDate": 1563488454 } ] }

    자세한 내용을 보려면 다음과 같이 describe-placement 명령을 실행합니다.

    aws iot1click-projects describe-placement --project-name SeattleDumpsters --placement-name customer217 { "placement": { "projectName": "SeattleDumpsters", "placementName": "customer217", "attributes": { "phone": "206-123-4567", "location": "1800 9th Ave Seattle, WA 98101" }, "createdDate": 1563488454, "updatedDate": 1563488454 } }
  8. 이제 디바이스는 쓰레기 수거 업체의 AWS IoT 1-Click 계정과 연결되어 있지만 배치와 연결되어 있지 않습니다. 다음 명령을 실행하면 이를 확인할 수 있습니다.

    aws iot1click-projects get-devices-in-placement --project-name SeattleDumpsters --placement-name customer217 { "devices": {} }

    디바이스를 배치에 연결하려면 다음 명령을 실행합니다.

    aws iot1click-projects associate-device-with-placement --project-name SeattleDumpsters --placement-name customer217 --device-template-name empty-dumpster-request --device-id G030PM0123456789

    이전 명령을 확인하려면 get-devices-in-placement를 다시 실행합니다.

    aws iot1click-projects get-devices-in-placement --project-name SeattleDumpsters --placement-name customer217 { "devices": { "empty-dumpster-request": "G030PM0123456789" } }

    자세한 내용을 보려면 다음과 같이 describe-device 명령을 실행합니다. iot1click-projects에서 iot1click-devices로 전환된 것에 주목하십시오.

    aws iot1click-devices describe-device --device-id G030PM0123456789 { "DeviceDescription": { "Arn": "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789", "Attributes": { "projectRegion": "us-west-2", "projectName": "SeattleDumpsters", "placementName": "customer217", "deviceTemplateName": "empty-dumpster-request" }, "DeviceId": "G030PM0123456789", "Enabled": false, "RemainingLife": 99.9, "Type": "button", "Tags": {} } }

    현재 하나의 디바이스만 있기 때문에 다음 명령을 실행하면 비슷한 결과가 나타납니다.

    aws iot1click-devices list-devices --device-type button { "Devices": [ { "Arn": "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789", "Attributes": { "projectRegion": "us-west-2", "projectName": "SeattleDumpsters", "placementName": "customer217", "deviceTemplateName": "empty-dumpster-request" }, "DeviceId": "G030PM0123456789", "Enabled": false, "RemainingLife": 99.9, "Type": "button", "Tags": {} } ] }
  9. 디바이스가 제대로 작동하는지 확인하려면 다음 명령을 실행합니다. ISO 8061 형식인 타임스탬프를 적절하게 조정합니다.

    aws iot1click-devices list-device-events --device-id G030PM0123456789 --from-time-stamp 2019-07-17T15:45:12.880Z --to-time-stamp 2019-07-19T15:45:12.880Z { "Events": [ { "Device": { "Attributes": {}, "DeviceId": "G030PM0123456789", "Type": "button" }, "StdEvent": "{\"clickType\": \"SINGLE\", \"reportedTime\": \"2019-07-18T23:47:55.015Z\", \"certificateId\": \"fe8798a6c97c62ef8756b80eeefdcf2280f3352f82faa8080c74cc4f4a4d1811\", \"remainingLife\": 99.85000000000001, \"testMode\": false}" } ] }

    여기서 한 번 클릭 이벤트(\"clickType\": \"SINGLE\")가 2019-07-18T23:47:55.015Z에 발생한 것을 볼 수 있습니다. 이제 디바이스를 두 번 클릭하고(버튼을 두 번 연속 빠르게 누름) 명령을 다시 실행합니다. 다음과 유사한 두 번 클릭 이벤트(\"clickType\": \"DOUBLE\")를 확인할 수 있습니다.

    aws iot1click-devices list-device-events --device-id G030PM0123456789 --from-time-stamp 2019-07-17T15:45:12.880Z --to-time-stamp 2019-07-19T15:45:12.880Z { "Events": [ { "Device": { "Attributes": {}, "DeviceId": "G030PM0123456789", "Type": "button" }, "StdEvent": "{\"clickType\": \"SINGLE\", \"reportedTime\": \"2019-07-18T23:47:55.015Z\", \"certificateId\": \"fe8798a6c97c62ef8756b80eeefdcf2280f3352f82faa8080c74cc4f4a4d1811\", \"remainingLife\": 99.85000000000001, \"testMode\": false}" }, { "Device": { "Attributes": {}, "DeviceId": "G030PM0123456789", "Type": "button" }, "StdEvent": "{\"clickType\": \"DOUBLE\", \"reportedTime\": \"2019-07-19T00:14:41.353Z\", \"certificateId\": \"fe8798a6c97c62ef8756b80eeefdcf2280f3352f82faa8080c74cc4f4a4d1811\", \"remainingLife\": 99.8, \"testMode\": false}" } ] }
  10. 각 디바이스 유형에는 호출 가능한 디바이스 메서드 세트가 있습니다. 해당 디바이스 유형에서 사용할 수 있는 메서드 목록을 보려면 다음과 같이 get-device-methods 명령을 실행합니다.

    aws iot1click-devices get-device-methods --device-id G030PM0123456789 { "DeviceMethods": [ { "MethodName": "getDeviceHealthParameters" }, { "MethodName": "setDeviceHealthMonitorCallback" }, { "MethodName": "getDeviceHealthMonitorCallback" }, { "MethodName": "setOnClickCallback" }, { "MethodName": "getOnClickCallback" } ] }

    사용 가능한 메서드 중 하나를 호출하려면 다음과 같이 invoke-device-method 명령을 사용합니다.

    aws iot1click-devices invoke-device-method --cli-input-json file://invoke-device-method.json { "DeviceMethodResponse": "{\"remainingLife\": 99.8}" }

    여기서 invoke-device-method.json에는 다음이 포함되어 있습니다.

    { "DeviceId": "G030PM0123456789", "DeviceMethod": { "DeviceType": "device", "MethodName": "getDeviceHealthParameters" } }
    참고

    get 메서드(예: getDeviceHealthParameters)에는 파라미터가 사용되지 않습니다. 따라서 JSON 파일 내의 "DeviceMethodParameters": "" 줄을 사용할 수 없습니다. 이렇게 하면 다음과 같은 오류가 발생합니다. An error occurred (InvalidRequestException) when calling the InvokeDeviceMethod operation: A request parameter was invalid.

  11. aws iot1click-devices list-devices --device-type button을 실행하면 Enabled의 기본값이 false인 것을 볼 수 있습니다. 다음 명령은 이 키를 true로 설정합니다.

    aws iot1click-devices update-device-state --device-id G030PM0123456789 --enabled

    다시 false로 설정하려면 --no-enabled 인수를 사용하여 앞의 명령을 다시 실행합니다.

  12. 고객 정보가 변경되면 다음과 같이 디바이스의 배치 정보를 업데이트할 수 있습니다. iot1click-devices에서 iot1click-projects로 전환된 것에 주목하십시오. 다음 명령을 실행하여 customer217의 현재 정보를 봅니다(attributes에 있음).

    aws iot1click-projects describe-placement --project-name SeattleDumpsters --placement-name customer217 { "placement": { "projectName": "SeattleDumpsters", "placementName": "customer217", "attributes": { "phone": "206-123-4567", "location": "1800 9th Ave Seattle, WA 98101" }, "createdDate": 1563488454, "updatedDate": 1563488454 } }

    그러고 나서 다음 명령을 실행하여 고객의 전화 및 위치 속성을 업데이트합니다.

    aws iot1click-projects update-placement --cli-input-json file://update-placement.json

    여기서 update-placement.json에는 다음이 포함되어 있습니다.

    { "projectName": "SeattleDumpsters", "placementName": "customer217", "attributes": { "phone": "206-266-1000", "location": "410 Terry Ave N Seattle, WA 98109" } }

    이 업데이트를 검토하려면 다음과 같이 describe-placement를 다시 실행합니다.

    aws iot1click-projects describe-placement --project-name SeattleDumpsters --placement-name customer217 { "placement": { "projectName": "SeattleDumpsters", "placementName": "customer217", "attributes": { "phone": "206-266-1000", "location": "410 Terry Ave N Seattle, WA 98109" }, "createdDate": 1563488454, "updatedDate": 1563572842 } }
  13. 프로젝트 정보를 업데이트하려면 update-project 명령을 사용합니다. 프로젝트에는 일반적으로 여러 고객 배치가 포함되어 있습니다. 다음은 기존 SeattleDumpster 프로젝트 정보입니다.

    aws iot1click-projects describe-project --project-name SeattleDumpsters { "project": { "arn": "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters", "projectName": "SeattleDumpsters", "description": "All dumpsters in the Seattle region.", "createdDate": 1563483100, "updatedDate": 1563483100, "placementTemplate": { "defaultAttributes": { "City": "Seattle" }, "deviceTemplates": { "empty-dumpster-request": { "deviceType": "button", "callbackOverrides": {} } } }, "tags": {} } }

    “All dumpsters”을 “All dumpsters (yard바스터, 재활용, 쓰레기 수거) 를 사용하려면 다음 명령을 실행합니다.

    aws iot1click-projects update-project --project-name SeattleDumpsters --description "All dumpsters (yard waste, recycling, garbage) in the Seattle region."

    모든 SeattleDumpsters 배치에 대해 "description" 키의 값이 업데이트된 것을 볼 수 있습니다.

    aws iot1click-projects describe-project --project-name SeattleDumpsters { "project": { "arn": "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters", "projectName": "SeattleDumpsters", "description": "All dumpsters (yard waste, recycling, garbage) in the Seattle region.", "createdDate": 1563483100, "updatedDate": 1563819039, "placementTemplate": { "defaultAttributes": { "City": "Seattle" }, "deviceTemplates": { "empty-dumpster-request": { "deviceType": "button", "callbackOverrides": {} } } }, "tags": {} } }
  14. 다음과 같이 태그를 사용하여 프로젝트 리소스(iot1click-projects) 및 배치 리소스(iot1click-devices)에 메타 정보를 적용할 수 있습니다.

    aws iot1click-projects tag-resource --cli-input-json file://projects-tag-resource.json

    여기서 projects-tag-resource.json에는 다음이 포함되어 있습니다.

    { "resourceArn": "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters", "tags": { "Account": "45215", "Manager": "Tom Jones" } }

    프로젝트 리소스의 태그 목록을 보려면 다음을 실행합니다.

    aws iot1click-projects list-tags-for-resource --resource-arn "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters" { "tags": { "Manager": "Tom Jones", "Account": "45215" } }

    컨텍스트에서 프로젝트 태그를 보려면 다음을 실행합니다.

    aws iot1click-projects describe-project --project-name SeattleDumpsters { "project": { "arn": "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters", "projectName": "SeattleDumpsters", "description": "All dumpsters (yard waste, recycling, garbage) in the Seattle region.", "createdDate": 1563483100, "updatedDate": 1563819039, "placementTemplate": { "defaultAttributes": { "City": "Seattle" }, "deviceTemplates": { "empty-dumpster-request": { "deviceType": "button", "callbackOverrides": {} } } }, "tags": { "Manager": "Tom Jones", "Account": "45215" } } }

    디바이스 Amazon 리소스 이름(ARN)을 검색하려면 다음을 실행합니다.

    aws iot1click-devices list-devices { "Devices": [ { "Arn": "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789", "Attributes": { "projectRegion": "us-west-2", "projectName": "SeattleDumpsters", "placementName": "customer217", "deviceTemplateName": "empty-dumpster-request" }, "DeviceId": "G030PM0123456789", "Enabled": true, "RemainingLife": 99.7, "Type": "button", "Tags": {} } ] }

    이전 디바이스에 태그를 추가하려면 다음을 실행합니다.

    aws iot1click-devices tag-resource --cli-input-json file://devices-tag-resource.json

    여기서 devices-tag-resources.json에는 다음이 포함되어 있습니다. ResourceArnTags는 대소문자를 구분합니다.

    { "ResourceArn": "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789", "Tags": { "Driver": "John Smith", "Driver Phone": "206-123-4567" } }

    디바이스 리소스의 태그 목록을 보려면 다음을 실행합니다.

    aws iot1click-devices list-tags-for-resource --resource-arn "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789" { "Tags": { "Driver Phone": "206-123-4567", "Driver": "John Smith" } }

    컨텍스트에서 디바이스 태그를 보려면 list-devices 명령을 실행합니다.

    aws iot1click-devices list-devices { "Devices": [ { "Arn": "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789", "Attributes": { "projectRegion": "us-west-2", "projectName": "SeattleDumpsters", "placementName": "customer217", "deviceTemplateName": "empty-dumpster-request" }, "DeviceId": "G030PM0123456789", "Enabled": true, "RemainingLife": 99.7, "Type": "button", "Tags": { "Driver Phone": "206-123-4567", "Driver": "John Smith" } } ] }
  15. 이제 AWS Lambda 함수를 트리거하거나 Amazon SNS 메시지를 보내는 것과 같은 작업을 디바이스 버튼 누르기에 연결할 수 있습니다. AWS IoT 1-Click 콘솔 (AWS IoT 1-Click 프로그래밍 모델도 옵션 임). 적절한 작업을 디바이스에 연결한 후에는 1단계 및 2단계에서 설명한 것과 동일한 절차를 사용하여 디바이스를 고객의 위치로 가져 와서 Wi-Fi 네트워크에 연결할 수 있습니다.

AWS IoT 1-Click 디바이스 해체

다음 단계에서는 앞의 단계를 되돌리는(실행 취소) 방법에 대해 설명합니다.

  1. 프로젝트 리소스에서 태그를 제거하려면 다음 명령을 실행합니다.

    aws iot1click-projects untag-resource --resource-arn "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters" --tag-keys "Manager"

    그러면 다음과 같이 프로젝트의 Manager 태그가 제거됩니다.

    aws iot1click-projects describe-project --project-name SeattleDumpsters { "project": { "arn": "arn:aws:iot1click:us-west-2:012345678901:projects/SeattleDumpsters", "projectName": "SeattleDumpsters", "description": "All dumpsters (yard waste, recycling, garbage) in the Seattle region.", "createdDate": 1563483100, "updatedDate": 1563819039, "placementTemplate": { "defaultAttributes": { "City": "Seattle" }, "deviceTemplates": { "empty-dumpster-request": { "deviceType": "button", "callbackOverrides": {} } } }, "tags": { "Account": "45215" } } }
  2. 디바이스 리소스에서 태그를 제거하려면 다음 명령을 실행합니다.

    aws iot1click-devices untag-resource --resource-arn "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789" --tag-keys "Driver Phone" "Driver"

    그러면 다음과 같이 디바이스의 태그가 제거됩니다. "Tags": {}로 목록이 비어 있는 것을 볼 수 있습니다.

    aws iot1click-devices list-devices { "Devices": [ { "Arn": "arn:aws:iot1click:us-west-2:012345678901:devices/G030PM0123456789", "Attributes": { "projectRegion": "us-west-2", "projectName": "SeattleDumpsters", "placementName": "customer217", "deviceTemplateName": "empty-dumpster-request" }, "DeviceId": "G030PM0123456789", "Enabled": true, "RemainingLife": 99.7, "Type": "button", "Tags": {} } ] }
  3. 배치에서 디바이스의 연결을 해제하려면 다음 명령을 실행합니다.

    aws iot1click-projects disassociate-device-from-placement --project-name SeattleDumpsters --placement-name customer217 --device-template-name empty-dumpster-request

    다음에서 볼 수 있듯이 customer217 배치에 연결된 디바이스가 더 이상 없습니다.

    aws iot1click-projects get-devices-in-placement --project-name SeattleDumpsters --placement-name customer217 { "devices": {} }
  4. 프로젝트에서 배치를 삭제하려면 다음 명령을 실행합니다.

    aws iot1click-projects delete-placement --project-name SeattleDumpsters --placement-name customer217

    다음에서 볼 수 있듯이 SeattleDumpsters 프로젝트에는 배치가 없습니다. customer217 배치가 SeattleDumpsters 내의 유일한 배치이기 때문입니다.

    aws iot1click-projects list-placements --project-name SeattleDumpsters { "placements": [] }
  5. 프로젝트를 삭제하려면 다음 명령을 실행합니다.

    aws iot1click-projects delete-project --project-name SeattleDumpsters

    다음에서 볼 수 있듯이 모든 프로젝트가 제거됩니다.SeattleDumpsters는 AWS IoT 1-Click 계정과 연결된 유일한 프로젝트입니다.

    aws iot1click-projects list-projects { "projects": [] }

    예를 들어 친구가 자신의 AWS 계정을 사용하여 디바이스를 시험해 볼 수 있도록 하려면 먼저 다음과 같이 AWS IoT 1-Click 계정에서 디바이스의 신청을 취소해야 합니다.

    aws iot1click-devices unclaim-device --device-id G030PM0123456789 { "State": "UNCLAIMED" }

    이제 모든 AWS IoT 1-Click 계정에서 디바이스를 사용할 수 있습니다.