

# AWS IoT Core for LoRaWAN 디바이스의 펌웨어 무선 업데이트(FUOTA)
<a name="lorawan-mc-fuota-overview"></a>

펌웨어 무선 업데이트(FUOTA)를 사용하여 AWS IoT Core for LoRaWAN 디바이스에 펌웨어 업데이트를 배포합니다.

FUOTA를 사용하여 개별 디바이스 또는 디바이스 그룹에 펌웨어 업데이트를 전송할 수 있습니다. 멀티캐스트 그룹을 생성하여 여러 디바이스에 펌웨어 업데이트를 전송할 수도 있습니다. 먼저 디바이스를 멀티캐스트 그룹에 추가한 다음 펌웨어 업데이트 이미지를 해당하는 모든 디바이스에 전송합니다. 이미지를 수신하는 디바이스가 이미지가 올바른 소스에서 오는지 확인할 수 있도록 펌웨어 이미지에 디지털 서명을 하는 것이 좋습니다.

AWS IoT Core for LoRaWAN의 FUOTA를 사용하면 다음을 수행할 수 있습니다.
+ 새 펌웨어 이미지나 델타 이미지를 단일 디바이스 또는 디바이스 그룹에 배포합니다.
+ 디바이스에 배포된 이후에 새 펌웨어의 신뢰성과 무결성을 확인합니다.
+ 배포 진행 상황을 모니터링하고 배포에 실패한 경우 문제를 디버그합니다.

FUOTA 및 멀티캐스트 그룹에 대한 AWS IoT Core for LoRaWAN의 지원은 [LoRa Alliance](https://lora-alliance.org/about-lorawan)의 다음 사양을 기반으로 합니다.
+ LoRaWAN 원격 멀티캐스트 설정 사양, TS005-2.0.0
+ LoRaWAN 단편화된 데이터 블록 전송 사양, TS004-2.0.0
+ LoRaWAN 애플리케이션 레이어 클록 동기화 사양, TS003-2.0.0

**참고**  
AWS IoT Core for LoRaWAN은 LoRa Alliance 사양에 따라 클록 동기화를 자동으로 수행합니다. `AppTimeReq` 함수로 ClockSync 시그널링을 사용하여 요청하는 디바이스에 서버 측 시간을 회신합니다.

 다음 동영상은 AWS IoT Core for LoRaWAN FUOTA 태스크를 생성하는 방법을 설명하고 태스크에 디바이스를 추가하고 FUOTA 태스크를 예약하는 프로세스를 안내합니다.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/0Yd6PFwL-IM/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/0Yd6PFwL-IM)


**Topics**
+ [FUOTA 프로세스 개요](lorawan-fuota-mc-process.md)
+ [FUOTA 태스크 생성 및 펌웨어 이미지 제공](lorawan-fuota-create-task.md)
+ [FUOTA 태스크에 디바이스 및 멀티캐스트 그룹 추가 및 FUOTA 세션 예약](lorawan-fuota-add-devices.md)
+ [FUOTA 태스크 및 태스크에 추가된 디바이스의 상태 모니터링 및 문제 해결](lorawan-fuota-status.md)

# FUOTA 프로세스 개요
<a name="lorawan-fuota-mc-process"></a>

다음 다이어그램은 AWS IoT Core for LoRaWAN이 종단 디바이스에 대해 FUOTA 프로세스를 수행하는 방법을 보여줍니다. FUOTA 세션에 개별 디바이스를 추가하는 경우 멀티캐스트 그룹 생성 및 구성 단계를 건너뛸 수 있습니다. FUOTA 세션에 디바이스를 직접 추가할 수 있습니다. 그러면 AWS IoT Core for LoRaWAN이 펌웨어 업데이트 프로세스를 시작합니다.

