Skip to content

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.

  • You are signed in as an admin role 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.
  1. 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.

  2. 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 the idTag against 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.

  3. Dry-run the stop first. Open the Remote operations panel and pick RemoteStopTransaction. Fill in the transactionId from the previous step. Toggle Dry run on and click Submit.

    The dry run writes a row to the operation log with status dry_run and does not contact SteVe. Use it to confirm your params parse cleanly before the real call.

  4. 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 to submitted.

  5. 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.

  • The Recent operations strip on the charger page shows your RemoteStopTransaction with status submitted and, shortly after, a taskId you can correlate in SteVe.
  • The charger’s live status returns to Available (or Finishing briefly, then Available).
  • The session appears as ended in the customer’s session history with a real stoppedAt and final energy total.
  • The audit log entry on charger_operation_log records you as requestedByUserId — every operation routes through this table before SteVe is called, so there is always a record of who pressed the button.

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.

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.

POST /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.