

# 利用 AWS IoT Core for LoRaWAN 管理裝置
<a name="lorawan-manage-end-devices"></a>

下列是搭配使用裝置與 AWS IoT Core for LoRaWAN 時的一些重要考量。如需如何新增裝置至 AWS IoT Core for LoRaWAN 的相關資訊，請參閱 [將裝置加入 AWS IoT Core for LoRaWAN](lorawan-onboard-end-devices.md)。

## 裝置考量
<a name="lorawan-devices-criteria"></a>

選取要用於與 AWS IoT Core for LoRaWAN 通訊的裝置時，請考慮下列事項。
+ 可用的感應器
+ 電池容量
+ 能源消耗
+ 費用
+ 天線類型和傳輸範圍

## 搭配符合 AWS IoT Core for LoRaWAN 資格的閘道使用裝置
<a name="lorawan-devices-qualified-gateways"></a>

您使用的裝置可以與有資格搭配 AWS IoT Core for LoRaWAN 使用的無線閘道配對。您可以在 [AWS Partner Device Catalog](https://devices.amazonaws.com/search?page=1&sv=iotclorawan) 找到這些閘道和開發人員套件。我們也建議您考慮將這些裝置接近您的閘道。如需詳細資訊，請參閱[使用來自 AWS Partner Device Catalog 的合格閘道](lorawan-manage-gateways.md#lorawan-qualified-gateways)。

## LoRaWAN 版本
<a name="lorawan-lorawan-version"></a>

AWS IoT Core for LoRaWAN 支援所有符合 LoRa Alliance 標準化 1.0.x 或 1.1 LoRaWAN 規格的裝置。

## 啟用模式
<a name="lorawan-activation-modes"></a>

在您的 LoRaWAN 裝置可以傳送上行資料之前，您必須先完成稱為「啟用」**或「聯結」**的程序。若要啟用您的裝置，您可以使用 OTAA (無線啟用) 或 ABP (個人化啟用)。我們建議您使用 OTAA 來啟用裝置，因為每次啟用都會產生新的工作階段金鑰，這樣會使其更安全。

您的無線裝置規格是以 LoRaWAN 版本和啟用模式為基礎，這會決定每次啟動所產生的根金鑰和工作階段金鑰。如需詳細資訊，請參閱[使用主控台將您的無線裝置規格新增至 AWS IoT Core for LoRaWAN](lorawan-end-devices-add.md#lorawan-end-device-spec-console)。

## 裝置類別
<a name="lorawan-device-classes"></a>

LoRaWAN 裝置可以隨時傳送上行訊息。接聽下行訊息會耗用電池容量，並減少電池持續時間。LoRaWAN 通訊協定會指定三種類別的 LoRaWAN 裝置。
+ A 類裝置大部分時間都處於休眠狀態，而且僅短時間接聽下行訊息。這些元件大多是電池供電的感應器，電池壽命長達 10 年。
+ B 類裝置可以在排定的下行位置接收訊息。這些裝置大多是電池供電的致動器。
+ C 類裝置永遠都不會休眠，並持續接聽傳入的訊息，所以在接收訊息時沒有太多的延遲。這些裝置大多是電源供電的致動器。

如需這些無線裝置考量的詳細資訊，請參閱 [進一步了解 LoRaWAN](what-is-lorawan.md#lorawan-learn-more) 中提到的資源。

**Topics**
+ [裝置考量](#lorawan-devices-criteria)
+ [搭配符合 AWS IoT Core for LoRaWAN 資格的閘道使用裝置](#lorawan-devices-qualified-gateways)
+ [LoRaWAN 版本](#lorawan-lorawan-version)
+ [啟用模式](#lorawan-activation-modes)
+ [裝置類別](#lorawan-device-classes)
+ [使用 AWS IoT Core for LoRaWAN 執行調適型資料速率 (ADR)](iot-lorawan-adr.md)
+ [管理您的 LoRaWAN 裝置和 AWS IoT 之間的通訊](lorawan-device-cloud-communication.md)
+ [管理來自公有 LoRaWAN 裝置網路的 LoRaWAN 流量 (Everynet)](iot-lorawan-roaming.md)

# 使用 AWS IoT Core for LoRaWAN 執行調適型資料速率 (ADR)
<a name="iot-lorawan-adr"></a>

為了最佳化裝置傳輸耗電量，同時確保閘道接收來自終端裝置的訊息，AWS IoT Core for LoRaWAN 會使用調適型資料速率。調適型資料速率會指示終端裝置最佳化資料速率、傳輸功率及重新傳輸次數，並同時嘗試降低閘道收到的封包錯誤率。例如，如果您的終端裝置位於閘道附近，則調適型資料速率就會降低傳輸功率並提高資料速率。

**Topics**
+ [調適型資料速率 (ADR) 的運作方式](#iot-lorawan-adr-algorithm)
+ [設定資料速率限制 (CLI)](#iot-lorawan-adr-use)

## 調適型資料速率 (ADR) 的運作方式
<a name="iot-lorawan-adr-algorithm"></a>

若要啟用 ADR，您的裝置必須在訊框標頭中設定 ADR 位元。設定 ADR 位元後，AWS IoT Core for LoRaWAN 會傳送 `LinkADRReq` MAC 命令，而您的裝置會使用包含 ADR 命令的 ACK 狀態的 `LinkADRAns` 命令進行回應。一旦裝置收到 ADR 命令的 ACK 狀態，就會按照來自 AWS IoT Core for LoRaWAN 的 ADR 指示進行，並調整傳輸參數值以達到最佳資料速率。

AWS IoT Core for LoRaWAN ADR 演算法會使用上行中繼資料歷程記錄中的 SINR 資訊，來判斷裝置要使用的最佳傳輸功率和資料速率。此演算法會使用框架標頭中設定了 ADR 位元後開始傳送的最近 20 個上行訊息。為了判斷重新傳輸次數，它會使用封包錯誤率 (PER)，也就是遺失的封包總數百分比。使用此演算法時，您只能控制資料速率的範圍，也就是資料速率的下限和上限。

## 設定資料速率限制 (CLI)
<a name="iot-lorawan-adr-use"></a>

根據預設，當您在 LoRaWAN 裝置的訊框標頭中設定 ADR 位元時，AWS IoT Core for LoRaWAN 將會執行 ADR。您可以在使用 AWS IoT Wireless API 操作 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateServiceProfile.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateServiceProfile.html) 或 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html) 為 LoRaWAN 裝置建立服務設定檔時，控制資料速率的下限和上限。

**注意**  
從 AWS 管理主控台 建立服務設定檔時，則無法指定資料速率的上限和下限。只能使用 AWS IoT Wireless API 或 AWS CLI 進行指定。

若要指定資料速率的下限和上限，請使用 `DrMin` 和 `DrMax` 參數搭配 `CreateServiceProfile` API 操作。預設的資料速率下限和上限分別為 0 和 15。例如，下列 CLI 命令會設定資料速率下限 3 和上限 12。

```
aws iotwireless create-service-profile \ 
    --lorawan DrMin=3,DrMax=12
```

執行此命令會產生服務設定檔的 ID 和 Amazon Resource Name (ARN)。

```
{
    "Arn": "arn:aws:iotwireless:us-east-1:123456789012:ServiceProfile/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
    "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
}
```

您可以使用 AWS IoT Wireless API 操作 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetServiceProfile.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetServiceProfile.html) 或 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html) 取得所指定參數的值。

```
aws iotwireless get-service-profile --id "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
```

執行此命令會產生服務設定檔參數的值。

```
{
    "Arn": "arn:aws:iotwireless:us-east-1:651419225604:ServiceProfile/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
    "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
    "LoRaWAN": {
        "UlRate": 60,
        "UlBucketSize": 4096,
        "DlRate": 60,
        "DlBucketSize": 4096,
        "AddGwMetadata": false,
        "DevStatusReqFreq": 24,
        "ReportDevStatusBattery": false,
        "ReportDevStatusMargin": false,
        "DrMin": 3,
        "DrMax": 12,
        "PrAllowed": false,
        "HrAllowed": false,
        "RaAllowed": false,
        "NwkGeoLoc": false,
        "TargetPer": 5,
        "MinGwDiversity": 1
    }
}
```

如果您已建立多個設定檔，則可以使用 API 操作 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListServiceProfiles.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListServiceProfiles.html) 或 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/list-service-profiles.html](https://docs.aws.amazon.com/cli/latest/reference/list-service-profiles.html) 列出您 AWS 帳戶 中的服務設定檔，然後使用 `GetServiceProfile` API 或 `get-service-profile` CLI 命令擷取您自訂資料速率限制的服務設定檔。

# 管理您的 LoRaWAN 裝置和 AWS IoT 之間的通訊
<a name="lorawan-device-cloud-communication"></a>

將 LoRaWAN 裝置連接至 AWS IoT Core for LoRaWAN 後，裝置即可開始將訊息傳送至雲端。上行訊息是從您的裝置傳送並由 AWS IoT Core for LoRaWAN 接收的訊息。LoRaWAN 裝置可以隨時傳送上行訊息，然後將訊息轉寄至其他 AWS 服務 和雲端託管應用程式。從 AWS IoT Core for LoRaWAN 和其他 AWS 服務 和應用程式傳送至您的裝置的訊息稱為下行訊息。

下面介紹如何查看和管理裝置和雲端之間所傳送的上行和下行訊息。您可以維護下行訊息佇列，並依照這些訊息新增至佇列的順序，將這些訊息傳送至您的裝置。

**Topics**
+ [檢視從 LoRaWAN 裝置傳送的上行訊息格式](lorawan-uplink-metadata-format.md)
+ [將要傳送至 LoRaWAN 裝置的下行訊息排入佇列](lorawan-downlink-queue.md)

# 檢視從 LoRaWAN 裝置傳送的上行訊息格式
<a name="lorawan-uplink-metadata-format"></a>

在將 LoRaWAN 裝置連接至 AWS IoT Core for LoRaWAN 之後，您可以觀察將從無線裝置接收的上行訊息格式。

## 在可以觀察上行訊息之前
<a name="lorawan-uplink-metadata-prerequisites"></a>

您必須已加入無線裝置，並將裝置連接至 AWS IoT，以便它可以傳輸和接收資料。如需如何將裝置加入至 AWS IoT Core for LoRaWAN 的相關資訊，請參閱 [將裝置加入 AWS IoT Core for LoRaWAN](lorawan-onboard-end-devices.md)。

## 上行訊息包含哪些內容？
<a name="lorawan-uplink-metadata-contains"></a>

LoRaWAN 裝置藉由使用 LoRaWAN 閘道來連接至 AWS IoT Core for LoRaWAN。您從裝置收到的上行訊息將包含下列資訊。
+ 對應至從無線裝置傳送之加密承載訊息的承載資料。
+ 無線中繼資料，其中包括：
  + 裝置資訊，例如 DevEui、資料速率，以及裝置操作所在的頻率通道。
  + 連接至裝置之閘道的選用額外參數和閘道資訊。閘道參數包括閘道的 EUI、SNR 和 RSSi。

  透過使用無線中繼資料，您可以取得有關無線裝置的實用資訊，以及在裝置與 AWS IoT 之間傳輸的資料。例如，您可以使用 `AckedMessageId` 參數，來檢查裝置是否已收到最後確認的下行訊息。或者，如果選擇包含閘道資訊，您可以識別是否要切換到更接近裝置的更強閘道通道。

## 如何觀察上行訊息？
<a name="lorawan-uplink-metadata-observe"></a>

在加入了您的裝置之後，您可以在 AWS IoT 主控台的 **Test** (測試) 頁面上使用 [MQTT 測試用戶端](https://console.aws.amazon.com/iot/home#/test)，以訂閱您在建立目的地時所指定的主題。在連接您的裝置並開始傳送承載資料之後，您會開始看到訊息。

此圖表會識別連接至 AWS IoT Core for LoRaWAN 之 LoRaWAN 系統中的重要元素，這會顯示主要資料平面和資料流經系統的方式。

![\[顯示 AWS IoT Core for LoRaWAN 資料如何從無線裝置傳遞至 AWS IoT 和其他服務的影像。\]](http://docs.aws.amazon.com/zh_tw/iot-wireless/latest/developerguide/images/iot-lorawan-data-flow.png)


當無線裝置開始傳送上行資料時，AWS IoT Core for LoRaWAN 會將無線中繼資料資訊與承載一起包裝，然後傳送到您的 AWS 應用程式。

## 上行訊息範例
<a name="lorawan-uplink-metadata-example"></a>

下列範例顯示從裝置接收之上行訊息的格式。

```
{
    "WirelessDeviceId": "5b58245e-146c-4c30-9703-0ca942e3ff35", 
    "PayloadData": "Cc48AAAAAAAAAAA=",    
    "WirelessMetadata":
    {
        "LoRaWAN":
        {
            "ADR": false,
            "Bandwidth": 125,
            "ClassB": false,
            "CodeRate": "4/5",
            "DataRate": "0",
            "DevAddr": "00b96cd4",
            "DevEui": "58a0cb000202c99",            
            "FOptLen": 2,
            "FCnt": 1,
            "Fport": 136,   
            "Frequency": "868100000",     
            "Gateways": [
             {
                    "GatewayEui": "80029cfffe5cf1cc",      
                    "Snr": -29,
                    "Rssi": 9.75
             }
             ],  
            "MIC": "7255cb07",  
            "MType": "UnconfirmedDataUp",
            "Major": "LoRaWANR1",
            "Modulation": "LORA", 
            "PolarizationInversion": false,    
            "SpreadingFactor": 12,                         
            "Timestamp": "2021-05-03T03:24:29Z"
            
        }
    }
}
```

### 從上行中繼資料中排除閘道中繼資料
<a name="lorawan-uplink-metadata-example2"></a>

如果您想要從上行中繼資料中排除閘道中繼資料資訊，請在建立服務設定檔時停用 **AddGwMetadata** 參數。如需停用此參數的相關資訊，請參閱 [新增裝置設定檔](lorawan-define-profiles.md#lorawan-service-profiles)。

在此情況下，您不會看到上行中繼資料中的 `Gateways` 區段，如下列範例所示。

```
{  
    "WirelessDeviceId": "0d9a439b-e77a-4573-a791-49d5c0f4db95",
    "PayloadData": "AAAAAAAA//8=",
    "WirelessMetadata": {
        "LoRaWAN": {
            "ClassB": false,
            "CodeRate": "4/5",
            "DataRate": "1",
            "DevAddr": "01920f27",
            "DevEui": "ffffff10000163b0",
            "FCnt": 1,
            "FPort": 5,
            "Timestamp": "2021-04-29T05:19:43.646Z"
    }
  }
}
```

# 將要傳送至 LoRaWAN 裝置的下行訊息排入佇列
<a name="lorawan-downlink-queue"></a>

雲端託管應用程式和其他 AWS 服務 可以向您的無線裝置傳送下行訊息。下行訊息是從 AWS IoT Core for LoRaWAN 傳送至您的無線裝置的訊息。您可以為已加入 AWS IoT Core for LoRaWAN 的每台裝置安排和傳送下行訊息。

如果您有多個裝置要為其傳送下行訊息，則可以使用多點傳送群組。多點傳送組中的裝置會共用相同的多點傳送地址，然後將資料分配至整個收件人裝置群組。如需詳細資訊，請參閱[建立多點傳送群組，以將下行承載傳送至多個裝置](lorawan-multicast-groups.md)。

## 下行訊息佇列的運作方式
<a name="lorawan-how-downlink-works"></a>

LoRaWAN 裝置的裝置類別決定了佇列中的訊息傳送至裝置的方式。A 類裝置會將上行訊息傳送至 AWS IoT Core for LoRaWAN 以指示裝置可用於接收下行訊息。B 類裝置可以在常規的下行位置接收訊息。C 類裝置可以隨時接收下行訊息。如需裝置分級的詳細資訊，請參閱 [裝置類別](lorawan-manage-end-devices.md#lorawan-device-classes)。

下面顯示如何將訊息排入佇列並將其傳送至 A 類裝置。

1. AWS IoT Core for LoRaWAN 會透過訊框連接埠、承載資料，以及使用 AWS IoT 主控台或 AWS IoT Wireless API 所指定的確認模式參數，來緩衝您新增至佇列的下行訊息。

1. 您的 LoRaWAN 裝置傳送一則上行訊息，指示其處於線上狀態，並且可以開始接收下行訊息。

1. 如已將多個下行訊息新增至佇列，則 AWS IoT Core for LoRaWAN 將佇列中的第一則下行訊息傳送至已設定確認 (ACK) 旗標的裝置。

1. 您的裝置會立即將上行訊息傳送至 AWS IoT Core for LoRaWAN，或是進入睡眠狀態，直到下一個上行訊息產生且在訊息中包含 ACK 旗標。

1. AWS IoT Core for LoRaWAN 接收含有 ACK 旗標的上行訊息時，會清除佇列中的下行訊息，指示您的裝置已成功收到下行訊息。如果檢查三次後上行訊息中仍缺少 ACK 旗標，則會丟棄該訊息。

## 使用主控台執行下行佇列操作
<a name="lorawan-downlink-queue-console"></a>

您可以使用 AWS 管理主控台 將下行訊息排入佇列，並根據需要清除個別訊息或整個佇列。若為 A 類裝置，在從裝置接收上行訊息以指示裝置處於線上狀態後，已排入佇列的訊息將會傳送至裝置。訊息傳送後，即會自動從佇列中清除。

**將下行訊息排入佇列**  
建立下行訊息佇列

1. 前往 [AWS IoT 主控台的裝置集線器](https://console.aws.amazon.com/iot/home#/wireless/devices)，然後選擇要將下行訊息排入佇列的裝置。

1. 在裝置詳細資訊頁面的 **Downlink messages** (下行訊息) 部分中，選擇 **Queue downlink messages** (將下行訊息排入佇列)。

1. 請指定以下參數以設定下行訊息：
   + **FPort**：選擇裝置與 AWS IoT Core for LoRaWAN 通訊的訊框連接埠。
   + **Payload** (承載)：指定您要傳送至裝置的承載訊息。承載大小上限為 242 個位元組。如果啟用了調適型資料速率 (ADR)，AWS IoT Core for LoRaWAN 會使用其為您的承載大小選擇最佳的資料速率。您可以根據需要進一步最佳化資料速率。
   + **Acknowledge mode** (確認模式)：確認您的裝置是否已收到下行訊息。如果訊息需要此模式，您將會在資料串流中看到含有 ACK 旗標的上行訊息，且訊息將從佇列中清除。

1. 若要將下行訊息新增至佇列，請選擇 **Submit** (提交)。

您的下行訊息現已新增至佇列。如果您未看到訊息或接收到錯誤，則可以疑難排解錯誤，如 [下行訊息佇列錯誤疑難排解](#lorawan-downlink-queue-troubleshoot) 中所述。

**注意**  
將下行訊息新增至佇列後，您便無法再編輯參數 **FPort**、**Payload** (承載) 和 **Acknowledge mode** (確認模式)。若要使用不同的參數值來傳送下行訊息，您可以刪除此訊息，並使用更新的參數值將新的下行訊息排入佇列。

佇列會列出您新增的下行訊息。若要查看裝置和 AWS IoT Core for LoRaWAN 之間交換的上行和下行訊息的承載，您可以使用網路分析器。如需詳細資訊，請參閱[使用網路分析器即時監控無線資源機群](network-analyzer-overview.md)。

**列出下行訊息佇列**  
您建立的下行訊息即會新增至佇列。每個後續下行訊息均會在此訊息之後新增至佇列中。您可以在裝置詳細資訊頁面的 **Downlink messages** (下行訊息) 部分查看下行訊息清單。接收上行後，訊息將傳送至裝置。在您的裝置收到下行訊息後，訊息將從佇列中移除。然後，下一則訊息將在佇列中向上移動，以便傳送至您的裝置。

**刪除個別下行訊息或清除整個佇列**  
每則下行訊息在傳送至您的裝置後，均會自動從佇列中清除。您亦可刪除個別訊息或清除整個下行佇列。這些動作無法復原。
+ 如果您在佇列中找到不想傳送的訊息，請選擇訊息，然後選擇 **Delete** (刪除)。
+ 如果您不希望將佇列中的任何訊息傳送至您的裝置，則可以選擇 **Clear downlink queue** (清除下行佇列)。

## 使用 API 執行下行佇列操作
<a name="lorawan-downlink-queue-api"></a>

您可以使用 AWS IoT Wireless API 將下行訊息排入佇列，並根據需要清除個別訊息或整個佇列。

**將下行訊息排入佇列**  
若要建立下行訊息佇列，請使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_SendDataToWirelessDevice.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_SendDataToWirelessDevice.html) API 操作或 [cli/latest/reference/iotwireless/send-data-to-wireless-device.html](cli/latest/reference/iotwireless/send-data-to-wireless-device.html) CLI 命令。

```
aws iotwireless send-data-to-wireless-device \
    --id "11aa5eae-2f56-4b8e-a023-b28d98494e49" \
    --transmit-mode "1" \
    --payload-data "SGVsbG8gVG8gRGV2c2lt" \
    --wireless-metadata LoRaWAN={FPort=1}
```

執行此命令的輸出會為下行訊息產生 `MessageId`。在某些情況下，即使您收到 `MessageId`，資料封包繩也可能會被丟棄。如需如何解決錯誤的詳細資訊，請參閱 [下行訊息佇列錯誤疑難排解](#lorawan-downlink-queue-troubleshoot)。

```
{
    MessageId: "6011dd36-0043d6eb-0072-0008"
}
```

**列出佇列中的下行訊息**  
若要列出佇列中的所有下行訊息，請使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListQueuedMessages.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListQueuedMessages.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-queued-messages.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/list-queued-messages.html) CLI 命令。

```
aws iotwireless list-queued-messages
```

預設情況下，執行此命令時最多可顯示 10 則下行訊息。

**移除個別下行訊息或清除整個佇列**  
若要從佇列中移除個別訊息或清除整個佇列，請使用 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteQueuedMessages.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_DeleteQueuedMessages.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-queued-messages.html](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/delete-queued-messages.html) CLI 命令。
+ 若要移除個別訊息，請提供您想要為無線裝置移除的訊息的 `messageID` (由 `wirelessDeviceId` 指定)。
+ 若要清除整個下行佇列，請針對您的無線裝置將 `messageID` 指定為 `*` (由 `wirelessDeviceId` 指定)。

## 下行訊息佇列錯誤疑難排解
<a name="lorawan-downlink-queue-troubleshoot"></a>

若您並未看到預期的結果，請檢查以下事項：
+ 

**下行訊息不會顯示在 AWS IoT 主控台中**  
如果在新增 (如 [使用主控台執行下行佇列操作](#lorawan-downlink-queue-console) 中所述) 後在佇列中看不到下行訊息，這可能是因為您的裝置尚未完成名為*啟用*或*聯結程序*的程序。當您的裝置加入 AWS IoT Core for LoRaWAN 時，此程序即完成。如需詳細資訊，請參閱[使用主控台將您的無線裝置規格新增至 AWS IoT Core for LoRaWAN](lorawan-end-devices-add.md#lorawan-end-device-spec-console)。

  在將您的裝置加入 AWS IoT Core for LoRaWAN 後，您可以使用網路分析器或 Amazon CloudWatch 來監控您的裝置，以檢查聯結和重新聯結是否成功。如需詳細資訊，請參閱[監控工具](monitoring-cloudwatch.md#monitoring-tools)。
+ 

**使用 API 時遺失下行訊息資料封包**  
當您使用 `SendDataToWirelessDevice` API 操作時，API 會傳回唯一的 `MessageId`。但是，這無法確認您的 LoRaWAN 裝置是否已收到下行訊息。如果您的裝置尚未完成聯結程序，則下行資料封包可能會被丟棄。如需如何解決此錯誤的詳細資訊，請參閱上一節。
+ 

**傳送下行訊息時發生缺少 ARN 錯誤**  
從佇列將下行訊息傳送至您的裝置時，您可能會接收到遺失 Amazon 資源名稱 (ARN) 錯誤。由於未為接收下行訊息的裝置正確指定目的地，即可能會出現此錯誤。若要解決此錯誤，請檢查裝置的目的地詳細資訊。

# 管理來自公有 LoRaWAN 裝置網路的 LoRaWAN 流量 (Everynet)
<a name="iot-lorawan-roaming"></a>

使用公開可用的 LoRaWAN 網路，在幾分鐘內就能將您的 LoRaWAN 裝置連線到雲端。AWS IoT Core for LoRaWAN 現在可支援美國和英國境內的 Everynet 網路覆蓋範圍。使用公有網路時，每部裝置每月都須支付公有網路連線費。定價適用於有提供公有網路連線的所有 AWS 區域。如需有關此功能定價的詳細資訊，請參閱 [AWS IoT Core 定價頁面](https://aws.amazon.com/iot-core/pricing/)。

**重要**  
公有網路是由 Everynet 直接操作並作為服務提供。使用此功能之前，請參閱適用的 [AWS 服務條款](https://aws.amazon.com/service-terms/)。此外，如果您透過 AWS IoT Core for LoRaWAN 使用公有網路，特定 LoRaWAN 裝置資訊 (例如 `DevEUI` 和 `JoinEUI`) 將會在 AWS IoT Core for LoRaWAN 可用的區域中複寫。

AWS IoT Core for LoRaWAN 依照 LoRa Alliance 漫遊規格支援公有 LoRaWAN 網路，如 [LoRaWAN 後端介面 1.0 規格](https://lora-alliance.org/wp-content/uploads/2020/11/lorawantm-backend-interfaces-v1.0.pdf)所述。公有網路功能可用於連線家用網路外部的終端裝置。為了支援此功能，AWS IoT Core for LoRaWAN 與 Everynet 合作提供更廣的無線電涵蓋範圍。

## 使用公有 LoRaWAN 網路的好處
<a name="lorawan-roaming-benefits"></a>

您的 LoRaWAN 裝置可以使用公有網路連線到雲端，這樣可以縮短部署時間，並減少維護私有 LoRaWAN 網路所需的時間和成本。

透過使用公有 LoRaWAN 網路，您可獲得諸如涵蓋範圍擴展、無須無線電網路執行核心以及涵蓋範圍密集化等好處。此功能可用於：
+ 在裝置離開家用網路時提供涵蓋範圍，例如[公有 LoRaWAN 網路支援架構](lorawan-roaming-works.md#lorawan-roaming-architecture)一節所示圖中的*裝置 A*。
+ 將涵蓋範圍擴大至沒有 LoRa 閘道可連線的裝置，例如[公有 LoRaWAN 網路支援架構](lorawan-roaming-works.md#lorawan-roaming-architecture)一節所示圖中的*裝置 B*。然後，裝置可以使用合作夥伴提供的閘道連線到家用網路。

您的 LoRaWAN 裝置可以使用公有網路，透過漫遊功能連線到雲端，這樣可以縮短部署時間，並減少維護私有 LoRaWAN 網路所需的時間和成本。

下列各節說明公有網路支援架構、公有 LoRaWAN 網路支援的運作方式，以及如何使用此功能。

**Topics**
+ [使用公有 LoRaWAN 網路的好處](#lorawan-roaming-benefits)
+ [LoRaWAN 公有網路支援的運作方式](lorawan-roaming-works.md)
+ [如何使用公有網路支援](lorawan-roaming-use.md)

# LoRaWAN 公有網路支援的運作方式
<a name="lorawan-roaming-works"></a>

AWS IoT Core for LoRaWAN 依照 LoRa Alliance 規格，支援被動漫遊功能。使用被動漫遊時，漫遊程序對終端裝置完全透明。在家用網路外部漫遊的終端裝置可以連線到該網路中的閘道，並使用應用程式伺服器交換上行和下行資料。在整個漫遊過程中，裝置保持與家用網路的連線。

**注意**  
AWS IoT Core for LoRaWAN 僅支援被動漫遊的無狀態功能。不支援切換漫遊。在切換漫遊中，當您的裝置移動到家用網路外部時，會切換到不同的電信業者。

**Topics**
+ [公有 LoRaWAN 網路的概念](#lorawan-roaming-concepts)
+ [公有 LoRaWAN 網路支援架構](#lorawan-roaming-architecture)

## 公有 LoRaWAN 網路的概念
<a name="lorawan-roaming-concepts"></a>

以下說明 AWS IoT Core for LoRaWAN 支援的公有網路功能採用的概念。

**LoRaWAN 網路伺服器 (LNS)**  
LNS 是獨立的私有伺服器，可以在您的內部部署執行，也可以是雲端服務。AWS IoT Core for LoRaWAN 是在雲端上提供服務的 LNS。

**家用網路伺服器 (hNS)**  
家用網路是裝置所屬的網路。家用網路伺服器 (hNS) 是 AWS IoT Core for LoRaWAN 儲存裝置佈建資料 (例如 `DevEUI`、`AppEUI` 和工作階段金鑰) 的 LNS。

**已瀏覽網路伺服器 (vNS)**  
已瀏覽網路是裝置離開家用網路時所涵蓋的網路。到訪網路伺服器 (vNS) 是與 hNS 簽訂業務和技術合約的 LNS，可為終端裝置提供服務。AWS 合作夥伴 Everynet 會作為到訪網路提供涵蓋範圍。

**服務網路伺服器 (sNS)**  
服務網路伺服器 (sNS) 是處理裝置 MAC 命令的 LNS。一個 LoRa 工作階段只能有一個 sNS。

**轉送網路伺服器 (fNS)**  
轉送網路伺服器 (fNS) 是管理無線電閘道的 LNS。一個 LoRa 工作階段中可能有零個或多個 fNS。此網路伺服器管理將從裝置收到的資料封包轉送到家用網路。

## 公有 LoRaWAN 網路支援架構
<a name="lorawan-roaming-architecture"></a>

以下架構圖說明 AWS IoT Core for LoRaWAN 如何與 Everynet 合作提供公有網路連線。在此情況下，*裝置 A* 會透過 LoRa 閘道連接至 AWS IoT Core for LoRaWAN 提供的 hNS (家用網路伺服器)。當裝置 A 移動到原服務網路之外時，它便進入到訪網路，並由 Everynet 提供的到訪網路伺服器 (vNS) 提供涵蓋範圍。vNS 也將涵蓋範圍擴展到*裝置 B*，而裝置 B 沒有 LoRa 閘道可連線。

您可以在 AWS IoT 主控台中檢視公有網路涵蓋範圍資訊，如下節所述。

![\[此影像顯示 AWS IoT Core for LoRaWAN 如何支援漫遊以支援離開家用網路的裝置，以及如何將涵蓋範圍擴大至沒有閘道可連線的裝置。\]](http://docs.aws.amazon.com/zh_tw/iot-wireless/latest/developerguide/images/iot-lorawan-roaming-architecture.png)


 AWS IoT Core for LoRaWAN 依照 [LoRa Alliance LoRaWAN 漫遊中樞技術建議](https://lora-alliance.org/wp-content/uploads/2022/01/TR010-1.0.0-LoRaWAN-Roaming-Hub.pdf)，使用漫遊中心功能。漫遊中樞為 Everynet 提供端點，用於路由從終端裝置接收到的流量。在這種情況下，Everynet 充當轉送網路伺服器 (fNS)，轉送從裝置接收到的流量。它使用由 LoRa Alliance 規格定義的 HTTP RESTful API。

**注意**  
如果您的裝置從原服務網路離開並進入原服務網路和 Everynet 都能涵蓋的位置，它會使用先到先得的政策來決定是連接到 LoRa 閘道，還是連接到 Everynet 的閘道。

造訪公有網路時，hNS 和提供服務的網路伺服器 (sNS) 會加以區隔。然後在 sNS 和 hNS 之間交換上行封包。

# 如何使用公有網路支援
<a name="lorawan-roaming-use"></a>

若要啟用 Everynet 的公有網路支援，請在建立服務設定檔時啟用特定漫遊參數。在此 Beta 版中，當您使用 AWS IoT Wireless API 或 AWS CLI 時，您可以使用這些參數。下列各節說明您必須啟用的參數，以及如何使用 AWS CLI 啟用公有網路。

**注意**  
您只能在建立新的服務設定檔時啟用公有網路支援。您無法使用這些參數更新現有的設定檔來啟用公有網路。

**Topics**
+ [漫遊參數](#lorawan-roaming-parameters)
+ [啟用裝置的公有網路支援](#lorawan-roaming-enable)

## 漫遊參數
<a name="lorawan-roaming-parameters"></a>

請在為裝置建立服務設定檔時，指定下列參數。在從 AWS IoT 主控台的[設定檔](https://console.aws.amazon.com/iot/home#/wireless/profiles)中樞或使用 AWS IoT Wireless API 操作 [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateServiceProfile.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateServiceProfile.html) 或 AWS CLI 命令 [https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html) 新增服務設定檔時，指定這些參數。

**注意**  
AWS IoT Core for LoRaWAN 不支援切換漫遊。建立服務設定檔時，您無法啟用 `HrAllowed` 參數來指定是否使用切換漫遊。
+ 允許漫遊啟用 (`RaAllowed`)：此參數指定是否啟用漫遊啟用。漫遊啟用可讓終端裝置在 vNS 涵蓋範圍內啟動。使用漫遊功能時，`RaAllowed` 必須設定為 `true`。
+ 允許被動漫遊 (`PrAllowed`)：此參數指定是否啟用被動漫遊。使用漫遊功能時，`PrAllowed` 必須設定為 `true`。

## 啟用裝置的公有網路支援
<a name="lorawan-roaming-enable"></a>

若要在您的裝置上啟用公有 LoRaWAN 網路支援，請執行下列程序。

**注意**  
您只能針對 OTAA 裝置啟用公有網路功能。使用 ABP 作為啟用方法的裝置不支援此功能。

1. 

**使用漫遊參數建立服務設定檔**

   啟用漫遊參數以建立服務設定檔。
**注意**  
當您為要與此服務設定檔產生關聯的裝置建立裝置設定檔時，建議您指定較大的 `RxDelay1` 參數值，至少大於 2 秒。
   + 

**使用 AWS IoT 主控台**  
前往 AWS IoT 主控台的[設定檔](https://console.aws.amazon.com/iot/home#/wireless/profiles)中樞，然後選擇**新增服務設定檔**。建立設定檔時，選擇**啟用公有網路**。
   + 

**使用 AWS IoT Wireless API**  
若要在建立服務設定檔時啟用漫遊，請使用 [CreateServiceProfile](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateServiceProfile.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/create-service-profile.html) CLI 命令，如下列範例所示。

     ```
     aws iotwireless create-service-profile \ 
         --region us-east-1 \
         --name roamingprofile1 \ 
         --lorawan '{"AddGwMetadata":true,"PrAllowed":true,"RaAllowed":true}'
     ```

     執行這個命令會傳回服務設定檔的 ARN 和 ID 作為輸出。

     ```
     {
         "Arn": "arn:aws:iotwireless:us-east-1:123456789012:ServiceProfile/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
         "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d"
     }
     ```

1. 

**檢查服務設定檔中的漫遊參數**

   若要檢查您指定的漫遊參數，您可以在主控台中檢視服務設定檔，或使用`get-service-profile` CLI 命令，如下列範例所示。
   + 

**使用 AWS IoT 主控台**  
前往 AWS IoT 主控台的[設定檔](https://console.aws.amazon.com/iot/home#/wireless/profiles)中樞，然後選擇您建立的設定檔。在詳細資料頁面的**設定檔設定**索引標籤中，您會看到 **RaAllowed** 和 **PrAllowed** 設定為 `true`。
   + 

**使用 AWS IoT Wireless API**  
若要檢視您啟用的漫遊參數，請使用 [GetServiceProfile](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetServiceProfile.html) API 操作或 [https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html](https://docs.aws.amazon.com/cli/latest/reference/get-service-profile.html) CLI 命令，如下列範例所示。

     ```
     aws iotwireless get-service-profile \ 
         --region us-east-1 \ 
         --id 12345678-a1b2-3c45-67d8-e90fa1b2c34d
     ```

     執行此命令會傳回服務設定檔詳細資訊作為輸出，包括漫遊參數 `RaAllowed` 和 `PrAllowed` 的值。

     ```
     {
         "Arn": "arn:aws:iotwireless:us-east-1:123456789012:ServiceProfile/12345678-a1b2-3c45-67d8-e90fa1b2c34d",
         "Id": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
         "Name": "roamingprofile1"
         "LoRaWAN": {
             "UlRate": 60,
             "UlBucketSize": 4096,
             "DlRate": 60,
             "DlBucketSize": 4096,
             "AddGwMetadata": true,
             "DevStatusReqFreq": 24,
             "ReportDevStatusBattery": false,
             "ReportDevStatusMargin": false,
             "DrMin": 0,
             "DrMax": 15,
             "PrAllowed": true,
             "RaAllowed": true,
             "NwkGeoLoc": false,
             "TargetPer": 5,
             "MinGwDiversity": 1
         }
     }
     ```

1. 

**將服務設定檔附加至裝置**

   將您使用漫遊參數建立的服務設定檔附加到終端裝置。您也可以建立裝置設定檔並新增無線裝置的目的地。您會使用此目的地來路由從裝置傳送的上行訊息。如需有關建立裝置設定檔和目的地的詳細資訊，請參閱 [新增裝置設定檔](lorawan-define-profiles.md#lorawan-device-profiles) 和 [新增目的地至 AWS IoT Core for LoRaWAN](lorawan-create-destinations.md)。
   + 

**加入新裝置**  
如果您尚未加入裝置，請在將裝置新增至 AWS IoT Core for LoRaWAN 時指定使用的服務設定檔。以下命令顯示如何使用 `create-wireless-device` CLI 命令，使用您建立之服務設定檔的 ID 新增裝置。如需有關使用主控台來新增服務設定檔的資訊，請參閱 [使用主控台將您的無線裝置規格新增至 AWS IoT Core for LoRaWAN](lorawan-end-devices-add.md#lorawan-end-device-spec-console)。

     ```
     aws iotwireless create-wireless-device --cli-input-json file://createdevice.json
     ```

     下列顯示 *`createdevice.json`* 檔案的內容。

     **createdevice.json 的內容**

     ```
     {
         "Name": "DeviceA",  
         "Type": LoRaWAN,
         "DestinationName": "RoamingDestination1",
         "LoRaWAN": {
             "DeviceProfileId": "ab0c23d3-b001-45ef-6a01-2bc3de4f5333",
             "ServiceProfileId": "12345678-a1b2-3c45-67d8-e90fa1b2c34d",
             "OtaaV1_1": {
                 "AppKey": "3f4ca100e2fc675ea123f4eb12c4a012",
                 "JoinEui": "b4c231a359bc2e3d",
                 "NwkKey": "01c3f004a2d6efffe32c4eda14bcd2b4"
             },
             "DevEui": "ac12efc654d23fc2"
         },
     }
     ```

     執行此命令的輸出會產生無線裝置的 ARN 和 ID 做為輸出。

     ```
     {
         "Arn": "arn:aws:iotwireless:us-east-1:123456789012:WirelessDevice/1ffd32c8-8130-4194-96df-622f072a315f",
         "Id": "1ffd32c8-8130-4194-96df-622f072a315f"
     }
     ```
   + 

**更新現有裝置**  
如果您已經加入裝置，您可以更新現有的無線裝置以使用此服務設定檔。下列命令顯示如何使用 `update-wireless-device` CLI 命令，使用您建立的服務設定檔 ID 來更新裝置。

     ```
     aws iotwireless update-wireless-device \
         --id "1ffd32c8-8130-4194-96df-622f072a315f" \
         --service-profile-id "12345678-a1b2-3c45-67d8-e90fa1b2c34d" \ 
         --description "Using roaming service profile A"
     ```

     此命令不會產生任何輸出。您可以使用 `GetWirelessDevice` API 或 `get-wireless-device` CLI 命令來取得更新的資訊。

1. 

**使用 Everynet 將裝置連線到雲端**

   由於漫遊已啟用，您的裝置現在必須執行聯結才能取得新的 `DevAddr`。如果您使用 OTAA，LoRaWAN 裝置會傳送聯結要求，且網路伺服器可以允許該要求。然後它就可以使用 Everynet 提供的網路涵蓋範圍連線到 AWS 雲端。如需如何為裝置執行啟用程序或聯結的指示，請參閱裝置文件。
**注意**  
您只能為使用 OTAA 作為啟用方法的裝置啟用漫遊功能並連線至公有網路。不支援 ABP 裝置。如需如何為裝置執行啟用程序或聯結的指示，請參閱裝置文件。請參閱[啟用模式](lorawan-manage-end-devices.md#lorawan-activation-modes)。
若要停用裝置的漫遊功能，您可以取消裝置與此服務設定檔的關聯，然後將裝置與其他漫遊參數設定為 `false` 的服務設定檔產生關聯。切換至此服務設定檔後，您的裝置必須執行另一次加入，如此裝置才不會繼續在公有網路上執行。

1. 

**交換上行和下行訊息**

   裝置加入 AWS IoT Core for LoRaWAN 後，您就可以開始在裝置和雲端之間交換訊息。
   + 

**檢視上行訊息**  
當您從裝置傳送上行訊息時，AWS IoT Core for LoRaWAN 會使用您先前設定的目的地，將這些訊息傳遞給您的 AWS 帳戶。這些訊息將透過 Everynet 的網路從您的裝置傳送到雲端。

     您可以使用 AWS IoT 規則名稱檢視訊息，或使用 MQTT 用戶端來訂閱建立目的地時指定的 MQTT 主題。如需有關規則名稱和您指定之其他目的地詳細資訊的詳細資訊，請參閱 [使用主控台新增目的地](lorawan-create-destinations.md#lorawan-create-destination-console)。

     如需檢視上行訊息和格式的詳細資訊，請參閱 [檢視從 LoRaWAN 裝置傳送的上行訊息格式](lorawan-uplink-metadata-format.md)。
   + 

**傳送下行訊息**  
您可以使用主控台，或使用 AWS IoT Wireless API 命令 `SendDataToWirelessDevice` 或 AWS CLI 命令 `send-data-to-wireless-device`，將下行訊息排入佇列，並將其傳送至裝置。如需佇列和傳送下行訊息的詳細資訊，請參閱 [將要傳送至 LoRaWAN 裝置的下行訊息排入佇列](lorawan-downlink-queue.md)。

     下列程式碼顯示如何使用 `send-data-to-wireless-device` CLI 命令傳送下行訊息的範例。您可以指定接收資料的無線裝置 ID、承載、是否使用確認模式以及無線中繼資料。

     ```
     aws iotwireless send-data-to-wireless-device \
         --id "1ffd32c8-8130-4194-96df-622f072a315f" \
         --transmit-mode "1" \
         --payload-data "SGVsbG8gVG8gRGV2c2lt" \
         --wireless-metadata LoRaWAN={FPort=1}
     ```

     執行此命令的輸出會為下行訊息產生 `MessageId`。
**注意**  
在某些情況下，即使您收到 `MessageId`，資料封包繩也可能會被丟棄。如需疑難排解此類案例及解決這些情況的相關資訊，請參閱 [下行訊息佇列錯誤疑難排解](lorawan-downlink-queue.md#lorawan-downlink-queue-troubleshoot)。

     ```
     {
         MessageId: "6011dd36-0043d6eb-0072-0008"
     }
     ```
   + 

**檢視涵蓋範圍資訊**  
啟用公有網路之後，您可以在 AWS IoT 主控台中檢視網路涵蓋範圍資訊。前往 AWS IoT 主控台的[https://console.aws.amazon.com/iot/home#/wireless/network-coverage](https://console.aws.amazon.com/iot/home#/wireless/network-coverage)中樞，然後搜尋位置，即可在地圖上查看裝置的涵蓋範圍資訊。
**注意**  
此功能使用 Amazon Location Service 在 Amazon Location 地圖上顯示裝置的涵蓋範圍資訊。使用 Amazon Location 地圖之前，請先檢閱 Amazon Location Service 的條款與條件。請注意，AWS 可能會將您的 API 查詢傳輸給您選擇的第三方資料提供者，該提供者可能不在您目前使用的 AWS 區域 內。如需詳細資訊，請參閱 [AWS服務條款](https://aws.amazon.com/service-terms)。