![\[AWS IoT Core for LoRaWAN이 종단 디바이스에 대해 FUOTA를 수행하는 방법을 보여 주는 이미지\]](http://docs.aws.amazon.com/ko_kr/iot-wireless/latest/developerguide/images/iot-lorawan-fuota-flow.png)


디바이스에 대한 FUOTA를 수행하려면 먼저 디지털 서명된 펌웨어 이미지를 생성하고 FUOTA 태스크에 추가하려는 디바이스 및 멀티캐스트 그룹을 구성합니다. FUOTA 세션을 시작한 후 종단 디바이스는 모든 조각을 수집하고 조각에서 이미지를 재구성하고 상태를 AWS IoT Core for LoRaWAN에 보고한 다음 새 펌웨어 이미지를 적용합니다.

다음은 FUOTA 프로세스의 여러 단계를 보여줍니다.

1. 

**디지털 서명을 사용하여 펌웨어 이미지 또는 델타 이미지 생성**

   AWS IoT Core for LoRaWAN이 LoRaWAN 디바이스에 대한 FUOTA를 수행하려면 무선으로 펌웨어 업데이트를 전송할 때 펌웨어 이미지 또는 델타 이미지에 디지털 서명을 하는 것이 좋습니다. 그러면 이미지를 수신하는 디바이스에서 이미지가 올바른 소스에서 왔는지 확인할 수 있습니다.

   펌웨어 이미지의 크기는 1MB를 넘지 않아야 합니다. 펌웨어 크기가 클수록 업데이트 프로세스를 완료하는 데 더 오래 걸릴 수 있습니다. 더 빠른 데이터 전송을 위해 또는 새 이미지가 1MB보다 큰 경우 새 펌웨어 이미지와 이전 이미지 사이의 델타인 새 이미지의 일부인 델타 이미지를 사용합니다.
**참고**  
AWS IoT Core for LoRaWAN은 디지털 서명 생성 도구와 펌웨어 버전 관리 시스템을 제공하지 않습니다. 서드 파티 도구를 사용하여 펌웨어 이미지에 대한 디지털 서명을 생성할 수 있습니다. [ARM Mbed GitHub 리포지토리](https://github.com/armmbed/mbed-os-example-lorawan-fuota)에 포함된 것과 같은 디지털 서명 도구를 사용하는 것이 좋습니다. 여기에는 델타 이미지를 생성하고 디바이스에서 해당 이미지를 사용하기 위한 도구도 포함됩니다.

1. 

**FUOTA용 디바이스 식별 및 구성**

   FUOTA용 디바이스를 식별한 후 펌웨어 업데이트를 개별 또는 여러 디바이스에 전송합니다.
   + 펌웨어 업데이트를 여러 디바이스로 전송하려면 멀티캐스트 그룹을 생성하고 종단 디바이스로 멀티캐스트 그룹을 구성합니다. 자세한 내용은 [멀티캐스트 그룹을 생성하여 여러 디바이스로 다운링크 페이로드를 전송합니다.](lorawan-multicast-groups.md) 단원을 참조하십시오.
   + 개별 디바이스에 펌웨어 업데이트를 전송하려면 해당 디바이스를 FUOTA 세션에 추가한 다음 펌웨어 업데이트를 수행합니다.

1. 

**배포 기간 예약 및 조각화 세션 설정**

   멀티캐스트 그룹을 만든 경우 클래스 B 또는 클래스 C 배포 기간을 지정하여 디바이스가 AWS IoT Core for LoRaWAN에서 조각을 수신할 수 있는 시기를 결정할 수 있습니다. 디바이스가 클래스 B 또는 클래스 C 모드로 전환하기 전에 클래스 A에서 작동 중일 수 있습니다. 세션의 시작 시간도 지정해야 합니다.

   클래스 B 또는 클래스 C 디바이스가 지정된 배포 기간에 깨어나 다운링크 패킷을 수신하기 시작합니다. 클래스 C 모드에서 작동하는 디바이스는 클래스 B 디바이스보다 더 많은 전력을 소비할 수 있습니다. 자세한 내용은 [디바이스 클래스](lorawan-manage-end-devices.md#lorawan-device-classes) 단원을 참조하십시오.

1. 

**종단 디바이스가 AWS IoT Core for LoRaWAN에 상태를 보고하고 펌웨어 이미지를 업데이트합니다.**

   조각화 세션을 설정한 후 종단 디바이스와 AWS IoT Core for LoRaWAN은 다음 단계를 수행하여 디바이스의 펌웨어를 업데이트합니다.

   1. LoRaWAN 디바이스는 데이터 속도가 낮기 때문에 FUOTA 프로세스를 시작하기 위해 AWS IoT Core for LoRaWAN은 조각화 세션을 설정하여 펌웨어 이미지를 조각화합니다. 그런 다음 이 조각을 종단 디바이스로 전송합니다.

   1. AWS IoT Core for LoRaWAN이 이미지 조각을 전송한 후 LoRaWAN 종단 디바이스는 다음 태스크를 수행합니다.

      1. 조각을 수집한 다음 이러한 조각에서 이진 이미지를 재구성합니다.

      1. 재구성된 이미지의 디지털 서명을 확인하여 이미지를 인증하고 올바른 소스에서 왔는지 확인합니다.

      1. AWS IoT Core for LoRaWAN의 펌웨어 버전을 현재 버전과 비교합니다.

      1. AWS IoT Core for LoRaWAN으로 전송된 조각화된 이미지의 상태를 보고한 후 새 펌웨어 이미지를 적용합니다.
**참고**  
경우에 따라 종단 디바이스는 펌웨어 이미지의 디지털 서명을 확인하기 전 AWS IoT Core for LoRaWAN에 전송된 조각화된 이미지의 상태를 보고합니다.

이제 FUOTA 프로세스를 배웠으므로 FUOTA 태스크를 생성하고 펌웨어 업데이트를 위해 태스크에 디바이스를 추가할 수 있습니다. 자세한 내용은 [FUOTA 태스크 생성 및 펌웨어 이미지 제공](lorawan-fuota-create-task.md) 단원을 참조하십시오.

# FUOTA 태스크 생성 및 펌웨어 이미지 제공
<a name="lorawan-fuota-create-task"></a>

LoRaWAN 디바이스의 펌웨어를 업데이트하려면 먼저 FUOTA 태스크를 생성하고 업데이트에 사용할 디지털 서명된 펌웨어 이미지를 제공합니다. 그런 다음 디바이스와 멀티캐스트 그룹을 태스크에 추가하고 FUOTA 세션을 예약할 수 있습니다. 세션이 시작되면 AWS IoT Core for LoRaWAN이 조각화 세션을 설정하고 종단 디바이스가 조각을 수집하고 이미지를 재구성하고 새 펌웨어를 적용합니다. FUOTA 프로세스에 대한 자세한 내용은 [FUOTA 프로세스 개요](lorawan-fuota-mc-process.md) 섹션을 참조하세요.

다음은 FUOTA 태스크를 생성하고 S3 버킷에 저장할 펌웨어 이미지 또는 델타 이미지를 업로드하는 방법을 보여줍니다.

## 필수 조건
<a name="lorawan-fuota-task-prereq"></a>

FUOTA를 수행하기 전에 종단 디바이스가 이미지를 적용할 때 이미지의 신뢰성을 확인할 수 있도록 펌웨어 이미지에 디지털 서명을 해야 합니다. 서드 파티 도구를 사용하여 펌웨어 이미지에 대한 디지털 서명을 생성할 수 있습니다. [ARM Mbed GitHub 리포지토리](https://github.com/armmbed/mbed-os-example-lorawan-fuota)에 포함된 것과 같은 디지털 서명 도구를 사용하는 것이 좋습니다. 여기에는 델타 이미지를 생성하고 디바이스에서 해당 이미지를 사용하기 위한 도구도 포함됩니다.

## 콘솔을 사용하여 FUOTA 태스크 생성 및 펌웨어 이미지 업로드
<a name="lorawan-fuota-task-console"></a>

콘솔을 사용하여 FUOTA 태스크를 생성하고 펌웨어 이미지를 업로드하려면 콘솔의 [FUOTA 태스크(FUOTA tasks)](https://console.aws.amazon.com/iot/home#/wireless/fuotaTasks) 탭으로 이동한 다음 **FUOTA 태스크 생성(Create FUOTA task)**을 선택합니다.

1. 

**FUOTA 태스크 생성**

   FUOTA 태스크를 생성하려면 태스크 속성과 태그를 지정합니다.

   1. 

**FUOTA 태스크 속성 지정**  
FUOTA 태스크 속성을 지정하려면 FUOTA 태스크에 대해 다음 정보를 입력합니다.
      + **이름(Name)**: FUOTA 태스크의 고유한 이름을 입력합니다. 이름에는 문자, 숫자, 하이픈 및 밑줄만 포함되어야 합니다. 공백은 포함할 수 없습니다.
      + **설명(Description)**: 멀티캐스트 그룹에 대한 설명(선택 사항)을 제공할 수 있습니다. 설명 필드는 최대 2,048자까지 가능합니다.
      + **RFRegion**: FUOTA 태스크의 주파수 대역을 설정합니다. 주파수 대역은 무선 디바이스 또는 멀티캐스트 그룹을 프로비저닝하는 데 사용한 것과 일치해야 합니다.

   1. 

**FUOTA 태스크 태그**  
선택적으로 모든 키-값 페어를 FUOTA 태스크에 대한 **태그(Tags)**로 제공할 수 있습니다. 태스크 생성을 계속하려면 **다음(Next)**을 선택합니다.

1. 

**펌웨어 이미지 업로드**

   FUOTA 태스크에 추가하는 디바이스의 펌웨어를 업데이트하는 데 사용할 펌웨어 이미지 파일을 선택합니다. 펌웨어 이미지 파일은 S3 버킷에 저장됩니다. 사용자를 대신하여 AWS IoT Core for LoRaWAN에 펌웨어 이미지에 액세스할 수 있는 권한을 제공할 수 있습니다. 펌웨어 업데이트를 수행할 때 신뢰성을 확인할 수 있도록 펌웨어 이미지에 디지털 서명을 하는 것이 좋습니다.

   1. 

**펌웨어 이미지 파일 선택**  
새 펌웨어 이미지 파일을 S3 버킷에 업로드하거나 S3 버킷에 이미 업로드된 기존 이미지를 선택할 수 있습니다.
**참고**  
펌웨어 이미지 파일의 크기는 1MB를 넘지 않아야 합니다. 펌웨어 크기가 클수록 업데이트 프로세스를 완료하는 데 더 오래 걸릴 수 있습니다.
      + 기존 이미지를 사용하려면 **기존 펌웨어 이미지 선택(Select an existing firmware image)**을 선택하고 **S3 찾아보기(Browse S3)**를 선택한 다음 사용할 펌웨어 이미지 파일을 선택합니다.

        AWS IoT Core for LoRaWAN은 S3 버킷에 있는 펌웨어 이미지 파일의 경로인 S3 URL을 채웁니다. 경로의 형식은 `s3://bucket_name/file_name`입니다. [Amazon Simple Storage Service](https://console.aws.amazon.com/s3/) 콘솔에서 파일을 보려면 **보기(View)**를 선택합니다.
      + 새 펌웨어 이미지를 업로드하려면

        1. **새 펌웨어 이미지 업로드**를 선택하고 펌웨어 이미지를 업로드합니다. 이미지 파일은 1MB를 넘지 않아야 합니다.

        1. S3 버킷을 생성하고 펌웨어 이미지 파일을 저장할 **버킷 이름(Bucket name)**을 입력하려면 **S3 버킷 생성(Create S3 bucket)**을 선택합니다.

   1. 

**버킷에 액세스할 수 있는 권한**  
새 서비스 역할을 생성하거나 기존 역할을 선택하여 AWS IoT Core for LoRaWAN이 사용자를 대신하여 S3 버킷의 펌웨어 이미지 파일에 액세스하도록 허용할 수 있습니다. **다음**을 선택합니다.

      새 역할을 생성하려면 역할 이름을 입력하거나 임의의 이름이 자동으로 생성되도록 비워 둘 수 있습니다. S3 버킷에 대한 액세스 권한을 부여하는 정책 권한을 보려면 **정책 권한 보기(View policy permissions)**를 선택합니다.

   S3 버킷을 사용하여 이미지를 저장하고 AWS IoT Core for LoRaWAN에 액세스 권한을 부여하는 방법에 대한 자세한 내용은 [S3 버킷에 펌웨어 파일 업로드 및 IAM 역할 추가](lorawan-upload-firmware-s3bucket.md) 섹션을 참조하세요.

1. 

**검토 및 생성**

   FUOTA 태스크를 생성하려면 지정한 FUOTA 태스크 및 구성 세부 정보를 검토하고 **태스크 생성(Create task)**을 선택합니다.

## API를 사용하여 FUOTA 태스크 생성 및 펌웨어 이미지 업로드
<a name="lorawan-fuota-task-api"></a>

API를 사용하여 FUOTA 태스크를 생성하고 펌웨어 이미지 파일을 지정하려면 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateFuotaTask.html) API 작업 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/create-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/create-fuota-task.html) CLI 명령을 사용합니다. `input.json` 파일을 `create-fuota-task` 명령에 대한 입력으로 제공할 수 있습니다. API 또는 CLI를 사용할 때 입력으로 제공하는 펌웨어 이미지 파일은 이미 S3 버킷에 업로드되어 있어야 합니다. 또한 S3 버킷의 펌웨어 이미지에 대한 액세스 권한을 AWS IoT Core for LoRaWAN에 부여하는 IAM 역할을 지정합니다.

```
aws iotwireless create-fuota-task \
    --cli-input-json file://input.json
```

여기서 각 항목은 다음과 같습니다.

**input.json 내용**

```
{   
   "Description": "FUOTA task to update firmware of devices in multicast group.",
   "FirmwareUpdateImage": "S3:/firmware_bucket/firmware_image
   "FirmwareUpdateRole": "arn:aws:iam::123456789012:role/service-role/ACF1zBEI"
   "LoRaWAN": { 
      "RfRegion": "US915"
   },
   "Name": "FUOTA_Task_MC"  
}
```

FUOTA 태스크를 생성한 후 다음 API 작업 또는 CLI 명령을 사용하여 FUOTA 태스크에 대한 정보를 업데이트, 삭제 또는 가져올 수 있습니다.
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateFuotaTask](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateFuotaTask) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/update-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/update-fuota-task.html) 
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetFuotaTask](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetFuotaTask) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html) 
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListFuotaTasks](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListFuotaTasks) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-fuota-tasks.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-fuota-tasks.html) 
+ [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteFuotaTask](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteFuotaTask) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-fuota-task.html) 

