Skip to content

Commit

Permalink
Moved new notify_event functionality into diagnostics functional block
Browse files Browse the repository at this point in the history
Signed-off-by: Piet Gömpel <[email protected]>
  • Loading branch information
Pietfried committed Feb 18, 2025
1 parent b5112b8 commit 736354a
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 2 deletions.
17 changes: 17 additions & 0 deletions include/ocpp/common/incremental_counter.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright Pionix GmbH and Contributors to EVerest

#pragma once

#include <atomic>

namespace ocpp {
class IncrementalCounter {
public:
static int get();

private:
static std::atomic<unsigned int> counter;
};

} // namespace ocpp
4 changes: 4 additions & 0 deletions include/ocpp/v201/functional_blocks/diagnostics.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ class DiagnosticsInterface : public MessageHandlerInterface {

/* OCPP message requests */
virtual void notify_event_req(const std::vector<EventData>& events) = 0;
virtual void notify_event_req_connector_status_update(const int32_t evse_id, const int32_t connector_id,
const ConnectorStatusEnum status) = 0;

/* Monitoring */
virtual void stop_monitoring() = 0;
Expand All @@ -53,6 +55,8 @@ class Diagnostics : public DiagnosticsInterface {
std::optional<ClearCustomerInformationCallback> clear_customer_information_callback);
void handle_message(const ocpp::EnhancedMessage<MessageType>& message) override;
void notify_event_req(const std::vector<EventData>& events) override;
void notify_event_req_connector_status_update(const int32_t evse_id, const int32_t connector_id,
const ConnectorStatusEnum status) override;
void stop_monitoring() override;
void start_monitoring() override;
void process_triggered_monitors() override;
Expand Down
1 change: 1 addition & 0 deletions lib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ target_sources(ocpp
PRIVATE
ocpp/common/call_types.cpp
ocpp/common/charging_station_base.cpp
ocpp/common/incremental_counter.cpp
ocpp/common/ocpp_logging.cpp
ocpp/common/schemas.cpp
ocpp/common/types.cpp
Expand Down
14 changes: 14 additions & 0 deletions lib/ocpp/common/incremental_counter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// SPDX-License-Identifier: Apache-2.0
// Copyright Pionix GmbH and Contributors to EVerest

#include <ocpp/common/incremental_counter.hpp>

namespace ocpp {

std::atomic<unsigned int> IncrementalCounter::counter{0};

int IncrementalCounter::get() {
return ++counter;
}

} // namespace ocpp
10 changes: 8 additions & 2 deletions lib/ocpp/v201/charge_point.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -368,8 +368,14 @@ void ChargePoint::initialize(const std::map<int32_t, int32_t>& evse_connector_st
this->registration_status != RegistrationStatusEnum::Accepted) {
return false;
} else {
this->availability->status_notification_req(evse_id, connector_id, status,
initiated_by_trigger_message);
if (this->ocpp_version == OcppProtocolVersion::v201) {
// OCPP2.0.1: B01.FR.05
this->availability->status_notification_req(evse_id, connector_id, status,
initiated_by_trigger_message);
} else {
// OCPP2.1: B01.FR.05
this->diagnostics->notify_event_req_connector_status_update(evse_id, connector_id, status);
}
return true;
}
});
Expand Down
17 changes: 17 additions & 0 deletions lib/ocpp/v201/functional_blocks/diagnostics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include <ocpp/v201/functional_blocks/diagnostics.hpp>

#include <ocpp/common/constants.hpp>
#include <ocpp/common/incremental_counter.hpp>

#include <ocpp/v201/connectivity_manager.hpp>
#include <ocpp/v201/ctrlr_component_variables.hpp>
#include <ocpp/v201/device_model.hpp>
Expand Down Expand Up @@ -81,6 +83,21 @@ void Diagnostics::notify_event_req(const std::vector<EventData>& events) {
this->message_dispatcher.dispatch_call(call);
}

void Diagnostics::notify_event_req_connector_status_update(const int32_t evse_id, const int32_t connector_id,
const ConnectorStatusEnum status) {
ocpp::v201::EventData event_data;
const auto cv = ConnectorComponentVariables::get_component_variable(evse_id, connector_id,
ConnectorComponentVariables::AvailabilityState);
event_data.eventId = ocpp::IncrementalCounter::get();
event_data.actualValue = conversions::connector_status_enum_to_string(status);
event_data.trigger = EventTriggerEnum::Delta;
event_data.variable = cv.variable.value();
event_data.component = cv.component;
event_data.timestamp = ocpp::DateTime();
event_data.eventNotificationType = EventNotificationEnum::HardWiredNotification;
this->notify_event_req({event_data});
}

void Diagnostics::stop_monitoring() {
monitoring_updater.stop_monitoring();
}
Expand Down

0 comments on commit 736354a

Please sign in to comment.