Skip to content

Commit d2818bf

Browse files
MarzellTcorneliusclaussen
authored andcommitted
Adds yeti simulator
Signed-off-by: MarzellT <tobias.marzell@pionix.de>
1 parent ab906c7 commit d2818bf

40 files changed

+2468
-21
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
/modules/simulation/ @SebaLukas @pietfried @hikinggrass
3636
/modules/SlacSimulator/ @SebaLukas @pietfried @corneliusclaussen @MarzellT
3737
/modules/rust_examples/ @SirVer @golovasteek @dorezyuk
38+
/modules/YetiSimulator/ @SebaLukas @pietfried @corneliusclaussen @MarzellT
3839
**/Cargo.toml @SirVer @golovasteek @dorezyuk
3940
**/Cargo.lock @SirVer @golovasteek @dorezyuk
4041

config/config-sil-dc-sae-v2g.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ active_modules:
4949
powersupply_dc:
5050
module: DCSupplySimulator
5151
yeti_driver:
52-
module: JsYetiSimulator
52+
module: YetiSimulator
5353
config_module:
5454
connector_id: 1
5555
slac:

config/config-sil-dc-sae-v2h.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ active_modules:
4949
powersupply_dc:
5050
module: DCSupplySimulator
5151
yeti_driver:
52-
module: JsYetiSimulator
52+
module: YetiSimulator
5353
config_module:
5454
connector_id: 1
5555
slac:

config/config-sil-dc-tls.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ active_modules:
5050
powersupply_dc:
5151
module: DCSupplySimulator
5252
yeti_driver:
53-
module: JsYetiSimulator
53+
module: YetiSimulator
5454
config_module:
5555
connector_id: 1
5656
slac:

config/config-sil-dc.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ active_modules:
4747
powersupply_dc:
4848
module: DCSupplySimulator
4949
yeti_driver:
50-
module: JsYetiSimulator
50+
module: YetiSimulator
5151
config_module:
5252
connector_id: 1
5353
slac:

config/config-sil-energy-management.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ active_modules:
6060
- module_id: yeti_driver_2
6161
implementation_id: powermeter
6262
yeti_driver_1:
63-
module: JsYetiSimulator
63+
module: YetiSimulator
6464
config_module:
6565
connector_id: 1
6666
yeti_driver_2:
67-
module: JsYetiSimulator
67+
module: YetiSimulator
6868
config_module:
6969
connector_id: 2
7070
slac:

config/config-sil-ocpp-custom-extension.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,12 @@ active_modules:
6464
- module_id: iso15118_charger
6565
implementation_id: charger
6666
yeti_driver_1:
67-
module: JsYetiSimulator
67+
module: YetiSimulator
6868
evse: 1
6969
config_module:
7070
connector_id: 1
7171
yeti_driver_2:
72-
module: JsYetiSimulator
72+
module: YetiSimulator
7373
evse: 2
7474
config_module:
7575
connector_id: 2

config/config-sil-ocpp-pnc.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ active_modules:
6767
- module_id: iso15118_charger
6868
implementation_id: charger
6969
yeti_driver_1:
70-
module: JsYetiSimulator
70+
module: YetiSimulator
7171
evse: 1
7272
config_module:
7373
connector_id: 1
7474
yeti_driver_2:
75-
module: JsYetiSimulator
75+
module: YetiSimulator
7676
evse: 2
7777
config_module:
7878
connector_id: 2

config/config-sil-ocpp.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,12 @@ active_modules:
7474
implementation_id: charger
7575
yeti_driver_1:
7676
evse: 1
77-
module: JsYetiSimulator
77+
module: YetiSimulator
7878
config_module:
7979
connector_id: 1
8080
yeti_driver_2:
8181
evse: 2
82-
module: JsYetiSimulator
82+
module: YetiSimulator
8383
config_module:
8484
connector_id: 2
8585
slac:

config/config-sil-ocpp201-pnc.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ active_modules:
6767
- module_id: iso15118_charger
6868
implementation_id: charger
6969
yeti_driver_1:
70-
module: JsYetiSimulator
70+
module: YetiSimulator
7171
evse: 1
7272
config_module:
7373
connector_id: 1
7474
yeti_driver_2:
75-
module: JsYetiSimulator
75+
module: YetiSimulator
7676
evse: 2
7777
config_module:
7878
connector_id: 2

config/config-sil-ocpp201.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ active_modules:
6666
- module_id: iso15118_charger
6767
implementation_id: charger
6868
yeti_driver_1:
69-
module: JsYetiSimulator
69+
module: YetiSimulator
7070
evse: 1
7171
config_module:
7272
connector_id: 1
7373
yeti_driver_2:
74-
module: JsYetiSimulator
74+
module: YetiSimulator
7575
evse: 2
7676
config_module:
7777
connector_id: 2

