GridHammer
Deterministic OCPP 2.1 stress testing for megawatt-scale charging systems.
- Language: Rust (stable)
- Role: Authoritative simulation engine
- Guarantees: Protocol correctness, determinism, invariant enforcement
- Language: TypeScript (Node.js LTS)
- Role: Control plane and observability
- Guarantees: Ergonomic workflows, reproducibility
- OCPP 2.1 message correctness
- EVSE FSM with explicit transitions
- ChargingProfile conflict resolution
- High-frequency MeterValues
- Fault and constraint injection
- Full replayability
gridhammer run <scenario>
gridhammer replay <run-id>
gridhammer sweep <param>=<range>
gridhammer validate <scenario>
gridhammer export <run-id>
CLI output is machine-readable by default.
Each run produces:
ocpp_trace.jsonlevse_states.jsonlpower_series.csvassertions.jsonrun_meta.json
Artifacts are immutable.
- Rust core: semantic versioning
- Scenario schema: explicit version field
- Breaking changes require migration notes
- No silent protocol deviations
- No implicit defaults
- No hidden state
The following areas are permanently out of scope:
- CPMS runtime logic: Pricing engines, billing, invoicing, user ledgers, roaming settlement.
- OCPI / Roaming: No OCPI, OCHP, or OICP logic.
- Smart Gateway: No retry smoothing, connection holding, message buffering, or "smart" pipes.
- Physics: No battery chemistry, real power electronics, or grid physics.
- UI-defined behavior: The UI is read-only. It never inputs data into the simulation. All inputs come from scenarios.
- ISO-15118 PLC: No low-level PLC timing or signal modulation.
Explicitly forbidden agents: pricing-agent, billing-agent, invoicing-agent, ledger-agent, user-agent, ocpi-agent, roaming-agent, settlement-agent, smart-gateway-agent, physics-agent, plc-agent.
GridHammer is successful if it:
- Finds real CPMS bugs
- Produces explainable failures
- Allows exact replay months later