

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 MQTT 消息处理上次已知的状态车辆数据
<a name="process-last-known-state-vehicle-data"></a>

**重要**  
目前对某些 AWS 物联网 FleetWise 功能的访问受到限制。有关更多信息，请参阅 [AWS AWS 物联网中的区域和功能可用性 FleetWise](fleetwise-regions.md)。

要接收车辆的更新并处理其数据，请订阅以下 MQTT 主题。有关更多信息，请参阅《AWS IoT Core 开发人员指南》**中的 [MMQTT 主题](https://docs.aws.amazon.com/iot/latest/developerguide/iot-connect-devices.html)。

```
$aws/iotfleetwise/vehicles/$vehicle_name/last_known_state/$state_template_name/data
```

由于 MQTT 不保证排序，因此收到的最后一个已知状态信号更新消息可能会失序。任何使用 MQTT 接收和处理车辆数据的客户端都必须处理这个问题。最新的已知状态信号更新消息遵循 MQTT 5 消息协议。

每条 MQTT 消息的消息头都具有以下用户属性：
+ **车辆名称** [— 车辆的唯一标识符。](vehicles.md)
+ **stateTemplateName**— 上次已知[状态模板](state-templates.md)的唯一标识符。

此外，通过在更新或创建状态模板时指定`metadataExtraDimensions`请求参数，您可以指定要包含在 MQTT 消息标头中的[车辆属性](signal-catalogs.md)。（参见[状态模板](state-templates.md)。）

MQTT 消息标头中的用户属性可用于在不检查负载的情况下将消息路由到不同的目的地。

MQTT 消息有效载荷包含从车辆收集的数据。通过在创建或更新状态模板时指定`extraDimensions`请求参数，您可以指定要包含在 MQTT 消息负载中的车辆属性（请参阅[创建 AWS 物联网 FleetWise 状态模板](state-templates.md)）。额外的维度通过将额外的维度与车辆关联来丰富从车辆收集的数据。

MQTT 消息有效载荷采用协议缓冲区 (Protobuf) 编码，MQTT 消息头包含定义为应用程序/八位字节流的内容类型指示器。Protobuf 的编码架构如下所示：

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

syntax = "proto3";

option java_package = "com.amazonaws.iot.autobahn.schemas.lastknownstate";
package Aws.IoTFleetWise.Schemas.CustomerMessage;

message LastKnownState {

  /*
   * The absolute timestamp in milliseconds since Unix Epoch of when the event was triggered in vehicle.
   */
  uint64 time_ms = 1;

  /*
   * This field is deprecated, use signals instead
   */
  repeated Signal signal = 2 [ deprecated = true ];

  repeated Signal signals = 3;

  repeated ExtraDimension extra_dimensions = 4;
}

message Signal {

  /*
   * The Fully Qualified Name of the signal is the path to the signal plus the signal's name.
   * For example, Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringState
   * The fully qualified name can have up to 150 characters. Valid characters: a-z, A-Z, 0-9, : (colon), and _ (underscore).
   */
  string name = 1;

  /*
   * The FWE reported signal value can be one of the following data types.
   */
  oneof SignalValue {
    double double_value = 2;

    bool boolean_value = 3;

    sint32 int8_value = 4;

    uint32 uint8_value = 5;

    sint32 int16_value = 6;

    uint32 uint16_value = 7;

    sint32 int32_value = 8;

    uint32 uint32_value = 9;

    sint64 int64_value = 10;

    uint64 uint64_value = 11;

    float float_value = 12;
    /*
     * An UTF-8 encoded or 7-bit ASCII string
     */
    string string_value = 13;
  }
}

message ExtraDimension {
  /*
   * The Fully Qualified Name of the attribute is the path to the attribute plus the attribute's name.
   * For example, Vehicle.Model.Color
   * The fully qualified name can have up to 150 characters. Valid characters: a-z, A-Z, 0-9, : (colon), and _ (underscore).
   */
  string name = 1;

  oneof ExtraDimensionValue {
    /*
     * An UTF-8 encoded or 7-bit ASCII string
     */
    string string_value = 2;
  }
}
```

其中：
+ `time_ms`:

  车辆中触发事件时的绝对时间戳（以 Unix Epoch 以来的毫秒为单位）。Edge Agent 软件在车辆的时钟上使用此时间戳。
+ `signal`:

  包含信号信息:`name`(string) 的 `Signal` s 数组，`signalValue`它支持以下数据类型-`double`、、、、、、、、、`bool`、`int8`、`uint8`、、`int16`、`uint16`、`int32`、、`uint32`、`int64`、`uint64`、、`float`、`string`。
+ `extra_dimensions`:

  `ExtraDimensions`包含车辆属性信息的数组：`name`（字符串）`extraDimensionValue`，目前仅支持该`string`数据类型。