## 다음 단계
<a name="lorawan-fuota-next-steps"></a>

FUOTA 태스크를 생성하고 펌웨어 이미지를 제공했으므로 이제 펌웨어 업데이트를 위해 작업에 디바이스를 추가할 수 있습니다. 개별 디바이스나 멀티캐스트 그룹을 작업에 추가할 수 있습니다. 자세한 내용은 [FUOTA 태스크에 디바이스 및 멀티캐스트 그룹 추가 및 FUOTA 세션 예약](lorawan-fuota-add-devices.md) 단원을 참조하십시오.

# FUOTA 태스크에 디바이스 및 멀티캐스트 그룹 추가 및 FUOTA 세션 예약
<a name="lorawan-fuota-add-devices"></a>

FUOTA 태스크를 생성한 후 펌웨어를 업데이트하려는 작업에 디바이스를 추가할 수 있습니다. 디바이스가 FUOTA 태스크에 성공적으로 추가되면 FUOTA 세션을 예약하여 디바이스 펌웨어를 업데이트할 수 있습니다.
+ 디바이스 수가 적은 경우 해당 디바이스를 FUOTA 태스크에 직접 추가할 수 있습니다.
+ 펌웨어를 업데이트하려는 디바이스가 많은 경우 이러한 디바이스를 멀티캐스트 그룹에 추가한 다음 멀티캐스트 그룹을 FUOTA 태스크에 추가할 수 있습니다. 멀티캐스트 그룹 생성 및 사용에 대한 자세한 내용은 [멀티캐스트 그룹을 생성하여 여러 디바이스로 다운링크 페이로드를 전송합니다.](lorawan-multicast-groups.md) 섹션을 참조하세요.

