@@ -14,12 +14,12 @@ using MicroOcpp::JsonDoc;
1414#define ENERGY_METER_TIMEOUT_MS 30 * 1000 // after waiting for 30s, send MeterValues without missing readings
1515
1616// can only be used for echo server debugging
17- MeterValues::MeterValues () : MemoryManaged(" v16.Operation." , " MeterValues" ) {
17+ MeterValues::MeterValues (Model& model ) : MemoryManaged(" v16.Operation." , " MeterValues" ), model(model ) {
1818
1919}
2020
21- MeterValues::MeterValues (Vector<std::unique_ptr<MeterValue>>&& meterValue, unsigned int connectorId, std::shared_ptr<Transaction> transaction)
22- : MemoryManaged(" v16.Operation." , " MeterValues" ), meterValue{std::move (meterValue)}, connectorId{connectorId}, transaction{transaction} {
21+ MeterValues::MeterValues (Model& model, Vector<std::unique_ptr<MeterValue>>&& meterValue, unsigned int connectorId, std::shared_ptr<Transaction> transaction)
22+ : MemoryManaged(" v16.Operation." , " MeterValues" ), model(model), meterValue{std::move (meterValue)}, connectorId{connectorId}, transaction{transaction} {
2323
2424}
2525
@@ -36,8 +36,15 @@ std::unique_ptr<JsonDoc> MeterValues::createReq() {
3636 size_t capacity = 0 ;
3737
3838 auto entries = makeVector<std::unique_ptr<JsonDoc>>(getMemoryTag ());
39- for (auto value = meterValue.begin (); value != meterValue.end (); value++) {
40- auto entry = (*value)->toJson ();
39+ for (auto mv = meterValue.begin (); mv != meterValue.end (); mv++) {
40+
41+ if ((*mv)->getTimestamp () < MIN_TIME) {
42+ MO_DBG_DEBUG (" adjust preboot MeterValue timestamp" );
43+ Timestamp adjusted = model.getClock ().adjustPrebootTimestamp ((*mv)->getTimestamp ());
44+ (*mv)->setTimestamp (adjusted);
45+ }
46+
47+ auto entry = (*mv)->toJson ();
4148 if (entry) {
4249 capacity += entry->capacity ();
4350 entries.push_back (std::move (entry));
0 commit comments