Favicon Now Shows Up Correctly in Browser Tabs and Search Results
- Fixed: the site icon was embedded directly in the page instead of served as a real file, so it never appeared in Google search results (a generic globe icon showed instead) and could be unreliable in some browsers.
- The icon is now served from a stable address (simit.ddosoft.com/favicon.ico) across every page, including the dashboard, docs, and admin area.
Stations Reconnecting After a CSMS Rejection Now Scatter Instead of Syncing Up
- When a CSMS rejects a station repeatedly (rate limiting, or a wrong credential/URL), SimIt slows the retry rate down progressively — this part is unchanged, and a station never stops retrying.
- The maximum wait between attempts is now one minute, down from five.
- Fixed: once a station's wait reached the ceiling, every station in the same situation waited the exact same amount, every time — no variation. If you had many stations hit the same rejection together, they stayed locked in step, all retrying at the same instant indefinitely.
- Stations at the ceiling now wait a random amount between roughly 30 and 60 seconds on every attempt, so a large batch of simultaneously-rejected stations spreads its reconnect attempts out instead of hitting your CSMS all at once, over and over.
Fixed SoC Showing 0% at Session Start
- The very first meter reading of a session (sent the instant a transaction starts) now correctly reports the EV's configured starting battery level instead of always showing 0%.
Instant Start/Stop Meter Readings for Every Session
- OCPP 1.6 stations now report a meter reading (including SoC) at the exact moment a session stops, out of the box — no CSMS configuration needed. Previously the last reading a CSMS saw was whatever the periodic interval happened to catch, which could be stale by minutes.
- OCPP 2.0.1 stations now include a meter reading (energy, power, SoC) with every transaction start and stop event, not just periodic updates during the session.
Simplified High-Volume Plans Into One Enterprise Tier
- Scale+ and Performance are now a single "Enterprise" plan for 500+ chargepoints — reach out and we'll size a plan to your volume.
Updated Team and Load Plan Pricing
- Team is now $199/mo and Load is now $649/mo, reflecting the value of the concurrent simulator capacity included in each plan.
- Free and Dev pricing are unchanged.
Clearer Pricing — A Recommended Plan, Annual Savings, and a Way to Reach Us on Every Tier
- The Team plan is now marked as our recommended starting point for small teams.
- Every plan now has a clear next step: sign up instantly on Free, or reach out directly on any paid tier — previously only the free-trial offer had one.
- Dev, Team, and Load now show an annual price alongside the monthly one, saving about two months a year.
- Scale+ and Performance are now "Contact us" plans, so we can tailor pricing to your volume instead of a fixed number.
Support Tickets Now Send Email Notifications
- When you open a ticket or reply to one, our support team now gets an email right away instead of relying on someone noticing it in the admin panel.
- When support replies to your ticket, you now get an email too — no need to keep the dashboard open to know someone answered.
Support Ticket Messages Now Show When They Were Sent
- Every message in a support ticket thread — yours and ours — now shows the date and time it was sent, on both the dashboard ticket view and the support team's side.
The API Docs Now Open On The Version You Can Actually Call
- The API reference was opening on the v2 tab, but v2 is still in beta and is not published on the public API — so every example on that tab returned 404 to anyone who copied it. The docs now open on v1, which is the version to build against today.
- The v2 tab is still there and still marked Beta, now with a note explaining that those paths are not reachable from outside yet.
- The
?probe=1 connection check added in v0.14.0 is now documented on the v1 create endpoint as well, where callers can actually use it.
SimIt Tells You Why A Station Will Not Connect
- When you add an OCPP backend or create a charging station, SimIt now opens a real connection to your CSMS first and tells you straight away if it cannot get through — credentials refused, a path the server does not recognise, an unreachable host, an untrusted certificate, or an address that is not an OCPP endpoint at all.
- Each result is plain language with a suggested fix and a stage-by-stage breakdown showing exactly how far the connection got, instead of a status code you have to look up. Until now that reason was only visible in a station's log panel, after you already had a station quietly failing.
- Nothing is ever blocked. If your CSMS is not running yet, "Create anyway" is one click away, and your settings — including Basic auth credentials and client certificates — are carried across without ever appearing in the page.
- The same check is available to API users as
POST /api/v1/cs/probe, and as an optional ?probe=1 when creating a station. Bulk creation is untouched unless you ask for it.
- The onboarding checklist now marks "create a charging station" complete only once a station has genuinely connected, rather than as soon as one is created.
A Misconfigured Station No Longer Floods Your Logs
- When a CSMS rejects a station because its credentials are wrong or its URL points somewhere that does not exist, SimIt used to retry roughly every ten seconds indefinitely — a single mistyped station could add thousands of identical failure lines a day and bury every other problem in your log.
- These rejections now slow down progressively, up to five minutes between attempts, the same way SimIt already handles a CSMS that is busy or at capacity.
- Each attempt still reports exactly why it was refused, so you can see whether it is a credential or an address problem — you just see it at a readable rate instead of on repeat.
- Your station never stops trying. Once the CSMS side is put right — the station registered, or its credentials accepted — it reconnects on its own within five minutes, with nothing to restart. If the mistake is in the station's own address, that is still a delete and re-create, since a station's CSMS URL is fixed when you create it.
Your Simulators Start Reliably After An Update
- Fixed a problem where, right after a SimIt update that changed how your simulator settings are stored, a service could fail to start and keep retrying instead of coming back. Your stations and vehicles stayed offline until someone intervened.
- Startup is now resilient: if SimIt cannot load your saved simulators on its first attempt, it starts anyway and keeps working on it in the background, rather than restarting in a loop and serving nothing at all.
- No change to your simulators, settings, or API — this only affects how SimIt behaves while starting up.
Stations That Refuse Remote Start
- New station setting
emulateRemoteStartRejected. Turn it on and the station answers Rejected to every remote start request your CSMS sends, so you can test how your own software handles a refusal.
- A refused request changes nothing on the station: the connector stays as it was, no session is opened, and any charging profile sent with the request is ignored. Send the same request to a normal station and it behaves exactly as before.
- Works for both OCPP 1.6 (RemoteStartTransaction) and OCPP 2.0.1 (RequestStartTransaction).
- This is different from the existing
emulateRemoteStartFailsToStartCharging setting, which accepts the request and then never starts charging. Use the new one for an outright refusal, the old one for a station that agrees and then does nothing.
- The setting is off by default and is remembered across restarts, like the rest of a station's configuration.
Stations Back Off When Your CSMS Accepts Them And Immediately Hangs Up
- If you configure more charging stations than your CSMS can hold at once, the ones that don't fit no longer retry every couple of seconds forever. SimIt now recognises a connection that is accepted and then dropped before the station ever completes its boot sequence, and slows those attempts down progressively — the same way it already handled an outright "too many connections" rejection.
- This matters because many CSMS implementations enforce their connection limit by accepting the connection and closing it, rather than refusing it outright. Previously only the outright refusal was recognised, so the more common case ran unthrottled and generated a continuous stream of pointless connection attempts against your system.
- Stations that are working normally are unaffected: a disconnect after a successful boot still reconnects promptly, and a single dropped connection is still retried right away. Only a station stuck in a repeating, never-succeeding loop is slowed down.
- No station ever gives up — when capacity frees up on your CSMS, the waiting stations come back on their own.
- Your logs now say when a station is stuck in this loop, including how many times in a row it has happened, instead of only listing each individual disconnect.
Your Dashboard No Longer Undercounts Running Simulators
- Fixed a problem where simulators that were running normally — connected to your CSMS and exchanging messages — could stop being counted on your dashboard. The count could stay stuck at a handful while hundreds of stations were in fact live, making it look as though your simulators had vanished.
- The periodic maintenance that keeps your dashboard figures accurate now recovers from a temporary database or cache hiccup and carries on, instead of quietly stopping for the rest of the day. Previously a single momentary failure could leave the figures frozen until the service was restarted.
- Whenever SimIt has to repair a simulator's bookkeeping, it now records it in the logs — so a discrepancy leaves a trace instead of passing unnoticed.
Charging Stations Now Back Off When Your CSMS Says "Too Many Connections"
- When your CSMS rejects connections because it has hit its own connection limit or is rate-limiting, charging stations now wait progressively longer between attempts instead of retrying every few seconds indefinitely. If your CSMS caps connections below the number of stations you have configured, the ones that can't get in no longer hammer it continuously.
- If your CSMS sends a
Retry-After instruction with the rejection, SimIt now honours it.
- Stations still keep trying indefinitely and return to normal speed as soon as your CSMS accepts connections again — no station ever gives up permanently.
- Connection and login failures unrelated to rate limiting are unaffected and still retry promptly, so real configuration problems surface just as quickly as before.
Fixed Usage Counters Drifting Out of Sync With Your Actual Simulators
- Your charging station / EV usage counters (shown on your dashboard) could drift upward over time and never correct themselves — even after simulators were removed — sometimes showing a count higher than your account limit. Counters now always reflect your actual active simulator count.
- Improved stability when running large numbers of charging stations or EVs across multiple simulator instances — load is now shared more evenly between instances, reducing unexpected restarts.
Fixed Charge Points Getting Permanently Stuck After a Failed Create
- If creating a charging station or EV was interrupted partway through (a dropped connection, or a simulator instance restarting at just the wrong moment), that ID could become permanently unusable — every future attempt to create it failed with "already exists", and even "Clear Simulators" couldn't free it up. Interrupted creates are now cleaned up automatically, and a background check periodically releases any that still slip through.
EVs Now Recover Automatically After a Pod Crash
- EV simulators left behind by a replaced or crashed instance now come back online automatically on a running deployment, instead of staying offline until every instance restarted.
Fixed Charging Stations Not Recovering After a Deployment
- Charging station simulators left behind by a replaced instance now come back online correctly on the next deployment — previously they could stay permanently offline while EV simulators recovered normally.
Improved Connection Stability When Scaling Up
- Charging stations and EVs already connected no longer get disconnected and reassigned when a new simulator instance joins a running deployment — existing connections now stay put, and only newly added simulators pick up the new capacity.
Fixed Dashboard Quota Display
- The dashboard usage panel no longer flips your simulator limit back to 1 a few seconds after loading — the live counter now reads the same account data as the rest of the dashboard on deployments using the newer database-backed storage option.
- Simulator counts can no longer go negative after deleting simulators — the counter now stops at zero.
Fixed Dashboard Simulator List Not Updating
- Charging stations and electric vehicles you create now appear in your dashboard's simulator list right away, instead of being missing until you manually refreshed the page.
Fixed Homepage Simulator Count
- The "simulators registered" count on the homepage now reflects the actual number of configured charging stations and EVs across all accounts, instead of always showing zero on deployments using the newer database-backed storage option.
More Reliable Simulator Configuration Persistence
- Simulator configurations now persist more reliably across restarts, reducing the chance of losing a charging station or EV setup during maintenance or unexpected downtime.
Health Endpoint No Longer Requires an API Key
- The
/metrics endpoint no longer requires a SIMIT-API-KEY header, so orchestration platforms like Kubernetes can use it for readiness and liveness checks without extra configuration.
Getting Started Checklist and API Quickstart
- The dashboard now shows a Getting Started checklist that guides new users through the four setup steps: generating an API key, adding a CSMS backend, creating a charging station, and creating a virtual EV. The checklist disappears automatically once all steps are complete, or you can dismiss it manually.
- When a charging station exists, the Simulators card shows a collapsible API quickstart with a ready-to-run curl example for starting a transaction — pre-filled with your API key and station ID.
CSMS URL Validation When Adding a Backend
- When adding an OCPP backend, SimIt now checks the URL and shows an amber warning if the scheme is
ws:// (unencrypted), the hostname cannot be resolved via DNS, or the hostname resolves to a private or loopback address that SimIt's servers cannot reach.
- The backend is always saved regardless of warnings — you are not blocked from testing.
- The backend URL field now defaults to a
wss:// example to guide new users toward encrypted connections.
OCPP 2.0.1 Simulator Support Is Live
- Connect charging stations using the OCPP 2.0.1 protocol alongside existing 1.6 stations — specify
protocol: "ocpp2.0.1" at create time.
- Charge session lifecycle: BootNotification, Authorization, StatusNotification, TransactionEvent (Started/Updated/Ended), periodic meter reporting, and remote start/stop all work out of the box.
- Multi-EVSE and multi-connector charging scenarios are covered for both OCPP 1.6 and OCPP 2.0.1.
- Smart charging, device model, security, firmware/log, reservation, availability, and display-message handlers are wired with protocol-correct responses for CSMS testing.
Startup Recovery Progress
- The admin panel now shows saved simulator totals and per-key restore progress while Redis-backed CS/EV simulators are being recreated after restart.
Per-Type Simulator Clear Buttons
- The "Clear Simulators" button has been split into two separate buttons — Clear CS and Clear EV — placed directly on each usage counter. Click one to clear only that type, or both to clear all simulators.
OCPP 1.6 Behavioral Completeness
A landmark release bringing SimIt's OCPP 1.6 simulator to full specification coverage.
Every major message flow now behaves exactly as a real charge point would —
authorization caching, correct MeterValues timing, scheduled availability changes,
clock-aligned intervals, and graceful reset handling.
Transaction & Metering
feat
StopTransaction now sends transaction_end MeterValues immediately before the StopTransaction call, as required by OCPP 1.6 §5.11. The final meter reading and id_tag are correctly included in the stop payload.
feat
MeterValuesSampledData config respected — the simulator reads the comma-separated measurand list from OCPP configuration and builds only the requested SampledValues, matching real hardware behavior.
feat
ClockAlignedDataInterval MeterValues — periodic meter readings now fire on absolute clock boundaries (e.g. :00, :15, :30, :45) rather than relative offsets, matching §5.8.
Reset & Boot
feat
Soft Reset gracefully stops active transactions — sends StopTransaction with reason SoftReset before reconnecting, instead of cutting the WebSocket mid-session.
feat
BootNotification Pending status handled — the simulator waits for the CSMS-specified interval and retries boot without starting any periodic tasks, matching §4.2 state machine.
Authorization
feat
Authorization cache with LocalAuthorizeOffline fallback — the local authorization list is checked first, then the CSMS. Responses are cached so that when the CSMS is unreachable and LocalAuthorizeOffline=true, the last known result is used instead of rejecting the card.
Availability & Reservations
feat
ChangeAvailability returns Scheduled on charging connectors — the change is queued and applied automatically when the active transaction ends, with a StatusNotification sent after application. Supports connector_id=0 (apply to all connectors).
feat
Reservation auto-expiry — a background task fires at expiry_date and sends a StatusNotification returning the connector to Available, matching §5.12.
Bug Fixes
fix
Temperature measurand no longer sent twice per sample when send_empty_meter_values is enabled.
fix
Clock-aligned MeterValues task no longer spawns a duplicate on reconnect — only one task runs at a time.
Dashboard — Persistent Collapsible Cards
The user dashboard gets a major usability overhaul: every information panel is now collapsible, and the open/closed state persists across page reloads via localStorage.
ux
All dashboard cards are now collapsible — API Key, Usage, OCPP Backends, Simulators, and Logs panels use native <details> elements with smooth transitions.
ux
Card state persisted in localStorage — your preferred panel layout is remembered between sessions.
feat
Periodic log loading — the Logs card auto-refreshes while expanded, pauses when the tab is hidden.
ux
Log rows compacted and reformatted for single-line display; horizontal scrollbars hidden; response type shown inline.
Live OCPP Traffic Logs
Real-time WebSocket message logging lands in the dashboard. Every OCPP frame flowing between your simulated charge points and the CSMS is captured and displayed per API key.
feat
Dashboard OCPP log tap — every <<< receive and >>> send is captured from the WebSocket layer and streamed to the dashboard Logs panel.
feat
Admin scoped logs per API key — the admin panel now shows expanded cards with per-key OCPP traffic for support and debugging.
feat
DataTransfer support — improved handling of vendor-specific DataTransfer messages in both directions.
ux
Dashboard OCPP Backends card added — view and manage CSMS connection targets from the dashboard without using the REST API.
Dashboard Quota Auto-Refresh
Quota counters now update live — no page reload needed when simulators are created or deleted.
feat
Live quota counters — the Usage panel polls /dashboard/quota every few seconds and updates CS/EV counts without a full page reload.
feat
Simulator management from the dashboard — create and delete CS/EV simulators directly from the UI alongside the REST API.
Multi-Connector EVSE & Connector Interlock
Charging stations can now simulate multi-connector EVSEs with realistic connector interlock behavior — sibling connectors lock and unlock as charging sessions start and end.
feat
Connector interlock — when charging starts on connector A, sibling connectors on the same EVSE transition to Unavailable automatically.
feat
Preparing interlock — sibling connectors transition to Preparing when an EV plugs in, before charging begins.
feat
Auto-unlock on session end — sibling connectors return to Available after StopTransaction completes.
Security Profile 1 — Basic Auth over WebSocket
OCPP Security Whitepaper SP-1 support: charge points can now authenticate to the CSMS using HTTP Basic Auth on the WebSocket handshake.
security
SP-1 Basic Authentication — provide a username/password when creating a charge point; SimIt sends the encoded Authorization header on every WebSocket connection attempt.
security
Client certificate support — TLS mutual authentication via client certificate for CSMS endpoints that require it.
feat
Security credentials are persisted and restored automatically on restart — no need to re-configure charge points after a deployment.
Stability & Reliability
fix
General stability improvements and code quality hardening — fewer edge-case failures under load.
REST API v2
A cleaner, more ergonomic API surface. v2 routes use a consistent resource path structure for creating and managing both OCPP 1.6 and OCPP 2.0.1 simulators.
feat
API v2 routes registered — /api/v2/cs/ and /api/v2/ev/ endpoints with a versioned URL switcher in the docs.
fix
Deleting a charge point now reliably cleans up its state regardless of which instance receives the request.
ux
Docs page gets a v1/v2 version switcher with sticky tab bar so endpoint lists stay readable while scrolling.