syntax = "proto3"; package proto; //import "github.com/gogo/protobuf/gogoproto/gogo.proto"; import "gogo.proto"; import "google/protobuf/wrappers.proto"; option (gogoproto.goproto_enum_prefix_all) = true; option java_package = "com.daimler.mbcarkit.proto"; // Acknowledge the CommandRequest reached the apptwin actor // Websocket <- Apptwin message AcknowledgeCommandRequest { string request_id = 1; } // After the command was issued at VVA based on this // command request the call will get a command request // correlation message which matches the request id // with the process id. // Sending direction: App - BFF -> AppTwin message CommandRequest { string vin = 1; // Set this id to correlate a CommandStatus // with this command request. string request_id = 7; // Temporary backend switch field. Will be removed as soon as all commands are migrated to the VehicleAPI // This field only needs to be set if the command is supported by both API from our backend. If this field is removed // don't forget to set the field 36 to reserved. enum Backend { VVA = 0; // default value VehicleAPI = 1; } Backend backend = 36; oneof command { AuxheatStart auxheat_start = 2; AuxheatStop auxheat_stop = 3; AuxheatConfigure auxheat_configure = 4; DoorsLock doors_lock = 5; DoorsUnlock doors_unlock = 6; SunroofOpen sunroof_open = 9; SunroofClose sunroof_close = 10; SunroofLift sunroof_lift = 11; SunroofMove sunroof_move = 47; WindowsOpen windows_open = 12; WindowsClose windows_close = 13; WindowsVentilate windows_ventilate = 43; WindowsMove windows_move = 44; EngineStart engine_start = 19; EngineStop engine_stop = 20; ZEVPreconditioningStart zev_preconditioning_start = 21; ZEVPreconditioningStop zev_preconditioning_stop = 22; ZEVPreconditioningConfigure zev_precondition_configure = 25; ZEVPreconditioningConfigureSeats zev_precondition_configure_seats = 26; SpeedalertStart speedalert_start = 23; SpeedalertStop speedalert_stop = 24; BatteryChargeProgramConfigure battery_charge_program = 27; BatteryMaxSocConfigure battery_max_soc = 28; ChargeProgramConfigure charge_program_configure = 34; ChargeControlConfigure charge_control_configure = 40; ChargeOptConfigure charge_opt_configure = 29; ChargeOptStart charge_opt_start = 30; ChargeOptStop charge_opt_stop = 31; TemperatureConfigure temperature_configure = 32; WeekProfileConfigure week_profile_configure = 33; WeekProfileConfigureV2 week_profile_configure_v2 = 41; SigPosStart sigpos_start = 35; TheftalarmConfirmDamagedetection theftalarm_confirm_damagedetection = 8; TheftalarmDeselectDamagedetection theftalarm_deselect_damagedetection= 14; TheftalarmDeselectInterior theftalarm_deselect_interior = 15; TheftalarmDeselectTow theftalarm_deselect_tow = 16; TheftalarmSelectDamagedetection theftalarm_select_damagedetection = 17; TheftalarmSelectInterior theftalarm_select_interior = 18; TheftalarmSelectTow theftalarm_select_tow = 37; TheftalarmStart theftalarm_start = 38; TheftalarmStop theftalarm_stop = 39; AutomaticValetParkingActivate automatic_valet_parking_activate = 42; ChargeFlapUnlock charge_flap_unlock = 45; ChargeCouplerUnlock charge_coupler_unlock = 46; DeactivateVehicleKeys deactivate_vehicle_keys = 48; ActivateVehicleKeys activate_vehicle_keys = 49; } } message DeactivateVehicleKeys { string pin = 1; int64 expiration_unix = 2; string expiration_seconds = 3 [ json_name = "expirationSeconds" ]; string expiration_milliseconds = 4 [ json_name = "expirationMilliseconds" ]; } message ActivateVehicleKeys { string pin = 1; int64 expiration_unix = 2; string expiration_seconds = 3 [ json_name = "expirationSeconds" ]; string expiration_milliseconds = 4 [ json_name = "expirationMilliseconds" ]; } message AuxheatStart {} message AuxheatStop {} message AuxheatConfigure { enum Selection { NO_SELECTION = 0; TIME_1 = 1; TIME_2 = 2; TIME_3 = 3; } Selection time_selection = 1 [ json_name = "auxheattimeselection" ]; // Minutes from midnight. int32 time_1 = 2 [ json_name = "auxheattime1" ]; // Minutes from midnight. int32 time_2 = 3 [ json_name = "auxheattime2" ]; // Minutes from midnight. int32 time_3 = 4 [ json_name = "auxheattime3" ]; } enum Door { // the JSON enum values are lowercase, but lowercase values are not exported in golang, so // we allow aliasing all values. option allow_alias = true; // the lowercase versions are for json (de)serialization purposes only. The upper case version should be the preferred // enum values to be used in code. // These definitions need to come before upper case versions unknown_door = 0; frontleft = 1; frontright = 2; rearleft = 3; rearright = 4; trunk = 5; fuelflap = 6; chargeflap = 7; chargecoupler = 8; UNKNOWN_DOOR = 0; FRONT_LEFT = 1; FRONT_RIGHT = 2; REAR_LEFT = 3; REAR_RIGHT = 4; TRUNK = 5; FUEL_FLAP = 6; CHARGE_FLAP = 7; CHARGE_COUPLER = 8; } message DoorsLock { // doors / flaps to unlock (only supported by TCU type RAMSES) // leave empty to target all doors repeated Door doors = 1; } message DoorsUnlock { string pin = 1; // doors / flaps to unlock (only supported by TCU type RAMSES) // leave empty to target all doors repeated Door doors = 2; } message EngineStart { string pin = 1; } message EngineStop {} message SunroofOpen { string pin = 1; } message SunroofClose {} message SunroofLift { string pin = 1; } message SunroofMove { string pin = 1; google.protobuf.Int32Value sunroof = 2 [ json_name = "sunroof" ]; google.protobuf.Int32Value sunroof_blind_front = 3 [ json_name = "sunroofblindfront" ]; google.protobuf.Int32Value sunroof_blind_rear = 4 [ json_name = "sunroofblindrear" ]; } message WindowsOpen { string pin = 1; } message WindowsClose {} message WindowsVentilate { string pin = 1; } message WindowsMove { string pin = 1; google.protobuf.Int32Value front_left = 2 [ json_name = "windowfrontleft" ]; google.protobuf.Int32Value front_right = 3 [ json_name = "windowfrontright" ]; google.protobuf.Int32Value rear_blind = 4 [ json_name = "windowrearblind" ]; google.protobuf.Int32Value rear_left = 5 [ json_name = "windowrearleft" ]; google.protobuf.Int32Value rear_left_blind = 6 [ json_name = "windowrearleftblind" ]; google.protobuf.Int32Value rear_right = 7 [ json_name = "windowrearright" ]; google.protobuf.Int32Value rear_right_blind = 8 [ json_name = "windowrearrightblind" ]; } message SpeedalertStart { int32 threshold = 1 [ json_name = "speedAlertThreshold" ]; int64 alert_end_time = 2 [ json_name = "speedAlertEndTime" ]; } message SpeedalertStop {} // --- Vehicle API commands enum ZEVPreconditioningType { // the JSON enum values are lowercase, but lowercase values are not exported in golang, so // we allow aliasing all values. option allow_alias = true; // the lowercase versions are for json parsing purposes only. The upper case version should be the preferred // enum values to be used in code. // These definitions need to come before upper case versions unknown_zev_preconditioning_command_type = 0; immediate = 1; departure = 2; now = 3; departureWeekly = 4; // the uppercase versions are here to have exported values // The given preconditioning command type is unknown UNKNOWN_ZEV_PRECONDITIONING_COMMAND_TYPE = 0; // starts immediate preconditioning IMMEDIATE = 1; // starts preconditioning at departure time (requires a departure time to be provided in ZEVPreconditioningStart) DEPARTURE = 2; // start right away (departure time is ignored) NOW = 3; // starts preconditioning for a configured weekly profile (does NOT require a departure time to be provided) DEPARTURE_WEEKLY = 4; } message ZEVPreconditioningStart { int32 departure_time = 1 [ json_name = "departuretime" ]; ZEVPreconditioningType type = 2 [ json_name = "type" ]; } message ZEVPreconditioningStop { ZEVPreconditioningType type = 2 [ json_name = "type" ]; } // Configure preconditioning message ZEVPreconditioningConfigure { enum DepartureTimeMode { DISABLED = 0; SINGLE_DEPARTURE = 1; WEEKLY_DEPARTURE = 2; } DepartureTimeMode departure_time_mode = 1 [ json_name = "departureTimeMode" ]; int32 departure_time = 3 [ json_name = "departuretime" ]; } // Configure which seats should be preconditioned. // Currently, the only available options are to precondition all seats or only the front-left seat message ZEVPreconditioningConfigureSeats { bool front_left = 1 [ json_name = "precondSeatFrontLeft" ]; bool front_right = 2 [ json_name = "precondSeatFrontRight" ]; bool rear_left = 3 [ json_name = "precondSeatRearLeft" ]; bool rear_right = 4 [ json_name = "precondSeatRearRight" ]; } // Configure the charge program message BatteryChargeProgramConfigure { enum ChargeProgram { DEFAULT = 0; INSTANT = 1; } ChargeProgram charge_program = 1 [ json_name = "chargeprogram" ]; } // Configure the maximum value for the state of charge of the HV battery message BatteryMaxSocConfigure { // Values need to be between 50 and 100 and divisible by ten int32 max_soc = 1 [ json_name = "maxsoc" ]; } // Select the given charge program and enables the consumer to configure it. message ChargeProgramConfigure { enum ChargeProgram { DEFAULT_CHARGE_PROGRAM = 0; // Instant charge program should not be used // INSTANT_CHARGE_PROGRAM = 1; HOME_CHARGE_PROGRAM = 2; WORK_CHARGE_PROGRAM = 3; } ChargeProgram charge_program = 1 [ json_name = "chargeprogram" ]; // Values need to be between 50 and 100 and divisible by ten // Maximum value for the state of charge of the HV battery [in %]. // Valid value range = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] google.protobuf.Int32Value max_soc = 2 [ json_name = "maxsoc" ]; // unlock the plug after charging is finished // Denotes whether the charge cable should be unlocked automatically if the HV battery is fully charged resp. charged til Max. SoC value. // true - unlock automatically, false - do not unlock automatically // can only be used if chargeprogram is set to home or work. Otherwise it will be ignored. google.protobuf.BoolValue auto_unlock = 3 [ json_name = "autounlock" ]; // automatically switch between home and work program, based on the location of the car // Denotes whether location based charging should be used. // true - use location based charging, false - do not use location based charging // can only be used if chargeprogram is set to home or work. Otherwise it will be ignored. google.protobuf.BoolValue location_based_charging = 4 [ json_name = "locationbasedcharging" ]; // enable or disable week-profile // Denotes whether weekly profile (aka. weekprofile) should be used. // true - use weekly profile, false - do not use weekly profile // The parameter weekprofile should not be used. // google.protobuf.BoolValue weekly_profile = 5 [ json_name = "weeklyprofile" ]; // enable or disable clocktimer google.protobuf.BoolValue clock_timer = 6 [ json_name = "clocktimer" ]; // enable or disable ecocharging google.protobuf.BoolValue eco_charging = 7 [ json_name = "ecocharging" ]; } // This is an experimental command message ChargeControlConfigure { // Enables/Disables bidrectional charging google.protobuf.BoolValue bi_charging_enabled = 1 [ json_name = "bidichargingenabled" ]; // Sets the charging power in kW with a resolution of 0.1 kW. The value has an offset of -100 kW. So // a value of 0 is equivalent to -100 kW. google.protobuf.FloatValue charging_power = 2 [ json_name = "chargingpower" ]; // must not be above max_soc google.protobuf.Int32Value min_soc = 3 [ json_name = "minsoc" ]; } // Provide functionality to initiate a charge optimization configuration message ChargeOptConfigure { message Tariff { enum Rate { INVALID_PRICE = 0; LOW_PRICE = 33; NORMAL_PRICE = 44; HIGH_PRICE = 66; } Rate rate = 1 [ json_name = "rate" ]; // Time in seconds after 00:00 int32 time = 2 [ json_name = "time" ]; } repeated Tariff weekday_tariff = 1 [ json_name = "weekdaytariff" ]; repeated Tariff weekend_tariff = 2 [ json_name = "weekendtariff" ]; } // Provide the functionality to start the charge optimization function in the vehicle message ChargeOptStart { // empty } // Provide the functionality to stop the charge optimization function in the vehicle message ChargeOptStop { // empty } // Set the temperature points of the vehicle message TemperatureConfigure { message TemperaturePoint { reserved 2; enum Zone { // the JSON enum values are lowercase, but lowercase values are not exported in golang, so // we allow aliasing all values. option allow_alias = true; // the lowercase versions are for json parsing purposes only. The upper case version should be the preferred // enum values to be used in code. // These definitions need to come before upper case versions unknown = 0; frontLeft = 1; frontRight = 2; frontCenter = 3; rearLeft = 4; rearRight = 5; rearCenter = 6; rear2Left = 7; rear2Right = 8; rear2Center = 9; // PLEASE BE AWARE OF THE FOLLOWING BEFORE ADDING NEW ZONES: // Currently there is a bug in vehicle API, that we need to send the zones in the correct order. Otherwise the request will be rejected. // The order needs to be like the following: // Front before rear before rear2 // Left before right - There is no center zone if there are left and right zones in this row // As this is already the order like specified here, this needs to be considered on adding new zones. UNKNOWN_ZONE = 0; FRONT_LEFT = 1; FRONT_RIGHT = 2; FRONT_CENTER = 3; REAR_LEFT = 4; REAR_RIGHT = 5; REAR_CENTER = 6; REAR_2_LEFT = 7; REAR_2_RIGHT = 8; REAR_2_CENTER = 9; // PLEASE BE AWARE OF THE FOLLOWING BEFORE ADDING NEW ZONES: // Currently there is a bug in vehicle API, that we need to send the zones in the correct order. Otherwise the request will be rejected. // The order needs to be like the following: // Front before rear before rear2 // Left before right - There is no center zone if there are left and right zones in this row // As this is already the order like specified here, this needs to be considered on adding new zones. } Zone zone = 1 [ json_name = "zone" ]; double temperature_in_celsius = 3 [ json_name = "temp" ]; } repeated TemperaturePoint temperature_points = 1 [ json_name = "temperaturePoints" ]; } // Set the weekprofile for the weekly departure time settings message WeekProfileConfigure { message WeeklySetHU { enum Day { MONDAY = 0; TUESDAY = 1; WEDNESDAY = 2; THURSDAY = 3; FRIDAY = 4; SATURDAY = 5; SUNDAY = 6; } Day day = 1 [ json_name = "day" ]; // Time in minutes after 00:00 int32 time = 2 [ json_name = "time" ]; } repeated WeeklySetHU weekly_set_hu = 1 [ json_name = "weeklySetHU" ]; } // Set the week profile for the weekly departure time settings version 2 message WeekProfileConfigureV2 { // * The whole list of timeProfiles must always be provided repeated TimeProfile time_profiles = 1 [ json_name = "timeprofiles" ]; } message TimeProfile { //=> only if time profile entry is unchanged, do not provide attribute "id" if new profile entry shall be added // If a new time profile shall be added: do not provide the ID => ID will be set by MIC / vehicle google.protobuf.Int32Value identifier = 1 [ json_name = "id" ]; // Hour after midnight range [0, 23] google.protobuf.Int32Value hour = 2 [json_name = "hour" ]; // Minute after full hour range [0, 59] google.protobuf.Int32Value minute = 3 [json_name = "min" ]; // Days for which the above time should be applied repeated TimeProfileDay days = 4 [json_name = "day" ]; // Whether this profile entry is active or not google.protobuf.BoolValue active = 5 [json_name = "active" ]; // If a timeProfile is changed or added the respective applicationId must be provided by the SDK // 11 = Internal Apps // 12 = External Apps int32 application_identifier = 6 [ json_name = "applicationId" ]; } enum TimeProfileDay { option allow_alias = true; // the short versions are for json (en)coding purposes only. The upper case version should be the preferred // enum values to be used in code. // These definitions need to come before upper case versions Mo = 0; Tu = 1; We = 2; Th = 3; Fr = 4; Sa = 5; Su = 6; MONDAY = 0; TUESDAY = 1; WEDNESDAY = 2; THURSDAY = 3; FRIDAY = 4; SATURDAY = 5; SUNDAY = 6; } // Invoke the Remote Vehicle Finder for signalling the vehicle’s position with lights, horn or panic alarm. message SigPosStart { // Value needs to be between 0 and 30. The default is 0. // Only allowed for RAMSES int32 horn_repeat = 1 [ json_name = "hornRepeat" ]; // Only allowed for RAMSES enum HornType { HORN_OFF = 0; HORN_LOW_VOLUME = 1; HORN_HIGH_VOLUME = 2; } HornType horn_type = 2 [ json_name = "hornType" ]; // Only allowed for RAMSES enum LightType { LIGHT_OFF = 0; DIPPED_HEAD_LIGHT = 1; WARNING_LIGHT = 2; } LightType light_type = 3 [ json_name = "lightType" ]; // Value needs to be between 0 and 10. It indicates how long the light should be switched on. int32 sigpos_duration = 4 [ json_name = "sigposDuration" ]; enum SigposType { LIGHT_ONLY = 0; HORN_ONLY = 1; // Only allowed for RAMSES LIGHT_AND_HORN = 2; // Only allowed for RAMSES PANIC_ALARM = 3; // Only allowed for HERMES } SigposType sigpos_type = 5 [ json_name = "sigposType" ]; } // Confirm the detected parking bump message TheftalarmConfirmDamagedetection { // empty } // Provide the functionality to deselect the parking damage detection sensor message TheftalarmDeselectDamagedetection { // empty } // Provide the functionality to deselect the interior protection sensor message TheftalarmDeselectInterior { // empty } // Provide the functionality to deselect the tow protection sensor message TheftalarmDeselectTow { // empty } // Provide the functionality to select the parking damage detection sensor message TheftalarmSelectDamagedetection { // empty } // Provide the functionality to select the interior protection sensor message TheftalarmSelectInterior { // empty } // Provide the functionality to select the tow protection sensor message TheftalarmSelectTow { // empty } // Provide the functionality to trigger an alarm that lasts for "alarm_duration" seconds message TheftalarmStart { // Specify how many seconds the alarm should be switched on int32 alarm_duration_in_seconds = 1 [ json_name = "alarmduration" ]; } // Provide the functionality to deactivate an active/ongoing alarm message TheftalarmStop { // empty } enum DriveType { UNKNOWN_DRIVE_TYPE = 0; PICK_UP = 1; DROP_OFF = 2; } message AutomaticValetParkingActivate { string booking_id = 1 [ json_name = "bookingId" ]; DriveType drive_type = 2 [ json_name = "driveType" ]; } message ChargeFlapUnlock {} message ChargeCouplerUnlock {}