

# 配置 LoRaWAN 设备的位置
<a name="lorawan-location-devices"></a>

将设备添加到 适用于 LoRaWAN 的 AWS IoT Core 时，您可以指定静态位置信息，也可以激活定位并指定目标。目标描述用于处理设备位置信息并将更新的位置路由到 Amazon Location Service 的 IoT 规则。配置设备位置后，位置数据将显示在 Amazon Location 地图上，其中包含准确性信息和您指定的目标。

您可以使用 AWS 管理控制台、AWS IoT Wireless API 或 AWS CLI 配置设备的位置。

## 上行链路消息的帧端口和格式
<a name="lorawan-location-devices-fportuplink"></a>

如果激活定位，则必须指定用于将 Wi-Fi 和 GNSS 扫描数据从设备传输到 适用于 LoRaWAN 的 AWS IoT Core 的地理定位帧端口。系统会使用此帧端口将位置信息传输给 适用于 LoRaWAN 的 AWS IoT Core。

LoRaWAN 规范提供了数据传输字段（FRMPayload）和端口字段（FPort）来区分不同类型的消息。要传输位置信息，您可以为帧端口指定一个介于 1 到 223 之间的任意值。FPort 0 为 MAC 消息预留，FPort 224 为 MAC 合规性测试预留，端口 225-255 为未来标准化应用扩展预留。

### 将上行链路消息从 适用于 LoRaWAN 的 AWS IoT Core 发送到规则引擎
<a name="lorawan-location-devices-uplink"></a>

当您添加目标时，它会创建一个 AWS IoT 规则，以使用规则引擎将数据路由到 Amazon Location Service。然后，更新的位置信息将显示在 Amazon Location 地图上。如果您尚未激活，则在您更新设备的静态位置坐标时，目标将路由位置数据。

以下代码显示了从 适用于 LoRaWAN 的 AWS IoT Core 发送的上行链路消息的格式，其中包含位置信息、准确度、解析器配置和无线元数据。下面突出显示的字段是可选的。如果没有垂直准确性信息，则此值为 `null`。

