ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
device_model_storage_interface.hpp
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2020 - 2023 Pionix GmbH and Contributors to EVerest
3
4#pragma once
5
6#include <map>
7#include <memory>
8#include <ocpp/common/support_older_cpp_versions.hpp>
9#include <ocpp/v2/comparators.hpp>
10#include <optional>
11
12#include <ocpp/v2/enums.hpp>
13#include <ocpp/v2/ocpp_types.hpp>
14
15namespace ocpp {
16namespace v2 {
17
20 VariableMonitoring monitor;
21 VariableMonitorType type;
22 std::optional<std::string> reference_value;
23};
24
27 Component component;
28 Variable variable;
29 std::vector<VariableMonitoringMeta> monitors;
30};
31
34 VariableCharacteristics characteristics;
35 std::unordered_map<int64_t, VariableMonitoringMeta> monitors;
36 std::optional<std::string> source;
37};
38
39using VariableMap = std::map<Variable, VariableMetaData>;
40using DeviceModelMap = std::map<Component, VariableMap>;
41
42class DeviceModelError : public std::exception {
43public:
44 [[nodiscard]] const char* what() const noexcept override {
45 return this->reason.c_str();
46 }
47 explicit DeviceModelError(std::string msg) {
48 this->reason = std::move(msg);
49 }
50 explicit DeviceModelError(const char* msg) {
51 this->reason = std::string(msg);
52 }
53
54private:
55 std::string reason;
56};
57
62
63public:
64 virtual ~DeviceModelStorageInterface() = default;
65
69 virtual DeviceModelMap get_device_model() = 0;
70
76 virtual std::optional<VariableAttribute> get_variable_attribute(const Component& component_id,
77 const Variable& variable_id,
78 const AttributeEnum& attribute_enum) = 0;
86 virtual std::vector<VariableAttribute>
87 get_variable_attributes(const Component& component_id, const Variable& variable_id,
88 const std::optional<AttributeEnum>& attribute_enum = std::nullopt) = 0;
89
97 virtual bool set_variable_attribute_value(const Component& component_id, const Variable& variable_id,
98 const AttributeEnum& attribute_enum, const std::string& value,
99 const std::string& source) = 0;
100
104 virtual std::optional<VariableMonitoringMeta> set_monitoring_data(const SetMonitoringData& data,
105 const VariableMonitorType type) = 0;
106
112 virtual bool update_monitoring_reference(const int32_t monitor_id, const std::string& reference_value) = 0;
113
120 virtual std::vector<VariableMonitoringMeta>
121 get_monitoring_data(const std::vector<MonitoringCriterionEnum>& criteria, const Component& component_id,
122 const Variable& variable_id) = 0;
123
129 virtual ClearMonitoringStatusEnum clear_variable_monitor(int monitor_id, bool allow_protected) = 0;
130
134 virtual int32_t clear_custom_variable_monitors() = 0;
135
138 virtual void check_integrity() = 0;
139};
140
141} // namespace v2
142} // namespace ocpp
Definition: device_model_storage_interface.hpp:42
Abstract base class for device model interface. This class provides an interface for accessing and mo...
Definition: device_model_storage_interface.hpp:61
virtual int32_t clear_custom_variable_monitors()=0
Clears all custom monitors (that were added by the CSMS) from the database.
virtual std::optional< VariableAttribute > get_variable_attribute(const Component &component_id, const Variable &variable_id, const AttributeEnum &attribute_enum)=0
Gets a VariableAttribute from the storage if present.
virtual void check_integrity()=0
Check data integrity of the stored data: For "required" variables, assert values exist....
virtual std::optional< VariableMonitoringMeta > set_monitoring_data(const SetMonitoringData &data, const VariableMonitorType type)=0
Inserts or replaces a variable monitor in the database.
virtual std::vector< VariableMonitoringMeta > get_monitoring_data(const std::vector< MonitoringCriterionEnum > &criteria, const Component &component_id, const Variable &variable_id)=0
Returns all the monitors currently in the database based on the provided filtering criteria.
virtual ClearMonitoringStatusEnum clear_variable_monitor(int monitor_id, bool allow_protected)=0
Clears a single monitor based on the ID from the database.
virtual std::vector< VariableAttribute > get_variable_attributes(const Component &component_id, const Variable &variable_id, const std::optional< AttributeEnum > &attribute_enum=std::nullopt)=0
Gets a std::vector<VariableAttribute> from the storage.
virtual bool update_monitoring_reference(const int32_t monitor_id, const std::string &reference_value)=0
Updates the reference value for a monitor. The reference values is used for the delta monitors to det...
virtual bool set_variable_attribute_value(const Component &component_id, const Variable &variable_id, const AttributeEnum &attribute_enum, const std::string &value, const std::string &source)=0
Sets the value of an VariableAttribute if present.
virtual DeviceModelMap get_device_model()=0
Gets the device model from the device model interface.
Definition: ocpp_types.hpp:303
Definition: ocpp_types.hpp:852
Definition: ocpp_types.hpp:719
Helper struct that combines VariableCharacteristics and VariableMonitoring.
Definition: device_model_storage_interface.hpp:33
Helper struct that holds database only values that don't have spec coverage.
Definition: device_model_storage_interface.hpp:19
Helper struct that contains all monitors related to a variable that are of a periodic type.
Definition: device_model_storage_interface.hpp:26
Definition: ocpp_types.hpp:667
Definition: ocpp_types.hpp:319