**참고**  
개별 디바이스나 멀티캐스트 그룹을 FUOTA 태스크에 추가할 수 있습니다. 작업에 디바이스와 멀티캐스트 그룹을 모두 추가할 수는 없습니다.

디바이스 또는 멀티캐스트 그룹을 추가한 후 펌웨어 업데이트 세션을 시작할 수 있습니다. AWS IoT Core for LoRaWAN은 펌웨어 이미지를 수집하고 이미지를 조각화한 다음 암호화된 형식으로 조각을 저장합니다. 종단 디바이스는 조각을 수집하고 새 펌웨어 이미지를 적용합니다. 펌웨어 업데이트에 걸리는 시간은 이미지 크기와 이미지 조각화 방식에 따라 다릅니다. 펌웨어 업데이트가 완료되면 AWS IoT Core for LoRaWAN에서 저장하는 펌웨어 이미지의 암호화된 조각이 삭제됩니다. S3 버킷에서 펌웨어 이미지를 계속 찾을 수 있습니다.

## 필수 조건
<a name="lorawan-fuota-devices-prereq"></a>

FUOTA 태스크에 디바이스 또는 멀티캐스트 그룹을 추가하기 전에 다음을 수행합니다.
+ FUOTA 태스크를 이미 생성하고 펌웨어 이미지를 제공했어야 합니다. 자세한 내용은 [FUOTA 태스크 생성 및 펌웨어 이미지 제공](lorawan-fuota-create-task.md) 단원을 참조하십시오.
+ 디바이스 펌웨어를 업데이트할 무선 디바이스를 프로비저닝합니다. 디바이스 온보딩에 대한 자세한 내용은 [AWS IoT Core for LoRaWAN에 디바이스 온보딩](lorawan-onboard-end-devices.md) 섹션을 참조하세요.
+ 여러 디바이스의 펌웨어를 업데이트하려면 멀티캐스트 그룹에 해당 디바이스를 추가합니다. 자세한 내용은 [멀티캐스트 그룹을 생성하여 여러 디바이스로 다운링크 페이로드를 전송합니다.](lorawan-multicast-groups.md) 단원을 참조하십시오.
+ 디바이스를 AWS IoT Core for LoRaWAN에 온보딩할 때 FUOTA 구성 파라미터 `FPorts`를 지정합니다. LoRaWAN v1.0.x 디바이스를 사용하는 경우 `GenAppKey`도 지정해야 합니다. FUOTA 구성 파라미터에 대한 자세한 내용은 [멀티캐스트 및 FUOTA 구성을 위한 디바이스 준비](lorawan-prepare-devices-multicast.md) 섹션을 참조하세요.

