IEEE 2030.5 CSIP Client

The DER Simulator connects to an IEEE 2030.5 server (a utility head-end or an aggregator) as a Common Smart Inverter Protocol (CSIP) client. It discovers its DER endpoint, mirrors its capabilities, settings, and status back to the server, posts meter readings, and applies the DERControl schedules it receives — Volt-Var, Volt-Watt, fixed power factor, frequency droop, ramp rate, and enter-service.

Quick start

Start the simulator with a CSIP client connected to a server at https://1.2.3.4:8443:

./sim --device_type PV-3Phase \
      --csip_client_enable yes \
      --csip_server_ip 1.2.3.4 \
      --csip_server_port 8443 \
      --csip_enc yes \
      --csip_cert /opt/dersim/certs/csip/client.pem \
      --csip_key  /opt/dersim/certs/csip/client.key \
      --csip_root_cert /opt/dersim/certs/csip/ca.pem

The full CLI surface for the CSIP client:

Flag Default Description
--csip_client_enable / -csip_enable yes Enable the CSIP client (yes or no)
--csip_server_ip / -csip_serv 127.0.0.1 IP / hostname of the IEEE 2030.5 server
--csip_server_port / -csip_port 8443 HTTPS port of the IEEE 2030.5 server
--csip_enc / -ce yes Enable mutual TLS for IEEE 2030.5
--csip_cert / -cc cert.pem Client certificate PEM
--csip_key / -ck key.pem Client private-key PEM
--csip_root_cert / -cr root.pem CA certificate PEM used to verify the server
--dcap /dcap DeviceCapability resource path on the server
--use_test_pki_certs (off) Use the bundled test PKI (pass the certs directory path); skips operator-supplied certs
--csip-2018-compat off Enable IEEE 2030.5-2018 XML compatibility for server PUTs (legacy servers that don't accept the newer XML shape)
--csip_website_ip 127.0.0.1 Bind address for the CSIP management web UI
--csip_website_port 5000 HTTP port for the CSIP management web UI

What the CSIP client does at startup

Once enabled the simulator's CSIP client runs through this lifecycle:

  1. Discovery. Performs a GET against the --dcap path on the server, walks the DeviceCapability tree, finds this DER's EndDevice record via the LFDI derived from the client certificate, and resolves the linked DERProgram, FunctionSetAssignments, MirrorUsagePoint list, and LogEventList hrefs.
  2. DER state mirroring. Starts pushing DERSettings, DERStatus, and DERAvailability PUTs at the server-advertised poll cadence (DERCapability defaults to 30 s as a safe backstop). Nameplate values and live status (operating mode, alarms, current readings) reach the server without operator action.
  3. Metering. If the server exposes a MirrorUsagePoint list, the simulator starts POSTing MirrorMeterReading blocks at 60 s intervals — power, voltage, current, energy registers per phase.
  4. Control dispatch. Inbound DERControl schedules and the DefaultDERControl are applied to the simulated inverter: Volt-Var, Volt-Watt, Watt-Var, fixed PF, fixed VAR, frequency droop, ramp rate, and enter-service are all honored.

If discovery fails (server unreachable, cert mismatch, etc.) the client retries every 10 s until it succeeds or the simulator is stopped. The dcap URL is included in the log line so misconfiguration is obvious.

Mutual TLS

CSIP traffic is over HTTPS with client-cert mutual TLS. The three certificate files are loaded once at startup:

  • --csip_cert — your client certificate (PEM). The LFDI (the IEEE 2030.5 device identifier) is derived from this cert's fingerprint, so it has to match what the server has provisioned for this DER.
  • --csip_key — the matching private key (PEM).
  • --csip_root_cert — the CA chain used to verify the server's certificate.

For lab work where you don't want to provision your own PKI, pass --use_test_pki_certs PATH and the simulator loads a bundled test certificate set from that directory instead. Filename conventions follow the IEEE 2030.5 reference PKI: cert.pem, key.pem, cert_root.pem.

When --csip_enc no is passed the client uses plain HTTP — useful for protocol-level debugging against a non-TLS test server, never appropriate for production.

Multi-device CSIP

When -N COUNT is passed the simulator spins up COUNT independent DERs in one process. The CSIP layer assigns each one its own client certificate from the bundled test-PKI rotation (cert_1.pem, cert_2.pem, …) so the server sees N distinct LFDIs from the same host — useful for load-testing a head-end or running a small virtual feeder.

IEEE 2030.5-2018 vs newer XML

Some legacy servers reject the post-2018 XML shape that the simulator emits by default — they expect the original 2030.5-2018 schema for DERSettings and DERStatus PUTs. Pass --csip-2018-compat to switch the PUT body to the 2018 shape. The difference is wire-level backwards compatibility only, not a functional change.

DER state PUT cadence

The simulator watches the server's advertised poll rates (via DeviceCapability.pollRate etc.) and honors them. As a backstop, DERCapability defaults to a 30 s poll cadence so a misconfigured server doesn't leave the DER silent for hours. PUTs are skipped when the underlying values haven't changed since the last successful round-trip.

Metering and MirrorUsagePoint

When the server exposes a MirrorUsagePoint list, the simulator POSTs MirrorMeterReading blocks every 60 s. Each post carries the phase-resolved per-line readings the inverter actually produces:

  • Active power (W) per phase + total
  • Reactive power (VAR) per phase + total
  • Apparent power (VA)
  • Voltage (V) per phase
  • Current (A) per phase
  • Energy registers (Wh import + export, where applicable)

LogEventList integration

A LogEventList is registered during discovery if the server advertises one. The simulator can trigger a burst of BASIC-027 LogEvent POSTs in two ways:

  1. Modbus-driven. SunSpec model 64415 LogEventEna register — when a Modbus client writes a non-zero value, the simulator spawns the same LogEvent burst on the CSIP side. Useful for end-to-end tests that exercise the Modbus-to-2030.5 path.
  2. Operator-driven. REST endpoint on the simulator's management API; pass alarm_status and interval to space the events.

Both paths produce the same wire shape a production DER would emit.

CSIP management web UI

The simulator hosts a CSIP management web UI at http://<csip_website_ip>:<csip_website_port> (default http://127.0.0.1:5000). It exposes:

  • The discovered EndDevice tree
  • Current DERSettings, DERCapability, and DERStatus values
  • Active DERControls and the DefaultDERControl
  • A REST API for programmatic test harnesses

The dashboard's main page also has a CSIP Client sidebar entry that mirrors the same client status (connection state, discovered EndDevice, active DERControls) without the standalone management UI.

Programmatic testing

For test harnesses that need to drive the CSIP client from a script — confirm that a server-side DERControl change reached the inverter, trigger a LogEvent burst, force a re-discovery after swapping certs — the simulator's REST API exposes everything the dashboard does:

# Snapshot the CSIP client status
curl http://localhost:8111/api/dersim/csip-client | jq .

# Tail the CSIP module log
curl 'http://localhost:8111/api/dersim/logs?modules=CSIP&limit=200'

# Programmatic LogEvent burst (alternative to writing SunSpec 64415)
curl -X POST http://localhost:8111/api/dersim/csip/log-event-burst \
     -H 'Content-Type: application/json' \
     -d '{"alarm_status": "Abnormal", "interval": 5, "count": 10}'

See the REST API overview for the full management surface and the WebSocket telemetry stream for live inverter state during a CSIP exchange.

Dashboard "Logs" view — CSIP module

CSIP traffic — discovery calls, every PUT, every MirrorUsagePoint POST, every inbound DERControl — is mirrored into the simulator's log buffer under the CSIP module tag. Filter the dashboard's Logs view by the CSIP module to see the live conversation between the simulator and your 2030.5 server.

Operating from the LabTest GUI

The full set of CSIP knobs is also reachable from the LabTest GUI's "DER Simulator" page (see the LabTest Pro User Manual). The GUI maps each form field to the matching CLI flag.

GUI walkthrough

  1. Select IEEE 2030.5 Server from the Simulators menu.

  2. Click the settings gear to configure the CSIP Server settings.

  3. Click OK to accept the default settings, or enter your own and click OK.

  4. Click the green button to start the server.

  5. Select DER Simulator from the Simulators menu.

  6. Click the settings gear.

  7. To activate Encrypt IEEE 2030.5 on the DER Simulator, click Yes. You will see << Using Default >> certs; click OK.

  8. Click the green button to start the DER Simulator.

  9. The dashboard should now look like this on each tab: