Powermeter OCMF Handling

This document explains how EVerest modules implementing the powermeter interface shall handle OCMF report generation and transmission when used in conjunction with the EvseManager module.

The following sequence diagrams illustrate the interactions between the involved modules during the start and stop of a transaction, including error handling scenarios:

Start of a transaction

        sequenceDiagram
autonumber
participant Powermeter
participant EvseManager
participant OCPP
participant CSMS

title Start of a Transaction

Note over EvseManager: User plugs in EV and authorizes

EvseManager->>OCPP: Event(SessionStarted)

OCPP->>CSMS: StatusNotification.req(Preparing)
CSMS-->>OCPP: StatusNotification.conf

alt successful case
    EvseManager->>Powermeter: startTransaction
    Powermeter-->>EvseManager: startTransaction Response (OK/ID)

    EvseManager->>OCPP: Event(TransactionStarted)
    OCPP->>CSMS: StartTransaction.req
    CSMS-->>OCPP: StartTransaction.conf

    Note over EvseManager: Transaction started successfully

else startTransaction failing due to power loss
    EvseManager->>Powermeter: startTransaction
    Powermeter-->>EvseManager: startTransaction Response (FAIL)

    EvseManager->>OCPP: Event(Deauthorized)

    OCPP->>CSMS: StatusNotification.req(Finishing)
    CSMS-->>OCPP: StatusNotification.conf

    EvseManager->>OCPP: raiseError (PowermeterTransactionStartFailed)
    OCPP->>CSMS: StatusNotification.req(Finishing, PowermeterTransactionStartFailed)
    CSMS-->>OCPP: StatusNotification.conf

    Note over EvseManager: Transaction did not start
end

alt EvseManager configured to become inoperative in case of Powermeter CommunicationError
    Powermeter->>EvseManager: raise_error(CommunicationError)
    Note over Powermeter,EvseManager: Powermeter raises a CommunicationError <br/>and EvseManager is registered for notification
    EvseManager->>OCPP: raise_error (Inoperative)
    OCPP->>CSMS: StatusNotification.req(Faulted)
    CSMS-->>OCPP: StatusNotification.conf
end
    

Stopping Transaction in Error

        sequenceDiagram
autonumber
participant Powermeter
participant EvseManager
participant OCPP
participant CSMS

title Stopping Transaction in Error

Note over Powermeter, CSMS: Transaction is running

Powermeter->>Powermeter: detects a <br/> CommunicationError
Note over Powermeter,EvseManager: Powermeter raises a CommunicationError <br/>and EvseManager is registered for notification
Powermeter->>EvseManager: raise_error (CommunicationFault)
Powermeter->>OCPP: raise_error (CommunicationFault)

OCPP->>CSMS: StatusNotification.req(Charging, CommunicationFault)
CSMS-->>OCPP: StatusNotification.conf

alt EvseManager configured to become inoperative in case of PowermeterCommError
    EvseManager->>EvseManager: Pause charging
    EvseManager->>OCPP: raiseError (Inoperative)
    OCPP->>CSMS: StatusNotification.req(Faulted)
    Note over EvseManager: Note that we would just continue charging otherwise
end

Note over Powermeter, CSMS: User stops the transaction

alt successful case (Powermeter has no CommunicationError)
    EvseManager->>Powermeter: stopTransaction (ID)
    Powermeter-->>EvseManager: stopTransaction Response (OK/OCMF)
    EvseManager->>OCPP: Event(TransactionFinished(OCMF))

    OCPP->>CSMS: StopTransaction.req(OCMF)
    CSMS-->>OCPP: StopTransaction.conf
else stopTransaction failing due to subsequent power loss (this applies as well when Powermeter still in CommunicationError)
    EvseManager->>Powermeter: stopTransaction (ID)
    Powermeter->>EvseManager: stopTransaction Response (FAIL)
    EvseManager->>OCPP: Event(TransactionFinished)

    Note right of OCPP: In this case we can't stop the transaction including the OCMF
    OCPP->>CSMS: StopTransaction.req()
    CSMS-->>OCPP: StopTransaction.conf
end
    

Start of Powermeter or recovery after communication loss

        sequenceDiagram
autonumber
participant Powermeter
participant EvseManager

title Start of Powermeter or recovery after communication loss

Note over Powermeter: Device communication (re)established

Powermeter->>Powermeter: Request status from device
Powermeter->>Powermeter: Detects a running transaction
Powermeter->>Powermeter: Mark need_to_stop_transaction to true

alt Next command is startTransaction
    EvseManager->>Powermeter: startTransaction
    Powermeter-->>Powermeter: stopTransaction
    Note over Powermeter: internal triggered stopTransaction will not send <br>a response to EvseManager since no stopTransaction was issued
    Powermeter->>Powermeter: Mark need_to_stop_transaction to false
    Powermeter-->>EvseManager: startTransaction Response (OK/ID)
    Powermeter->>Powermeter: Mark need_to_stop_transaction to true

    Note over EvseManager: Transaction started successfully

else Next command is stopTransaction
    EvseManager->>Powermeter: stopTransaction
    Powermeter-->>EvseManager: stopTransaction Response (OK/OCMF)
    Powermeter->>Powermeter: Mark need_to_stop_transaction to false
end

Note over Powermeter: In case of CommunicationError during start/stop<br> transaction please check the start/stop transaction diagrams

**Authors**: Florin Mihut, Piet Gömpel