## 콘솔을 사용하여 FUOTA 태스크에 디바이스 추가 및 FUOTA 세션 예약
<a name="lorawan-fuota-devices-console"></a>

콘솔을 사용하여 디바이스 또는 멀티캐스트 그룹을 추가하고 FUOTA 세션을 예약하려면 콘솔의 [FUOTA 태스크(FUOTA tasks)](https://console.aws.amazon.com/iot/home#/wireless/fuotaTasks) 탭으로 이동합니다. 그런 다음 디바이스를 추가할 FUOTA 태스크를 선택하고 펌웨어 업데이트를 수행합니다.

**디바이스 및 멀티캐스트 그룹 추가**

1. 개별 디바이스나 멀티캐스트 그룹을 FUOTA 태스크에 추가할 수 있습니다. 그러나 개별 디바이스와 멀티캐스트 그룹을 모두 동일한 FUOTA 태스크에 추가할 수는 없습니다. 콘솔을 사용하여 디바이스를 추가하려면 다음을 수행합니다.

   1. **FUOTA 태스크 세부 정보(FUOTA task details)**에서 **디바이스 추가(Add device)**를 선택합니다.

   1. 작업에 추가하는 디바이스의 주파수 대역 또는 **RFRegion**을 선택합니다. 이 값은 FUOTA 태스크에 대해 선택한 **RFRegion**과 일치해야 합니다.

   1. 태스크에 개별 디바이스를 추가할지 아니면 멀티캐스트 그룹을 추가할지 선택합니다.
      + 개별 디바이스를 추가하려면 **개별 디바이스 추가(Add individual devices)**를 선택하고 FUOTA 태스크에 추가하려는 각 디바이스의 디바이스 ID를 입력합니다.
      + 멀티캐스트 그룹을 추가하려면 **멀티캐스트 그룹 추가(Add multicast groups)**를 선택하고 태스크에 멀티캐스트 그룹을 추가합니다. 디바이스 프로파일 또는 태그를 사용하여 작업에 추가하려는 멀티캐스트 그룹을 필터링할 수 있습니다. 디바이스 프로파일로 필터링할 때 **클래스 B 지원(Supports Class B)** 또는 **클래스 C 지원(Supports Class C)**이 사용되는 프로파일이 있는 디바이스가 있는 멀티캐스트 그룹을 선택할 수 있습니다.

1. 

**FUOTA 세션 예약**

   디바이스 또는 멀티캐스트 그룹이 성공적으로 추가된 후 FUOTA 세션을 예약할 수 있습니다. 세션을 예약하려면 다음을 수행합니다.

   1. 디바이스 펌웨어를 업데이트하려는 FUOTA 태스크를 선택한 다음 **FUOTA 세션 예약(Schedule FUOTA session)**을 선택합니다.

   1. FUOTA 세션의 **시작 날짜(Start date)**와 **시작 시간(Start time)**을 지정합니다. 시작 시간이 현재 시간에서 30분 이후인지 확인합니다.

## API를 사용하여 FUOTA 태스크에 디바이스 추가 및 FUOTA 세션 예약
<a name="lorawan-fuota-devices-api"></a>

AWS IoT 무선 API 또는 CLI를 사용하여 무선 디바이스 또는 멀티캐스트 그룹을 FUOTA 태스크에 추가할 수 있습니다. 그런 다음 FUOTA 세션을 예약할 수 있습니다.

1. 

**디바이스 및 멀티캐스트 그룹 추가**

   무선 디바이스 또는 멀티캐스트 그룹을 FUOTA 태스크와 연결할 수 있습니다.
   + 개별 디바이스를 FUOTA 태스크에 연결하려면 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateWirelessDeviceWithFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateWirelessDeviceWithFuotaTask.html) API 작업 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-wireless-device-with-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-wireless-device-with-fuota-task.html) CLI 명령을 사용하고 `WirelessDeviceID`를 입력으로 제공합니다.

     ```
     aws iotwireless associate-wireless-device-with-fuota-task \
         --id "01a23cde-5678-4a5b-ab1d-33456808ecb2"
         --wireless-device-id "ab0c23d3-b001-45ef-6a01-2bc3de4f5333"
     ```
   + 멀티캐스트 그룹을 FUOTA 태스크에 연결하려면 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateMulticastGroupWithFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_AssociateMulticastGroupWithFuotaTask.html) API 작업 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-multicast-group-with-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/associate-multicast-group-with-fuota-task.html) CLI 명령을 사용하고 `MulticastGroupID`를 입력으로 제공합니다.

     ```
     aws iotwireless associate-multicast-group-with-FUOTA-task \
         --id 01a23cde-5678-4a5b-ab1d-33456808ecb2"
         --multicast-group-id
     ```

   무선 디바이스 또는 멀티캐스트 그룹을 FUOTA 태스크에 연결한 후 다음 API 작업 또는 CLI 명령을 사용하여 디바이스 또는 멀티캐스트 그룹을 나열하거나 작업에서 연결을 해제합니다.
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateWirelessDeviceFromFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateWirelessDeviceFromFuotaTask.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-wireless-device-from-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-wireless-device-from-fuota-task.html) 
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateMulticastGroupFromFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DisassociateMulticastGroupFromFuotaTask.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-multicast-group-from-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/disassociate-multicast-group-from-fuota-task.html) 
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListWirelessDevices.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListWirelessDevices.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-multicast-group.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-multicast-group.html) 
   + [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListMulticastGroups.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListMulticastGroups.html) 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-multicast-groups.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-multicast-groups.html) 
