- 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
251 lines
5.7 KiB
C++
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
|