Skip to content

Commit f7e73c8

Browse files
authored
Merge pull request #4 from c-jimenez/fix/clock_aligned_data_interval
[metervalues] Added listener to ClockAlignedDataInterval key to reconfigure timer on key value update
2 parents 737daf9 + a337d92 commit f7e73c8

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

src/chargepoint/ChargePoint.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ bool ChargePoint::start()
238238
m_connectors,
239239
*m_msg_sender,
240240
*m_status_manager,
241-
*m_trigger_manager);
241+
*m_trigger_manager,
242+
*m_config_manager);
242243
m_smart_charging_manager = std::make_unique<SmartChargingManager>(
243244
m_stack_config, m_ocpp_config, m_database, m_timer_pool, m_worker_pool, m_connectors, m_messages_converter, *m_msg_dispatcher);
244245
m_transaction_manager = std::make_unique<TransactionManager>(m_ocpp_config,

src/chargepoint/metervalues/MeterValuesManager.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ MeterValuesManager::MeterValuesManager(ocpp::config::IOcppConfig& ocp
4646
Connectors& connectors,
4747
ocpp::messages::GenericMessageSender& msg_sender,
4848
IStatusManager& status_manager,
49-
ITriggerMessageManager& trigger_manager)
49+
ITriggerMessageManager& trigger_manager,
50+
IConfigManager& config_manager)
5051
: m_ocpp_config(ocpp_config),
5152
m_database(database),
5253
m_events_handler(events_handler),
@@ -66,6 +67,9 @@ MeterValuesManager::MeterValuesManager(ocpp::config::IOcppConfig& ocp
6667
trigger_manager.registerHandler(MessageTrigger::MeterValues, *this);
6768
m_clock_aligned_timer.setCallback(std::bind(&MeterValuesManager::processClockAligned, this));
6869

70+
// Register configuration change handler
71+
config_manager.registerConfigChangedListener("ClockAlignedDataInterval", *this);
72+
6973
// Start clock aligned and sample timers
7074
configureClockAlignedTimer();
7175
for (const Connector* connector : m_connectors.getConnectors())
@@ -194,6 +198,28 @@ bool MeterValuesManager::onTriggerMessage(ocpp::types::MessageTrigger message, u
194198
return ret;
195199
}
196200

201+
/** @copydoc void IConfigChangedListener::configurationValueChanged(const std::string&) */
202+
void MeterValuesManager::configurationValueChanged(const std::string& key)
203+
{
204+
// No need to check key, only ClockAlignedDataInterval is monitored
205+
(void)key;
206+
207+
// Check new value
208+
std::chrono::seconds interval = m_ocpp_config.clockAlignedDataInterval();
209+
if (interval == std::chrono::seconds(0))
210+
{
211+
// Disable clock aligned values
212+
m_clock_aligned_timer.stop();
213+
214+
LOG_INFO << "Clock aligned meter values disabled";
215+
}
216+
else
217+
{
218+
// Reconfigure clock aligned timer
219+
configureClockAlignedTimer();
220+
}
221+
}
222+
197223
/** @brief Configure clock-aligned timer */
198224
void MeterValuesManager::configureClockAlignedTimer(void)
199225
{
@@ -204,6 +230,8 @@ void MeterValuesManager::configureClockAlignedTimer(void)
204230
std::chrono::seconds interval = m_ocpp_config.clockAlignedDataInterval();
205231
if (interval >= std::chrono::seconds(0))
206232
{
233+
LOG_INFO << "Configure clock aligned meter values : interval in seconds = " << interval.count();
234+
207235
// Compute next due date
208236
time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
209237
struct tm aligned_time_tm;

src/chargepoint/metervalues/MeterValuesManager.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ along with OpenOCPP. If not, see <http://www.gnu.org/licenses/>.
2121

2222
#include "Database.h"
2323
#include "Enums.h"
24+
#include "IConfigManager.h"
2425
#include "IMeterValuesManager.h"
2526
#include "ITriggerMessageManager.h"
2627
#include "Timer.h"
@@ -50,7 +51,9 @@ class IChargePointEventsHandler;
5051
class IStatusManager;
5152

5253
/** @brief Handle charge point meter values requests */
53-
class MeterValuesManager : public IMeterValuesManager, public ITriggerMessageManager::ITriggerMessageHandler
54+
class MeterValuesManager : public IMeterValuesManager,
55+
public ITriggerMessageManager::ITriggerMessageHandler,
56+
public IConfigManager::IConfigChangedListener
5457
{
5558
public:
5659
/** @brief Constructor */
@@ -62,7 +65,8 @@ class MeterValuesManager : public IMeterValuesManager, public ITriggerMessageMan
6265
Connectors& connectors,
6366
ocpp::messages::GenericMessageSender& msg_sender,
6467
IStatusManager& status_manager,
65-
ITriggerMessageManager& trigger_manager);
68+
ITriggerMessageManager& trigger_manager,
69+
IConfigManager& config_manager);
6670

6771
/** @brief Destructor */
6872
virtual ~MeterValuesManager();
@@ -89,6 +93,11 @@ class MeterValuesManager : public IMeterValuesManager, public ITriggerMessageMan
8993
/** @copydoc bool ITriggerMessageManager::ITriggerMessageHandler::onTriggerMessage(ocpp::types::MessageTrigger message, unsigned int) */
9094
bool onTriggerMessage(ocpp::types::MessageTrigger message, unsigned int connector_id) override;
9195

96+
// IConfigChangedListener interface
97+
98+
/** @copydoc void IConfigChangedListener::configurationValueChanged(const std::string&) */
99+
void configurationValueChanged(const std::string& key) override;
100+
92101
private:
93102
/** @brief Standard OCPP configuration */
94103
ocpp::config::IOcppConfig& m_ocpp_config;

0 commit comments

Comments
 (0)