**참고**  
API:  
`ListWirelessDevices`는 `MulticastGroupID`가 필터로 사용될 때 일반 무선 디바이스와 멀티캐스트 그룹과 관련된 디바이스를 나열할 수 있습니다. API는 `FuotaTaskID`가 필터로 사용될 때 FUOTA 태스크와 관련된 무선 디바이스를 나열합니다.
`ListMulticastGroups`는 일반적으로 멀티캐스트 그룹을 나열하고 `FuotaTaskID`가 필터로 사용될 때 FUOTA 태스크와 관련된 멀티캐스트 그룹을 나열할 수 있습니다.

1. 

**FUOTA 세션 예약**

   디바이스 또는 멀티캐스트 그룹이 FUOTA 태스크에 성공적으로 추가되면 FUOTA 세션을 시작하여 디바이스 펌웨어를 업데이트할 수 있습니다. 시작 시간은 현재 시간에서 30분 이후여야 합니다. API 또는 CLI를 사용하여 FUOTA 세션을 예약하려면 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_StartFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_StartFuotaTask.html) API 작업 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/start-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/start-fuota-task.html) CLI 명령을 사용합니다.

   FUOTA 세션을 시작한 후에는 더 이상 디바이스 또는 멀티캐스트 그룹을 작업에 추가할 수 없습니다. [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GettFuotaTask.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GettFuotaTask.html) API 작업 또는 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-fuota-task.html) CLI 명령을 사용하여 FUOTA 세션의 상태에 대한 정보를 볼 수 있습니다.

# FUOTA 태스크 및 태스크에 추가된 디바이스의 상태 모니터링 및 문제 해결
<a name="lorawan-fuota-status"></a>

 무선 디바이스를 프로비저닝하고 사용하려는 멀티캐스트 그룹을 생성한 후 다음 단계를 수행하여 FUOTA 세션을 시작할 수 있습니다.

