Files
cariflex/tools/EVerest-main/modules/Simulation/YetiSimulator/util/state.hpp
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

251 lines
5.7 KiB
C++

// SPDX-License-Identifier: Apache-2.0
// Copyright Pionix GmbH and Contributors to EVerest
#pragma once
// NOLINTBEGIN: ignore things like public access or magic values
#include "nlohmann/json.hpp"
#include <string>
namespace module::state {
struct TimeStamp {
TimeStamp();
TimeStamp& operator=(const double value);
operator int64_t() const;
int64_t time_stamp;
};
struct PowermeterData {
TimeStamp time_stamp;
double import_totalWattHr = 0.0;
double export_totalWattHr = 0.0;
double wattL1 = 0.0;
double vrmsL1 = 230.0;
double irmsL1 = 0.0;
double import_wattHrL1 = 0.0;
double export_wattHrL1 = 0.0;
double tempL1 = 25.0;
double freqL1 = 50.0;
double wattL2 = 0.0;
double vrmsL2 = 230.0;
double irmsL2 = 0.0;
double import_wattHrL2 = 0.0;
double export_wattHrL2 = 0.0;
double tempL2 = 25.0;
double freqL2 = 50.0;
double wattL3 = 0.0;
double vrmsL3 = 230.0;
double irmsL3 = 0.0;
double import_wattHrL3 = 0.0;
double export_wattHrL3 = 0.0;
double tempL3 = 25.0;
double freqL3 = 50.0;
double irmsN = 0.0;
};
struct SimulationData {
double cp_voltage = 12.0;
bool diode_fail = false;
bool error_e = false;
double pp_resistor = 220.1;
double rcd_current = 0.1;
struct Currents {
double L1 = 0.0;
double L2 = 0.0;
double L3 = 0.0;
double N = 0.0;
};
Currents currents;
struct Voltages {
double L1 = 230.0;
double L2 = 230.0;
double L3 = 230.0;
};
Voltages voltages;
struct Frequencies {
double L1 = 50.0;
double L2 = 50.0;
double L3 = 50.0;
};
Frequencies frequencies;
};
struct SimdataSetting {
double cp_voltage = 12.0;
double pp_resistor = 220.1;
double impedance = 500.0;
double rcd_current = 0.1;
bool diode_fail = false;
bool error_e = false;
struct Voltages {
double L1 = 230.0;
double L2 = 230.0;
double L3 = 230.0;
};
Voltages voltages;
struct Currents {
double L1 = 0.0;
double L2 = 0.0;
double L3 = 0.0;
double N = 0.0;
};
Currents currents;
struct Frequencies {
double L1 = 50.0;
double L2 = 50.0;
double L3 = 50.0;
};
Frequencies frequencies;
};
struct WattHr {
double L1 = 0.0;
double L2 = 0.0;
double L3 = 0.0;
};
struct TelemetryData {
struct PowerPathControllerVersion {
std::string timestamp;
std::string type = "power_path_controller_version";
int hardware_version = 3;
std::string software_version = "1.01";
std::string date_manufactured = "20220304";
int64_t operating_time_h = 2330;
int64_t operating_time_h_warning = 5000;
int64_t operating_time_h_error = 6000;
bool error = false;
};
PowerPathControllerVersion power_path_controller_version;
struct PowerPathController {
std::string timestamp;
std::string type = "power_path_controller";
double cp_voltage_high = 0.0;
double cp_voltage_low = 0.0;
double cp_pwm_duty_cycle = 0.0;
std::string cp_state = "A1";
double pp_ohm = 220.1;
double supply_voltage_12V = 12.1;
double supply_voltage_minus_12V = -11.9;
double temperature_controller = 33;
double temperature_car_connector = 65;
int64_t watchdog_reset_count = 1;
bool error = false;
};
PowerPathController power_path_controller;
struct PowerSwitch {
std::string timestamp;
std::string type = "power_switch";
int64_t switching_count = 0;
int64_t switching_count_warning = 30000;
int64_t switching_count_error = 50000;
bool is_on = false;
int64_t time_to_switch_on_ms = 110;
int64_t time_to_switch_off_ms = 100;
double temperature_C = 20;
bool error = false;
bool error_over_current = false;
};
PowerSwitch power_switch;
struct Rcd {
std::string timestamp;
std::string type = "rcd";
bool enabled = true;
double current_mA = 2.5;
bool triggered = false;
bool error = false;
};
Rcd rcd;
};
enum class State {
STATE_DISABLED = 0,
STATE_A = 1,
STATE_B = 2,
STATE_C = 3,
STATE_D = 4,
STATE_E = 5,
STATE_F = 6,
Event_PowerOn = 8,
Event_PowerOff = 9,
};
struct ModuleState {
PowermeterData powermeter_data;
SimulationData simulation_data;
SimdataSetting simdata_setting;
TelemetryData telemetry_data;
int64_t pubCnt = 0;
bool power_on_allowed = false;
bool relais_on = false;
State current_state = State::STATE_DISABLED;
State last_state = State::STATE_DISABLED;
TimeStamp time_stamp;
bool use_three_phases = true;
bool simplified_mode = false;
bool has_ventilation = false;
bool rcd_error = false;
bool simulation_enabled = false;
double pwm_duty_cycle = 0;
bool pwm_running = false;
bool pwm_error_f = false;
bool last_pwm_running = false;
bool use_three_phases_confirmed = true;
double pwm_voltage_hi = 12.1;
double pwm_voltage_lo = 12.1;
std::string country_code = "DE";
int64_t last_pwm_update = 0;
WattHr export_watt_hr;
WattHr import_watt_hr;
int64_t powermeter_sim_last_time_stamp = 0L;
double ev_max_current = 0.0;
int ev_phases = 3;
bool republish_state = false;
};
std::string state_to_string(const state::ModuleState& module_state);
void to_json(nlohmann::json& json, const PowermeterData& powermeter_data);
constexpr inline auto milliseconds_in_second = 1000;
} // namespace module::state
// NOLINTEND