Skip to content

Commit a75d73a

Browse files
committed
refactored error and fault handling in everest-core by extending error type and changing error enum and refactored respective modules accordingly
Signed-off-by: pietfried <pietgoempel@gmail.com> Signed-off-by: Kai-Uwe Hermann <kai-uwe.hermann@pionix.de>
1 parent dfe28df commit a75d73a

File tree

7 files changed

+50
-24
lines changed

7 files changed

+50
-24
lines changed

dependencies.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ RISE-V2G:
3838
# OCPP
3939
libocpp:
4040
git: https://github.com/EVerest/libocpp.git
41-
git_tag: v0.8.5
41+
git_tag: v0.8.6
4242
# Josev
4343
Josev:
4444
git: https://github.com/EVerest/ext-switchev-iso15118.git

modules/API/API.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ void API::init() {
247247
&session_info](types::evse_manager::SessionEvent session_event) {
248248
auto event = types::evse_manager::session_event_enum_to_string(session_event.event);
249249
if (session_event.error) {
250-
session_info->update_state(event, types::evse_manager::error_to_string(session_event.error.value()));
250+
session_info->update_state(event, types::evse_manager::error_enum_to_string(session_event.error.value().error_code));
251251
} else {
252252
session_info->update_state(event, "");
253253
}

modules/EvseManager/Charger.cpp

+11-11
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ void Charger::runStateMachine() {
162162
} else {
163163
// unsupported charging mode, give up here.
164164
currentState = EvseState::Error;
165-
errorState = types::evse_manager::Error::Internal;
165+
errorState = types::evse_manager::ErrorEnum::Internal;
166166
}
167167

168168
if (hlc_use_5percent_current_session) {
@@ -277,7 +277,7 @@ void Charger::runStateMachine() {
277277
// unsupported charging mode, give up here.
278278
EVLOG_error << "Unsupported charging mode.";
279279
currentState = EvseState::Error;
280-
errorState = types::evse_manager::Error::Internal;
280+
errorState = types::evse_manager::ErrorEnum::Internal;
281281
}
282282
} else if (AuthorizedPnC()) {
283283

@@ -306,7 +306,7 @@ void Charger::runStateMachine() {
306306
// unsupported charging mode, give up here.
307307
EVLOG_error << "Unsupported charging mode.";
308308
currentState = EvseState::Error;
309-
errorState = types::evse_manager::Error::Internal;
309+
errorState = types::evse_manager::ErrorEnum::Internal;
310310
}
311311
}
312312

@@ -662,27 +662,27 @@ void Charger::processCPEventsIndependent(ControlPilotEvent cp_event) {
662662
break;
663663
case ControlPilotEvent::Error_E:
664664
currentState = EvseState::Error;
665-
errorState = types::evse_manager::Error::Car;
665+
errorState = types::evse_manager::ErrorEnum::Car;
666666
break;
667667
case ControlPilotEvent::Error_DF:
668668
currentState = EvseState::Error;
669-
errorState = types::evse_manager::Error::CarDiodeFault;
669+
errorState = types::evse_manager::ErrorEnum::CarDiodeFault;
670670
break;
671671
case ControlPilotEvent::Error_Relais:
672672
currentState = EvseState::Error;
673-
errorState = types::evse_manager::Error::Relais;
673+
errorState = types::evse_manager::ErrorEnum::Relais;
674674
break;
675675
case ControlPilotEvent::Error_RCD:
676676
currentState = EvseState::Error;
677-
errorState = types::evse_manager::Error::RCD;
677+
errorState = types::evse_manager::ErrorEnum::RCD;
678678
break;
679679
case ControlPilotEvent::Error_VentilationNotAvailable:
680680
currentState = EvseState::Error;
681-
errorState = types::evse_manager::Error::VentilationNotAvailable;
681+
errorState = types::evse_manager::ErrorEnum::VentilationNotAvailable;
682682
break;
683683
case ControlPilotEvent::Error_OverCurrent:
684684
currentState = EvseState::Error;
685-
errorState = types::evse_manager::Error::OverCurrent;
685+
errorState = types::evse_manager::ErrorEnum::OverCurrent;
686686
break;
687687
default:
688688
break;
@@ -1049,7 +1049,7 @@ bool Charger::DeAuthorize() {
10491049
return false;
10501050
}
10511051

1052-
types::evse_manager::Error Charger::getErrorState() {
1052+
types::evse_manager::ErrorEnum Charger::getErrorState() {
10531053
std::lock_guard<std::recursive_mutex> lock(stateMutex);
10541054
return errorState;
10551055
}
@@ -1182,7 +1182,7 @@ void Charger::checkSoftOverCurrent() {
11821182
currentDrawnByVehicle[0], currentDrawnByVehicle[1],
11831183
currentDrawnByVehicle[2], limit));
11841184
currentState = EvseState::Error;
1185-
errorState = types::evse_manager::Error::OverCurrent;
1185+
errorState = types::evse_manager::ErrorEnum::OverCurrent;
11861186
}
11871187
}
11881188

