From 2647ee4b2541b068c9593d62a9874633da701e09 Mon Sep 17 00:00:00 2001 From: barsnick Date: Mon, 23 Sep 2024 12:56:25 +0200 Subject: [PATCH] ChargePoint: add support for SecurityEventNotification `FirmwareUpdated` after reboot (#747) * ChargePoint: add support for SecurityEventNotification `FirmwareUpdated` after reboot It was being reported as ResetOrReboot. This addition is to fulfil requirement L01.FR.31 when the firmware requires a reboot after installation. The case without reboot is handled in on_firmware_update_status_notification(). Signed-off-by: Moritz Barsnick * ChargePoint: refactor Add a re-usable string for the firmware version. Signed-off-by: Moritz Barsnick --------- Signed-off-by: Moritz Barsnick --- lib/ocpp/v201/charge_point.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/ocpp/v201/charge_point.cpp b/lib/ocpp/v201/charge_point.cpp index ffa7d6b60..3467b92f3 100644 --- a/lib/ocpp/v201/charge_point.cpp +++ b/lib/ocpp/v201/charge_point.cpp @@ -213,6 +213,9 @@ void ChargePoint::start(BootReasonEnum bootreason) { this->load_charging_profiles(); this->connectivity_manager->start(); + const std::string firmware_version = + this->device_model->get_value(ControllerComponentVariables::FirmwareVersion); + if (this->bootreason == BootReasonEnum::RemoteReset) { this->security_event_notification_req( CiString<50>(ocpp::security_events::RESET_OR_REBOOT), @@ -222,15 +225,16 @@ void ChargePoint::start(BootReasonEnum bootreason) { CiString<50>(ocpp::security_events::RESET_OR_REBOOT), std::optional>("Charging Station rebooted due to a scheduled reset!"), true, true); } else if (this->bootreason == BootReasonEnum::PowerUp) { - std::string startup_message = "Charging Station powered up! Firmware version: "; - startup_message.append( - this->device_model->get_value(ControllerComponentVariables::FirmwareVersion)); + std::string startup_message = "Charging Station powered up! Firmware version: " + firmware_version; this->security_event_notification_req(CiString<50>(ocpp::security_events::STARTUP_OF_THE_DEVICE), std::optional>(startup_message), true, true); + } else if (this->bootreason == BootReasonEnum::FirmwareUpdate) { + std::string startup_message = + "Charging station reboot after firmware update. Firmware version: " + firmware_version; + this->security_event_notification_req(CiString<50>(ocpp::security_events::FIRMWARE_UPDATED), + std::optional>(startup_message), true, true); } else { - std::string startup_message = "Charging station reset or reboot. Firmware version: "; - startup_message.append( - this->device_model->get_value(ControllerComponentVariables::FirmwareVersion)); + std::string startup_message = "Charging station reset or reboot. Firmware version: " + firmware_version; this->security_event_notification_req(CiString<50>(ocpp::security_events::RESET_OR_REBOOT), std::optional>(startup_message), true, true); }