## FUOTA 태스크 상태
<a name="lorawan-fuota-task-status"></a>

AWS Management Console에 FUOTA 태스크에 대한 다음 상태 메시지 중 하나가 표시될 수 있습니다.
+ 

**보류중**  
이 상태는 FUOTA 태스크를 생성했지만 아직 펌웨어 업데이트 세션이 없음을 나타냅니다. 태스크가 생성되면 이 상태 메시지가 표시됩니다. 이 시간 동안 FUOTA 태스크를 업데이트하고 디바이스 또는 멀티캐스트 그룹을 태스크와 연결하거나 연결 해제할 수 있습니다. 상태가 **보류 중(Pending)**에서 변경된 후에는 추가 디바이스를 태스크에 추가할 수 없습니다.
+ 

**FUOTA 세션 대기 중(FUOTA session waiting)**  
디바이스가 FUOTA 태스크에 성공적으로 추가된 후 작업에 예약된 펌웨어 업데이트 세션이 있을 때 이 상태 메시지가 표시됩니다. 이 시간 동안에는 디바이스를 업데이트하거나 FUOTA 세션에 추가할 수 없습니다. FUOTA 세션을 취소하면 그룹 상태가 **보류 중(Pending)**으로 변경됩니다.
+ 

**FUOTA 세션 중(In FUOTA session)**  
FUOTA 세션이 시작되면 이 상태 메시지가 표시됩니다. 조각화 세션이 시작되고 종단 디바이스가 조각을 수집하고 펌웨어 이미지를 재구성하고 새 펌웨어 버전을 원래 버전과 비교하고 새 이미지를 적용합니다.
+ 

**FUOTA 완료(FUOTA done)**  
종단 디바이스에서 새 펌웨어 이미지가 적용되었다고 AWS IoT Core for LoRaWAN에 보고한 후 또는 세션 시간이 초과되면 FUOTA 세션이 완료로 표시되고 이 상태가 표시됩니다.

  다음과 같은 경우에도 이 상태가 표시되므로 펌웨어 업데이트가 디바이스에 올바르게 적용되었는지 확인해야 합니다.
  + FUOTA 태스크 상태가 **FUOTA 세션 대기 중(FUOTA session waiting)**이면 S3 버킷의 이미지 파일에 대한 링크가 올바르지 않거나 AWS IoT Core for LoRaWAN에 버킷의 파일에 액세스할 수 있는 충분한 권한이 없는 것과 같은 S3 버킷 오류가 있는 것입니다.
  + FUOTA 태스크 상태가 **FUOTA 세션 대기 중(FUOTA session waiting)**이면 FUOTA 세션을 시작하라는 요청이 있지만 FUOTA 작업의 디바이스 또는 멀티캐스트 그룹으로부터 응답이 수신되지 않은 것입니다.
  + FUOTA 태스크 상태가 **FUOTA 세션 중(In FUOTA session)**이면 디바이스 또는 멀티캐스트 그룹이 일정 기간 동안 조각을 전송하지 않아 세션이 시간 초과된 것입니다.
+ 

**삭제 대기 중(Delete waiting)**  
다른 상태의 FUOTA 태스크를 삭제하면 이 상태가 표시됩니다. 삭제 작업은 영구적이며 취소할 수 없습니다. 이 작업은 시간이 걸릴 수 있으며 FUOTA 태스크가 삭제될 때까지 태스크 상태는 **Delete waiting(삭제 대기 중)**이 됩니다. FUOTA 태스크가 이 상태가 된 후에는 다른 상태 중 하나로 전환할 수 없습니다.

## FUOTA 태스크의 디바이스 상태
<a name="lorawan-fuota-device-status"></a>

AWS Management Console에 FUOTA 태스크의 디바이스에 대한 다음 상태 메시지 중 하나가 표시될 수 있습니다. 각 상태 메시지 위로 마우스를 가져가서 표시 내용에 대한 자세한 정보를 볼 수 있습니다.
+ 

**Initial**  
FUOTA 세션이 시작되면 AWS IoT Core for LoRaWAN이 디바이스에 펌웨어 업데이트를 지원하는 패키지가 있는지 확인합니다. 디바이스에 지원되는 패키지가 있는 경우 디바이스에 대한 FUOTA 세션이 시작됩니다. 펌웨어 이미지가 조각화되고 조각이 디바이스로 전송됩니다. 이 상태가 표시되면 디바이스에 대한 FUOTA 세션이 아직 시작되지 않은 것입니다.
+ 

**패키지 지원되지 않음(Package unsupported)**  
디바이스에 지원되는 FUOTA 패키지가 없으면 이 상태가 표시됩니다. 펌웨어 업데이트 패키지가 지원되지 않으면 디바이스의 FUOTA 세션을 시작할 수 없습니다. 이 오류를 해결하려면 디바이스의 펌웨어가 FUOTA를 사용하여 펌웨어 업데이트를 수신할 수 있는지 확인합니다.
+ 