config/config-sil-two-evse-dc.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ active_modules:
6262
- module_id: yeti_driver_2
6363
implementation_id: powermeter
6464
yeti_driver_1:
65-
module: JsYetiSimulator
65+
module: YetiSimulator
6666
config_module:
6767
connector_id: 1
6868
yeti_driver_2:
69-
module: JsYetiSimulator
69+
module: YetiSimulator
7070
config_module:
7171
connector_id: 2
7272
slac_1:

config/config-sil-two-evse.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ active_modules:
5656
- module_id: yeti_driver_2
5757
implementation_id: powermeter
5858
yeti_driver_1:
59-
module: JsYetiSimulator
59+
module: YetiSimulator
6060
config_module:
6161
connector_id: 1
6262
yeti_driver_2:
63-
module: JsYetiSimulator
63+
module: YetiSimulator
6464
config_module:
6565
connector_id: 2
6666
slac:

config/config-sil.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ active_modules:
177177
config_module:
178178
connector_id: 1
179179
connections: {}
180-
module: JsYetiSimulator
180+
module: YetiSimulator
181181
telemetry:
182182
id: 1
183183
'x-module-layout':

modules/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ ev_add_module(DummyTokenValidator)
3434
ev_add_module(DummyTokenProvider)
3535
ev_add_module(DummyTokenProviderManual)
3636
ev_add_module(PhyVersoBSP)
37+
ev_add_module(YetiSimulator)
3738

3839
add_subdirectory(examples)
3940
add_subdirectory(simulation)

