Re-starting charging via OCPP fails

I’ve been controlling my charger for the past 1,5 years with Home Assistant via OCPP based on electricity spot prices. It has been working perfectly without any issues until I updated the firmware to 1.14.5.

Often the automation divides the charging to 2 or 3 blocks to take full advantage of cheap electricity during the night. With the new FW the first block is charged as expected. But when the automation sends the command to start the charging for the second block, the charger rejects the command. With earlier FW versions you could restart the charging as many times as you wanted without any issues.

The same behaviour can be simulated by starting and stopping the charging manually via OCPP and then trying to re-start it again. The only way to get the charger to start charging again is by reconnecting the charging cable. Below logging from Home Assistant for the communication of the manual test (Laturi is the device name):

2025-05-13 20:59:27.394 INFO (MainThread) [ocpp] Laturi: send [2,“ef1ae6b8-875f-43f5-b98c-25cf274c2a6f”,“RemoteStartTransaction”,{“idTag”:“PD42A0PCATYACTHKE48O”,“connectorId”:1}]

2025-05-13 20:59:27.732 INFO (MainThread) [ocpp] Laturi: receive message [3,“ef1ae6b8-875f-43f5-b98c-25cf274c2a6f”,{“status”:“Accepted”}]

2025-05-13 20:59:28.557 INFO (MainThread) [ocpp] Laturi: receive message [2,“8”,“StatusNotification”,{“connectorId”:1,“errorCode”:“NoError”,“status”:“SuspendedEV”,“timestamp”:“2025-05-13T17:59:27Z”}]

2025-05-13 20:59:28.582 INFO (MainThread) [ocpp] Laturi: send [3,“8”,{}]

2025-05-13 20:59:29.451 INFO (MainThread) [ocpp] Laturi: receive message [2,“9”,“StartTransaction”,{“connectorId”:1,“idTag”:“PD42A0PCATYACTHKE48O”,“meterStart”:7513830,“timestamp”:“2025-05-13T17:59:28Z”}]

2025-05-13 20:59:29.473 INFO (MainThread) [ocpp] Laturi: send [3,“9”,{“transactionId”:1747159169,“idTagInfo”:{“status”:“Accepted”}}]

2025-05-13 20:59:30.614 INFO (MainThread) [ocpp] Laturi: receive message [2,“10”,“StatusNotification”,{“connectorId”:1,“errorCode”:“NoError”,“status”:“Charging”,“timestamp”:“2025-05-13T17:59:29Z”}]

2025-05-13 20:59:30.638 INFO (MainThread) [ocpp] Laturi: send [3,“10”,{}]

2025-05-13 20:59:34.076 INFO (MainThread) [ocpp] Laturi: receive message [2,“11”,“MeterValues”,{“connectorId”:1,“transactionId”:1747159169,“meterValue”:[{“timestamp”:“2025-05-13T17:59:33Z”,“sampledValue”:[{“value”:“0.4”,“context”:“Sample.Periodic”,“measurand”:“Current.Import”,“phase”:“L1”,“location”:“Outlet”,“unit”:“A”},{“value”:“0.4”,“context”:“Sample.Periodic”,“measurand”:“Current.Import”,“phase”:“L2”,“location”:“Outlet”,“unit”:“A”},{“value”:“0.4”,“context”:“Sample.Periodic”,“measurand”:“Current.Import”,“phase”:“L3”,“location”:“Outlet”,“unit”:“A”},{“value”:“11”,“context”:“Sample.Periodic”,“measurand”:“Current.Offered”,“unit”:“A”},{“value”:“7513830”,“context”:“Sample.Periodic”,“measurand”:“Energy.Active.Import.Register”,“location”:“Outlet”,“unit”:“Wh”},{“value”:“327”,“context”:“Sample.Periodic”,“measurand”:“Power.Active.Import”,“location”:“Outlet”,“unit”:“W”},{“value”:“33.4”,“context”:“Sample.Periodic”,“measurand”:“Temperature”,“location”:“Body”,“unit”:“Celsius”},{“value”:“238”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“L1”,“location”:“Outlet”,“unit”:“V”},{“value”:“238”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“L2”,“location”:“Outlet”,“unit”:“V”},{“value”:“238”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“L3”,“location”:“Outlet”,“unit”:“V”},{“value”:“0”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“N”,“location”:“Outlet”,“unit”:“V”}]}]}]

2025-05-13 20:59:34.110 INFO (MainThread) [ocpp] Laturi: send [3,“11”,{}]

