Source

services/sensors-service.js

import api from '@/api'
import APIUrls, {
  APIV3RequestDatetimeFormat,
} from '@/config/simpliciti-apis.js'
import moment from 'moment'

export function formatSensorValue(name, value) {
  const units = {
    cruise: 'km/h',
    sensorCanCruise: 'km/h',

    sensorCanBrakePedal: '%',

    vrm: 'rpm',
    rpm: 'rpm',
    sensorCanRPM: 'rpm',

    fuel: '%',
    sensorCanFuelPerc: '%',
    niveau_carburant: '%',

    conso: 'L',
    sensorCanConsumptionLiters: 'L',

    sensorCanFuelLiters: 'L',

    accelerateur: '%',
    sensorCanThrottle: '%',

    km_fms: 'km/h',

    embrayage: '%',

    batterie: '%',
    sensorCanBatteryPerc: '%',

    vehicleDistance: 'm',

    canServiceDistanceMeters: 'm',
  }
  return `${value}` + (units[name] !== undefined ? ` ${units[name]}` : '')
}

export function getSensorI18nCode(name) {
  let table = {
    sensorCanCruise: 'can_sensors.cruise',
    sensorCanBrakePedal: 'can_sensors.freinage',
    sensorCanRPM: 'can_sensors.vrm', //'diagnostics.chart.category.canRPM',
    sensorCanFuelPerc: 'can_sensors.fuel_perc',
    sensorCanConsumptionLiters: 'can_sensors.conso',
    sensorCanFuelLiters: 'diagnostics.chart.category.fuelLevelLiters',
    canServiceDistanceMeters: 'can_sensors.canServiceDistanceMeters',
    speHarshBraking: 'diagnostics.chart.category.speHarshBraking',
    speHarshAcceleration: 'diagnostics.chart.category.speHarshAcceleration',
    speHarshCornering: 'diagnostics.chart.category.speHarshCornering',
    speExcessiveSpeed: 'diagnostics.chart.category.speExcessiveSpeed',
    sensorCanThrottle: 'can_sensors.accelerateur',
    sensorCanClutch: 'can_sensors.embrayage',
    sensorCanBatteryPerc: 'can_sensors.batterie',
    vehicleDistance: 'can_sensors.vehicleDistance',
  }
  return table[name] || name
}

/**
 * Used by SensorsInfos to grab CAN values from an mixed object (location result or position result)
 * @param {*} item
 * @param {*} canName
 * @returns
 */
export function getCanValueFromItem(item, canName) {
  let table = {
    //sensorCanCruise: ['sensorCanCruise'],
    sensorCanBrakePedal: ['sensorCanBrakePedal', 'sensorCanBraking'],
    //sensorCanRPM: ['sensorCanRPM'],
    //sensorCanFuelPerc: ['sensorCanFuelPerc'],
    //sensorCanThrottle:['sensorCanThrottle']
  }
  /*
  if (table[canName] === undefined && item[canName] === undefined) {
    console.error('Unknown can value:', {
      canName,
      item,
    })
    return null
  }
  */
  if (table[canName] instanceof Array) {
    for (let propName of table[canName]) {
      if (item[propName] !== undefined) {
        return item[propName] //Pick value from the first defined property
      }
    }
  }

  if (item[canName] !== undefined) {
    return item[canName] //use the bare key (canName)
  }

  return null
}

/**
 *
 * @param {*} vehicleId
 * @param {*} datetimeStart
 * @param {*} datetimeEnd
 * @param {*} options {positions: false, sensors: false}
 * @returns
 */
export async function getSensors(
  vehicleId,
  datetimeStart,
  datetimeEnd,
  options = {}
) {
  datetimeStart = moment(datetimeStart).format(APIV3RequestDatetimeFormat)
  datetimeEnd = moment(datetimeEnd).format(APIV3RequestDatetimeFormat)

  return await api.v3
    .get(
      APIUrls.APIV3_GET_SENSORS +
        `?vehicleId=${vehicleId}&startDatetime=${datetimeStart}&endDatetime=${datetimeEnd}` +
        (options?.positions ? '&positions=true' : '')
      //(options?.sensors ? '&properties&properties[]=sensors' : '')
    )
    .then((result) => {
      return result.data[0] || null
    })
}

export default {
  formatSensorValue,
  getSensors,
  getSensorI18nCode,
  getCanValueFromItem,
}