EV integration
介绍
本教程将指导您如何使用 Vehicle Integration Library (VIL) 将电动汽车(EV)特定数据集成到您的应用中。您应用的 EV 导航功能的成功依赖于与车辆系统(如电池管理系统 BMS)的无缝集成。此集成可实现沿途准确的能耗预测、到达时的电量状态(SoC)估算、在地图上显示剩余可行驶里程,并自动包含必要的充电停靠点。
在本指南中,我们将探讨如何利用 com.tomtom.automotive.integration.vehicle.client.api 包实现与车辆的有效集成。
前提条件
要成功将您的导航应用集成到电动汽车中,以下参数是必需的。有关这些参数及其相互关系的详细说明,请参阅 EV Routing 指南。
电池相关参数
- 当前电池容量:电池当前可用的能量容量,单位为瓦时(考虑老化和健康状态后的容量)。
- 能量状态 (StateOfEnergy, SoE):电池当前剩余能量,单位为瓦时。
- 电量状态 (StateOfCharge, SoC):电池当前电量百分比。
- 充电曲线:一个点列表,将不同的 SoE(瓦时)映射到对应的最大充电功率(瓦特)。
能耗相关参数
- 速度能耗曲线:一个点列表,将不同车速(公里/小时)映射到能耗(瓦时/公里)。
效率相关参数
- 上坡效率:车辆上坡时电能转化为势能的效率因子,取值范围 0.0 到 1.0。
- 下坡效率:车辆下坡时电能转化为势能的效率因子,取值范围 0.0 到 1.0。
- 加速效率:车辆加速时电能转化为动能的效率因子,取值范围 0.0 到 1.0。
- 减速效率:车辆减速时电能转化为动能的效率因子,取值范围 0.0 到 1.0。
连接器相关参数
- 连接器:车辆支持的充电连接器类型列表:
- 适配器:车辆可用的充电适配器列表。
- 预选适配器:默认使用的充电适配器列表。
- 充电时间偏移:从到达充电站到实际开始充电的估计时间间隔,单位为秒。
辅助功率相关参数
- 辅助功率:预计行程剩余时间内车辆辅助系统(如空调、信息娱乐系统和照明)平均消耗的功率,单位为瓦特。
信息
当前车辆重量固定为 2000 公斤,无法修改。请注意,任何依赖车辆重量的计算或功能均基于此固定值运行。
集成步骤
为提供前述前提条件中的参数,请执行以下步骤。
步骤 1. 创建 VehicleIntegrationApiClient 实例
创建一个 VehicleIntegrationApiClient 实例。您可以在 快速入门 指南中了解更多内容。
步骤 2. 初始化参数
在将参数发送到应用之前,必须使用可用的 vehicleinfo 数据类对其进行初始化。
1import com.tomtom.automotive.integration.vehicle.client.api.model.quantity.Duration2import com.tomtom.automotive.integration.vehicle.client.api.model.quantity.ElectricCurrent3import com.tomtom.automotive.integration.vehicle.client.api.model.quantity.Energy4import com.tomtom.automotive.integration.vehicle.client.api.model.quantity.Power5import com.tomtom.automotive.integration.vehicle.client.api.model.quantity.Speed6import com.tomtom.automotive.integration.vehicle.client.api.model.quantity.Voltage7import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.auxiliarypower.AuxiliaryPowerParameters8import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.batteryinfo.BatteryInfoParameters9import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.connectorinfo.ConnectorInfo10import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.connectorinfo.ConnectorInfoParameters11import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.connectorinfo.ElectricityType12import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.connectorinfo.VehicleConnectorType13import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.consumptioncurve.ConsumptionCurveParameters14import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.consumptioncurve.EvSpeedConsumptionCurve15import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.evefficiency.EvEfficiencyParameters1617// 电池相关参数18private val _batteryInfoParameters = BatteryInfoParameters(19 currentBatteryCapacity = "从车辆获取的容量", // 例如: Energy.kilowattHours(80)20 stateOfEnergy = "从车辆获取的 SoE", // 例如: Energy.kilowattHours(40)21 stateOfCharge = "从车辆获取的 SoC", // 例如: 68.922 batteryChargeCurve = "车辆支持的电池充电曲线", // 例如:23 listOf(24 BatteryInfoParameters.Point(energy = Energy.kilowattHours(0), power = Power.kilowatts(75)),25 BatteryInfoParameters.Point(energy = Energy.kilowattHours(8), power = Power.kilowatts(150)),26 BatteryInfoParameters.Point(energy = Energy.kilowattHours(40), power = Power.kilowatts(112)),27 BatteryInfoParameters.Point(energy = Energy.kilowattHours(64), power = Power.kilowatts(52)),28 BatteryInfoParameters.Point(energy = Energy.kilowattHours(72), power = Power.kilowatts(30)),29 BatteryInfoParameters.Point(energy = Energy.kilowattHours(80), power = Power.kilowatts(0))30 )31)3233// 能耗相关参数34private val _speedConsumptionCurve = ConsumptionCurveParameters(35 speedConsumptionCurve = EvSpeedConsumptionCurve(36 consumptionCurve = "车辆在特定速度下的能耗", // 例如:37 listOf(38 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(10), energy = Energy.wattHours(114.1)),39 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(20), energy = Energy.wattHours(91.7)),40 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(30), energy = Energy.wattHours(87.7)),41 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(40), energy = Energy.wattHours(89.5)),42 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(50), energy = Energy.wattHours(94.8)),43 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(60), energy = Energy.wattHours(102.6)),44 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(70), energy = Energy.wattHours(112.6)),45 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(80), energy = Energy.wattHours(124.6)),46 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(90), energy = Energy.wattHours(138.5)),47 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(100), energy = Energy.wattHours(154.3)),48 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(110), energy = Energy.wattHours(171.9)),49 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(120), energy = Energy.wattHours(191.3)),50 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(130), energy = Energy.wattHours(212.5)),51 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(140), energy = Energy.wattHours(235.5)),52 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(150), energy = Energy.wattHours(260.2)),53 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(160), energy = Energy.wattHours(286.6)),54 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(170), energy = Energy.wattHours(314.8)),55 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(180), energy = Energy.wattHours(344.8)),56 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(190), energy = Energy.wattHours(376.5)),57 EvSpeedConsumptionCurve.Point(speed = Speed.kilometersPerHour(200), energy = Energy.wattHours(409.9))58 )59 )60)6162// 效率相关参数63private val _evEfficiencyParameters = EvEfficiencyParameters(64 uphillEfficiency = "车辆上坡效率", // 例如: 0.8565 downhillEfficiency = "车辆下坡效率", // 例如: 1.066 accelerationEfficiency = "车辆加速效率", // 例如: 0.967 decelerationEfficiency = "车辆减速效率" // 例如: 0.9568)6970// 连接器相关参数71private val _connectorInfoParameters = ConnectorInfoParameters(72 vehicleConnectors = "车辆支持的连接器", // 例如:73 listOf(74 ConnectorInfo(75 vehicleConnectorType = VehicleConnectorType.TYPE2_CCS,76 electricityType = ElectricityType.DC,77 maxVoltage = Voltage.volts(800),78 maxCurrent = ElectricCurrent.amperes(500),79 maxPower = Power.kilowatts(350),80 baseLoad = Power.watts(0),81 efficiency = 0.9882 )83 ),84 connectorChargingAdapters = "车辆支持的适配器", // 例如: emptyList()85 preSelectedChargingAdapters = "应用预选的适配器", // 例如: emptyList()86 chargingTimeOffset = "到达充电站到实际充电开始的估计时间" // 例如: Duration.seconds(300)87)8889// 辅助功率相关参数90private val _auxiliaryPowerParameters = AuxiliaryPowerParameters(91 auxiliaryPower = "从车辆获取的辅助功率" // 例如: Power.watts(100)92)
步骤 3. 发送参数
参数初始化完成后,您可以使用 VehicleInfoManager 将其发送到应用。例如,发送辅助功率参数:
1import com.tomtom.automotive.integration.vehicle.client.api.VehicleIntegrationApiClient2import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.VehicleInfoManager3import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.auxiliarypower.AuxiliaryPowerCallback4import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.auxiliarypower.AuxiliaryPowerParameters5import com.tomtom.automotive.integration.vehicle.client.api.vehicleinfo.auxiliarypower.AuxiliaryPowerFailure6import com.tomtom.automotive.integration.vehicle.common.Callback7import com.tomtom.automotive.integration.vehicle.common.Result89vehicleIntegrationApiClient.vehicleInfoManager.setAuxiliaryPower(10 _auxiliaryPowerParameters,11 object : AuxiliaryPowerCallback {12 override fun onResult(result: Result<Unit, out AuxiliaryPowerFailure>) {13 when (result) {14 is Result.Success<*> -> {15 // 如有需要,处理成功情况16 }17 is Result.Failure<*> -> {18 // 处理失败情况19 }20 }21 }2223 override fun onFunctionalityUnavailable(reason: Callback.Reason) {24 // 处理错误25 }26 }27)
步骤 4. 确认集成成功
参数成功发送后,您的应用应能利用 EV 导航功能,包括长距离 EV 路由。要验证这些功能,请规划一个超出车辆续航里程的目的地路线。应用应自动生成包含必要充电停靠点的路线。
有关如何在应用中规划长距离 EV 路线的更多信息,请参阅 EV Routing 指南。
最佳实践
使用 Kotlin Flows 更新应用
Kotlin flows 提供了强大的响应式编程模型,用于管理异步数据流。通过对来自车辆的数据使用 MutableStateFlow,您可以构建一个动态响应系统,在车辆底层数据(如 SoE 或 SoC)发生变化时自动更新 VehicleIntegrationApiClient。
注意
及时响应车辆数据变化并更新应用,对于提供可靠且可信赖的 EV 导航体验至关重要。