2025-05-13 21:00:35.124 INFO (MainThread) [ocpp] Laturi: receive message [2,“12”,“MeterValues”,{“connectorId”:1,“transactionId”:1747159169,“meterValue”:[{“timestamp”:“2025-05-13T18:00:34Z”,“sampledValue”:[{“value”:“10.1”,“context”:“Sample.Periodic”,“measurand”:“Current.Import”,“phase”:“L1”,“location”:“Outlet”,“unit”:“A”},{“value”:“10.4”,“context”:“Sample.Periodic”,“measurand”:“Current.Import”,“phase”:“L2”,“location”:“Outlet”,“unit”:“A”},{“value”:“10.2”,“context”:“Sample.Periodic”,“measurand”:“Current.Import”,“phase”:“L3”,“location”:“Outlet”,“unit”:“A”},{“value”:“11”,“context”:“Sample.Periodic”,“measurand”:“Current.Offered”,“unit”:“A”},{“value”:“7513960”,“context”:“Sample.Periodic”,“measurand”:“Energy.Active.Import.Register”,“location”:“Outlet”,“unit”:“Wh”},{“value”:“7256”,“context”:“Sample.Periodic”,“measurand”:“Power.Active.Import”,“location”:“Outlet”,“unit”:“W”},{“value”:“33.4”,“context”:“Sample.Periodic”,“measurand”:“Temperature”,“location”:“Body”,“unit”:“Celsius”},{“value”:“235”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“L1”,“location”:“Outlet”,“unit”:“V”},{“value”:“236”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“L2”,“location”:“Outlet”,“unit”:“V”},{“value”:“239”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“L3”,“location”:“Outlet”,“unit”:“V”},{“value”:“0”,“context”:“Sample.Periodic”,“measurand”:“Voltage”,“phase”:“N”,“location”:“Outlet”,“unit”:“V”}]}]}]

2025-05-13 21:00:35.149 INFO (MainThread) [ocpp] Laturi: send [3,“12”,{}]

2025-05-13 21:00:46.995 INFO (MainThread) [ocpp] Laturi: send [2,“e18f6a0e-2475-49ee-b25e-799028a28379”,“RemoteStopTransaction”,{“transactionId”:1747159169}]

2025-05-13 21:00:47.480 INFO (MainThread) [ocpp] Laturi: receive message [3,“e18f6a0e-2475-49ee-b25e-799028a28379”,{“status”:“Accepted”}]

2025-05-13 21:00:47.911 INFO (MainThread) [ocpp] Laturi: receive message [2,“13”,“StopTransaction”,{“transactionId”:1747159169,“meterStop”:7513980,“reason”:“Remote”,“timestamp”:“2025-05-13T18:00:47Z”}]

2025-05-13 21:00:47.931 INFO (MainThread) [ocpp] Laturi: send [3,“13”,{“idTagInfo”:{“status”:“Accepted”}}]

2025-05-13 21:00:49.133 INFO (MainThread) [ocpp] Laturi: receive message [2,“14”,“StatusNotification”,{“connectorId”:1,“errorCode”:“NoError”,“status”:“Finishing”,“timestamp”:“2025-05-13T18:00:47Z”}]

2025-05-13 21:00:49.154 INFO (MainThread) [ocpp] Laturi: send [3,“14”,{}]

2025-05-13 21:01:24.501 INFO (MainThread) [ocpp] Laturi: send [2,“bac3b291-a2bd-48df-8874-c37108d41fe5”,“RemoteStartTransaction”,{“idTag”:“PD42A0PCATYACTHKE48O”,“connectorId”:1}]

2025-05-13 21:01:24.995 INFO (MainThread) [ocpp] Laturi: receive message [3,“bac3b291-a2bd-48df-8874-c37108d41fe5”,{“status”:“Rejected”}]

2025-05-13 21:01:24.998 WARNING (MainThread) [custom_components.ocpp] Failed with response: Rejected

Is this expected behaviour or could it be rectified somehow? Of course I could downgrade the FW but then I miss the other improvements such as turning off the LED’s in idle mode (big thx for this feature!).

Good Morning,

We had to change it to be compatible with OCPP standard.

After RemoteStopTransaction.req charger is in Finishing state.
From Finishing state it is not allowed to start charging using IdTag. This behavior is defined by OCPP standard.

We are investigating how to override that situation

Br

Thanks for the quick reply! This explains it.

As a workaround I tested last a night a solution which worked. When the charger goes to Finishing state the automation sends a reset command to the charger. This way the charger goes back to Preparing state and accepts start request. I added a 5 sec delay between Finish state and reset in case the charger would still have some internal processes ongoing immediately after the state change. It’s not an ideal solution, but it works.

Good Morning,

RnD reviewed OCPP standard documentation and came to a conclusion that it is compliant to allow start new transaction in Finishing state with RemoteStartTransaction request.

We just released Hotfix for your issue

Br

Thanks for the hotfix. I´ve been testing the new FW and it works like a charm.