Skip to content
This repository was archived by the owner on Apr 27, 2026. It is now read-only.
This repository was archived by the owner on Apr 27, 2026. It is now read-only.

FirmwareStatusNotification::Installed from system interface gets dropped if sent before registered #758

@barsnick

Description

@barsnick

OCPP Version

OCPP2.0.1

Describe the bug

If the System module (or whatever implementation of the system interface) publishes its firmware_update_status right after reboot (in ready() of course), but the OCPP201 module has not yet registered with the CSMS, the FirmwareStatusNotification::Installed apparently gets dropped and never sent to the CSMS.

If the System module delays publishing this value, it properly propagates to the CSMS.

To Reproduce

Trigger a firmware update from the CSMS. Handle sending of FirmwareStatusNotification::Installed after reboot.

Anything else?

This is possibly an issue with the FirmwareStatusNotification being sent "async":

ocpp::Call<FirmwareStatusNotificationRequest> call(req, this->message_queue->createMessageId());
this->send_async<FirmwareStatusNotificationRequest>(call);

and the applied filtering in send_async():
case MessageTransmissionPriority::SendImmediately:
return this->message_queue->push_async(call);
case MessageTransmissionPriority::SendAfterRegistrationStatusAccepted:
case MessageTransmissionPriority::Discard:
auto promise = std::promise<EnhancedMessage<MessageType>>();
auto enhanced_message = EnhancedMessage<MessageType>();
enhanced_message.offline = true;
promise.set_value(enhanced_message);
return promise.get_future();

affected by get_message_transmission_priority():
if (is_transaction_related || queue_all_message) {
return MessageTransmissionPriority::SendAfterRegistrationStatusAccepted;
}
return MessageTransmissionPriority::Discard;

Possibly, a FirmwareStatusNotification should be handled with a similar priority to a transaction related message.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions