mirror of
https://github.com/Luzifer/mercedes-byocar-exporter.git
synced 2024-11-08 22:10:07 +00:00
93 lines
4.3 KiB
Go
93 lines
4.3 KiB
Go
package influxdb
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/Luzifer/mercedes-byocar-exporter/internal/mercedes"
|
|
)
|
|
|
|
const (
|
|
labelVehicleID = "vehicle_id"
|
|
labelDoor = "door"
|
|
labelLight = "light"
|
|
labelWindow = "window"
|
|
|
|
subsystemElectricStatus = `electric_status`
|
|
subsystemFuelStatus = "fuel_status"
|
|
subsystemLockStatus = "lock_status"
|
|
subsystemPayAsYouDrive = "pay_as_you_drive"
|
|
subsystemVehicleStatus = "vehicle_status"
|
|
)
|
|
|
|
func (e *Exporter) SetElectricStatus(vehicleID string, es mercedes.ElectricStatus) {
|
|
e.submitValue(es.ElectricRange, mn(subsystemElectricStatus, "electric_range"), labelVehicleID, vehicleID)
|
|
e.submitValue(es.StateOfCharge, mn(subsystemElectricStatus, "state_of_charge"), labelVehicleID, vehicleID)
|
|
}
|
|
|
|
func (e *Exporter) SetFuelStatus(vehicleID string, fs mercedes.FuelStatus) {
|
|
e.submitValue(fs.RangeLiquid, mn(subsystemFuelStatus, "range_liquid"), labelVehicleID, vehicleID)
|
|
e.submitValue(fs.TanklevelPercent, mn(subsystemFuelStatus, "tanklevel_percent"), labelVehicleID, vehicleID)
|
|
}
|
|
|
|
func (e *Exporter) SetLockStatus(vehicleID string, ls mercedes.LockStatus) {
|
|
e.submitValue(ls.DeckLidUnlocked, mn(subsystemLockStatus, "deck_lid_unlocked"), labelVehicleID, vehicleID)
|
|
e.submitValue(ls.VehicleStatus, mn(subsystemLockStatus, "vehicle_status"), labelVehicleID, vehicleID)
|
|
e.submitValue(ls.GasLidUnlocked, mn(subsystemLockStatus, "gas_lid_unlocked"), labelVehicleID, vehicleID)
|
|
e.submitValue(ls.Heading, mn(subsystemLockStatus, "heading"), labelVehicleID, vehicleID)
|
|
}
|
|
|
|
func (e *Exporter) SetPayAsYouGo(vehicleID string, p mercedes.PayAsYouDriveInsurance) {
|
|
e.submitValue(p.Odometer, mn(subsystemPayAsYouDrive, "odometer"), labelVehicleID, vehicleID)
|
|
}
|
|
|
|
func (e *Exporter) SetVehicleStatus(vehicleID string, vs mercedes.VehicleStatus) {
|
|
e.submitValue(vs.DeckLidOpen, mn(subsystemVehicleStatus, "deck_lid_open"), labelVehicleID, vehicleID)
|
|
|
|
e.submitValue(vs.DoorFrontLeftOpen, mn(subsystemVehicleStatus, "door_open"), labelVehicleID, vehicleID, labelDoor, "front_left")
|
|
e.submitValue(vs.DoorFrontRightOpen, mn(subsystemVehicleStatus, "door_open"), labelVehicleID, vehicleID, labelDoor, "front_right")
|
|
e.submitValue(vs.DoorRearLeftOpen, mn(subsystemVehicleStatus, "door_open"), labelVehicleID, vehicleID, labelDoor, "rear_left")
|
|
e.submitValue(vs.DoorRearRightOpen, mn(subsystemVehicleStatus, "door_open"), labelVehicleID, vehicleID, labelDoor, "rear_right")
|
|
|
|
e.submitValue(vs.InteriorLightsFrontOn, mn(subsystemVehicleStatus, "interior_light_on"), labelVehicleID, vehicleID, labelLight, "front")
|
|
e.submitValue(vs.InteriorLightsRearOn, mn(subsystemVehicleStatus, "interior_light_on"), labelVehicleID, vehicleID, labelLight, "rear")
|
|
|
|
e.submitValue(vs.LightSwitchPosition, mn(subsystemVehicleStatus, "light_switch_position"), labelVehicleID, vehicleID)
|
|
|
|
e.submitValue(vs.ReadingLampFrontLeftOn, mn(subsystemVehicleStatus, "reading_lamp_on"), labelVehicleID, vehicleID, labelLight, "front_left")
|
|
e.submitValue(vs.ReadingLampFrontRightOn, mn(subsystemVehicleStatus, "reading_lamp_on"), labelVehicleID, vehicleID, labelLight, "front_right")
|
|
|
|
e.submitValue(vs.RoofTopStatus, mn(subsystemVehicleStatus, "roof_top_status"), labelVehicleID, vehicleID)
|
|
e.submitValue(vs.SunRoofStatus, mn(subsystemVehicleStatus, "sun_roof_status"), labelVehicleID, vehicleID)
|
|
|
|
e.submitValue(vs.WindowStatusFrontLeft, mn(subsystemVehicleStatus, "window_status"), labelVehicleID, vehicleID, labelWindow, "front_left")
|
|
e.submitValue(vs.WindowStatusFrontRight, mn(subsystemVehicleStatus, "window_status"), labelVehicleID, vehicleID, labelWindow, "front_right")
|
|
e.submitValue(vs.WindowStatusRearLeft, mn(subsystemVehicleStatus, "window_status"), labelVehicleID, vehicleID, labelWindow, "rear_left")
|
|
e.submitValue(vs.WindowStatusRearRight, mn(subsystemVehicleStatus, "window_status"), labelVehicleID, vehicleID, labelWindow, "rear_right")
|
|
}
|
|
|
|
func (e *Exporter) submitValue(value mercedes.MetricValue, metric_name string, tvs ...string) {
|
|
if !value.IsValid() {
|
|
return
|
|
}
|
|
|
|
v := map[string]any{"value": value.ToFloat()}
|
|
e.RecordPoint(metric_name, tags(tvs...), v, value.Time())
|
|
}
|
|
|
|
func mn(parts ...string) string {
|
|
return strings.Join(parts, "_")
|
|
}
|
|
|
|
func tags(kvs ...string) map[string]string {
|
|
out := make(map[string]string)
|
|
|
|
if len(kvs)%2 != 0 {
|
|
panic("invalid tags given")
|
|
}
|
|
|
|
for i := 0; i < len(kvs); i += 2 {
|
|
out[kvs[i]] = kvs[i+1]
|
|
}
|
|
|
|
return out
|
|
}
|