Insights
Notes on EV charging and AI, from the team building them
Technical writing from the engineers shipping OCPP-certified charging platforms and production AI systems — tutorials, field notes and guides, no marketing fluff.
Tutorial Series
Learn the protocols, end to end
OCPP 1.6-J Tutorial
A hands-on walkthrough of OCPP 1.6-J, from the first WebSocket connection to smart charging and security profiles, with real message examples.
Start the seriesOCPP 2.0.1 Tutorial
How OCPP 2.0.1 works in practice: the device model, the transaction event model, ISO 15118, security, and migrating from 1.6.
Start the seriesOCPI 2.2.1 Tutorial
Building EV roaming with OCPI 2.2.1: credentials, locations, tokens, sessions, CDRs, tariffs and commands, from both the CPO and eMSP side.
Start the seriesAll articles
PHP2Shell (CVE-2026-109618, CVE-2026-109619): What It Is and How to Patch Every Server
A practical PHP2Shell guide: affected and fixed PHP versions, how to find every PHP runtime, patching per platform, workarounds and compromise checks.
PHP2Shell on PHP 7.4, 8.0, 8.1 and Older: Your Real Options
No official PHP2Shell release exists for PHP 8.1 and older. Here are the vendor backports, source patches, upgrade paths and isolation steps that do.
Cyber Essentials in 2026: The Five Controls, the Danzell Question Set and the 14-Day Rule
A practical guide to Cyber Essentials under v3.3 and the Danzell question set: the five controls, MFA auto-fails, 14-day patching, CE vs CE Plus.
UK GDPR Security Obligations for SMEs: Article 32, 72-Hour Breach Reporting and What Changed in 2026
What UK GDPR actually requires on security for small and mid-sized firms: Article 32 measures, reporting breaches to the ICO within 72 hours, DUAA changes.
AWS Security Baseline Checklist: 12 Controls and the CLI Commands to Check Them
An AWS security baseline: GuardDuty, Inspector, Security Hub, CloudTrail, Config, Access Analyzer, S3 Block Public Access and root MFA, with CLI checks.
GuardDuty, Inspector and Security Hub Explained: What Each Does and How They Fit
What GuardDuty, Inspector and Security Hub (and Security Hub CSPM) each do, where they overlap, how they bill, and how to enable them org-wide.
Automating Security Checks with AI Agents, Without Handing Them the Keys
How agent-assisted security work is done responsibly: read-only discovery, least privilege, approved changes, audit logs and a human signing off every fix.
OCPP 1.6-J Tutorial, Part 1: Architecture and Message Framing
How OCPP 1.6-J works on the wire: WebSocket URL and subprotocol, CALL/CALLRESULT/CALLERROR frames, message IDs and the six feature profiles.
OCPP 1.6 BootNotification and Heartbeat Explained
What happens when a charger connects: BootNotification fields, Accepted/Pending/Rejected handling, heartbeat interval and clock sync in OCPP 1.6-J.
OCPP 1.6 StatusNotification: Connector Status and Error Codes
The OCPP 1.6 connector status model: all nine ChargePointStatus values, connectorId 0, error codes, valid transitions and how a CSMS should use them.
OCPP 1.6 Authorize, Local Auth List and Authorization Cache
How OCPP 1.6 authorizes drivers: Authorize and IdTagInfo, the local authorization list, the authorization cache, and how chargers behave offline.
OCPP 1.6 StartTransaction and StopTransaction Deep Dive
OCPP 1.6 transactions in detail: StartTransaction, transactionId, meterStart/meterStop, stop reasons, transactionData and offline message queuing.
OCPP 1.6 MeterValues: Measurands, Contexts and Sampling
Reading OCPP 1.6 MeterValues correctly: SampledValue fields, measurands, contexts, sampled vs clock-aligned data, units, phases and common parsing bugs.
OCPP 1.6 Remote Commands: RemoteStart, Reset, Unlock, Reserve
Controlling chargers from the CSMS in OCPP 1.6: RemoteStart/StopTransaction for app sessions, UnlockConnector, Reset, ChangeAvailability and ReserveNow.
OCPP 1.6 Configuration Keys, TriggerMessage and DataTransfer
Managing OCPP 1.6 charger configuration: GetConfiguration, ChangeConfiguration, the standard keys that matter, TriggerMessage and DataTransfer.
OCPP 1.6 Smart Charging: SetChargingProfile and Stack Levels
OCPP 1.6 smart charging in practice: charging profile purposes, kinds, stackLevel, schedules, ClearChargingProfile and GetCompositeSchedule with examples.
OCPP 1.6 Firmware Updates and Diagnostics: UpdateFirmware Guide
Remote firmware updates and log collection in OCPP 1.6: UpdateFirmware, FirmwareStatusNotification, GetDiagnostics and how to roll out safely.
OCPP 1.6 Security: Security Profiles, Certificates and Signed Firmware
The OCPP 1.6-J security whitepaper explained: security profiles 1-3, Basic auth, TLS, client certificates, SecurityEventNotification and signed firmware.
Troubleshooting OCPP 1.6: CALLERRORs, Timeouts and Interop Bugs
A field guide to debugging OCPP 1.6-J: CALLERROR codes, timeouts and retries, message ordering, reconnect storms and common charger interop bugs.
OCPP 2.0.1 Tutorial: Architecture, EVSE Model and Functional Blocks
Start here for OCPP 2.0.1: OCPP-J framing, the station/EVSE/connector model, the A to P functional blocks, and how to read use case IDs.
OCPP 2.0.1 Device Model: Components, Variables and Monitoring
How the OCPP 2.0.1 device model works: ComponentType, VariableType, attributes, GetVariables/SetVariables, NotifyReport and variable monitoring.
OCPP 2.0.1 BootNotification, Network Profiles and Heartbeat
Bringing an OCPP 2.0.1 station online: BootNotification reasons, Pending provisioning, SetNetworkProfile, Heartbeat, StatusNotification and Reset.
OCPP 2.0.1 TransactionEvent: Started, Updated, Ended Explained
A deep dive into OCPP 2.0.1 TransactionEvent: eventType, triggerReason, seqNo, TxStartPoint/TxStopPoint, offline queuing and CSMS-side handling.
OCPP 2.0.1 Authorization: IdTokens, Local Lists and Remote Start
IdTokenType and its types, Authorize and IdTokenInfo, the authorization cache, local lists, group tokens and RequestStartTransaction in OCPP 2.0.1.
OCPP 2.0.1 Smart Charging: Profiles, Limits and EV Charging Needs
Charging profiles and purposes, stack levels, composite schedules, external limits and ISO 15118 charging needs in OCPP 2.0.1 smart charging.
OCPP 2.0.1 Security: Profiles, Certificates and Signed Firmware
OCPP 2.0.1 security in practice: security profiles 1 to 3, SignCertificate and CertificateSigned, root certificates, security events and signed firmware.
OCPP 2.0.1 and ISO 15118: How Plug & Charge Works End to End
How OCPP 2.0.1 supports ISO 15118 Plug & Charge: V2G certificates, contract authorization, Get15118EVCertificate and GetCertificateStatus.
OCPP 2.0.1 Display Messages, Tariffs and Running Cost
Showing tariffs, running cost and custom messages on OCPP 2.0.1 stations: SetDisplayMessage, personalMessage, CostUpdated and totalCost.
Migrating from OCPP 1.6 to 2.0.1: Message Mapping and Plan
A practical guide to moving a CSMS and fleet from OCPP 1.6-J to 2.0.1: message and configuration mapping, mixed fleets and a migration plan.
OCPP 2.1: What's New Compared with 2.0.1
What OCPP 2.1 adds to 2.0.1: ISO 15118-20 and bidirectional charging, DER control, local cost and payment, battery swapping and new RPC frames.
OCPI 2.2.1 Tutorial: Roles, Modules and How EV Roaming Works
What OCPI is, the roles it defines (CPO, eMSP, Hub, NSP, SCSP), its modules, version history, and the push vs pull and hub vs peer-to-peer choices.
OCPI Versions and Credentials: The Token A/B/C Handshake
How OCPI 2.2.1 version discovery and the credentials handshake work, which token is used when, and the Authorization header encoding trap.
OCPI Transport: Response Format, Status Codes and Pagination
The OCPI 2.2.1 response envelope, status_code ranges, pagination headers, date_from filtering, routing headers and request IDs, with the usual pitfalls.
OCPI Locations Module: Locations, EVSEs, Connectors and Status
Modelling Location, EVSE and Connector in OCPI 2.2.1, pushing status with PUT and PATCH, evse_id format, and how eMSPs should pull and sync.
OCPI Tokens Module: Whitelists and Real-Time Authorization
How eMSP tokens reach the CPO in OCPI 2.2.1, what the WhitelistType values mean, and how real-time authorization with AuthorizationInfo works.
OCPI Sessions and CDRs: From Live Session to Billing Record
Pushing OCPI 2.2.1 Sessions, building CDRs with charging periods and CdrDimensionType, totals, and correcting mistakes with credit CDRs.
OCPI 2.2.1 Tariffs: Elements, Restrictions and Price Calculation
How OCPI 2.2.1 tariffs are structured, how TariffDimensionType, step_size and restrictions work, and a worked price calculation with VAT.
OCPI Commands: START_SESSION, STOP_SESSION and Async Results
How OCPI 2.2.1 commands work: START_SESSION, STOP_SESSION, RESERVE_NOW, UNLOCK_CONNECTOR, CommandResponse vs CommandResult, and timeouts.
OCPI Charging Profiles and Hub Client Info: Smart Charging and Hubs
The OCPI 2.2.1 ChargingProfiles module for SCSPs, its async result flow, and the HubClientInfo module plus practical notes on working with hubs.
Mapping OCPP to OCPI: How a CSMS Bridges Chargers and Roaming
How a CSMS translates OCPP 1.6 and 2.0.1 events into OCPI 2.2.1: connector status to EVSE status, transactions to Sessions and CDRs, commands and auth.
EV Charging Protocols Explained: OCPP, OCPI, OICP, OpenADR, ISO 15118
Who talks to whom in EV charging: the vehicle, the charger, the CSMS, roaming partners and the grid, and which protocol covers each link.
EV Roaming Explained: Hubs, Peer-to-Peer and Settlement
How EV roaming works between CPOs and eMSPs: peer-to-peer vs hub connections, the data that flows, and how sessions turn into invoices.
EV Charging Connector Types: J1772, Type 2, CCS, CHAdeMO, NACS
A practical guide to EV connectors: J1772, Type 2, CCS1/CCS2, CHAdeMO, NACS (SAE J3400) and GB/T, with AC vs DC and how software models them.
EV Charging Payment Options: RFID, Apps, Contactless, Plug & Charge
How drivers pay for EV charging: RFID cards, apps, ad-hoc contactless terminals and Plug & Charge, and what each means for your CSMS and OCPP.
NEVI and AFIR Requirements for EV Charging Software
The software-relevant parts of US NEVI (23 CFR 680) and EU AFIR: OCPP, OCPI, ISO 15118, payment, pricing, uptime and data reporting.
EV Charger Uptime: Measuring, Detecting Faults and Recovering
How to measure EV charger uptime honestly, detect faults from OCPP data before drivers do, recover remotely, and run field operations.
Testing a CSMS with an OCPP Charge Point Simulator
How to test an OCPP backend with charge point simulators: what to simulate, the scenarios that catch real bugs, load testing, and where OCTT fits.
CSMS Architecture at Scale: WebSockets, State and Idempotency
Designing an OCPP backend for large fleets: WebSocket gateways, message routing, connection state, idempotency, multi-tenancy and observability.
EV Charging Pricing Models: kWh, Time, Idle Fees and Tariffs
How to price EV charging: per kWh, per minute, session and idle fees, time-of-use, demand charges, and how pricing rules shape your tariff engine.
V2G and Bidirectional Charging: ISO 15118-20, OCPP 2.1, Reality
V2G, V2H and V2L explained: how bidirectional charging works, the role of ISO 15118-20 and OCPP 2.1, and what is practical today.
OCPP Certification Explained: What OCA Certified Actually Means
How the Open Charge Alliance OCPP certification program works, what is tested, certification profiles, and what a certificate does and does not tell you.
RAG for Enterprise Documents: What It Takes Beyond the Demo
Retrieval-augmented generation is easy to prototype and hard to trust. Parsing, chunking, permissions and evaluation decide whether it works.
AI Agents in the Enterprise: Tool Use, Guardrails and Where They Work
Agents that call tools can do real work, and real damage. How to choose the right level of autonomy, design tools and put guardrails in place.
Evaluating LLM Applications: Test Sets, Graders and Regression Checks
Without evals, every prompt or model change is a guess. How to build a test set, choose graders, and catch regressions before users do.
LLM Cost Control in Production: Caching, Routing and Token Budgets
LLM spend grows with volume and with sloppy prompts. Practical levers: measure cost per task, cache, route by difficulty, batch and budget.
AI Data Privacy and Governance: A Practical Control Set
What data reaches the model, where it goes, who can see outputs, and how you prove it. A practical control set for enterprise AI systems.
Model Context Protocol (MCP) Explained for Enterprise Teams
MCP standardises how AI assistants connect to tools and data. What it is, how servers and tools are defined, and how to deploy it safely.
AI for EV Charging Operations: Where It Helps a CPO Today
Fault prediction, demand forecasting and support automation for charge point operators, built on OCPP and OCPI data, with realistic limits.
Where AI Actually Pays Off in Enterprise Operations (And Where It Doesn't)
Not every workflow benefits from AI. Here's how we evaluate where it genuinely reduces cost versus where it adds risk.
OCPP 1.6 vs 2.0: What Actually Changes for Charging Network Operators
Most deployed charging hardware still speaks OCPP 1.6. Here's what 2.0.1 adds, and whether it's worth the migration yet.
LLMs in Production: What Changes Between a Demo and a Deployed System
A working prototype and a production AI system solve very different problems. Here's the gap we actually build for.
What Is a CSMS, and Why Does Your Charging Network Need One
A charge point management system is the piece between your hardware and your business. Here's what it actually does.
Smart Charging and Load Management: Avoiding the Transformer Upgrade
Adding more chargers to a site usually means a costly electrical upgrade — unless your CSMS manages load dynamically.
A Practical Framework for an AI Opportunity Assessment
Before building anything, we map where manual effort is actually costing you. Here's the framework we use.

Let's Talk
Ready to build something that lasts?
Whether it's a charging network, an AI rollout, or a core enterprise system — let's talk about what you're building.
