Skip to content

Dynamic export control/solar curtailment of inverters for dynamic connections (CSIP-AUS/SEP2/IEEE 2030.5), fixed/zero export or negative feed-in

License

Notifications You must be signed in to change notification settings

longzheng/open-dynamic-export

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo

About

This project aims to implement dynamic export control/solar curtailment of inverters using Node.js/TypeScript to satisfy

  • dynamic connection requirements (CSIP-AUS/SEP2/IEEE 2030.5) of various Australian energy distributors (DNSPs)
    • certified by SA Power Networks (1/10/2024)
  • fixed/zero export limitations (e.g. 1.5kW export limit)
  • two-way tariffs (e.g.time based) export limitation
  • negative feed-in (e.g. Amber) export limitation

Documentation

View documentation

Features

  • Limits control
    • Fixed limits
    • Dynamic negative feed-in
    • Two-way tariffs
    • CSIP-AUS
  • Inverter integration
    • SunSpec Modbus TCP
    • SunSpec Modbus RTU
  • Meter integration
    • SunSpec Modbus TCP
    • SunSpec Modbus RTU
    • Tesla Powerwall
  • CSIP-AUS/SEP2/IEEE 2030.5 client
    • Discovery and scheduled entity polling
    • ConnectionPoint in-band registration
    • DER status/capability/settings reporting
    • DER control scheduling and default DER control fallback
    • Site/DER "mirror usage point" "mirror meter reading" reporting
    • Software-based limit ramping (setGradW or rampTms)
  • Metrics logging in InfluxDB

Build

Docker compose

  1. Clone repo

  2. Copy .env.example and rename it to .env and change the values to suit

  3. Create a /config folder and copy the config.example.json file from the repo and rename it to config.json. Set it with the required values.

  4. Run docker compose up -d (or run docker compose up -d --build)

Debug

VSCode

Run debug configuration "Docker: Build and attach to Node".

Docker compose

Run docker compose -f docker-compose.yml -f docker-compose.debug.yml up -d --build to start the Node.js container with debugging port opened.

CSIP-AUS Private key and CSR

CSIP-AUS uses PKI certificates to authorise and identify clients.

As a direct client, there needs to be two certificates, one for the "manufacturer" and one for the "device". The "manufacturer" certificate needs to be signed by the utility Smart Energy Root CA (SERCA). Then the "device" certificate is signed with the "manufacturer" certificate & key.

To generate a device certificate key and certificate signing request.

npm run cert:device-request

For local testing, generate a valid self signed certificate using

openssl req -x509 -new -key key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/"

For live testing, generate a valid device certificate by signing it with the manufacturer certificate.

npm run cert:device-generate

To view the device certificate LFDI

http://localhost:3000/csipAus/id

The manufacturer certificate is signed manually by the utility. The certificate key and certificate signing request can be generated with

openssl ecparam -name secp256r1 -genkey -noout -out mica_key.pem
openssl req -new -key mica_key.pem -out mica_cert_req.csr -sha256 -subj "/"

Motivation

My parents living in Queensland have a solar PV system and was required to move to Energex's dynamic connection to install an Tesla Powerwal battery because the total inverter capacity was >10kVA. A requirement of the dynamic connection is the use of a "complaint provider" (SEP2 client/device) to manage the solar inverters to meet dynamic export rules.

I opted for the CATCH Power Solar Relay solution since it was already installed at the site (for hot water control) and I wanted to support an Australian company. Unfortunately my experience with their product was subpar due to confusing UIs and a buggy implementation of SunSpec which does not support daisy chained Fronius inverters. I spent considerable time debugging their Modbus implementation and I tried to contact them to help improve their product but they were quite arrogant and not interested in my feedback.

So I thought I should put my efforts on making a better product that is open source since I have an interest in energy markets and was curious about the SEP2/CSIP-AUS standards.

I got in touch with Energy Queensland who was surprisingly helpful (for a government agency) and was open to the idea of an open-source client.

Resources