modules/YetiSimulator/CMakeLists.txt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#
2+
# AUTO GENERATED - MARKED REGIONS WILL BE KEPT
3+
# template version 3
4+
#
5+
6+
# module setup:
7+
# - ${MODULE_NAME}: module name
8+
ev_setup_cpp_module()
9+
10+
# ev@bcc62523-e22b-41d7-ba2f-825b493a3c97:v1
11+
# insert your custom targets and additional config variables here
12+
# ev@bcc62523-e22b-41d7-ba2f-825b493a3c97:v1
13+
14+
target_sources(${MODULE_NAME}
15+
PRIVATE
16+
"powermeter/powermeterImpl.cpp"
17+
"board_support/evse_board_supportImpl.cpp"
18+
"ev_board_support/ev_board_supportImpl.cpp"
19+
"rcd/ac_rcdImpl.cpp"
20+
"connector_lock/connector_lockImpl.cpp"
21+
)
22+
23+
# ev@c55432ab-152c-45a9-9d2e-7281d50c69c3:v1
24+
# insert other things like install cmds etc here
25+
target_sources(${MODULE_NAME}
26+
PRIVATE
27+
"util/state.cpp"
28+
"util/mqtt_handler.cpp"
29+
"util/error_handler.cpp"
30+
"util/util.cpp"
31+
)
32+
# ev@c55432ab-152c-45a9-9d2e-7281d50c69c3:v1
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// Copyright Pionix GmbH and Contributors to EVerest
3+
#include "YetiSimulator.hpp"
4+
#include "board_support/evse_board_supportImpl.hpp"
5+
#include "util/util.hpp"
6+
7+
namespace module {
8+
9+
void YetiSimulator::init() {
10+
invoke_init(*p_powermeter);
11+
invoke_init(*p_board_support);
12+
invoke_init(*p_ev_board_support);
13+
invoke_init(*p_rcd);
14+
invoke_init(*p_connector_lock);
15+
16+
clear_data();
17+
18+
mqtt_handler = std::make_unique<MqttHandler>(p_board_support.get(), p_rcd.get(), p_connector_lock.get());
19+
mqtt.subscribe("everest_external/nodered/" + std::to_string(config.connector_id) + "/carsim/error",
20+
[this](const std::string& payload) { mqtt_handler->handle_mqtt_payload(payload); });
21+
}
22+
23+
void YetiSimulator::ready() {
24+
invoke_ready(*p_powermeter);
25+
invoke_ready(*p_board_support);
26+
invoke_ready(*p_ev_board_support);
27+
invoke_ready(*p_rcd);
28+
invoke_ready(*p_connector_lock);
29+
30+
module_state->pubCnt = 0;
31+
32+
Simulator<YetiSimulator, board_support::evse_board_supportImpl>(250, this);
33+
if (info.telemetry_enabled) {
34+
std::thread(&YetiSimulator::run_telemetry_slow, this).detach();
35+
std::thread(&YetiSimulator::run_telemetry_fast, this).detach();
36+
}
37+
}
38+
39+
state::ModuleState& YetiSimulator::get_module_state() {
40+
return *module_state;
41+
}
42+
43+
evse_board_supportImplBase& YetiSimulator::get_board_support() {
44+
return *p_board_support;
45+
};
46+
47+
ev_board_supportImplBase& YetiSimulator::get_ev_board_support() {
48+
return *p_ev_board_support;
49+
}
50+
51+
ac_rcdImplBase& YetiSimulator::get_ac_rcd() {
52+
return *p_rcd;
53+
}
54+
55+
connector_lockImplBase& YetiSimulator::get_connector_lock() {
56+
return *p_connector_lock;
57+
}
58+
59+
Everest::MqttProvider& YetiSimulator::get_mqtt() {
60+
return mqtt;
61+
}
62+
const ModuleInfo& YetiSimulator::get_info() const {
63+
return info;
64+
}
65+
powermeterImplBase& YetiSimulator::get_powermeter() {
66+
return *p_powermeter;
67+
}
68+
69+
void YetiSimulator::clear_data() {
70+
module_state = std::make_unique<state::ModuleState>();
71+
}
72+
73+
void YetiSimulator::run_telemetry_slow() {
74+
const auto current_iso_time_string = util::get_current_iso_time_string();
75+
76+
auto& p_p_c_v = module_state->telemetry_data.power_path_controller_version;
77+
p_p_c_v.timestamp = current_iso_time_string;
78+
79+
telemetry.publish("livedata", "power_path_controller_version",
80+
{{"timestamp", p_p_c_v.timestamp},
81+
{"type", p_p_c_v.type},
82+
{"hardware_version", p_p_c_v.hardware_version},
83+
{"software_version", p_p_c_v.software_version},
84+
{"date_manufactured", p_p_c_v.date_manufactured},
85+
{"operating_time_h", p_p_c_v.operating_time_h},
86+
{"operating_time_warning", p_p_c_v.operating_time_h_warning},
87+
{"operating_time_error", p_p_c_v.operating_time_h_error},
88+
{"error", p_p_c_v.error}});
89+
}
90+
91+
void YetiSimulator::run_telemetry_fast() {
92+
const auto current_iso_time_string = util::get_current_iso_time_string();
93+
auto& p_p_c = module_state->telemetry_data.power_path_controller;
94+
p_p_c.timestamp = current_iso_time_string;
95+
p_p_c.cp_voltage_high = module_state->pwm_voltage_hi; // TODO: check if this is the correct value
96+
p_p_c.cp_voltage_low = module_state->pwm_voltage_lo; // TODO: same here
97+
p_p_c.cp_pwm_duty_cycle = module_state->pwm_duty_cycle * 100.0;
98+
p_p_c.cp_state = state_to_string(*module_state);
99+
100+
p_p_c.temperature_controller = module_state->powermeter_data.tempL1;
101+
p_p_c.temperature_car_connector = module_state->powermeter_data.tempL1 * 2.0;
102+
p_p_c.watchdog_reset_count = 0;
103+
p_p_c.error = false;
104+
105+
auto& p_s = module_state->telemetry_data.power_switch;
106+
p_s.timestamp = current_iso_time_string;
107+
p_s.is_on = module_state->relais_on;
108+
p_s.time_to_switch_on_ms = 110;
109+
p_s.time_to_switch_off_ms = 100;
110+
p_s.temperature_C = 20;
111+
p_s.error = false;
112+
p_s.error_over_current = false;
113+
114+
auto& rcd = module_state->telemetry_data.rcd;
115+
rcd.timestamp = current_iso_time_string;
116+
rcd.current_mA = module_state->simulation_data.rcd_current;
117+
118+
telemetry.publish("livedata", "power_path_controller",
119+
{{"timestamp", p_p_c.timestamp},
120+
{"type", p_p_c.type},
121+
{"cp_voltage_high", p_p_c.cp_voltage_high},
122+
{"cp_voltage_low", p_p_c.cp_voltage_low},
123+
{"cp_pwm_duty_cycle", p_p_c.cp_pwm_duty_cycle},
124+
{"cp_state", p_p_c.cp_state},
125+
{"pp_ohm", p_p_c.pp_ohm},
126+
{"supply_voltage_12V", p_p_c.supply_voltage_12V},
127+
{"supply_voltage_minus_12V", p_p_c.supply_voltage_minus_12V},
128+
{"temperature_controller", p_p_c.temperature_controller},
129+
{"temperature_car_connector", p_p_c.temperature_car_connector},
130+
{"watchdog_reset_count", p_p_c.watchdog_reset_count},
131+
{"error", p_p_c.error}});
132+
telemetry.publish("livedata", "power_switch",
133+
{{"timestamp", p_s.timestamp},
134+
{"type", p_s.type},
135+
{"switching_count", p_s.switching_count},
136+
{"switching_count_warning", p_s.switching_count_warning},
137+
{"switching_count_error", p_s.switching_count_error},
138+
{"is_on", p_s.is_on},
139+
{"time_to_switch_on_ms", p_s.time_to_switch_on_ms},
140+
{"time_to_switch_off_ms", p_s.time_to_switch_off_ms},
141+
{"temperature_C", p_s.temperature_C},
142+
{"error", p_s.error},
143+
{"error_over_current", p_s.error_over_current}});
144+
telemetry.publish("livedata", "rcd",
145+
{{"timestamp", rcd.timestamp},
146+
{"type", rcd.type},
147+
{"enabled", rcd.enabled},
148+
{"current_mA", rcd.current_mA},
149+
{"triggered", rcd.triggered},
150+
{"error", rcd.error}});
151+
}
152+
153+
} // namespace module

0 commit comments

Comments
 (0)