**조각화 알고리즘 지원되지 않음(Fragmentation algorithm unsupported)**  
FUOTA 세션이 시작될 때 AWS IoT Core for LoRaWAN은 디바이스에 대한 조각화 세션을 설정합니다. 이 상태가 표시되면 사용된 조각화 알고리즘 유형이 디바이스의 펌웨어 업데이트에 적용될 수 없는 것입니다. 디바이스에 지원되는 FUOTA 패키지가 없기 때문에 오류가 발생합니다. 이 오류를 해결하려면 디바이스의 펌웨어가 FUOTA를 사용하여 펌웨어 업데이트를 수신할 수 있는지 확인합니다.
+ 

**메모리가 충분하지 않음**  
AWS IoT Core for LoRaWAN이 이미지 조각을 전송한 후 종단 디바이스는 이미지 조각을 수집하고 이 조각으로 이진 이미지를 재구성합니다. 이 상태는 디바이스에 들어오는 펌웨어 이미지 조각을 조합할 메모리가 충분하지 않아 펌웨어 업데이트 세션이 조기에 종료될 수 있는 경우 때 표시됩니다. 이 오류를 해결하려면 디바이스의 하드웨어가 이 업데이트를 수신할 수 있는지 확인합니다. 디바이스에서 이 업데이트를 수신할 수 없는 경우 델타 이미지를 사용하여 펌웨어를 업데이트합니다.
+ 

**조각화 인덱스 지원되지 않음(Fragmentation index unsupported)**  
조각화 인덱스는 동시에 가능한 4개의 조각화 세션 중 하나를 식별합니다. 디바이스가 표시된 조각화 인덱스 값을 지원하지 않는 경우 이 상태가 표시됩니다. 이 오류를 해결하려면 다음 중 하나 이상을 수행하세요.
  + 디바이스에 대한 새 FUOTA 태스크를 시작합니다.
  + 오류가 지속될 경우 유니캐스트에서 멀티캐스트 모드로 전환합니다.
  + 그래도 오류가 해결되지 않으면 디바이스 펌웨어를 확인합니다.
+ 

**메모리 오류**  
이 상태는 AWS IoT Core for LoRaWAN으로부터 들어오는 조각을 수신할 때 디바이스에 메모리 오류가 발생했음을 나타냅니다. 이 오류가 발생하면 디바이스에서 이 업데이트를 수신하지 못하는 것일 수 있습니다. 이 오류를 해결하려면 디바이스의 하드웨어가 이 업데이트를 수신할 수 있는지 확인합니다. 필요한 경우 델타 이미지를 사용하여 디바이스 펌웨어를 업데이트합니다.
+ 

**잘못된 설명자(Wrong descriptor)**  
디바이스가 표시된 설명자를 지원하지 않습니다. 설명자는 조각화 세션 동안 전송될 파일을 설명하는 필드입니다. 이 오류가 표시되면 [AWS Support 센터](https://console.aws.amazon.com/support/home#/)에 문의하세요.
+ 

**세션 수 다시 재생(Session count replay)**  
이 상태는 디바이스가 이전에 이 세션 수를 사용했음을 나타냅니다. 오류를 해결하려면 디바이스에 대한 새 FUOTA 태스크를 시작합니다.
+ 

**누락된 조각(Missing fragments)**  
디바이스가 AWS IoT Core for LoRaWAN에서 이미지 조각을 수집할 때 독립적이고 코딩된 조각에서 새 펌웨어 이미지를 재구성합니다. 디바이스가 모든 조각을 수신하지 못한 경우 새 이미지를 재구성할 수 없으며 이 상태가 표시됩니다. 오류를 해결하려면 디바이스에 대한 새 FUOTA 태스크를 시작합니다.
+ 

**마이크 오류(MIC error)**  
디바이스가 수집된 조각에서 새 펌웨어 이미지를 재구성할 때 MIC(Message Integrity Check)를 수행하여 이미지의 신뢰성과 이미지가 올바른 소스에서 왔는지 확인합니다. 디바이스가 조각을 재조립한 후 MIC에서 불일치를 감지하면 이 상태가 표시됩니다. 오류를 해결하려면 디바이스에 대한 새 FUOTA 태스크를 시작합니다.
+ 

**성공(Successful)**  
디바이스에 대한 FUOTA 세션이 성공했습니다.
**참고**  
이 상태 메시지는 디바이스가 조각에서 이미지를 재구성하고 확인했음을 나타내지만 디바이스가 상태를 AWS IoT Core for LoRaWAN에 보고할 때 디바이스 펌웨어가 업데이트되지 않았을 수 있습니다. 디바이스 펌웨어가 업데이트되었는지 확인합니다.

## 다음 단계
<a name="lorawan-fuota-device-next"></a>

FUOTA 태스크 및 해당 디바이스의 다양한 상태와 문제를 해결할 수 있는 방법에 대해 알아보았습니다. 이러한 각 상태에 대한 자세한 내용은 [LoRaWAN 조각화된 데이터 블록 전송 사양, TS004-1.0.0](https://lora-alliance.org/wp-content/uploads/2020/11/fragmented_data_block_transport_v1.0.0.pdf)을 참조하세요.