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
- 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
orrampTms
)
- Metrics logging in InfluxDB
-
Clone repo
-
Copy
.env.example
and rename it to.env
and change the values to suit -
Create a
/config
folder and copy theconfig.example.json
file from the repo and rename it toconfig.json
. Set it with the required values. -
Run
docker compose up -d
(or rundocker compose up -d --build
)
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 "/"
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.
- SEP2 Client Handbook published by Energy Queensland
- IEEE 2030.5 standard
- IEEE 2030.5 Data Model
- SEP2 Common Library Rust library
- SEP2-Tools Python library
- Common Smart Inverter Profile - IEEE 2030.5 Implementation Guide for Smart Inverters v2.1
- Common Smart Inverter Profile – Australia v1.1a
- Common Smart Inverter Profile - Australia - Test Procedures v1.0
- SA Power Networks - Dynamic Exports Test Procedure v1.2