```
{
    // Position configuration parameters for given wireless device
    "WirelessDeviceId": {{"5b58245e-146c-4c30-9703-0ca942e3ff35"}},     

    // Position information for a device in GeoJSON format. Altitude
    // is optional. If no vertical accuracy information is available
    // or positioning isn't activated, the value is set to null.
    // The position information coordinates are listed in the order 
    // [longitude, latitude, altitude].
    "coordinates": [{{33.33000183105469, -22.219999313354492}}, 99.0],
    "type": "Point",
    "properties": { 
         "horizontalAccuracy": {{number}},
         "verticalAccuracy": number",
         "timestamp": "2022-08-19T03:08:35.061Z"
    },

    //Parameters controlled by 适用于 LoRaWAN 的 AWS IoT Core
    "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-location-devices-console"></a>

要使用 AWS 管理控制台配置和管理设备位置，请先登录控制台，然后转到 AWS IoT 控制台的 [https://console.aws.amazon.com/iot/home#/wireless/devices](https://console.aws.amazon.com/iot/home#/wireless/devices)（ 设备）中心页面。

**添加位置信息**  
添加设备的位置信息：

1. 在 **Devices**（设备）中心页面中，选择 **Add wireless device**（添加无线设备）。

1. 输入无线设备规格、设备和服务配置文件以及用于定义将数据路由到其他 AWS 服务 的 IoT 规则的目标。有关更多信息，请参阅[将您的设备登记到 适用于 LoRaWAN 的 AWS IoT Core](lorawan-onboard-end-devices.md)。

1. 输入位置信息，可以选择激活地理位置，并指定要用于路由消息的位置数据目标。
   + 

**位置信息**  
使用纬度和经度坐标以及可选的高度坐标指定设备的位置数据。位置信息基于 WGS84 坐标系。
   + 

**地理位置**  
如果您希望 适用于 LoRaWAN 的 AWS IoT Core 使用地理位置来计算设备位置，请激活定位功能。它使用第三方 GNSS 和 Wi-Fi 求解器实时识别设备位置。

     要输入地理位置信息，请选择**激活定位**，然后输入用于向 适用于 LoRaWAN 的 AWS IoT Core 传输 GNSS 和 Wi-Fi 扫描数据的地理位置帧端口。您将看到填充的默认 FPort 供您参考。但是，您可以选择 1 到 223 之间的其他任意值。
   + 

**位置数据目标**  
选择一个目标以描述用于处理设备位置数据并将此数据转发到 适用于 LoRaWAN 的 AWS IoT Core 的 AWS IoT 规则。此目标仅用于路由位置数据。它必须不同于您用于将设备数据路由到其他 AWS 服务 的目标。

**查看设备的位置配置**  
配置设备的位置后，适用于 LoRaWAN 的 AWS IoT Core 会创建一个称为 `iotwireless.map` 的 Amazon Location 地图。您可以在设备详细信息页面中的 **Position**（位置）选项卡上查看此地图。根据您指定的位置坐标或第三方求解器计算的位置，设备的位置将在地图上显示为标记。您可以放大或缩小以在地图上清晰地查看设备的位置。在设备详细信息页面中的 **Position**（位置）选项卡上，您还将看到准确度信息、确定设备位置的时间戳以及您指定的位置数据目标。

**注意**  
如果尚未激活 Amazon Location Service 地图，您将看到一条消息，指示您必须使用 Amazon Location Service 才能访问地图并查看位置。使用 Amazon Location Service 地图可能会对您的 AWS 账户 额外计费。有关更多信息，请参阅[AWS IoT Core 定价](https://aws.amazon.com/iot-core/pricing/)。

地图 `iotwireless.map` 用作可使用 `Get` API 操作（[https://docs.aws.amazon.com/location-maps/latest/APIReference/API_GetMapTile.html](https://docs.aws.amazon.com/location-maps/latest/APIReference/API_GetMapTile.html)）访问的地图数据的来源。有关与地图一起使用的 `Get` API 的信息，请参阅 [Amazon Location Service API 参考](https://docs.aws.amazon.com/location-maps/latest/APIReference/Welcome.html)。

要获取有关此地图的其他详细信息，请转到 Amazon Location Service 控制台，选择 **maps**（地图），然后选择 [iotwireless.map](https://console.aws.amazon.com/location/maps/home#/describe/iotwireless.map)。有关更多信息，请参阅《Amazon Location Service 开发人员指南》中的[地图](https://docs.aws.amazon.com/location/latest/developerguide/map-concepts.html)。

**更新设备的位置配置**  
要更改设备的位置配置，请在设备详细信息页面中选择 **Edit**（编辑），然后更新位置信息、任何地理位置设置和目标。

**注意**  
有关历史位置数据的信息不可用。当您更新设备的位置坐标时，它将覆盖以前报告的位置数据。更新位置后，在设备详细信息的 **Position**（位置）选项卡中，您将看到新的位置信息。时间戳的更改表示它对应于设备的上次已知位置。

## 使用 API 配置设备位置
<a name="lorawan-location-devices-api"></a>

您可以使用 AWS IoT Wireless API 或 AWS CLI 指定位置信息、配置设备位置，以及激活可选的地理位置。

**重要**  
不再支持 API 操作 [UpdatePosition](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdatePosition.html)、[GetPosition](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetPosition.html)、[PutPositionConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_PutPositionConfiguration.html)、[GetPositionConfiguration](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetPositionConfiguration.html) 和 [ListPositionConfigurations](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_ListPositionConfigurations.html)。更新和检索位置信息的调用应改用 [GetResourcePosition](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetResourcePosition.html) 和 [UpdateResourcePosition](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateResourcePosition.html) API 操作。

### 添加位置信息和配置
<a name="lorawan-location-devices-api-add"></a>

要添加给定无线设备的位置信息，请使用 [ UpdateResourcePosition](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateResourcePosition.html) API 操作或 [update-resource-position](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/update-resource-position.html) CLI 命令指定坐标。将 `WirelessDevice` 指定为 `ResourceType`，将要更新的无线设备 ID 指定为 `ResourceIdentifier` 和位置信息。

```
aws iotwireless update-resource-position \ 
    --resource-type WirelessDevice \ 
    --resource-id {{"1ffd32c8-8130-4194-96df-622f072a315f"}} \ 
    --position [33.33, -33.33, 10.0]
```

下面显示的是 `{{deviceposition.json}}` 文件的内容。要指定用于发送地理位置数据的 FPort 值，请将[定位](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_Positioning.html)对象与 [CreateWirelessDevice](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateWirelessDevice.html) 和 [UpdateWirelessDevice](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_UpdateWirelessDevice.html) API 操作结合使用。

**deviceposition.json 的内容**

```
{ 
     "type": "Point",
     "coordinates": {{[33.3318, -22.2155, 13.123]}},
     "properties": {
          "verticalAccuracy": 707,
          "horizontalAccuracy": 
          "timestamp": {{"2018-11-30T18:35:24Z"}}
      }
}
```

运行此命令不会生成任何输出。要查看您指定的位置信息，请使用 `GetResourcePosition` API 操作。

### 获取位置信息和配置
<a name="lorawan-location-devices-api-get"></a>

要获取给定无线设备的位置信息，请使用 [GetResourcePosition](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_GetResourcePosition.html) API 或 [get-resource-position](https://docs.aws.amazon.com/cli/latest/reference/iotwireless/get-resource-position.html) CLI 命令。将 `WirelessDevice` 指定为 `resourceType`，并提供无线设备的 ID 作为 `resourceIdentifier`。

```
aws iotwireless get-resource-position \ 
    --resource-type WirelessDevice \ 
    --resource-id "{{1ffd32c8-8130-4194-96df-622f072a315f}}"
```

运行此命令会将无线设备的位置信息显示为 GeoJSON 有效负载。您将看到有关位置坐标、位置类型和属性的信息，这些信息可能包括准确性信息和对应于设备最后一个已知位置的时间戳。

```
{ 
     "type": "Point",
     "coordinates": {{[33.3318, -22.2155, 13.123]}},
     "properties": {
          "verticalAccuracy": 707,
          "horizontalAccuracy": 389,
          "horizontalConfidenceLevel": 0.68,
          "verticalConfidenceLevel": 0.68,
          "timestamp": {{"2018-11-30T18:35:24Z"}}
      }
}
```