Skip to content

[Question] AlignedDataSendDuringIdle and J01.FR.19 #1162

@Wolfy7

Description

@Wolfy7

I'm trying to understand the correct implementation of the AlignedDataSendDuringIdle configuration variable in relation to the OCPP 2.0.1 specification requirements J01.FR.19 and J01.FR.20.

Current Implementation

The codebase contains a comment referencing J01.FR.20 in meter_values.cpp:34:

// J01.FR.20 if AlignedDataSendDuringIdle is true and any transaction is active, 
// don't send clock aligned meter values
if (this->context.device_model
        .get_optional_value<bool>(ControllerComponentVariables::AlignedDataSendDuringIdle)
        .value_or(false)) {
    for (auto const& evse : this->context.evse_manager) {
        if (evse.has_active_transaction()) {
            return; // Don't send ANY clock-aligned meter values
        }
    }
}

This implementation checks the global AlignedDataSendDuringIdle variable and stops sending clock-aligned meter values for all EVSEs if any transaction is active on any EVSE.

Specification Details

According to the OCPP 2.0.1 specification, AlignedDataSendDuringIdle has:

Image

Questions

  1. Which requirement applies?
  • Is J01.FR.19 or J01.FR.20 the correct requirement for this behavior?
  • What is the difference between these two requirements?
  1. Current behavior vs. specification:
  • The current implementation uses only the global variable (no EVSE-specific lookup)
  • It stops sending meter values for all EVSEs when any transaction is active
  • Is this the intended "global fallback" behavior when no EVSE-specific value is configured?
  1. EVSE-specific implementation:
  • Should the implementation check for EVSE-specific AlignedDataSendDuringIdle values?

Could you help clarify:

  • The correct interpretation of J01.FR.19 and J01.FR.20

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions