Force-close a stuck session
A customer calls: their car has been unplugged for ten minutes but the
session is still “Charging” in the app and the meter is still ticking
on their statement. The charger never sent a StopTransaction. This
runbook walks you through ending that session from the admin console
without touching SteVe directly.
Prerequisites
Section titled “Prerequisites”- You are signed in as an
adminrole on the admin host. - You have the customer’s ChargeBox ID or enough context (account email, connector address) to find it.
- You’ve confirmed the session is actually stuck — not just slow to refresh. Check the charger’s live status panel and the most recent meter value timestamp. If meter values are still advancing, the session isn’t stuck; the car is still drawing.
- You have a way to reach the customer (chat, phone) in case the charger doesn’t acknowledge the stop and you need to escalate to a physical unlock.
Procedure
Section titled “Procedure”-
Open the charger detail page. From the admin sidebar, go to Chargers and search for the ChargeBox ID or the customer’s email. Click into the row.
Screenshot pending
Charger detail page header showing ChargeBox ID and live status
-
Confirm the active transaction. In the Current session panel, note the transaction ID, connector number, and the
idTag(OCPP tag) that started it. Cross-check theidTagagainst the customer’s EV card on their account page in another tab. If they don’t match, stop and investigate before issuing any operation — you may be looking at the wrong charger. -
Dry-run the stop first. Open the Remote operations panel and pick RemoteStopTransaction. Fill in the
transactionIdfrom the previous step. Toggle Dry run on and click Submit.The dry run writes a row to the operation log with status
dry_runand does not contact SteVe. Use it to confirm your params parse cleanly before the real call. -
Submit the real stop. Toggle Dry run off and click Submit again. The console will return an operation log ID and a SteVe
taskId, and the row’s status will move tosubmitted. -
Watch for the StopTransaction. The charger should respond within a few seconds. The Current session panel will clear and the session will appear in the customer’s recent sessions list with an end time.
Verify
Section titled “Verify”- The Recent operations strip on the charger page shows your
RemoteStopTransactionwith statussubmittedand, shortly after, ataskIdyou can correlate in SteVe. - The charger’s live status returns to
Available(orFinishingbriefly, thenAvailable). - The session appears as ended in the customer’s session history with
a real
stoppedAtand final energy total. - The audit log entry on
charger_operation_logrecords you asrequestedByUserId— every operation routes through this table before SteVe is called, so there is always a record of who pressed the button.
If something goes wrong
Section titled “If something goes wrong”The API returns 502 with status: "failed". SteVe rejected the
call or was unreachable. The operation log row is marked failed
with the error message in result. Common causes:
- Charger is offline. Confirm in the live status panel; if it’s offline, the stop cannot be delivered. Wait for it to reconnect, or ask the customer to power-cycle the unit if you’re on the phone with them.
- Stale
transactionId. The session may have already ended between your dry run and the real submit. Refresh the charger detail page.
The API returns 422 with error: "unmanaged_charger". The
charger is not in SteVe — it doesn’t speak
OCPP, so remote operations aren’t available.
Resolve the customer’s issue through billing instead.
The API returns 400 with “Operation ’…’ is not allowed.” You
tried an operation outside the allowlist. Destructive operations
(Reset, ClearCache, UpdateFirmware, SendLocalList,
ClearChargingProfile, ChangeConfiguration) are intentionally
blocked here — use the SteVe admin UI directly.
Stop accepted but session never closes. The charger has stopped
acknowledging transaction state. Try UnlockConnector for the
correct connector as a follow-up — this often nudges the firmware
into sending the missing StopTransaction. If that also fails,
escalate to a site visit; the session will need to be reconciled
manually with billing.
Audit and reversibility
Section titled “Audit and reversibility”Every call to POST /api/admin/charger/operation writes a
charger_operation_log row before SteVe is contacted, with your
user ID, the operation name, the validated params, and the dry-run
flag. The row’s status transitions through pending → submitted (or
→ failed), and the SteVe taskId is recorded on success.
/api/admin/charger/operation
GET /api/admin/charger/operation
A RemoteStopTransaction is not reversible — you cannot un-stop a
session. If you stopped the wrong session, you can immediately issue
a RemoteStartTransaction with the same idTag and connector to let
the customer resume; this will start a new transaction with a new ID,
and you’ll need to coordinate with billing to reconcile the
prematurely-closed one.