diff --git a/.dockerignore b/.dockerignore index 89297b8..e244a08 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,4 @@ -**/*.ipynb \ No newline at end of file +**/*.ipynb +**/*.pyi +**/__pycache__/ +**/*.proto \ No newline at end of file diff --git a/README.md b/README.md index 3ddd958..784b110 100644 --- a/README.md +++ b/README.md @@ -63,3 +63,23 @@ Once the app is running, you can access it by navigating to: You can pull the application image directly from Docker Hub if you prefer not to build locally: - [Docker Hub - ML Telemetry](https://hub.docker.com/r/nightofthelivingcarrots512/solarcar-ml) + +## Generate Python Code from Protobuf + +Install the protobuf compiler: + +- [Protobuf Installation](https://github.com/protocolbuffers/protobuf) + +Generate Python code from the protobuf file: + +```bash +cd ./protobufServer/app +protoc --python_out=. --pyi_out=. HeliosPacket.proto +``` + +Navigate back to the root directory and run the following command to start the server: + +```bash +cd ./protobufServer +docker-compose up --build +``` diff --git a/protobufServer/.dockerignore b/protobufServer/.dockerignore new file mode 100644 index 0000000..e244a08 --- /dev/null +++ b/protobufServer/.dockerignore @@ -0,0 +1,4 @@ +**/*.ipynb +**/*.pyi +**/__pycache__/ +**/*.proto \ No newline at end of file diff --git a/protobufServer/Dockerfile b/protobufServer/Dockerfile new file mode 100644 index 0000000..ad5ca31 --- /dev/null +++ b/protobufServer/Dockerfile @@ -0,0 +1,22 @@ +FROM python:3.9-slim + +# Set environment variables to optimize Python +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 + +# Set working directory +WORKDIR /app + +# Install apt packages and clean up +RUN apt-get update && apt-get install -y --no-install-recommends \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +# Copy requirements and install dependencies +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Copy the rest of the application code +COPY ./app . + +# Final CMD (make sure this is the right one) +CMD [ "uvicorn", "app:app", "--host", "0.0.0.0"] diff --git a/protobufServer/app/HeliosPacket.proto b/protobufServer/app/HeliosPacket.proto new file mode 100644 index 0000000..6aeb55c --- /dev/null +++ b/protobufServer/app/HeliosPacket.proto @@ -0,0 +1,352 @@ +syntax = "proto3"; + +package telemetry; + +// --- Nested Messages --- + +message BatteryFaultWarnings { + bool CclReducedDueToAlternateCurrentLimit = 1; + bool CclReducedDueToChargerLatch = 2; + bool CclReducedDueToHighCellResistance = 3; + bool CclReducedDueToHighCellVoltage = 4; + bool CclReducedDueToHighPackVoltage = 5; + bool CclReducedDueToHighSoc = 6; + bool CclReducedDueToTemperature = 7; + bool DclAndCclReducedDueToCommunicationFailsafe = 8; + bool DclAndCclReducedDueToVoltageFailsafe = 9; + bool DclReducedDueToHighCellResistance = 10; + bool DclReducedDueToLowCellVoltage = 11; + bool DclReducedDueToLowPackVoltage = 12; + bool DclReducedDueToLowSoc = 13; + bool DclReducedDueToTemperature = 14; +} + +message BatteryFaultErrors { + bool AlwaysOnSupplyFault = 1; + bool CanbusCommunicationFault = 2; + bool ChargeLimitEnforcementFault = 3; + bool ChargerSafetyRelayFault = 4; + bool CurrentSensorFault = 5; + bool DischargeLimitEnforcementFault = 6; + bool FanMonitorFault = 7; + bool HighVoltageIsolationFault = 8; + bool InternalCommunicationFault = 9; + bool InternalConversionFault = 10; + bool InternalLogicFault = 11; + bool InternalMemoryFault = 12; + bool InternalThermistorFault = 13; + bool LowCellVoltageFault = 14; + bool OpenWiringFault = 15; + bool PackVoltageSensorFault = 16; + bool PowerSupply12VFault = 17; + bool ThermistorFault = 18; + bool VoltageRedundancyFault = 19; + bool WeakCellFault = 20; + bool WeakPackFault = 21; +} + +message BatteryFaults { + BatteryFaultErrors Errors = 1; + BatteryFaultWarnings Warnings = 2; +} + +message BatteryStatus { + bool AlwaysOnSignalStatus = 1; + float AverageCellVoltage = 2; + float AverageTemperature = 3; + float BmuAlive = 4; + bool ChargeRelayEnabled = 5; + bool ChargerSafetyEnabled = 6; + bool DischargeRelayEnabled = 7; + float FanSpeed = 8; + float FanVoltage = 9; + float HighCellVoltage = 10; + float HighCellVoltageId = 11; + float HighTemperature = 12; + float HighThermistorId = 13; + float Input12V = 14; + float InternalTemperature = 15; + bool IsChargingSignalStatus = 16; + bool IsReadySignalStatus = 17; + float LowCellVoltage = 18; + float LowCellVoltageId = 19; + float LowTemperature = 20; + float LowThermistorId = 21; + bool MalfunctionIndicatorActive = 22; + float MaximumCellVoltage = 23; + float MaximumPackVoltage = 24; + float MinimumCellVoltage = 25; + float MinimumPackVoltage = 26; + bool MultiPurposeInputSignalStatus = 27; + float PackAmphours = 28; + float PackCurrent = 29; + float PackDepthOfDischarge = 30; + float PackStateOfCharge = 31; + float PackVoltage = 32; + float PopulatedCells = 33; + float RequestedFanSpeed = 34; +} + +message B3 { + float Acceleration = 1; + bool B3Heartbeat = 2; + bool BrakeLightSignalStatus = 3; + bool BrakeSwitchDigital = 4; + bool DaytimeRunningLightSignalStatus = 5; + bool ForwardDigital = 6; + bool HandbrakeSwitchDigital = 7; + bool HazardLightsInput = 8; + bool HeadightsSwitchInput = 9; + bool HeadlightSignalStatus = 10; + bool HornSignalStatus = 11; + bool HornSwitchDigital = 12; + bool LapDigital = 13; + bool LeftSignalInput = 14; + bool LeftSignalStatus = 15; + bool MotorResetDigital = 16; + bool NeutralDigital = 17; + bool RaceModeDigital = 18; + float RegenBraking = 19; + bool ReverseDigital = 20; + bool RightSignalInput = 21; + bool RightSignalStatus = 22; +} + +message KeyMotor { + float BusCurrentOut = 1; + float KeyMotorVelocity = 2; + float MotorCurrent = 3; +} + +message MBMS { + bool AbattDisable = 1; + bool ArrayContactorCommand = 2; + bool ArrayHeartbeatDeadTrip = 3; + bool ArrayHighCurrentTrip = 4; + bool ArrayHighCurrentWarning = 5; + float AuxiliaryBatteryVoltage = 6; + bool CanOc12VWarning = 7; + bool ChargeContactorCommand = 8; + bool ChargeEnable = 9; + bool ChargeHeartbeatDeadTrip = 10; + bool ChargeHighCurrentTrip = 11; + bool ChargeHighCurrentWarning = 12; + bool ChargeSafety = 13; + bool ChargeShouldTrip = 14; + bool ChgFault = 15; + bool ChgLvEn = 16; + bool ChgOn = 17; + bool CommonContactorCommand = 18; + bool CommonHeartbeatDeadTrip = 19; + bool CommonHighCurrentTrip = 20; + bool CommonHighCurrentWarning = 21; + bool ContactorConnectedUnexpectedlyTrip = 22; + bool ContactorDisconnectedUnexpectedlyTrip = 23; + bool DcdcFault = 24; + bool DcdcOn = 25; + bool DischargeEnable = 26; + bool DischargeShouldTrip = 27; + bool En1 = 28; + bool EsdEnabledTrip = 29; + bool ExternalShutdown = 30; + bool Heartbeat = 31; + bool HighCellVoltageTrip = 32; + bool HighCellVoltageWarning = 33; + bool HighTemperatureTrip = 34; + bool HighTemperatureWarning = 35; + bool Key = 36; + bool LowCellVoltageTrip = 37; + bool LowCellVoltageWarning = 38; + bool LowTemperatureTrip = 39; + bool LowTemperatureWarning = 40; + bool LvContactorCommand = 41; + bool LvHeartbeatDeadTrip = 42; + bool LvHighCurrentTrip = 43; + bool LvHighCurrentWarning = 44; + bool MainPowerSwitch = 45; + bool MotorContactorCommand = 46; + bool MotorHeartbeatDeadTrip = 47; + bool MotorHighCurrentTrip = 48; + bool MotorHighCurrentWarning = 49; + bool MpsDisabledTrip = 50; + bool OrionCanReceivedRecently = 51; + bool OrionMessageTimeoutTrip = 52; + bool ProtectionTrip = 53; + float StartupState = 54; + bool StrobeBmsLight = 55; + float SystemState = 56; + bool ThreeAOc = 57; +} + +message MotorDetails { + float ActiveMotor = 1; + float BEMF_D = 2; + float BEMF_Q = 3; + float BusCurrent = 4; + float BusVoltage = 5; + float DC_Bus_Ah = 6; + float DspBoardTemperature = 7; + float ErrorFlags = 8; + float HeatsinkTemperature = 9; + float Id = 10; + float Iq = 11; + float LimitFlags = 12; + float MotorId = 13; + float MotorTemperature = 14; + float MotorVelocity = 15; + float Odometer = 16; + float PhaseCurrentB = 17; + float PhaseCurrentC = 18; + float RxErrorCount = 19; + float SerialNumber = 20; + float SlipSpeed = 21; + float Supply15V = 22; + float Supply1V9 = 23; + float Supply3V3 = 24; + float TritiumId = 25; + float TxErrorCount = 26; + float Vd = 27; + float VehicleVelocity = 28; + float Vq = 29; +} + +message MPPT { + float Mppt0Ch0ArrayCurrent = 1; + float Mppt0Ch0ArrayVoltage = 2; + float Mppt0Ch0BatteryVoltage = 3; + float Mppt0Ch0UnitTemperature = 4; + float Mppt0Ch1ArrayCurrent = 5; + float Mppt0Ch1ArrayVoltage = 6; + float Mppt0Ch1BatteryVoltage = 7; + float Mppt0Ch1UnitTemperature = 8; + float Mppt1Ch0ArrayCurrent = 9; + float Mppt1Ch0ArrayVoltage = 10; + float Mppt1Ch0BatteryVoltage = 11; + float Mppt1Ch0UnitTemperature = 12; + float Mppt1Ch1ArrayCurrent = 13; + float Mppt1Ch1ArrayVoltage = 14; + float Mppt1Ch1BatteryVoltage = 15; + float Mppt1Ch1UnitTemperature = 16; + float Mppt2Ch0ArrayCurrent = 17; + float Mppt2Ch0ArrayVoltage = 18; + float Mppt2Ch0BatteryVoltage = 19; + float Mppt2Ch0UnitTemperature = 20; + float Mppt2Ch1ArrayCurrent = 21; + float Mppt2Ch1ArrayVoltage = 22; + float Mppt2Ch1BatteryVoltage = 23; + float Mppt2Ch1UnitTemperature = 24; + float Mppt3Ch0ArrayCurrent = 25; + float Mppt3Ch0ArrayVoltage = 26; + float Mppt3Ch0BatteryVoltage = 27; + float Mppt3Ch0UnitTemperature = 28; + float Mppt3Ch1ArrayCurrent = 29; + float Mppt3Ch1ArrayVoltage = 30; + float Mppt3Ch1BatteryVoltage = 31; + float Mppt3Ch1UnitTemperature = 32; +} + +message ContactorStatus { + bool ArrayBPSError = 1; + float ArrayChargeCurrent = 2; + bool ArrayContactorClosed = 3; + bool ArrayContactorClosing = 4; + bool ArrayContactorError = 5; + bool ArrayHeartbeat = 6; + float ArrayLineCurrent = 7; + bool ArrayPrechargerClosed = 8; + bool ArrayPrechargerClosing = 9; + bool ArrayPrechargerError = 10; + + bool ChargeBPSError = 11; + float ChargeChargeCurrent = 12; + bool ChargeContactorClosed = 13; + bool ChargeContactorClosing = 14; + bool ChargeContactorError = 15; + bool ChargeHeartbeat = 16; + float ChargeLineCurrent = 17; + bool ChargePrechargerClosed = 18; + bool ChargePrechargerClosing = 19; + bool ChargePrechargerError = 20; + + float CommonChargeCurrent = 21; + bool CommonContactorClosed = 22; + bool CommonContactorClosing = 23; + bool CommonContactorError = 24; + bool CommonContactorOpeningError = 25; + bool CommonHeartbeat = 26; + float CommonLineCurrent = 27; + bool CommonPrechargerClosed = 28; + bool CommonPrechargerClosing = 29; + bool CommonPrechargerError = 30; + + bool LvBpsError = 31; + float LvChargeCurrent = 32; + bool LvContactorClosed = 33; + bool LvContactorClosing = 34; + bool LvContactorError = 35; + bool LvHeartbeat = 36; + float LvLineCurrent = 37; + bool LvPrechargerClosed = 38; + bool LvPrechargerClosing = 39; + bool LvPrechargerError = 40; + + bool MotorBPSError = 41; + float MotorChargeCurrent = 42; + bool MotorContactorClosed = 43; + bool MotorContactorClosing = 44; + bool MotorContactorError = 45; + bool MotorHeartbeat = 46; + float MotorLineCurrent = 47; + bool MotorPrechargerClosed = 48; + bool MotorPrechargerClosing = 49; + bool MotorPrechargerError = 50; +} + +message Pi { + string Rfid = 1; +} + +message ProximitySensors { + float ProximitySensor1 = 1; + float ProximitySensor2 = 2; + float ProximitySensor3 = 3; + float ProximitySensor4 = 4; +} + +message Telemetry { + float GpsAdditionalFlags = 1; + float GpsDay = 2; + float GpsFixStatusFlags = 3; + float GpsHour = 4; + float GpsLatitude = 5; + float GpsLongitude = 6; + float GpsMinute = 7; + float GpsMonth = 8; + float GpsSecond = 9; + float GpsValidityFlags = 10; + float GpsYear = 11; + float MpuAccelerationX = 12; + float MpuAccelerationY = 13; + float MpuAccelerationZ = 14; + float MpuRotationX = 15; + float MpuRotationY = 16; + float MpuRotationZ = 17; + float MpuTemperature = 18; +} + +message TelemetryData { + B3 B3 = 1; + BatteryStatus Battery = 2; + BatteryFaults BatteryFaults = 3; + ContactorStatus Contactor = 4; + KeyMotor KeyMotor = 5; + MBMS MBMS = 6; + MPPT MPPT = 7; + MotorDetails MotorDetails0 = 8; + MotorDetails MotorDetails1 = 9; + Pi Pi = 10; + ProximitySensors ProximitySensors = 11; + Telemetry Telemetry = 12; + uint64 TimeStamp = 13; + string Title = 14; +} diff --git a/protobufServer/app/HeliosPacket_pb2.py b/protobufServer/app/HeliosPacket_pb2.py new file mode 100644 index 0000000..6db0f6e --- /dev/null +++ b/protobufServer/app/HeliosPacket_pb2.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: HeliosPacket.proto +# Protobuf Python Version: 5.28.3 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 28, + 3, + '', + 'HeliosPacket.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12HeliosPacket.proto\x12\ttelemetry\"\xc6\x04\n\x14\x42\x61tteryFaultWarnings\x12,\n$CclReducedDueToAlternateCurrentLimit\x18\x01 \x01(\x08\x12#\n\x1b\x43\x63lReducedDueToChargerLatch\x18\x02 \x01(\x08\x12)\n!CclReducedDueToHighCellResistance\x18\x03 \x01(\x08\x12&\n\x1e\x43\x63lReducedDueToHighCellVoltage\x18\x04 \x01(\x08\x12&\n\x1e\x43\x63lReducedDueToHighPackVoltage\x18\x05 \x01(\x08\x12\x1e\n\x16\x43\x63lReducedDueToHighSoc\x18\x06 \x01(\x08\x12\"\n\x1a\x43\x63lReducedDueToTemperature\x18\x07 \x01(\x08\x12\x32\n*DclAndCclReducedDueToCommunicationFailsafe\x18\x08 \x01(\x08\x12,\n$DclAndCclReducedDueToVoltageFailsafe\x18\t \x01(\x08\x12)\n!DclReducedDueToHighCellResistance\x18\n \x01(\x08\x12%\n\x1d\x44\x63lReducedDueToLowCellVoltage\x18\x0b \x01(\x08\x12%\n\x1d\x44\x63lReducedDueToLowPackVoltage\x18\x0c \x01(\x08\x12\x1d\n\x15\x44\x63lReducedDueToLowSoc\x18\r \x01(\x08\x12\"\n\x1a\x44\x63lReducedDueToTemperature\x18\x0e \x01(\x08\"\x92\x05\n\x12\x42\x61tteryFaultErrors\x12\x1b\n\x13\x41lwaysOnSupplyFault\x18\x01 \x01(\x08\x12 \n\x18\x43\x61nbusCommunicationFault\x18\x02 \x01(\x08\x12#\n\x1b\x43hargeLimitEnforcementFault\x18\x03 \x01(\x08\x12\x1f\n\x17\x43hargerSafetyRelayFault\x18\x04 \x01(\x08\x12\x1a\n\x12\x43urrentSensorFault\x18\x05 \x01(\x08\x12&\n\x1e\x44ischargeLimitEnforcementFault\x18\x06 \x01(\x08\x12\x17\n\x0f\x46\x61nMonitorFault\x18\x07 \x01(\x08\x12!\n\x19HighVoltageIsolationFault\x18\x08 \x01(\x08\x12\"\n\x1aInternalCommunicationFault\x18\t \x01(\x08\x12\x1f\n\x17InternalConversionFault\x18\n \x01(\x08\x12\x1a\n\x12InternalLogicFault\x18\x0b \x01(\x08\x12\x1b\n\x13InternalMemoryFault\x18\x0c \x01(\x08\x12\x1f\n\x17InternalThermistorFault\x18\r \x01(\x08\x12\x1b\n\x13LowCellVoltageFault\x18\x0e \x01(\x08\x12\x17\n\x0fOpenWiringFault\x18\x0f \x01(\x08\x12\x1e\n\x16PackVoltageSensorFault\x18\x10 \x01(\x08\x12\x1b\n\x13PowerSupply12VFault\x18\x11 \x01(\x08\x12\x17\n\x0fThermistorFault\x18\x12 \x01(\x08\x12\x1e\n\x16VoltageRedundancyFault\x18\x13 \x01(\x08\x12\x15\n\rWeakCellFault\x18\x14 \x01(\x08\x12\x15\n\rWeakPackFault\x18\x15 \x01(\x08\"q\n\rBatteryFaults\x12-\n\x06\x45rrors\x18\x01 \x01(\x0b\x32\x1d.telemetry.BatteryFaultErrors\x12\x31\n\x08Warnings\x18\x02 \x01(\x0b\x32\x1f.telemetry.BatteryFaultWarnings\"\x93\x07\n\rBatteryStatus\x12\x1c\n\x14\x41lwaysOnSignalStatus\x18\x01 \x01(\x08\x12\x1a\n\x12\x41verageCellVoltage\x18\x02 \x01(\x02\x12\x1a\n\x12\x41verageTemperature\x18\x03 \x01(\x02\x12\x10\n\x08\x42muAlive\x18\x04 \x01(\x02\x12\x1a\n\x12\x43hargeRelayEnabled\x18\x05 \x01(\x08\x12\x1c\n\x14\x43hargerSafetyEnabled\x18\x06 \x01(\x08\x12\x1d\n\x15\x44ischargeRelayEnabled\x18\x07 \x01(\x08\x12\x10\n\x08\x46\x61nSpeed\x18\x08 \x01(\x02\x12\x12\n\nFanVoltage\x18\t \x01(\x02\x12\x17\n\x0fHighCellVoltage\x18\n \x01(\x02\x12\x19\n\x11HighCellVoltageId\x18\x0b \x01(\x02\x12\x17\n\x0fHighTemperature\x18\x0c \x01(\x02\x12\x18\n\x10HighThermistorId\x18\r \x01(\x02\x12\x10\n\x08Input12V\x18\x0e \x01(\x02\x12\x1b\n\x13InternalTemperature\x18\x0f \x01(\x02\x12\x1e\n\x16IsChargingSignalStatus\x18\x10 \x01(\x08\x12\x1b\n\x13IsReadySignalStatus\x18\x11 \x01(\x08\x12\x16\n\x0eLowCellVoltage\x18\x12 \x01(\x02\x12\x18\n\x10LowCellVoltageId\x18\x13 \x01(\x02\x12\x16\n\x0eLowTemperature\x18\x14 \x01(\x02\x12\x17\n\x0fLowThermistorId\x18\x15 \x01(\x02\x12\"\n\x1aMalfunctionIndicatorActive\x18\x16 \x01(\x08\x12\x1a\n\x12MaximumCellVoltage\x18\x17 \x01(\x02\x12\x1a\n\x12MaximumPackVoltage\x18\x18 \x01(\x02\x12\x1a\n\x12MinimumCellVoltage\x18\x19 \x01(\x02\x12\x1a\n\x12MinimumPackVoltage\x18\x1a \x01(\x02\x12%\n\x1dMultiPurposeInputSignalStatus\x18\x1b \x01(\x08\x12\x14\n\x0cPackAmphours\x18\x1c \x01(\x02\x12\x13\n\x0bPackCurrent\x18\x1d \x01(\x02\x12\x1c\n\x14PackDepthOfDischarge\x18\x1e \x01(\x02\x12\x19\n\x11PackStateOfCharge\x18\x1f \x01(\x02\x12\x13\n\x0bPackVoltage\x18 \x01(\x02\x12\x16\n\x0ePopulatedCells\x18! \x01(\x02\x12\x19\n\x11RequestedFanSpeed\x18\" \x01(\x02\"\xcf\x04\n\x02\x42\x33\x12\x14\n\x0c\x41\x63\x63\x65leration\x18\x01 \x01(\x02\x12\x13\n\x0b\x42\x33Heartbeat\x18\x02 \x01(\x08\x12\x1e\n\x16\x42rakeLightSignalStatus\x18\x03 \x01(\x08\x12\x1a\n\x12\x42rakeSwitchDigital\x18\x04 \x01(\x08\x12\'\n\x1f\x44\x61ytimeRunningLightSignalStatus\x18\x05 \x01(\x08\x12\x16\n\x0e\x46orwardDigital\x18\x06 \x01(\x08\x12\x1e\n\x16HandbrakeSwitchDigital\x18\x07 \x01(\x08\x12\x19\n\x11HazardLightsInput\x18\x08 \x01(\x08\x12\x1c\n\x14HeadightsSwitchInput\x18\t \x01(\x08\x12\x1d\n\x15HeadlightSignalStatus\x18\n \x01(\x08\x12\x18\n\x10HornSignalStatus\x18\x0b \x01(\x08\x12\x19\n\x11HornSwitchDigital\x18\x0c \x01(\x08\x12\x12\n\nLapDigital\x18\r \x01(\x08\x12\x17\n\x0fLeftSignalInput\x18\x0e \x01(\x08\x12\x18\n\x10LeftSignalStatus\x18\x0f \x01(\x08\x12\x19\n\x11MotorResetDigital\x18\x10 \x01(\x08\x12\x16\n\x0eNeutralDigital\x18\x11 \x01(\x08\x12\x17\n\x0fRaceModeDigital\x18\x12 \x01(\x08\x12\x14\n\x0cRegenBraking\x18\x13 \x01(\x02\x12\x16\n\x0eReverseDigital\x18\x14 \x01(\x08\x12\x18\n\x10RightSignalInput\x18\x15 \x01(\x08\x12\x19\n\x11RightSignalStatus\x18\x16 \x01(\x08\"Q\n\x08KeyMotor\x12\x15\n\rBusCurrentOut\x18\x01 \x01(\x02\x12\x18\n\x10KeyMotorVelocity\x18\x02 \x01(\x02\x12\x14\n\x0cMotorCurrent\x18\x03 \x01(\x02\"\xa5\x0c\n\x04MBMS\x12\x14\n\x0c\x41\x62\x61ttDisable\x18\x01 \x01(\x08\x12\x1d\n\x15\x41rrayContactorCommand\x18\x02 \x01(\x08\x12\x1e\n\x16\x41rrayHeartbeatDeadTrip\x18\x03 \x01(\x08\x12\x1c\n\x14\x41rrayHighCurrentTrip\x18\x04 \x01(\x08\x12\x1f\n\x17\x41rrayHighCurrentWarning\x18\x05 \x01(\x08\x12\x1f\n\x17\x41uxiliaryBatteryVoltage\x18\x06 \x01(\x02\x12\x17\n\x0f\x43\x61nOc12VWarning\x18\x07 \x01(\x08\x12\x1e\n\x16\x43hargeContactorCommand\x18\x08 \x01(\x08\x12\x14\n\x0c\x43hargeEnable\x18\t \x01(\x08\x12\x1f\n\x17\x43hargeHeartbeatDeadTrip\x18\n \x01(\x08\x12\x1d\n\x15\x43hargeHighCurrentTrip\x18\x0b \x01(\x08\x12 \n\x18\x43hargeHighCurrentWarning\x18\x0c \x01(\x08\x12\x14\n\x0c\x43hargeSafety\x18\r \x01(\x08\x12\x18\n\x10\x43hargeShouldTrip\x18\x0e \x01(\x08\x12\x10\n\x08\x43hgFault\x18\x0f \x01(\x08\x12\x0f\n\x07\x43hgLvEn\x18\x10 \x01(\x08\x12\r\n\x05\x43hgOn\x18\x11 \x01(\x08\x12\x1e\n\x16\x43ommonContactorCommand\x18\x12 \x01(\x08\x12\x1f\n\x17\x43ommonHeartbeatDeadTrip\x18\x13 \x01(\x08\x12\x1d\n\x15\x43ommonHighCurrentTrip\x18\x14 \x01(\x08\x12 \n\x18\x43ommonHighCurrentWarning\x18\x15 \x01(\x08\x12*\n\"ContactorConnectedUnexpectedlyTrip\x18\x16 \x01(\x08\x12-\n%ContactorDisconnectedUnexpectedlyTrip\x18\x17 \x01(\x08\x12\x11\n\tDcdcFault\x18\x18 \x01(\x08\x12\x0e\n\x06\x44\x63\x64\x63On\x18\x19 \x01(\x08\x12\x17\n\x0f\x44ischargeEnable\x18\x1a \x01(\x08\x12\x1b\n\x13\x44ischargeShouldTrip\x18\x1b \x01(\x08\x12\x0b\n\x03\x45n1\x18\x1c \x01(\x08\x12\x16\n\x0e\x45sdEnabledTrip\x18\x1d \x01(\x08\x12\x18\n\x10\x45xternalShutdown\x18\x1e \x01(\x08\x12\x11\n\tHeartbeat\x18\x1f \x01(\x08\x12\x1b\n\x13HighCellVoltageTrip\x18 \x01(\x08\x12\x1e\n\x16HighCellVoltageWarning\x18! \x01(\x08\x12\x1b\n\x13HighTemperatureTrip\x18\" \x01(\x08\x12\x1e\n\x16HighTemperatureWarning\x18# \x01(\x08\x12\x0b\n\x03Key\x18$ \x01(\x08\x12\x1a\n\x12LowCellVoltageTrip\x18% \x01(\x08\x12\x1d\n\x15LowCellVoltageWarning\x18& \x01(\x08\x12\x1a\n\x12LowTemperatureTrip\x18\' \x01(\x08\x12\x1d\n\x15LowTemperatureWarning\x18( \x01(\x08\x12\x1a\n\x12LvContactorCommand\x18) \x01(\x08\x12\x1b\n\x13LvHeartbeatDeadTrip\x18* \x01(\x08\x12\x19\n\x11LvHighCurrentTrip\x18+ \x01(\x08\x12\x1c\n\x14LvHighCurrentWarning\x18, \x01(\x08\x12\x17\n\x0fMainPowerSwitch\x18- \x01(\x08\x12\x1d\n\x15MotorContactorCommand\x18. \x01(\x08\x12\x1e\n\x16MotorHeartbeatDeadTrip\x18/ \x01(\x08\x12\x1c\n\x14MotorHighCurrentTrip\x18\x30 \x01(\x08\x12\x1f\n\x17MotorHighCurrentWarning\x18\x31 \x01(\x08\x12\x17\n\x0fMpsDisabledTrip\x18\x32 \x01(\x08\x12 \n\x18OrionCanReceivedRecently\x18\x33 \x01(\x08\x12\x1f\n\x17OrionMessageTimeoutTrip\x18\x34 \x01(\x08\x12\x16\n\x0eProtectionTrip\x18\x35 \x01(\x08\x12\x14\n\x0cStartupState\x18\x36 \x01(\x02\x12\x16\n\x0eStrobeBmsLight\x18\x37 \x01(\x08\x12\x13\n\x0bSystemState\x18\x38 \x01(\x02\x12\x10\n\x08ThreeAOc\x18\x39 \x01(\x08\"\xcc\x04\n\x0cMotorDetails\x12\x13\n\x0b\x41\x63tiveMotor\x18\x01 \x01(\x02\x12\x0e\n\x06\x42\x45MF_D\x18\x02 \x01(\x02\x12\x0e\n\x06\x42\x45MF_Q\x18\x03 \x01(\x02\x12\x12\n\nBusCurrent\x18\x04 \x01(\x02\x12\x12\n\nBusVoltage\x18\x05 \x01(\x02\x12\x11\n\tDC_Bus_Ah\x18\x06 \x01(\x02\x12\x1b\n\x13\x44spBoardTemperature\x18\x07 \x01(\x02\x12\x12\n\nErrorFlags\x18\x08 \x01(\x02\x12\x1b\n\x13HeatsinkTemperature\x18\t \x01(\x02\x12\n\n\x02Id\x18\n \x01(\x02\x12\n\n\x02Iq\x18\x0b \x01(\x02\x12\x12\n\nLimitFlags\x18\x0c \x01(\x02\x12\x0f\n\x07MotorId\x18\r \x01(\x02\x12\x18\n\x10MotorTemperature\x18\x0e \x01(\x02\x12\x15\n\rMotorVelocity\x18\x0f \x01(\x02\x12\x10\n\x08Odometer\x18\x10 \x01(\x02\x12\x15\n\rPhaseCurrentB\x18\x11 \x01(\x02\x12\x15\n\rPhaseCurrentC\x18\x12 \x01(\x02\x12\x14\n\x0cRxErrorCount\x18\x13 \x01(\x02\x12\x14\n\x0cSerialNumber\x18\x14 \x01(\x02\x12\x11\n\tSlipSpeed\x18\x15 \x01(\x02\x12\x11\n\tSupply15V\x18\x16 \x01(\x02\x12\x11\n\tSupply1V9\x18\x17 \x01(\x02\x12\x11\n\tSupply3V3\x18\x18 \x01(\x02\x12\x11\n\tTritiumId\x18\x19 \x01(\x02\x12\x14\n\x0cTxErrorCount\x18\x1a \x01(\x02\x12\n\n\x02Vd\x18\x1b \x01(\x02\x12\x17\n\x0fVehicleVelocity\x18\x1c \x01(\x02\x12\n\n\x02Vq\x18\x1d \x01(\x02\"\xee\x07\n\x04MPPT\x12\x1c\n\x14Mppt0Ch0ArrayCurrent\x18\x01 \x01(\x02\x12\x1c\n\x14Mppt0Ch0ArrayVoltage\x18\x02 \x01(\x02\x12\x1e\n\x16Mppt0Ch0BatteryVoltage\x18\x03 \x01(\x02\x12\x1f\n\x17Mppt0Ch0UnitTemperature\x18\x04 \x01(\x02\x12\x1c\n\x14Mppt0Ch1ArrayCurrent\x18\x05 \x01(\x02\x12\x1c\n\x14Mppt0Ch1ArrayVoltage\x18\x06 \x01(\x02\x12\x1e\n\x16Mppt0Ch1BatteryVoltage\x18\x07 \x01(\x02\x12\x1f\n\x17Mppt0Ch1UnitTemperature\x18\x08 \x01(\x02\x12\x1c\n\x14Mppt1Ch0ArrayCurrent\x18\t \x01(\x02\x12\x1c\n\x14Mppt1Ch0ArrayVoltage\x18\n \x01(\x02\x12\x1e\n\x16Mppt1Ch0BatteryVoltage\x18\x0b \x01(\x02\x12\x1f\n\x17Mppt1Ch0UnitTemperature\x18\x0c \x01(\x02\x12\x1c\n\x14Mppt1Ch1ArrayCurrent\x18\r \x01(\x02\x12\x1c\n\x14Mppt1Ch1ArrayVoltage\x18\x0e \x01(\x02\x12\x1e\n\x16Mppt1Ch1BatteryVoltage\x18\x0f \x01(\x02\x12\x1f\n\x17Mppt1Ch1UnitTemperature\x18\x10 \x01(\x02\x12\x1c\n\x14Mppt2Ch0ArrayCurrent\x18\x11 \x01(\x02\x12\x1c\n\x14Mppt2Ch0ArrayVoltage\x18\x12 \x01(\x02\x12\x1e\n\x16Mppt2Ch0BatteryVoltage\x18\x13 \x01(\x02\x12\x1f\n\x17Mppt2Ch0UnitTemperature\x18\x14 \x01(\x02\x12\x1c\n\x14Mppt2Ch1ArrayCurrent\x18\x15 \x01(\x02\x12\x1c\n\x14Mppt2Ch1ArrayVoltage\x18\x16 \x01(\x02\x12\x1e\n\x16Mppt2Ch1BatteryVoltage\x18\x17 \x01(\x02\x12\x1f\n\x17Mppt2Ch1UnitTemperature\x18\x18 \x01(\x02\x12\x1c\n\x14Mppt3Ch0ArrayCurrent\x18\x19 \x01(\x02\x12\x1c\n\x14Mppt3Ch0ArrayVoltage\x18\x1a \x01(\x02\x12\x1e\n\x16Mppt3Ch0BatteryVoltage\x18\x1b \x01(\x02\x12\x1f\n\x17Mppt3Ch0UnitTemperature\x18\x1c \x01(\x02\x12\x1c\n\x14Mppt3Ch1ArrayCurrent\x18\x1d \x01(\x02\x12\x1c\n\x14Mppt3Ch1ArrayVoltage\x18\x1e \x01(\x02\x12\x1e\n\x16Mppt3Ch1BatteryVoltage\x18\x1f \x01(\x02\x12\x1f\n\x17Mppt3Ch1UnitTemperature\x18 \x01(\x02\"\xa0\x0b\n\x0f\x43ontactorStatus\x12\x15\n\rArrayBPSError\x18\x01 \x01(\x08\x12\x1a\n\x12\x41rrayChargeCurrent\x18\x02 \x01(\x02\x12\x1c\n\x14\x41rrayContactorClosed\x18\x03 \x01(\x08\x12\x1d\n\x15\x41rrayContactorClosing\x18\x04 \x01(\x08\x12\x1b\n\x13\x41rrayContactorError\x18\x05 \x01(\x08\x12\x16\n\x0e\x41rrayHeartbeat\x18\x06 \x01(\x08\x12\x18\n\x10\x41rrayLineCurrent\x18\x07 \x01(\x02\x12\x1d\n\x15\x41rrayPrechargerClosed\x18\x08 \x01(\x08\x12\x1e\n\x16\x41rrayPrechargerClosing\x18\t \x01(\x08\x12\x1c\n\x14\x41rrayPrechargerError\x18\n \x01(\x08\x12\x16\n\x0e\x43hargeBPSError\x18\x0b \x01(\x08\x12\x1b\n\x13\x43hargeChargeCurrent\x18\x0c \x01(\x02\x12\x1d\n\x15\x43hargeContactorClosed\x18\r \x01(\x08\x12\x1e\n\x16\x43hargeContactorClosing\x18\x0e \x01(\x08\x12\x1c\n\x14\x43hargeContactorError\x18\x0f \x01(\x08\x12\x17\n\x0f\x43hargeHeartbeat\x18\x10 \x01(\x08\x12\x19\n\x11\x43hargeLineCurrent\x18\x11 \x01(\x02\x12\x1e\n\x16\x43hargePrechargerClosed\x18\x12 \x01(\x08\x12\x1f\n\x17\x43hargePrechargerClosing\x18\x13 \x01(\x08\x12\x1d\n\x15\x43hargePrechargerError\x18\x14 \x01(\x08\x12\x1b\n\x13\x43ommonChargeCurrent\x18\x15 \x01(\x02\x12\x1d\n\x15\x43ommonContactorClosed\x18\x16 \x01(\x08\x12\x1e\n\x16\x43ommonContactorClosing\x18\x17 \x01(\x08\x12\x1c\n\x14\x43ommonContactorError\x18\x18 \x01(\x08\x12#\n\x1b\x43ommonContactorOpeningError\x18\x19 \x01(\x08\x12\x17\n\x0f\x43ommonHeartbeat\x18\x1a \x01(\x08\x12\x19\n\x11\x43ommonLineCurrent\x18\x1b \x01(\x02\x12\x1e\n\x16\x43ommonPrechargerClosed\x18\x1c \x01(\x08\x12\x1f\n\x17\x43ommonPrechargerClosing\x18\x1d \x01(\x08\x12\x1d\n\x15\x43ommonPrechargerError\x18\x1e \x01(\x08\x12\x12\n\nLvBpsError\x18\x1f \x01(\x08\x12\x17\n\x0fLvChargeCurrent\x18 \x01(\x02\x12\x19\n\x11LvContactorClosed\x18! \x01(\x08\x12\x1a\n\x12LvContactorClosing\x18\" \x01(\x08\x12\x18\n\x10LvContactorError\x18# \x01(\x08\x12\x13\n\x0bLvHeartbeat\x18$ \x01(\x08\x12\x15\n\rLvLineCurrent\x18% \x01(\x02\x12\x1a\n\x12LvPrechargerClosed\x18& \x01(\x08\x12\x1b\n\x13LvPrechargerClosing\x18\' \x01(\x08\x12\x19\n\x11LvPrechargerError\x18( \x01(\x08\x12\x15\n\rMotorBPSError\x18) \x01(\x08\x12\x1a\n\x12MotorChargeCurrent\x18* \x01(\x02\x12\x1c\n\x14MotorContactorClosed\x18+ \x01(\x08\x12\x1d\n\x15MotorContactorClosing\x18, \x01(\x08\x12\x1b\n\x13MotorContactorError\x18- \x01(\x08\x12\x16\n\x0eMotorHeartbeat\x18. \x01(\x08\x12\x18\n\x10MotorLineCurrent\x18/ \x01(\x02\x12\x1d\n\x15MotorPrechargerClosed\x18\x30 \x01(\x08\x12\x1e\n\x16MotorPrechargerClosing\x18\x31 \x01(\x08\x12\x1c\n\x14MotorPrechargerError\x18\x32 \x01(\x08\"\x12\n\x02Pi\x12\x0c\n\x04Rfid\x18\x01 \x01(\t\"z\n\x10ProximitySensors\x12\x18\n\x10ProximitySensor1\x18\x01 \x01(\x02\x12\x18\n\x10ProximitySensor2\x18\x02 \x01(\x02\x12\x18\n\x10ProximitySensor3\x18\x03 \x01(\x02\x12\x18\n\x10ProximitySensor4\x18\x04 \x01(\x02\"\x99\x03\n\tTelemetry\x12\x1a\n\x12GpsAdditionalFlags\x18\x01 \x01(\x02\x12\x0e\n\x06GpsDay\x18\x02 \x01(\x02\x12\x19\n\x11GpsFixStatusFlags\x18\x03 \x01(\x02\x12\x0f\n\x07GpsHour\x18\x04 \x01(\x02\x12\x13\n\x0bGpsLatitude\x18\x05 \x01(\x02\x12\x14\n\x0cGpsLongitude\x18\x06 \x01(\x02\x12\x11\n\tGpsMinute\x18\x07 \x01(\x02\x12\x10\n\x08GpsMonth\x18\x08 \x01(\x02\x12\x11\n\tGpsSecond\x18\t \x01(\x02\x12\x18\n\x10GpsValidityFlags\x18\n \x01(\x02\x12\x0f\n\x07GpsYear\x18\x0b \x01(\x02\x12\x18\n\x10MpuAccelerationX\x18\x0c \x01(\x02\x12\x18\n\x10MpuAccelerationY\x18\r \x01(\x02\x12\x18\n\x10MpuAccelerationZ\x18\x0e \x01(\x02\x12\x14\n\x0cMpuRotationX\x18\x0f \x01(\x02\x12\x14\n\x0cMpuRotationY\x18\x10 \x01(\x02\x12\x14\n\x0cMpuRotationZ\x18\x11 \x01(\x02\x12\x16\n\x0eMpuTemperature\x18\x12 \x01(\x02\"\x97\x04\n\rTelemetryData\x12\x19\n\x02\x42\x33\x18\x01 \x01(\x0b\x32\r.telemetry.B3\x12)\n\x07\x42\x61ttery\x18\x02 \x01(\x0b\x32\x18.telemetry.BatteryStatus\x12/\n\rBatteryFaults\x18\x03 \x01(\x0b\x32\x18.telemetry.BatteryFaults\x12-\n\tContactor\x18\x04 \x01(\x0b\x32\x1a.telemetry.ContactorStatus\x12%\n\x08KeyMotor\x18\x05 \x01(\x0b\x32\x13.telemetry.KeyMotor\x12\x1d\n\x04MBMS\x18\x06 \x01(\x0b\x32\x0f.telemetry.MBMS\x12\x1d\n\x04MPPT\x18\x07 \x01(\x0b\x32\x0f.telemetry.MPPT\x12.\n\rMotorDetails0\x18\x08 \x01(\x0b\x32\x17.telemetry.MotorDetails\x12.\n\rMotorDetails1\x18\t \x01(\x0b\x32\x17.telemetry.MotorDetails\x12\x19\n\x02Pi\x18\n \x01(\x0b\x32\r.telemetry.Pi\x12\x35\n\x10ProximitySensors\x18\x0b \x01(\x0b\x32\x1b.telemetry.ProximitySensors\x12\'\n\tTelemetry\x18\x0c \x01(\x0b\x32\x14.telemetry.Telemetry\x12\x11\n\tTimeStamp\x18\r \x01(\x04\x12\r\n\x05Title\x18\x0e \x01(\tb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'HeliosPacket_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_BATTERYFAULTWARNINGS']._serialized_start=34 + _globals['_BATTERYFAULTWARNINGS']._serialized_end=616 + _globals['_BATTERYFAULTERRORS']._serialized_start=619 + _globals['_BATTERYFAULTERRORS']._serialized_end=1277 + _globals['_BATTERYFAULTS']._serialized_start=1279 + _globals['_BATTERYFAULTS']._serialized_end=1392 + _globals['_BATTERYSTATUS']._serialized_start=1395 + _globals['_BATTERYSTATUS']._serialized_end=2310 + _globals['_B3']._serialized_start=2313 + _globals['_B3']._serialized_end=2904 + _globals['_KEYMOTOR']._serialized_start=2906 + _globals['_KEYMOTOR']._serialized_end=2987 + _globals['_MBMS']._serialized_start=2990 + _globals['_MBMS']._serialized_end=4563 + _globals['_MOTORDETAILS']._serialized_start=4566 + _globals['_MOTORDETAILS']._serialized_end=5154 + _globals['_MPPT']._serialized_start=5157 + _globals['_MPPT']._serialized_end=6163 + _globals['_CONTACTORSTATUS']._serialized_start=6166 + _globals['_CONTACTORSTATUS']._serialized_end=7606 + _globals['_PI']._serialized_start=7608 + _globals['_PI']._serialized_end=7626 + _globals['_PROXIMITYSENSORS']._serialized_start=7628 + _globals['_PROXIMITYSENSORS']._serialized_end=7750 + _globals['_TELEMETRY']._serialized_start=7753 + _globals['_TELEMETRY']._serialized_end=8162 + _globals['_TELEMETRYDATA']._serialized_start=8165 + _globals['_TELEMETRYDATA']._serialized_end=8700 +# @@protoc_insertion_point(module_scope) diff --git a/protobufServer/app/HeliosPacket_pb2.pyi b/protobufServer/app/HeliosPacket_pb2.pyi new file mode 100644 index 0000000..b462b73 --- /dev/null +++ b/protobufServer/app/HeliosPacket_pb2.pyi @@ -0,0 +1,663 @@ +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class BatteryFaultWarnings(_message.Message): + __slots__ = ("CclReducedDueToAlternateCurrentLimit", "CclReducedDueToChargerLatch", "CclReducedDueToHighCellResistance", "CclReducedDueToHighCellVoltage", "CclReducedDueToHighPackVoltage", "CclReducedDueToHighSoc", "CclReducedDueToTemperature", "DclAndCclReducedDueToCommunicationFailsafe", "DclAndCclReducedDueToVoltageFailsafe", "DclReducedDueToHighCellResistance", "DclReducedDueToLowCellVoltage", "DclReducedDueToLowPackVoltage", "DclReducedDueToLowSoc", "DclReducedDueToTemperature") + CCLREDUCEDDUETOALTERNATECURRENTLIMIT_FIELD_NUMBER: _ClassVar[int] + CCLREDUCEDDUETOCHARGERLATCH_FIELD_NUMBER: _ClassVar[int] + CCLREDUCEDDUETOHIGHCELLRESISTANCE_FIELD_NUMBER: _ClassVar[int] + CCLREDUCEDDUETOHIGHCELLVOLTAGE_FIELD_NUMBER: _ClassVar[int] + CCLREDUCEDDUETOHIGHPACKVOLTAGE_FIELD_NUMBER: _ClassVar[int] + CCLREDUCEDDUETOHIGHSOC_FIELD_NUMBER: _ClassVar[int] + CCLREDUCEDDUETOTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + DCLANDCCLREDUCEDDUETOCOMMUNICATIONFAILSAFE_FIELD_NUMBER: _ClassVar[int] + DCLANDCCLREDUCEDDUETOVOLTAGEFAILSAFE_FIELD_NUMBER: _ClassVar[int] + DCLREDUCEDDUETOHIGHCELLRESISTANCE_FIELD_NUMBER: _ClassVar[int] + DCLREDUCEDDUETOLOWCELLVOLTAGE_FIELD_NUMBER: _ClassVar[int] + DCLREDUCEDDUETOLOWPACKVOLTAGE_FIELD_NUMBER: _ClassVar[int] + DCLREDUCEDDUETOLOWSOC_FIELD_NUMBER: _ClassVar[int] + DCLREDUCEDDUETOTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + CclReducedDueToAlternateCurrentLimit: bool + CclReducedDueToChargerLatch: bool + CclReducedDueToHighCellResistance: bool + CclReducedDueToHighCellVoltage: bool + CclReducedDueToHighPackVoltage: bool + CclReducedDueToHighSoc: bool + CclReducedDueToTemperature: bool + DclAndCclReducedDueToCommunicationFailsafe: bool + DclAndCclReducedDueToVoltageFailsafe: bool + DclReducedDueToHighCellResistance: bool + DclReducedDueToLowCellVoltage: bool + DclReducedDueToLowPackVoltage: bool + DclReducedDueToLowSoc: bool + DclReducedDueToTemperature: bool + def __init__(self, CclReducedDueToAlternateCurrentLimit: bool = ..., CclReducedDueToChargerLatch: bool = ..., CclReducedDueToHighCellResistance: bool = ..., CclReducedDueToHighCellVoltage: bool = ..., CclReducedDueToHighPackVoltage: bool = ..., CclReducedDueToHighSoc: bool = ..., CclReducedDueToTemperature: bool = ..., DclAndCclReducedDueToCommunicationFailsafe: bool = ..., DclAndCclReducedDueToVoltageFailsafe: bool = ..., DclReducedDueToHighCellResistance: bool = ..., DclReducedDueToLowCellVoltage: bool = ..., DclReducedDueToLowPackVoltage: bool = ..., DclReducedDueToLowSoc: bool = ..., DclReducedDueToTemperature: bool = ...) -> None: ... + +class BatteryFaultErrors(_message.Message): + __slots__ = ("AlwaysOnSupplyFault", "CanbusCommunicationFault", "ChargeLimitEnforcementFault", "ChargerSafetyRelayFault", "CurrentSensorFault", "DischargeLimitEnforcementFault", "FanMonitorFault", "HighVoltageIsolationFault", "InternalCommunicationFault", "InternalConversionFault", "InternalLogicFault", "InternalMemoryFault", "InternalThermistorFault", "LowCellVoltageFault", "OpenWiringFault", "PackVoltageSensorFault", "PowerSupply12VFault", "ThermistorFault", "VoltageRedundancyFault", "WeakCellFault", "WeakPackFault") + ALWAYSONSUPPLYFAULT_FIELD_NUMBER: _ClassVar[int] + CANBUSCOMMUNICATIONFAULT_FIELD_NUMBER: _ClassVar[int] + CHARGELIMITENFORCEMENTFAULT_FIELD_NUMBER: _ClassVar[int] + CHARGERSAFETYRELAYFAULT_FIELD_NUMBER: _ClassVar[int] + CURRENTSENSORFAULT_FIELD_NUMBER: _ClassVar[int] + DISCHARGELIMITENFORCEMENTFAULT_FIELD_NUMBER: _ClassVar[int] + FANMONITORFAULT_FIELD_NUMBER: _ClassVar[int] + HIGHVOLTAGEISOLATIONFAULT_FIELD_NUMBER: _ClassVar[int] + INTERNALCOMMUNICATIONFAULT_FIELD_NUMBER: _ClassVar[int] + INTERNALCONVERSIONFAULT_FIELD_NUMBER: _ClassVar[int] + INTERNALLOGICFAULT_FIELD_NUMBER: _ClassVar[int] + INTERNALMEMORYFAULT_FIELD_NUMBER: _ClassVar[int] + INTERNALTHERMISTORFAULT_FIELD_NUMBER: _ClassVar[int] + LOWCELLVOLTAGEFAULT_FIELD_NUMBER: _ClassVar[int] + OPENWIRINGFAULT_FIELD_NUMBER: _ClassVar[int] + PACKVOLTAGESENSORFAULT_FIELD_NUMBER: _ClassVar[int] + POWERSUPPLY12VFAULT_FIELD_NUMBER: _ClassVar[int] + THERMISTORFAULT_FIELD_NUMBER: _ClassVar[int] + VOLTAGEREDUNDANCYFAULT_FIELD_NUMBER: _ClassVar[int] + WEAKCELLFAULT_FIELD_NUMBER: _ClassVar[int] + WEAKPACKFAULT_FIELD_NUMBER: _ClassVar[int] + AlwaysOnSupplyFault: bool + CanbusCommunicationFault: bool + ChargeLimitEnforcementFault: bool + ChargerSafetyRelayFault: bool + CurrentSensorFault: bool + DischargeLimitEnforcementFault: bool + FanMonitorFault: bool + HighVoltageIsolationFault: bool + InternalCommunicationFault: bool + InternalConversionFault: bool + InternalLogicFault: bool + InternalMemoryFault: bool + InternalThermistorFault: bool + LowCellVoltageFault: bool + OpenWiringFault: bool + PackVoltageSensorFault: bool + PowerSupply12VFault: bool + ThermistorFault: bool + VoltageRedundancyFault: bool + WeakCellFault: bool + WeakPackFault: bool + def __init__(self, AlwaysOnSupplyFault: bool = ..., CanbusCommunicationFault: bool = ..., ChargeLimitEnforcementFault: bool = ..., ChargerSafetyRelayFault: bool = ..., CurrentSensorFault: bool = ..., DischargeLimitEnforcementFault: bool = ..., FanMonitorFault: bool = ..., HighVoltageIsolationFault: bool = ..., InternalCommunicationFault: bool = ..., InternalConversionFault: bool = ..., InternalLogicFault: bool = ..., InternalMemoryFault: bool = ..., InternalThermistorFault: bool = ..., LowCellVoltageFault: bool = ..., OpenWiringFault: bool = ..., PackVoltageSensorFault: bool = ..., PowerSupply12VFault: bool = ..., ThermistorFault: bool = ..., VoltageRedundancyFault: bool = ..., WeakCellFault: bool = ..., WeakPackFault: bool = ...) -> None: ... + +class BatteryFaults(_message.Message): + __slots__ = ("Errors", "Warnings") + ERRORS_FIELD_NUMBER: _ClassVar[int] + WARNINGS_FIELD_NUMBER: _ClassVar[int] + Errors: BatteryFaultErrors + Warnings: BatteryFaultWarnings + def __init__(self, Errors: _Optional[_Union[BatteryFaultErrors, _Mapping]] = ..., Warnings: _Optional[_Union[BatteryFaultWarnings, _Mapping]] = ...) -> None: ... + +class BatteryStatus(_message.Message): + __slots__ = ("AlwaysOnSignalStatus", "AverageCellVoltage", "AverageTemperature", "BmuAlive", "ChargeRelayEnabled", "ChargerSafetyEnabled", "DischargeRelayEnabled", "FanSpeed", "FanVoltage", "HighCellVoltage", "HighCellVoltageId", "HighTemperature", "HighThermistorId", "Input12V", "InternalTemperature", "IsChargingSignalStatus", "IsReadySignalStatus", "LowCellVoltage", "LowCellVoltageId", "LowTemperature", "LowThermistorId", "MalfunctionIndicatorActive", "MaximumCellVoltage", "MaximumPackVoltage", "MinimumCellVoltage", "MinimumPackVoltage", "MultiPurposeInputSignalStatus", "PackAmphours", "PackCurrent", "PackDepthOfDischarge", "PackStateOfCharge", "PackVoltage", "PopulatedCells", "RequestedFanSpeed") + ALWAYSONSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + AVERAGECELLVOLTAGE_FIELD_NUMBER: _ClassVar[int] + AVERAGETEMPERATURE_FIELD_NUMBER: _ClassVar[int] + BMUALIVE_FIELD_NUMBER: _ClassVar[int] + CHARGERELAYENABLED_FIELD_NUMBER: _ClassVar[int] + CHARGERSAFETYENABLED_FIELD_NUMBER: _ClassVar[int] + DISCHARGERELAYENABLED_FIELD_NUMBER: _ClassVar[int] + FANSPEED_FIELD_NUMBER: _ClassVar[int] + FANVOLTAGE_FIELD_NUMBER: _ClassVar[int] + HIGHCELLVOLTAGE_FIELD_NUMBER: _ClassVar[int] + HIGHCELLVOLTAGEID_FIELD_NUMBER: _ClassVar[int] + HIGHTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + HIGHTHERMISTORID_FIELD_NUMBER: _ClassVar[int] + INPUT12V_FIELD_NUMBER: _ClassVar[int] + INTERNALTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + ISCHARGINGSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + ISREADYSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + LOWCELLVOLTAGE_FIELD_NUMBER: _ClassVar[int] + LOWCELLVOLTAGEID_FIELD_NUMBER: _ClassVar[int] + LOWTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + LOWTHERMISTORID_FIELD_NUMBER: _ClassVar[int] + MALFUNCTIONINDICATORACTIVE_FIELD_NUMBER: _ClassVar[int] + MAXIMUMCELLVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MAXIMUMPACKVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MINIMUMCELLVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MINIMUMPACKVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MULTIPURPOSEINPUTSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + PACKAMPHOURS_FIELD_NUMBER: _ClassVar[int] + PACKCURRENT_FIELD_NUMBER: _ClassVar[int] + PACKDEPTHOFDISCHARGE_FIELD_NUMBER: _ClassVar[int] + PACKSTATEOFCHARGE_FIELD_NUMBER: _ClassVar[int] + PACKVOLTAGE_FIELD_NUMBER: _ClassVar[int] + POPULATEDCELLS_FIELD_NUMBER: _ClassVar[int] + REQUESTEDFANSPEED_FIELD_NUMBER: _ClassVar[int] + AlwaysOnSignalStatus: bool + AverageCellVoltage: float + AverageTemperature: float + BmuAlive: float + ChargeRelayEnabled: bool + ChargerSafetyEnabled: bool + DischargeRelayEnabled: bool + FanSpeed: float + FanVoltage: float + HighCellVoltage: float + HighCellVoltageId: float + HighTemperature: float + HighThermistorId: float + Input12V: float + InternalTemperature: float + IsChargingSignalStatus: bool + IsReadySignalStatus: bool + LowCellVoltage: float + LowCellVoltageId: float + LowTemperature: float + LowThermistorId: float + MalfunctionIndicatorActive: bool + MaximumCellVoltage: float + MaximumPackVoltage: float + MinimumCellVoltage: float + MinimumPackVoltage: float + MultiPurposeInputSignalStatus: bool + PackAmphours: float + PackCurrent: float + PackDepthOfDischarge: float + PackStateOfCharge: float + PackVoltage: float + PopulatedCells: float + RequestedFanSpeed: float + def __init__(self, AlwaysOnSignalStatus: bool = ..., AverageCellVoltage: _Optional[float] = ..., AverageTemperature: _Optional[float] = ..., BmuAlive: _Optional[float] = ..., ChargeRelayEnabled: bool = ..., ChargerSafetyEnabled: bool = ..., DischargeRelayEnabled: bool = ..., FanSpeed: _Optional[float] = ..., FanVoltage: _Optional[float] = ..., HighCellVoltage: _Optional[float] = ..., HighCellVoltageId: _Optional[float] = ..., HighTemperature: _Optional[float] = ..., HighThermistorId: _Optional[float] = ..., Input12V: _Optional[float] = ..., InternalTemperature: _Optional[float] = ..., IsChargingSignalStatus: bool = ..., IsReadySignalStatus: bool = ..., LowCellVoltage: _Optional[float] = ..., LowCellVoltageId: _Optional[float] = ..., LowTemperature: _Optional[float] = ..., LowThermistorId: _Optional[float] = ..., MalfunctionIndicatorActive: bool = ..., MaximumCellVoltage: _Optional[float] = ..., MaximumPackVoltage: _Optional[float] = ..., MinimumCellVoltage: _Optional[float] = ..., MinimumPackVoltage: _Optional[float] = ..., MultiPurposeInputSignalStatus: bool = ..., PackAmphours: _Optional[float] = ..., PackCurrent: _Optional[float] = ..., PackDepthOfDischarge: _Optional[float] = ..., PackStateOfCharge: _Optional[float] = ..., PackVoltage: _Optional[float] = ..., PopulatedCells: _Optional[float] = ..., RequestedFanSpeed: _Optional[float] = ...) -> None: ... + +class B3(_message.Message): + __slots__ = ("Acceleration", "B3Heartbeat", "BrakeLightSignalStatus", "BrakeSwitchDigital", "DaytimeRunningLightSignalStatus", "ForwardDigital", "HandbrakeSwitchDigital", "HazardLightsInput", "HeadightsSwitchInput", "HeadlightSignalStatus", "HornSignalStatus", "HornSwitchDigital", "LapDigital", "LeftSignalInput", "LeftSignalStatus", "MotorResetDigital", "NeutralDigital", "RaceModeDigital", "RegenBraking", "ReverseDigital", "RightSignalInput", "RightSignalStatus") + ACCELERATION_FIELD_NUMBER: _ClassVar[int] + B3HEARTBEAT_FIELD_NUMBER: _ClassVar[int] + BRAKELIGHTSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + BRAKESWITCHDIGITAL_FIELD_NUMBER: _ClassVar[int] + DAYTIMERUNNINGLIGHTSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + FORWARDDIGITAL_FIELD_NUMBER: _ClassVar[int] + HANDBRAKESWITCHDIGITAL_FIELD_NUMBER: _ClassVar[int] + HAZARDLIGHTSINPUT_FIELD_NUMBER: _ClassVar[int] + HEADIGHTSSWITCHINPUT_FIELD_NUMBER: _ClassVar[int] + HEADLIGHTSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + HORNSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + HORNSWITCHDIGITAL_FIELD_NUMBER: _ClassVar[int] + LAPDIGITAL_FIELD_NUMBER: _ClassVar[int] + LEFTSIGNALINPUT_FIELD_NUMBER: _ClassVar[int] + LEFTSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + MOTORRESETDIGITAL_FIELD_NUMBER: _ClassVar[int] + NEUTRALDIGITAL_FIELD_NUMBER: _ClassVar[int] + RACEMODEDIGITAL_FIELD_NUMBER: _ClassVar[int] + REGENBRAKING_FIELD_NUMBER: _ClassVar[int] + REVERSEDIGITAL_FIELD_NUMBER: _ClassVar[int] + RIGHTSIGNALINPUT_FIELD_NUMBER: _ClassVar[int] + RIGHTSIGNALSTATUS_FIELD_NUMBER: _ClassVar[int] + Acceleration: float + B3Heartbeat: bool + BrakeLightSignalStatus: bool + BrakeSwitchDigital: bool + DaytimeRunningLightSignalStatus: bool + ForwardDigital: bool + HandbrakeSwitchDigital: bool + HazardLightsInput: bool + HeadightsSwitchInput: bool + HeadlightSignalStatus: bool + HornSignalStatus: bool + HornSwitchDigital: bool + LapDigital: bool + LeftSignalInput: bool + LeftSignalStatus: bool + MotorResetDigital: bool + NeutralDigital: bool + RaceModeDigital: bool + RegenBraking: float + ReverseDigital: bool + RightSignalInput: bool + RightSignalStatus: bool + def __init__(self, Acceleration: _Optional[float] = ..., B3Heartbeat: bool = ..., BrakeLightSignalStatus: bool = ..., BrakeSwitchDigital: bool = ..., DaytimeRunningLightSignalStatus: bool = ..., ForwardDigital: bool = ..., HandbrakeSwitchDigital: bool = ..., HazardLightsInput: bool = ..., HeadightsSwitchInput: bool = ..., HeadlightSignalStatus: bool = ..., HornSignalStatus: bool = ..., HornSwitchDigital: bool = ..., LapDigital: bool = ..., LeftSignalInput: bool = ..., LeftSignalStatus: bool = ..., MotorResetDigital: bool = ..., NeutralDigital: bool = ..., RaceModeDigital: bool = ..., RegenBraking: _Optional[float] = ..., ReverseDigital: bool = ..., RightSignalInput: bool = ..., RightSignalStatus: bool = ...) -> None: ... + +class KeyMotor(_message.Message): + __slots__ = ("BusCurrentOut", "KeyMotorVelocity", "MotorCurrent") + BUSCURRENTOUT_FIELD_NUMBER: _ClassVar[int] + KEYMOTORVELOCITY_FIELD_NUMBER: _ClassVar[int] + MOTORCURRENT_FIELD_NUMBER: _ClassVar[int] + BusCurrentOut: float + KeyMotorVelocity: float + MotorCurrent: float + def __init__(self, BusCurrentOut: _Optional[float] = ..., KeyMotorVelocity: _Optional[float] = ..., MotorCurrent: _Optional[float] = ...) -> None: ... + +class MBMS(_message.Message): + __slots__ = ("AbattDisable", "ArrayContactorCommand", "ArrayHeartbeatDeadTrip", "ArrayHighCurrentTrip", "ArrayHighCurrentWarning", "AuxiliaryBatteryVoltage", "CanOc12VWarning", "ChargeContactorCommand", "ChargeEnable", "ChargeHeartbeatDeadTrip", "ChargeHighCurrentTrip", "ChargeHighCurrentWarning", "ChargeSafety", "ChargeShouldTrip", "ChgFault", "ChgLvEn", "ChgOn", "CommonContactorCommand", "CommonHeartbeatDeadTrip", "CommonHighCurrentTrip", "CommonHighCurrentWarning", "ContactorConnectedUnexpectedlyTrip", "ContactorDisconnectedUnexpectedlyTrip", "DcdcFault", "DcdcOn", "DischargeEnable", "DischargeShouldTrip", "En1", "EsdEnabledTrip", "ExternalShutdown", "Heartbeat", "HighCellVoltageTrip", "HighCellVoltageWarning", "HighTemperatureTrip", "HighTemperatureWarning", "Key", "LowCellVoltageTrip", "LowCellVoltageWarning", "LowTemperatureTrip", "LowTemperatureWarning", "LvContactorCommand", "LvHeartbeatDeadTrip", "LvHighCurrentTrip", "LvHighCurrentWarning", "MainPowerSwitch", "MotorContactorCommand", "MotorHeartbeatDeadTrip", "MotorHighCurrentTrip", "MotorHighCurrentWarning", "MpsDisabledTrip", "OrionCanReceivedRecently", "OrionMessageTimeoutTrip", "ProtectionTrip", "StartupState", "StrobeBmsLight", "SystemState", "ThreeAOc") + ABATTDISABLE_FIELD_NUMBER: _ClassVar[int] + ARRAYCONTACTORCOMMAND_FIELD_NUMBER: _ClassVar[int] + ARRAYHEARTBEATDEADTRIP_FIELD_NUMBER: _ClassVar[int] + ARRAYHIGHCURRENTTRIP_FIELD_NUMBER: _ClassVar[int] + ARRAYHIGHCURRENTWARNING_FIELD_NUMBER: _ClassVar[int] + AUXILIARYBATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + CANOC12VWARNING_FIELD_NUMBER: _ClassVar[int] + CHARGECONTACTORCOMMAND_FIELD_NUMBER: _ClassVar[int] + CHARGEENABLE_FIELD_NUMBER: _ClassVar[int] + CHARGEHEARTBEATDEADTRIP_FIELD_NUMBER: _ClassVar[int] + CHARGEHIGHCURRENTTRIP_FIELD_NUMBER: _ClassVar[int] + CHARGEHIGHCURRENTWARNING_FIELD_NUMBER: _ClassVar[int] + CHARGESAFETY_FIELD_NUMBER: _ClassVar[int] + CHARGESHOULDTRIP_FIELD_NUMBER: _ClassVar[int] + CHGFAULT_FIELD_NUMBER: _ClassVar[int] + CHGLVEN_FIELD_NUMBER: _ClassVar[int] + CHGON_FIELD_NUMBER: _ClassVar[int] + COMMONCONTACTORCOMMAND_FIELD_NUMBER: _ClassVar[int] + COMMONHEARTBEATDEADTRIP_FIELD_NUMBER: _ClassVar[int] + COMMONHIGHCURRENTTRIP_FIELD_NUMBER: _ClassVar[int] + COMMONHIGHCURRENTWARNING_FIELD_NUMBER: _ClassVar[int] + CONTACTORCONNECTEDUNEXPECTEDLYTRIP_FIELD_NUMBER: _ClassVar[int] + CONTACTORDISCONNECTEDUNEXPECTEDLYTRIP_FIELD_NUMBER: _ClassVar[int] + DCDCFAULT_FIELD_NUMBER: _ClassVar[int] + DCDCON_FIELD_NUMBER: _ClassVar[int] + DISCHARGEENABLE_FIELD_NUMBER: _ClassVar[int] + DISCHARGESHOULDTRIP_FIELD_NUMBER: _ClassVar[int] + EN1_FIELD_NUMBER: _ClassVar[int] + ESDENABLEDTRIP_FIELD_NUMBER: _ClassVar[int] + EXTERNALSHUTDOWN_FIELD_NUMBER: _ClassVar[int] + HEARTBEAT_FIELD_NUMBER: _ClassVar[int] + HIGHCELLVOLTAGETRIP_FIELD_NUMBER: _ClassVar[int] + HIGHCELLVOLTAGEWARNING_FIELD_NUMBER: _ClassVar[int] + HIGHTEMPERATURETRIP_FIELD_NUMBER: _ClassVar[int] + HIGHTEMPERATUREWARNING_FIELD_NUMBER: _ClassVar[int] + KEY_FIELD_NUMBER: _ClassVar[int] + LOWCELLVOLTAGETRIP_FIELD_NUMBER: _ClassVar[int] + LOWCELLVOLTAGEWARNING_FIELD_NUMBER: _ClassVar[int] + LOWTEMPERATURETRIP_FIELD_NUMBER: _ClassVar[int] + LOWTEMPERATUREWARNING_FIELD_NUMBER: _ClassVar[int] + LVCONTACTORCOMMAND_FIELD_NUMBER: _ClassVar[int] + LVHEARTBEATDEADTRIP_FIELD_NUMBER: _ClassVar[int] + LVHIGHCURRENTTRIP_FIELD_NUMBER: _ClassVar[int] + LVHIGHCURRENTWARNING_FIELD_NUMBER: _ClassVar[int] + MAINPOWERSWITCH_FIELD_NUMBER: _ClassVar[int] + MOTORCONTACTORCOMMAND_FIELD_NUMBER: _ClassVar[int] + MOTORHEARTBEATDEADTRIP_FIELD_NUMBER: _ClassVar[int] + MOTORHIGHCURRENTTRIP_FIELD_NUMBER: _ClassVar[int] + MOTORHIGHCURRENTWARNING_FIELD_NUMBER: _ClassVar[int] + MPSDISABLEDTRIP_FIELD_NUMBER: _ClassVar[int] + ORIONCANRECEIVEDRECENTLY_FIELD_NUMBER: _ClassVar[int] + ORIONMESSAGETIMEOUTTRIP_FIELD_NUMBER: _ClassVar[int] + PROTECTIONTRIP_FIELD_NUMBER: _ClassVar[int] + STARTUPSTATE_FIELD_NUMBER: _ClassVar[int] + STROBEBMSLIGHT_FIELD_NUMBER: _ClassVar[int] + SYSTEMSTATE_FIELD_NUMBER: _ClassVar[int] + THREEAOC_FIELD_NUMBER: _ClassVar[int] + AbattDisable: bool + ArrayContactorCommand: bool + ArrayHeartbeatDeadTrip: bool + ArrayHighCurrentTrip: bool + ArrayHighCurrentWarning: bool + AuxiliaryBatteryVoltage: float + CanOc12VWarning: bool + ChargeContactorCommand: bool + ChargeEnable: bool + ChargeHeartbeatDeadTrip: bool + ChargeHighCurrentTrip: bool + ChargeHighCurrentWarning: bool + ChargeSafety: bool + ChargeShouldTrip: bool + ChgFault: bool + ChgLvEn: bool + ChgOn: bool + CommonContactorCommand: bool + CommonHeartbeatDeadTrip: bool + CommonHighCurrentTrip: bool + CommonHighCurrentWarning: bool + ContactorConnectedUnexpectedlyTrip: bool + ContactorDisconnectedUnexpectedlyTrip: bool + DcdcFault: bool + DcdcOn: bool + DischargeEnable: bool + DischargeShouldTrip: bool + En1: bool + EsdEnabledTrip: bool + ExternalShutdown: bool + Heartbeat: bool + HighCellVoltageTrip: bool + HighCellVoltageWarning: bool + HighTemperatureTrip: bool + HighTemperatureWarning: bool + Key: bool + LowCellVoltageTrip: bool + LowCellVoltageWarning: bool + LowTemperatureTrip: bool + LowTemperatureWarning: bool + LvContactorCommand: bool + LvHeartbeatDeadTrip: bool + LvHighCurrentTrip: bool + LvHighCurrentWarning: bool + MainPowerSwitch: bool + MotorContactorCommand: bool + MotorHeartbeatDeadTrip: bool + MotorHighCurrentTrip: bool + MotorHighCurrentWarning: bool + MpsDisabledTrip: bool + OrionCanReceivedRecently: bool + OrionMessageTimeoutTrip: bool + ProtectionTrip: bool + StartupState: float + StrobeBmsLight: bool + SystemState: float + ThreeAOc: bool + def __init__(self, AbattDisable: bool = ..., ArrayContactorCommand: bool = ..., ArrayHeartbeatDeadTrip: bool = ..., ArrayHighCurrentTrip: bool = ..., ArrayHighCurrentWarning: bool = ..., AuxiliaryBatteryVoltage: _Optional[float] = ..., CanOc12VWarning: bool = ..., ChargeContactorCommand: bool = ..., ChargeEnable: bool = ..., ChargeHeartbeatDeadTrip: bool = ..., ChargeHighCurrentTrip: bool = ..., ChargeHighCurrentWarning: bool = ..., ChargeSafety: bool = ..., ChargeShouldTrip: bool = ..., ChgFault: bool = ..., ChgLvEn: bool = ..., ChgOn: bool = ..., CommonContactorCommand: bool = ..., CommonHeartbeatDeadTrip: bool = ..., CommonHighCurrentTrip: bool = ..., CommonHighCurrentWarning: bool = ..., ContactorConnectedUnexpectedlyTrip: bool = ..., ContactorDisconnectedUnexpectedlyTrip: bool = ..., DcdcFault: bool = ..., DcdcOn: bool = ..., DischargeEnable: bool = ..., DischargeShouldTrip: bool = ..., En1: bool = ..., EsdEnabledTrip: bool = ..., ExternalShutdown: bool = ..., Heartbeat: bool = ..., HighCellVoltageTrip: bool = ..., HighCellVoltageWarning: bool = ..., HighTemperatureTrip: bool = ..., HighTemperatureWarning: bool = ..., Key: bool = ..., LowCellVoltageTrip: bool = ..., LowCellVoltageWarning: bool = ..., LowTemperatureTrip: bool = ..., LowTemperatureWarning: bool = ..., LvContactorCommand: bool = ..., LvHeartbeatDeadTrip: bool = ..., LvHighCurrentTrip: bool = ..., LvHighCurrentWarning: bool = ..., MainPowerSwitch: bool = ..., MotorContactorCommand: bool = ..., MotorHeartbeatDeadTrip: bool = ..., MotorHighCurrentTrip: bool = ..., MotorHighCurrentWarning: bool = ..., MpsDisabledTrip: bool = ..., OrionCanReceivedRecently: bool = ..., OrionMessageTimeoutTrip: bool = ..., ProtectionTrip: bool = ..., StartupState: _Optional[float] = ..., StrobeBmsLight: bool = ..., SystemState: _Optional[float] = ..., ThreeAOc: bool = ...) -> None: ... + +class MotorDetails(_message.Message): + __slots__ = ("ActiveMotor", "BEMF_D", "BEMF_Q", "BusCurrent", "BusVoltage", "DC_Bus_Ah", "DspBoardTemperature", "ErrorFlags", "HeatsinkTemperature", "Id", "Iq", "LimitFlags", "MotorId", "MotorTemperature", "MotorVelocity", "Odometer", "PhaseCurrentB", "PhaseCurrentC", "RxErrorCount", "SerialNumber", "SlipSpeed", "Supply15V", "Supply1V9", "Supply3V3", "TritiumId", "TxErrorCount", "Vd", "VehicleVelocity", "Vq") + ACTIVEMOTOR_FIELD_NUMBER: _ClassVar[int] + BEMF_D_FIELD_NUMBER: _ClassVar[int] + BEMF_Q_FIELD_NUMBER: _ClassVar[int] + BUSCURRENT_FIELD_NUMBER: _ClassVar[int] + BUSVOLTAGE_FIELD_NUMBER: _ClassVar[int] + DC_BUS_AH_FIELD_NUMBER: _ClassVar[int] + DSPBOARDTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + ERRORFLAGS_FIELD_NUMBER: _ClassVar[int] + HEATSINKTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + IQ_FIELD_NUMBER: _ClassVar[int] + LIMITFLAGS_FIELD_NUMBER: _ClassVar[int] + MOTORID_FIELD_NUMBER: _ClassVar[int] + MOTORTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MOTORVELOCITY_FIELD_NUMBER: _ClassVar[int] + ODOMETER_FIELD_NUMBER: _ClassVar[int] + PHASECURRENTB_FIELD_NUMBER: _ClassVar[int] + PHASECURRENTC_FIELD_NUMBER: _ClassVar[int] + RXERRORCOUNT_FIELD_NUMBER: _ClassVar[int] + SERIALNUMBER_FIELD_NUMBER: _ClassVar[int] + SLIPSPEED_FIELD_NUMBER: _ClassVar[int] + SUPPLY15V_FIELD_NUMBER: _ClassVar[int] + SUPPLY1V9_FIELD_NUMBER: _ClassVar[int] + SUPPLY3V3_FIELD_NUMBER: _ClassVar[int] + TRITIUMID_FIELD_NUMBER: _ClassVar[int] + TXERRORCOUNT_FIELD_NUMBER: _ClassVar[int] + VD_FIELD_NUMBER: _ClassVar[int] + VEHICLEVELOCITY_FIELD_NUMBER: _ClassVar[int] + VQ_FIELD_NUMBER: _ClassVar[int] + ActiveMotor: float + BEMF_D: float + BEMF_Q: float + BusCurrent: float + BusVoltage: float + DC_Bus_Ah: float + DspBoardTemperature: float + ErrorFlags: float + HeatsinkTemperature: float + Id: float + Iq: float + LimitFlags: float + MotorId: float + MotorTemperature: float + MotorVelocity: float + Odometer: float + PhaseCurrentB: float + PhaseCurrentC: float + RxErrorCount: float + SerialNumber: float + SlipSpeed: float + Supply15V: float + Supply1V9: float + Supply3V3: float + TritiumId: float + TxErrorCount: float + Vd: float + VehicleVelocity: float + Vq: float + def __init__(self, ActiveMotor: _Optional[float] = ..., BEMF_D: _Optional[float] = ..., BEMF_Q: _Optional[float] = ..., BusCurrent: _Optional[float] = ..., BusVoltage: _Optional[float] = ..., DC_Bus_Ah: _Optional[float] = ..., DspBoardTemperature: _Optional[float] = ..., ErrorFlags: _Optional[float] = ..., HeatsinkTemperature: _Optional[float] = ..., Id: _Optional[float] = ..., Iq: _Optional[float] = ..., LimitFlags: _Optional[float] = ..., MotorId: _Optional[float] = ..., MotorTemperature: _Optional[float] = ..., MotorVelocity: _Optional[float] = ..., Odometer: _Optional[float] = ..., PhaseCurrentB: _Optional[float] = ..., PhaseCurrentC: _Optional[float] = ..., RxErrorCount: _Optional[float] = ..., SerialNumber: _Optional[float] = ..., SlipSpeed: _Optional[float] = ..., Supply15V: _Optional[float] = ..., Supply1V9: _Optional[float] = ..., Supply3V3: _Optional[float] = ..., TritiumId: _Optional[float] = ..., TxErrorCount: _Optional[float] = ..., Vd: _Optional[float] = ..., VehicleVelocity: _Optional[float] = ..., Vq: _Optional[float] = ...) -> None: ... + +class MPPT(_message.Message): + __slots__ = ("Mppt0Ch0ArrayCurrent", "Mppt0Ch0ArrayVoltage", "Mppt0Ch0BatteryVoltage", "Mppt0Ch0UnitTemperature", "Mppt0Ch1ArrayCurrent", "Mppt0Ch1ArrayVoltage", "Mppt0Ch1BatteryVoltage", "Mppt0Ch1UnitTemperature", "Mppt1Ch0ArrayCurrent", "Mppt1Ch0ArrayVoltage", "Mppt1Ch0BatteryVoltage", "Mppt1Ch0UnitTemperature", "Mppt1Ch1ArrayCurrent", "Mppt1Ch1ArrayVoltage", "Mppt1Ch1BatteryVoltage", "Mppt1Ch1UnitTemperature", "Mppt2Ch0ArrayCurrent", "Mppt2Ch0ArrayVoltage", "Mppt2Ch0BatteryVoltage", "Mppt2Ch0UnitTemperature", "Mppt2Ch1ArrayCurrent", "Mppt2Ch1ArrayVoltage", "Mppt2Ch1BatteryVoltage", "Mppt2Ch1UnitTemperature", "Mppt3Ch0ArrayCurrent", "Mppt3Ch0ArrayVoltage", "Mppt3Ch0BatteryVoltage", "Mppt3Ch0UnitTemperature", "Mppt3Ch1ArrayCurrent", "Mppt3Ch1ArrayVoltage", "Mppt3Ch1BatteryVoltage", "Mppt3Ch1UnitTemperature") + MPPT0CH0ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT0CH0ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT0CH0BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT0CH0UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MPPT0CH1ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT0CH1ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT0CH1BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT0CH1UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MPPT1CH0ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT1CH0ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT1CH0BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT1CH0UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MPPT1CH1ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT1CH1ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT1CH1BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT1CH1UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MPPT2CH0ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT2CH0ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT2CH0BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT2CH0UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MPPT2CH1ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT2CH1ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT2CH1BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT2CH1UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MPPT3CH0ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT3CH0ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT3CH0BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT3CH0UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + MPPT3CH1ARRAYCURRENT_FIELD_NUMBER: _ClassVar[int] + MPPT3CH1ARRAYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT3CH1BATTERYVOLTAGE_FIELD_NUMBER: _ClassVar[int] + MPPT3CH1UNITTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + Mppt0Ch0ArrayCurrent: float + Mppt0Ch0ArrayVoltage: float + Mppt0Ch0BatteryVoltage: float + Mppt0Ch0UnitTemperature: float + Mppt0Ch1ArrayCurrent: float + Mppt0Ch1ArrayVoltage: float + Mppt0Ch1BatteryVoltage: float + Mppt0Ch1UnitTemperature: float + Mppt1Ch0ArrayCurrent: float + Mppt1Ch0ArrayVoltage: float + Mppt1Ch0BatteryVoltage: float + Mppt1Ch0UnitTemperature: float + Mppt1Ch1ArrayCurrent: float + Mppt1Ch1ArrayVoltage: float + Mppt1Ch1BatteryVoltage: float + Mppt1Ch1UnitTemperature: float + Mppt2Ch0ArrayCurrent: float + Mppt2Ch0ArrayVoltage: float + Mppt2Ch0BatteryVoltage: float + Mppt2Ch0UnitTemperature: float + Mppt2Ch1ArrayCurrent: float + Mppt2Ch1ArrayVoltage: float + Mppt2Ch1BatteryVoltage: float + Mppt2Ch1UnitTemperature: float + Mppt3Ch0ArrayCurrent: float + Mppt3Ch0ArrayVoltage: float + Mppt3Ch0BatteryVoltage: float + Mppt3Ch0UnitTemperature: float + Mppt3Ch1ArrayCurrent: float + Mppt3Ch1ArrayVoltage: float + Mppt3Ch1BatteryVoltage: float + Mppt3Ch1UnitTemperature: float + def __init__(self, Mppt0Ch0ArrayCurrent: _Optional[float] = ..., Mppt0Ch0ArrayVoltage: _Optional[float] = ..., Mppt0Ch0BatteryVoltage: _Optional[float] = ..., Mppt0Ch0UnitTemperature: _Optional[float] = ..., Mppt0Ch1ArrayCurrent: _Optional[float] = ..., Mppt0Ch1ArrayVoltage: _Optional[float] = ..., Mppt0Ch1BatteryVoltage: _Optional[float] = ..., Mppt0Ch1UnitTemperature: _Optional[float] = ..., Mppt1Ch0ArrayCurrent: _Optional[float] = ..., Mppt1Ch0ArrayVoltage: _Optional[float] = ..., Mppt1Ch0BatteryVoltage: _Optional[float] = ..., Mppt1Ch0UnitTemperature: _Optional[float] = ..., Mppt1Ch1ArrayCurrent: _Optional[float] = ..., Mppt1Ch1ArrayVoltage: _Optional[float] = ..., Mppt1Ch1BatteryVoltage: _Optional[float] = ..., Mppt1Ch1UnitTemperature: _Optional[float] = ..., Mppt2Ch0ArrayCurrent: _Optional[float] = ..., Mppt2Ch0ArrayVoltage: _Optional[float] = ..., Mppt2Ch0BatteryVoltage: _Optional[float] = ..., Mppt2Ch0UnitTemperature: _Optional[float] = ..., Mppt2Ch1ArrayCurrent: _Optional[float] = ..., Mppt2Ch1ArrayVoltage: _Optional[float] = ..., Mppt2Ch1BatteryVoltage: _Optional[float] = ..., Mppt2Ch1UnitTemperature: _Optional[float] = ..., Mppt3Ch0ArrayCurrent: _Optional[float] = ..., Mppt3Ch0ArrayVoltage: _Optional[float] = ..., Mppt3Ch0BatteryVoltage: _Optional[float] = ..., Mppt3Ch0UnitTemperature: _Optional[float] = ..., Mppt3Ch1ArrayCurrent: _Optional[float] = ..., Mppt3Ch1ArrayVoltage: _Optional[float] = ..., Mppt3Ch1BatteryVoltage: _Optional[float] = ..., Mppt3Ch1UnitTemperature: _Optional[float] = ...) -> None: ... + +class ContactorStatus(_message.Message): + __slots__ = ("ArrayBPSError", "ArrayChargeCurrent", "ArrayContactorClosed", "ArrayContactorClosing", "ArrayContactorError", "ArrayHeartbeat", "ArrayLineCurrent", "ArrayPrechargerClosed", "ArrayPrechargerClosing", "ArrayPrechargerError", "ChargeBPSError", "ChargeChargeCurrent", "ChargeContactorClosed", "ChargeContactorClosing", "ChargeContactorError", "ChargeHeartbeat", "ChargeLineCurrent", "ChargePrechargerClosed", "ChargePrechargerClosing", "ChargePrechargerError", "CommonChargeCurrent", "CommonContactorClosed", "CommonContactorClosing", "CommonContactorError", "CommonContactorOpeningError", "CommonHeartbeat", "CommonLineCurrent", "CommonPrechargerClosed", "CommonPrechargerClosing", "CommonPrechargerError", "LvBpsError", "LvChargeCurrent", "LvContactorClosed", "LvContactorClosing", "LvContactorError", "LvHeartbeat", "LvLineCurrent", "LvPrechargerClosed", "LvPrechargerClosing", "LvPrechargerError", "MotorBPSError", "MotorChargeCurrent", "MotorContactorClosed", "MotorContactorClosing", "MotorContactorError", "MotorHeartbeat", "MotorLineCurrent", "MotorPrechargerClosed", "MotorPrechargerClosing", "MotorPrechargerError") + ARRAYBPSERROR_FIELD_NUMBER: _ClassVar[int] + ARRAYCHARGECURRENT_FIELD_NUMBER: _ClassVar[int] + ARRAYCONTACTORCLOSED_FIELD_NUMBER: _ClassVar[int] + ARRAYCONTACTORCLOSING_FIELD_NUMBER: _ClassVar[int] + ARRAYCONTACTORERROR_FIELD_NUMBER: _ClassVar[int] + ARRAYHEARTBEAT_FIELD_NUMBER: _ClassVar[int] + ARRAYLINECURRENT_FIELD_NUMBER: _ClassVar[int] + ARRAYPRECHARGERCLOSED_FIELD_NUMBER: _ClassVar[int] + ARRAYPRECHARGERCLOSING_FIELD_NUMBER: _ClassVar[int] + ARRAYPRECHARGERERROR_FIELD_NUMBER: _ClassVar[int] + CHARGEBPSERROR_FIELD_NUMBER: _ClassVar[int] + CHARGECHARGECURRENT_FIELD_NUMBER: _ClassVar[int] + CHARGECONTACTORCLOSED_FIELD_NUMBER: _ClassVar[int] + CHARGECONTACTORCLOSING_FIELD_NUMBER: _ClassVar[int] + CHARGECONTACTORERROR_FIELD_NUMBER: _ClassVar[int] + CHARGEHEARTBEAT_FIELD_NUMBER: _ClassVar[int] + CHARGELINECURRENT_FIELD_NUMBER: _ClassVar[int] + CHARGEPRECHARGERCLOSED_FIELD_NUMBER: _ClassVar[int] + CHARGEPRECHARGERCLOSING_FIELD_NUMBER: _ClassVar[int] + CHARGEPRECHARGERERROR_FIELD_NUMBER: _ClassVar[int] + COMMONCHARGECURRENT_FIELD_NUMBER: _ClassVar[int] + COMMONCONTACTORCLOSED_FIELD_NUMBER: _ClassVar[int] + COMMONCONTACTORCLOSING_FIELD_NUMBER: _ClassVar[int] + COMMONCONTACTORERROR_FIELD_NUMBER: _ClassVar[int] + COMMONCONTACTOROPENINGERROR_FIELD_NUMBER: _ClassVar[int] + COMMONHEARTBEAT_FIELD_NUMBER: _ClassVar[int] + COMMONLINECURRENT_FIELD_NUMBER: _ClassVar[int] + COMMONPRECHARGERCLOSED_FIELD_NUMBER: _ClassVar[int] + COMMONPRECHARGERCLOSING_FIELD_NUMBER: _ClassVar[int] + COMMONPRECHARGERERROR_FIELD_NUMBER: _ClassVar[int] + LVBPSERROR_FIELD_NUMBER: _ClassVar[int] + LVCHARGECURRENT_FIELD_NUMBER: _ClassVar[int] + LVCONTACTORCLOSED_FIELD_NUMBER: _ClassVar[int] + LVCONTACTORCLOSING_FIELD_NUMBER: _ClassVar[int] + LVCONTACTORERROR_FIELD_NUMBER: _ClassVar[int] + LVHEARTBEAT_FIELD_NUMBER: _ClassVar[int] + LVLINECURRENT_FIELD_NUMBER: _ClassVar[int] + LVPRECHARGERCLOSED_FIELD_NUMBER: _ClassVar[int] + LVPRECHARGERCLOSING_FIELD_NUMBER: _ClassVar[int] + LVPRECHARGERERROR_FIELD_NUMBER: _ClassVar[int] + MOTORBPSERROR_FIELD_NUMBER: _ClassVar[int] + MOTORCHARGECURRENT_FIELD_NUMBER: _ClassVar[int] + MOTORCONTACTORCLOSED_FIELD_NUMBER: _ClassVar[int] + MOTORCONTACTORCLOSING_FIELD_NUMBER: _ClassVar[int] + MOTORCONTACTORERROR_FIELD_NUMBER: _ClassVar[int] + MOTORHEARTBEAT_FIELD_NUMBER: _ClassVar[int] + MOTORLINECURRENT_FIELD_NUMBER: _ClassVar[int] + MOTORPRECHARGERCLOSED_FIELD_NUMBER: _ClassVar[int] + MOTORPRECHARGERCLOSING_FIELD_NUMBER: _ClassVar[int] + MOTORPRECHARGERERROR_FIELD_NUMBER: _ClassVar[int] + ArrayBPSError: bool + ArrayChargeCurrent: float + ArrayContactorClosed: bool + ArrayContactorClosing: bool + ArrayContactorError: bool + ArrayHeartbeat: bool + ArrayLineCurrent: float + ArrayPrechargerClosed: bool + ArrayPrechargerClosing: bool + ArrayPrechargerError: bool + ChargeBPSError: bool + ChargeChargeCurrent: float + ChargeContactorClosed: bool + ChargeContactorClosing: bool + ChargeContactorError: bool + ChargeHeartbeat: bool + ChargeLineCurrent: float + ChargePrechargerClosed: bool + ChargePrechargerClosing: bool + ChargePrechargerError: bool + CommonChargeCurrent: float + CommonContactorClosed: bool + CommonContactorClosing: bool + CommonContactorError: bool + CommonContactorOpeningError: bool + CommonHeartbeat: bool + CommonLineCurrent: float + CommonPrechargerClosed: bool + CommonPrechargerClosing: bool + CommonPrechargerError: bool + LvBpsError: bool + LvChargeCurrent: float + LvContactorClosed: bool + LvContactorClosing: bool + LvContactorError: bool + LvHeartbeat: bool + LvLineCurrent: float + LvPrechargerClosed: bool + LvPrechargerClosing: bool + LvPrechargerError: bool + MotorBPSError: bool + MotorChargeCurrent: float + MotorContactorClosed: bool + MotorContactorClosing: bool + MotorContactorError: bool + MotorHeartbeat: bool + MotorLineCurrent: float + MotorPrechargerClosed: bool + MotorPrechargerClosing: bool + MotorPrechargerError: bool + def __init__(self, ArrayBPSError: bool = ..., ArrayChargeCurrent: _Optional[float] = ..., ArrayContactorClosed: bool = ..., ArrayContactorClosing: bool = ..., ArrayContactorError: bool = ..., ArrayHeartbeat: bool = ..., ArrayLineCurrent: _Optional[float] = ..., ArrayPrechargerClosed: bool = ..., ArrayPrechargerClosing: bool = ..., ArrayPrechargerError: bool = ..., ChargeBPSError: bool = ..., ChargeChargeCurrent: _Optional[float] = ..., ChargeContactorClosed: bool = ..., ChargeContactorClosing: bool = ..., ChargeContactorError: bool = ..., ChargeHeartbeat: bool = ..., ChargeLineCurrent: _Optional[float] = ..., ChargePrechargerClosed: bool = ..., ChargePrechargerClosing: bool = ..., ChargePrechargerError: bool = ..., CommonChargeCurrent: _Optional[float] = ..., CommonContactorClosed: bool = ..., CommonContactorClosing: bool = ..., CommonContactorError: bool = ..., CommonContactorOpeningError: bool = ..., CommonHeartbeat: bool = ..., CommonLineCurrent: _Optional[float] = ..., CommonPrechargerClosed: bool = ..., CommonPrechargerClosing: bool = ..., CommonPrechargerError: bool = ..., LvBpsError: bool = ..., LvChargeCurrent: _Optional[float] = ..., LvContactorClosed: bool = ..., LvContactorClosing: bool = ..., LvContactorError: bool = ..., LvHeartbeat: bool = ..., LvLineCurrent: _Optional[float] = ..., LvPrechargerClosed: bool = ..., LvPrechargerClosing: bool = ..., LvPrechargerError: bool = ..., MotorBPSError: bool = ..., MotorChargeCurrent: _Optional[float] = ..., MotorContactorClosed: bool = ..., MotorContactorClosing: bool = ..., MotorContactorError: bool = ..., MotorHeartbeat: bool = ..., MotorLineCurrent: _Optional[float] = ..., MotorPrechargerClosed: bool = ..., MotorPrechargerClosing: bool = ..., MotorPrechargerError: bool = ...) -> None: ... + +class Pi(_message.Message): + __slots__ = ("Rfid",) + RFID_FIELD_NUMBER: _ClassVar[int] + Rfid: str + def __init__(self, Rfid: _Optional[str] = ...) -> None: ... + +class ProximitySensors(_message.Message): + __slots__ = ("ProximitySensor1", "ProximitySensor2", "ProximitySensor3", "ProximitySensor4") + PROXIMITYSENSOR1_FIELD_NUMBER: _ClassVar[int] + PROXIMITYSENSOR2_FIELD_NUMBER: _ClassVar[int] + PROXIMITYSENSOR3_FIELD_NUMBER: _ClassVar[int] + PROXIMITYSENSOR4_FIELD_NUMBER: _ClassVar[int] + ProximitySensor1: float + ProximitySensor2: float + ProximitySensor3: float + ProximitySensor4: float + def __init__(self, ProximitySensor1: _Optional[float] = ..., ProximitySensor2: _Optional[float] = ..., ProximitySensor3: _Optional[float] = ..., ProximitySensor4: _Optional[float] = ...) -> None: ... + +class Telemetry(_message.Message): + __slots__ = ("GpsAdditionalFlags", "GpsDay", "GpsFixStatusFlags", "GpsHour", "GpsLatitude", "GpsLongitude", "GpsMinute", "GpsMonth", "GpsSecond", "GpsValidityFlags", "GpsYear", "MpuAccelerationX", "MpuAccelerationY", "MpuAccelerationZ", "MpuRotationX", "MpuRotationY", "MpuRotationZ", "MpuTemperature") + GPSADDITIONALFLAGS_FIELD_NUMBER: _ClassVar[int] + GPSDAY_FIELD_NUMBER: _ClassVar[int] + GPSFIXSTATUSFLAGS_FIELD_NUMBER: _ClassVar[int] + GPSHOUR_FIELD_NUMBER: _ClassVar[int] + GPSLATITUDE_FIELD_NUMBER: _ClassVar[int] + GPSLONGITUDE_FIELD_NUMBER: _ClassVar[int] + GPSMINUTE_FIELD_NUMBER: _ClassVar[int] + GPSMONTH_FIELD_NUMBER: _ClassVar[int] + GPSSECOND_FIELD_NUMBER: _ClassVar[int] + GPSVALIDITYFLAGS_FIELD_NUMBER: _ClassVar[int] + GPSYEAR_FIELD_NUMBER: _ClassVar[int] + MPUACCELERATIONX_FIELD_NUMBER: _ClassVar[int] + MPUACCELERATIONY_FIELD_NUMBER: _ClassVar[int] + MPUACCELERATIONZ_FIELD_NUMBER: _ClassVar[int] + MPUROTATIONX_FIELD_NUMBER: _ClassVar[int] + MPUROTATIONY_FIELD_NUMBER: _ClassVar[int] + MPUROTATIONZ_FIELD_NUMBER: _ClassVar[int] + MPUTEMPERATURE_FIELD_NUMBER: _ClassVar[int] + GpsAdditionalFlags: float + GpsDay: float + GpsFixStatusFlags: float + GpsHour: float + GpsLatitude: float + GpsLongitude: float + GpsMinute: float + GpsMonth: float + GpsSecond: float + GpsValidityFlags: float + GpsYear: float + MpuAccelerationX: float + MpuAccelerationY: float + MpuAccelerationZ: float + MpuRotationX: float + MpuRotationY: float + MpuRotationZ: float + MpuTemperature: float + def __init__(self, GpsAdditionalFlags: _Optional[float] = ..., GpsDay: _Optional[float] = ..., GpsFixStatusFlags: _Optional[float] = ..., GpsHour: _Optional[float] = ..., GpsLatitude: _Optional[float] = ..., GpsLongitude: _Optional[float] = ..., GpsMinute: _Optional[float] = ..., GpsMonth: _Optional[float] = ..., GpsSecond: _Optional[float] = ..., GpsValidityFlags: _Optional[float] = ..., GpsYear: _Optional[float] = ..., MpuAccelerationX: _Optional[float] = ..., MpuAccelerationY: _Optional[float] = ..., MpuAccelerationZ: _Optional[float] = ..., MpuRotationX: _Optional[float] = ..., MpuRotationY: _Optional[float] = ..., MpuRotationZ: _Optional[float] = ..., MpuTemperature: _Optional[float] = ...) -> None: ... + +class TelemetryData(_message.Message): + __slots__ = ("B3", "Battery", "BatteryFaults", "Contactor", "KeyMotor", "MBMS", "MPPT", "MotorDetails0", "MotorDetails1", "Pi", "ProximitySensors", "Telemetry", "TimeStamp", "Title") + B3_FIELD_NUMBER: _ClassVar[int] + BATTERY_FIELD_NUMBER: _ClassVar[int] + BATTERYFAULTS_FIELD_NUMBER: _ClassVar[int] + CONTACTOR_FIELD_NUMBER: _ClassVar[int] + KEYMOTOR_FIELD_NUMBER: _ClassVar[int] + MBMS_FIELD_NUMBER: _ClassVar[int] + MPPT_FIELD_NUMBER: _ClassVar[int] + MOTORDETAILS0_FIELD_NUMBER: _ClassVar[int] + MOTORDETAILS1_FIELD_NUMBER: _ClassVar[int] + PI_FIELD_NUMBER: _ClassVar[int] + PROXIMITYSENSORS_FIELD_NUMBER: _ClassVar[int] + TELEMETRY_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + TITLE_FIELD_NUMBER: _ClassVar[int] + B3: B3 + Battery: BatteryStatus + BatteryFaults: BatteryFaults + Contactor: ContactorStatus + KeyMotor: KeyMotor + MBMS: MBMS + MPPT: MPPT + MotorDetails0: MotorDetails + MotorDetails1: MotorDetails + Pi: Pi + ProximitySensors: ProximitySensors + Telemetry: Telemetry + TimeStamp: int + Title: str + def __init__(self, B3: _Optional[_Union[B3, _Mapping]] = ..., Battery: _Optional[_Union[BatteryStatus, _Mapping]] = ..., BatteryFaults: _Optional[_Union[BatteryFaults, _Mapping]] = ..., Contactor: _Optional[_Union[ContactorStatus, _Mapping]] = ..., KeyMotor: _Optional[_Union[KeyMotor, _Mapping]] = ..., MBMS: _Optional[_Union[MBMS, _Mapping]] = ..., MPPT: _Optional[_Union[MPPT, _Mapping]] = ..., MotorDetails0: _Optional[_Union[MotorDetails, _Mapping]] = ..., MotorDetails1: _Optional[_Union[MotorDetails, _Mapping]] = ..., Pi: _Optional[_Union[Pi, _Mapping]] = ..., ProximitySensors: _Optional[_Union[ProximitySensors, _Mapping]] = ..., Telemetry: _Optional[_Union[Telemetry, _Mapping]] = ..., TimeStamp: _Optional[int] = ..., Title: _Optional[str] = ...) -> None: ... diff --git a/protobufServer/app/app.py b/protobufServer/app/app.py new file mode 100644 index 0000000..01f54cc --- /dev/null +++ b/protobufServer/app/app.py @@ -0,0 +1,100 @@ +from fastapi import FastAPI, Request, Response +from fastapi.middleware.cors import CORSMiddleware +import HeliosPacket_pb2 as HeliosPacket +import requests + +app = FastAPI() + +origins = ["*"] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +print("Starting Protobuf FastAPI server... Listening on port 4000") + + +@app.get("/") +def send(): + return "Hello World! Navigate to localhost:8000/send and check the console!", 200 + + +@app.post("/receive") +async def receive(request: Request): + request_data = await request.body() + print(f"Raw request data: {request_data}") + + payload = HeliosPacket.TelemetryData().B3 + payload.ParseFromString(request_data) + print("/receive received:") + print(f"B3.Acceleration: {payload.Acceleration}") + print(f"B3.B3Heartbeat: {payload.B3Heartbeat}") + print(f"B3.BrakeLightSignalStatus: {payload.BrakeLightSignalStatus}") + print(f"B3.BrakeSwitchDigital: {payload.BrakeSwitchDigital}") + print( + f"B3.DaytimeRunningLightSignalStatus: {payload.DaytimeRunningLightSignalStatus}" + ) + print(f"B3.ForwardDigital: {payload.ForwardDigital}") + print(f"B3.HandbrakeSwitchDigital: {payload.HandbrakeSwitchDigital}") + print(f"B3.HazardLightsInput: {payload.HazardLightsInput}") + print(f"B3.HeadightsSwitchInput: {payload.HeadightsSwitchInput}") + print(f"B3.HeadlightSignalStatus: {payload.HeadlightSignalStatus}") + print(f"B3.HornSignalStatus: {payload.HornSignalStatus}") + print(f"B3.HornSwitchDigital: {payload.HornSwitchDigital}") + print(f"B3.LapDigital: {payload.LapDigital}") + print(f"B3.LeftSignalInput: {payload.LeftSignalInput}") + print(f"B3.LeftSignalStatus: {payload.LeftSignalStatus}") + print(f"B3.MotorResetDigital: {payload.MotorResetDigital}") + print(f"B3.NeutralDigital: {payload.NeutralDigital}") + print(f"B3.RaceModeDigital: {payload.RaceModeDigital}") + print(f"B3.RegenBraking: {payload.RegenBraking}") + print(f"B3.ReverseDigital: {payload.ReverseDigital}") + print(f"B3.RightSignalInput: {payload.RightSignalInput}") + print(f"B3.RightSignalStatus: {payload.RightSignalStatus}") + + return Response(content=request_data, media_type="application/octet-stream") + + +@app.get("/send") +def send(): + payload = HeliosPacket.B3( + Acceleration=32, + B3Heartbeat=False, + BrakeLightSignalStatus=False, + BrakeSwitchDigital=True, + DaytimeRunningLightSignalStatus=True, + ForwardDigital=False, + HandbrakeSwitchDigital=True, + HazardLightsInput=False, + HeadightsSwitchInput=False, + HeadlightSignalStatus=True, + HornSignalStatus=True, + HornSwitchDigital=False, + LapDigital=True, + LeftSignalInput=False, + LeftSignalStatus=False, + MotorResetDigital=False, + NeutralDigital=True, + RaceModeDigital=False, + RegenBraking=64, + ReverseDigital=True, + RightSignalInput=True, + RightSignalStatus=False, + ) + + # Encode the Protobuf message + data = payload.SerializeToString() + response = requests.post("http://localhost:8000/receive", data=data) + payload.ParseFromString(response.content) + print("/send reponse:") + print(f"Sending Payload: {payload}") + + return "Sent the Protobuf message", 200 + + +if __name__ == "__main__": + app.run(port=4000) diff --git a/protobufServer/docker-compose.yml b/protobufServer/docker-compose.yml new file mode 100644 index 0000000..0134397 --- /dev/null +++ b/protobufServer/docker-compose.yml @@ -0,0 +1,9 @@ +services: + protobuf-server: + build: + context: . + image: protobuf-server + ports: + - "8000:8000" + stdin_open: true # Allows you to run the container in interactive mode (-it) + tty: true # Allocate a pseudo-TTY for the container diff --git a/protobufServer/requirements.txt b/protobufServer/requirements.txt new file mode 100644 index 0000000..54a64ab --- /dev/null +++ b/protobufServer/requirements.txt @@ -0,0 +1,4 @@ +uvicorn==0.32.0 +fastapi==0.115.3 +protobuf==5.28.3 +requests==2.32.3 \ No newline at end of file diff --git a/app/scripts/generateCSV.py b/scripts/generateCSV.py similarity index 100% rename from app/scripts/generateCSV.py rename to scripts/generateCSV.py diff --git a/app/scripts/generateFeather.py b/scripts/generateFeather.py similarity index 100% rename from app/scripts/generateFeather.py rename to scripts/generateFeather.py diff --git a/app/scripts/pathnames.py b/scripts/pathnames.py similarity index 100% rename from app/scripts/pathnames.py rename to scripts/pathnames.py diff --git a/app/scripts/setup.py b/scripts/setup.py similarity index 100% rename from app/scripts/setup.py rename to scripts/setup.py