Skip to content

Commit e58099c

Browse files
Integrate of send Triggermessage (MeterValues) in empty Connector case of present connectors or reject if non is present (#898)
* Integrate of send of present connector or reject if non is present * Refactored implementation of TriggerMessage.req handling for MeterValues if no connectorId is given --------- Signed-off-by: Matthias Suess <matthias.suess@mail.nidec.com> Signed-off-by: Piet Gömpel <pietgoempel@gmail.com> Co-authored-by: Piet Gömpel <pietgoempel@gmail.com>
1 parent 850bd79 commit e58099c

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

lib/ocpp/v16/charge_point_impl.cpp

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2429,16 +2429,29 @@ void ChargePointImpl::handleTriggerMessageRequest(ocpp::Call<TriggerMessageReque
24292429
}
24302430

24312431
auto connector = call.msg.connectorId.value_or(0);
2432-
bool valid = true;
2432+
bool trigger_message = true;
24332433
if (connector < 0 || connector > this->configuration->getNumberOfConnectors()) {
24342434
response.status = TriggerMessageStatus::Rejected;
2435-
valid = false;
2435+
trigger_message = false;
2436+
}
2437+
2438+
if (trigger_message and call.msg.requestedMessage == MessageTrigger::MeterValues) {
2439+
if (call.msg.connectorId.has_value()) {
2440+
trigger_message = this->connectors.at(call.msg.connectorId.value())->measurement.has_value();
2441+
} else {
2442+
trigger_message = std::any_of(this->connectors.begin(), this->connectors.end(), [](const auto& connector) {
2443+
return connector.second->measurement.has_value();
2444+
});
2445+
}
2446+
if (not trigger_message) {
2447+
response.status = TriggerMessageStatus::Rejected;
2448+
}
24362449
}
24372450

24382451
ocpp::CallResult<TriggerMessageResponse> call_result(response, call.uniqueId);
24392452
this->message_dispatcher->dispatch_call_result(call_result);
24402453

2441-
if (!valid) {
2454+
if (not trigger_message) {
24422455
return;
24432456
}
24442457

@@ -2456,13 +2469,24 @@ void ChargePointImpl::handleTriggerMessageRequest(ocpp::Call<TriggerMessageReque
24562469
this->heartbeat(true);
24572470
break;
24582471
case MessageTrigger::MeterValues: {
2459-
const auto meter_value = this->get_latest_meter_value(
2460-
connector, this->configuration->getMeterValuesSampledDataVector(), ReadingContext::Trigger);
2461-
if (meter_value.has_value()) {
2462-
this->send_meter_value(connector, meter_value.value(), true);
2472+
const auto send_meter_value_func = [this](const int32_t connector_id) {
2473+
auto meter_value = this->get_latest_meter_value(
2474+
connector_id, this->configuration->getMeterValuesSampledDataVector(), ReadingContext::Trigger);
2475+
if (meter_value.has_value()) {
2476+
this->send_meter_value(connector_id, meter_value.value(), true);
2477+
} else {
2478+
EVLOG_warning << "Could not send triggered meter value for uninitialized measurement at connector#"
2479+
<< connector_id;
2480+
}
2481+
};
2482+
2483+
if (!call.msg.connectorId.has_value()) {
2484+
// send a MeterValue.req for every connector
2485+
for (int32_t c = 0; c <= this->configuration->getNumberOfConnectors(); c++) {
2486+
send_meter_value_func(c);
2487+
}
24632488
} else {
2464-
EVLOG_warning << "Could not send triggered meter value for uninitialized measurement at connector#"
2465-
<< connector;
2489+
send_meter_value_func(call.msg.connectorId.value());
24662490
}
24672491
break;
24682492
}

0 commit comments

Comments
 (0)