modules/EvseManager/Charger.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class Charger {
146146
sigslot::signal<> signal_DC_supply_off;
147147

148148
// Request more details about the error that happend
149-
types::evse_manager::Error getErrorState();
149+
types::evse_manager::ErrorEnum getErrorState();
150150

151151
void processEvent(types::board_support::Event event);
152152

@@ -186,7 +186,7 @@ class Charger {
186186

187187
EvseState getCurrentState();
188188
sigslot::signal<EvseState> signalState;
189-
sigslot::signal<types::evse_manager::Error> signalError;
189+
sigslot::signal<types::evse_manager::ErrorEnum> signalError;
190190
// /Deprecated
191191

192192
void inform_new_evse_max_hlc_limits(const types::iso15118_charger::DC_EVSEMaximumLimits& l);
@@ -230,7 +230,7 @@ class Charger {
230230

231231
EvseState currentState;
232232
EvseState lastState;
233-
types::evse_manager::Error errorState{types::evse_manager::Error::Internal};
233+
types::evse_manager::ErrorEnum errorState{types::evse_manager::ErrorEnum::Internal};
234234
std::chrono::system_clock::time_point currentStateStarted;
235235

236236
float ampereToDutyCycle(float ampere);

modules/EvseManager/evse/evse_managerImpl.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,9 @@ void evse_managerImpl::ready() {
224224

225225
se.transaction_finished.emplace(transaction_finished);
226226
} else if (e == types::evse_manager::SessionEventEnum::Error) {
227-
se.error = mod->charger->getErrorState();
227+
types::evse_manager::Error error;
228+
error.error_code = mod->charger->getErrorState();
229+
se.error = error;
228230
}
229231

230232
se.uuid = session_uuid;
@@ -252,11 +254,11 @@ void evse_managerImpl::ready() {
252254
static_cast<int>(s));
253255
});
254256

255-
mod->charger->signalError.connect([this](types::evse_manager::Error s) {
257+
mod->charger->signalError.connect([this](types::evse_manager::ErrorEnum s) {
256258
mod->mqtt.publish(fmt::format("everest_external/nodered/{}/state/error_type", mod->config.connector_id),
257259
static_cast<int>(s));
258260
mod->mqtt.publish(fmt::format("everest_external/nodered/{}/state/error_string", mod->config.connector_id),
259-
types::evse_manager::error_to_string(s));
261+
types::evse_manager::error_enum_to_string(s));
260262
});
261263
// /Deprecated
262264
}

modules/OCPP/OCPP.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ static ocpp::v16::ChargePointErrorCode get_ocpp_error_code(const std::string& ev
3232
return ocpp::v16::ChargePointErrorCode::EVCommunicationError;
3333
} else if (evse_error == "HLC") {
3434
return ocpp::v16::ChargePointErrorCode::EVCommunicationError;
35+
} else if (evse_error == "NoError") {
36+
return ocpp::v16::ChargePointErrorCode::NoError;
3537
} else {
3638
return ocpp::v16::ChargePointErrorCode::OtherError;
3739
}
@@ -518,9 +520,15 @@ void OCPP::init() {
518520
} else if (event == "Error") {
519521
EVLOG_debug << "Connector#" << connector << ": "
520522
<< "Received Error";
521-
const auto evse_error = types::evse_manager::error_to_string(session_event.error.value());
523+
const auto evse_error = types::evse_manager::error_enum_to_string(session_event.error.value().error_code);
522524
ocpp::v16::ChargePointErrorCode ocpp_error_code = get_ocpp_error_code(evse_error);
523525
this->charge_point->on_error(connector, ocpp_error_code);
526+
} else if (event == "AllErrorsCleared") {
527+
this->charge_point->on_fault(connector, ocpp::v16::ChargePointErrorCode::NoError);
528+
} else if (event == "PermanentFault") {
529+
const auto evse_error = types::evse_manager::error_enum_to_string(session_event.error.value().error_code);
530+
ocpp::v16::ChargePointErrorCode ocpp_error_code = get_ocpp_error_code(evse_error);
531+
this->charge_point->on_fault(connector, ocpp_error_code);
524532
} else if (event == "ReservationStart") {
525533
this->charge_point->on_reservation_start(connector);
526534
} else if (event == "ReservationEnd") {

types/evse_manager.yaml

+20-4
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ types:
101101
ChargingFinished: Charging is finished. Essentially the same as TransactionFinished, but emitted for clarity
102102
TransactionFinished: Signaled when the transaction finished. Transaction finishes at the point where one of the preconditions for charging irrevocably becomes false: When a user swipes to stop the transaction and the stop is authorized.
103103
SessionFinished: Session finishes at the point that the EVSE is available again (no cable plugged)
104-
Error: Signaled when an error occured
104+
Error: Signaled when an error occured. An error doesnt prevent further charging operations.
105105
AllErrorsCleared: Signalled when all errors are cleared
106-
PermanentFault: Signaled when there is a permanent fault at the EVSE
106+
PermanentFault: Signaled when there is a permanent fault at the EVSE. A permanent fault prevents further charging operations
107107
ReservationStart: Signaled when a reservation starts
108108
ReservationEnd: Signaled when a reservation ends
109109
ReplugStarted: Signaled when the EVSE Manager virtually replugs without interrupting the session or transaction
@@ -208,7 +208,7 @@ types:
208208
id_tag:
209209
description: Id tag that was used to stop the transaction
210210
type: string
211-
Error:
211+
ErrorEnum:
212212
description: >-
213213
Details on error type
214214
Car: Signals a car error
@@ -231,6 +231,22 @@ types:
231231
- Internal
232232
- SLAC
233233
- HLC
234+
- Other
235+
Error:
236+
description: >-
237+
Error object that contains information about the error and optional vendor error information
238+
type: object
239+
additionalProperties: false
240+
required:
241+
- error_code
242+
properties:
243+
error_code:
244+
description: The error enum
245+
type: string
246+
$ref: /evse_manager#/ErrorEnum
247+
vendor_error:
248+
description: The error code of the vendor
249+
type: string
234250
SessionEvent:
235251
description: Emits all events related to sessions
236252
type: object
@@ -266,7 +282,7 @@ types:
266282
$ref: /evse_manager#/TransactionFinished
267283
error:
268284
description: Details on error type
269-
type: string
285+
type: object
270286
$ref: /evse_manager#/Error
271287
Limits:
272288
description: Limits of this EVSE

0 commit comments

Comments
 (0)