@@ -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 */
198224void 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;
0 commit comments