PyOCMF
Python library for parsing, validating, and verifying OCMF (Open Charge Metering Format) signatures from electric vehicle charging stations.
Try it in your browser
Launch the Browser Demo - No installation required! Parse and validate OCMF data directly in your browser using Pyodide.
Features
- Parse OCMF strings into validated Python objects
- Verify cryptographic signatures for data integrity
- Support for ECDSA with multiple curves (secp192r1, secp256r1, secp384r1, secp521r1, brainpool variants)
- Type-safe validation using Pydantic
- Eichrecht compliance validation for German calibration law requirements
- Command-line interface for validation and verification
Installation
This installs the complete package with CLI tools and cryptographic signature verification.
Alternative installation options
Quick Start
from pyocmf import OCMF
# Parse an OCMF string
ocmf_string = 'OCMF|{"FV":"1.0","GI":"KEBA_KCP30",...}|{"SD":"3045..."}'
ocmf = OCMF.from_string(ocmf_string)
# Access payload data
print(ocmf.payload.GI) # Gateway ID: "KEBA_KCP30"
print(ocmf.payload.GS) # Gateway serial number
print(ocmf.payload.RD) # List of meter readings
# Verify signature (requires pyocmf[crypto])
is_valid = ocmf.verify_signature(public_key_hex)
Command Line Interface
# Validate an OCMF string
ocmf 'OCMF|{"FV":"1.0",...}|{"SD":"3045..."}'
# Validate and verify signature
ocmf 'OCMF|{...}|{...}' --public-key 3059301306072A8648CE3D...
# Validate from XML file (extracts public key automatically)
ocmf charging_session.xml
See the CLI Reference for details.
More Examples
Working with XML files
OCMF data is often distributed in XML format from CPO backends.
Eichrecht compliance checking
Validate German calibration law requirements for charging transactions.
from pyocmf import OCMF, check_eichrecht_transaction
ocmf_begin = OCMF.from_string(begin_string)
ocmf_end = OCMF.from_string(end_string)
issues = check_eichrecht_transaction(ocmf_begin, ocmf_end)
if not issues:
print("Transaction is Eichrecht compliant")
Checks include meter status, error flags, time sync, cable loss compensation, transaction consistency, and user identification.
Public key metadata
Extract structured metadata from public keys per OCMF spec Table 23.
Supported Signature Algorithms
PyOCMF supports all ECDSA signature algorithms defined in the OCMF specification:
- secp192k1, secp256k1 - Koblitz curves
- secp192r1, secp256r1, secp384r1, secp521r1 - NIST curves
- brainpool256r1, brainpoolP256r1, brainpool384r1 - Brainpool curves
- SHA256 and SHA512 hash functions
Error Handling
from pyocmf import OCMF, SignatureVerificationError, OcmfFormatError
try:
ocmf = OCMF.from_string(ocmf_string)
is_valid = ocmf.verify_signature(public_key)
except OcmfFormatError as e:
print(f"Invalid OCMF format: {e}")
except SignatureVerificationError as e:
print(f"Signature verification error: {e}")
About OCMF
OCMF (Open Charge Metering Format) is a standardized format for metering data from electric vehicle charging stations. It ensures transparency and tamper-proof documentation of charging sessions, complying with legal requirements such as:
- EU Measuring Instruments Directive (MID)
- German Eichrecht (calibration law)
For more information about OCMF, visit safe-ev.de.