ZerokW
Every device, protocol and program Zero kW connects to
What we connect to

Zero kW is an OpenADR VTN and it ships a VEN you can run on your own site. Between them they reach thermostats, building management systems, lighting, batteries, inverters, EV charging and anything that speaks BACnet or Modbus — which, in a commercial building, is nearly everything.

18
working today
42
in the library
14
drivers shipped
3
OpenADR profiles served

Connect your equipment Machine-readable capability document

OpenADR, all four ways

One event model, four wire formats. A utility on 2.0b, an aggregator on 3.0 and a legacy controller on 2.0a can all be served the same dispatch, and each gets it in the form it understands.

ProfileTransportSignalsReportsAuthEndpoint
OpenADR 2.0a OASIS EI, XML level only no HTTP Basic over TLS https://mail.zerokw.com/oadr.php/OpenADR2/Simple/2.0a
OpenADR 2.0b OASIS EI, XML level, price, kW, limit, state of charge yes HTTP Basic over TLS https://mail.zerokw.com/oadr.php/OpenADR2/Simple/2.0b
OpenADR 3.0 REST / JSON level, price, kW, limit, state of charge yes OAuth2 client credentials https://mail.zerokw.com/oadr.php/openadr3/3.0.1
What a signal means
SignalUnits2.0a/2.0b3.0What it is for
Simple level simple / level SIMPLE Normal / moderate / high / special. Understood by every device that speaks OpenADR at all.
Price USD/kWh ELECTRICITY_PRICE / price PRICE The actual $/kWh for the interval. Drives arbitrage and price-responsive setpoints.
Dispatch to kW KW LOAD_DISPATCH / setpoint DISPATCH_SETPOINT Hold total load at this kW. The instruction a battery or a chiller plant can act on directly.
Shed kW KW LOAD_DISPATCH / delta DISPATCH_SETPOINT_RELATIVE Reduce by this many kW from baseline. What most capacity programs settle against.
Capacity limit KW LOAD_CONTROL / x-loadControlCapacity IMPORT_CAPACITY_LIMIT A hard ceiling on import. This is the one that protects a demand charge and a ratchet.
State of charge PERCENT LOAD_DISPATCH / setpoint CHARGE_STATE_SETPOINT Target state of charge. Used to pre-charge a battery before a peak or a price spike.

Profile A carries only the level. A price or a kW target addressed to a 2.0a device is converted to a level and the original instruction is written into the event comment, so an operator reading the exchange can see what was actually meant.

What could you actually shed?

Count what you have. The figures are per unit for a commercial site and come from the same model the dispatch page bills against, so this is an estimate of controllable load, not a brochure number.

60.0 kW each
48.0 kW each
3.5 kW each
3.0 kW each
110.0 kW each
18.0 kW each
5.0 kW each
4.6 kW each
The device library

A driver ships in the exported VEN and speaks this device's protocol. Local/on-premises protocols are exercised against simulators, not against every listed product — the protocol is implemented, the specific model is not certified.

Everything Commercial Residential

Thermostats

The largest addressable residential load and the fastest commercial one. Setpoint offsets are reversible, cheap and invisible for short events.

DeviceReached byAuthTypical shedHow it is curtailed
Honeywell Home / Resideo driver ships
Resideo · resideo
Setpoint offset Temporary hold Reads state
https://api.honeywell.com/v2
vendor cloud
oauth2 3.0 kW changeableValues.coolSetpoint with thermostatSetpointStatus TemporaryHold.
ecobee driver ships
ecobee (Generac) · ecobee
Setpoint offset Temporary hold Occupancy Runtime telemetry
Runtime telemetry is reported in five-minute intervals, which is enough to evidence a shed without a separate meter.
https://api.ecobee.com/1
vendor cloud
oauth2 3.5 kW setHold with a cooling setpoint offset sized to the level.
Building management

Where a commercial site's real curtailment lives — chillers, AHUs, VAV boxes. One point write moves hundreds of kW.

DeviceReached byAuthTypical shedHow it is curtailed
Tridium Niagara (oBIX) driver ships
Tridium / Honeywell · obix
Meters itself Setpoint control Hard kW limit Point discovery
Niagara sits in front of an enormous installed base of otherwise unreachable equipment. Where a site has a JACE, this is usually the shortest path to every load in the building.
https://{host}/obix
on site
basic
A dedicated oBIX user on the JACE. Do not reuse an operator login.
110 kW POST a real value to the configured writable point.
Carrier / Automated Logic WebCTRL roadmap
Carrier
Meters itself Setpoint control Hard kW limit
Most WebCTRL sites are reachable over BACnet/IP as well, which needs no add-on licence — try that first.
https://{host}/_common/webservices
on site
basic
WebCTRL operator account with the SOAP/REST add-on licensed.
90 kW Write the site's demand-limit microblock input.
Distech Controls / Acuity roadmap
Acuity Brands
Meters itself Setpoint control
BACnet/IP, or the ECLYPSE REST API
on site
basic Reachable over BACnet/IP — prefer that driver.
Johnson Controls Metasys roadmap
Johnson Controls
Meters itself Setpoint control Hard kW limit
https://{host}/api/v4
on site
bearer 120 kW PUT presentValue with a priority.
Schneider EcoStruxure Building roadmap
Schneider Electric
Meters itself Setpoint control
https://{host}/api/v1
on site
basic 100 kW PUT the value on the configured point.
Siemens Desigo CC roadmap
Siemens
Meters itself Setpoint control
https://{host}/api
on site
bearer 120 kW Command a value on the point with a priority.
Lighting control

Dimming to 80% is unnoticeable and instant. Small per fixture, large per campus, and it never has a comfort complaint.

DeviceReached byAuthTypical shedHow it is curtailed
Lutron (Vive, Caséta Pro, Athena) driver ships
Lutron Electronics · lutron_leap
Dimming Reads state Per-zone
Lighting is the least-complained-about curtailment there is, and it responds in under a second.
LEAP over TLS, port 8081
on site
mtls
LEAP uses a client certificate paired once with the bridge or hub.
18 kW GoToLevel at the computed dim percentage.
Crestron 4-Series roadmap
Crestron
Dimming Per-zone
Crestron CWS / CIP
on site
bearer
CWS API token on the control processor.
Set the analog join backing the load's dim level.
DALI-2 gateway roadmap
DiiA standard
Dimming Reads state
DALI-2 via a BACnet or Modbus gateway
on site
none Broadcast ARC power level to the group. Reach it through the gateway's BACnet or Modbus driver.
Enlighted (Siemens) roadmap
Siemens
Dimming Meters itself Occupancy
Enlighted fixtures meter themselves, so a shed is evidenced without a separate meter.
https://{tenant}.enlightedinc.com/ems/api
vendor cloud
bearer 22 kW Apply a dim profile to the selected areas.
Signify Interact Pro roadmap
Signify (Philips)
Dimming Reads state
https://api.interact-lighting.com
vendor cloud
oauth2 Scene or dim level per group.
Batteries

The only asset that can both remove load and add generation. Precharge before a peak, discharge through it.

DeviceReached byAuthTypical shedHow it is curtailed
Tesla Powerwall (local gateway) driver ships
Tesla · tesla_powerwall
Meters itself State of charge Battery dispatch Reserve control Discharge on demand
The local gateway is preferred over the Fleet API: no cloud round trip, no rate limit, and it keeps working when the internet does not.
https://{gateway}/api
on site
basic 5.0 kW Lower the backup reserve so the Powerwall discharges into the site load through the event.
sonnen (sonnenBatterie) driver ships
sonnen GmbH · sonnen
Meters itself State of charge Battery dispatch Discharge on demand
http://{ip}:80/api/v2
on site
api_key
Auth-Token header, read from the battery's own web UI.
4.6 kW Manual operating mode, then a discharge setpoint in watts.
Stem Athena roadmap
Stem Inc.
Meters itself State of charge Battery dispatch
vendor cloud
bearer 250 kW Stem's own optimizer already targets demand charges — the integration is coordination, not control, and double-dispatch is the risk to design around.
Tesla Fleet API (energy sites, vehicles) roadmap
Tesla
Meters itself State of charge Reserve control Vehicle Charge Limit Vehicle Charge Amps
https://fleet-api.prd.na.vn.cloud.tesla.com/api/1
vendor cloud
oauth2
Partner registration and a hosted public key are prerequisites.
backup_reserve_percent on an energy site; set_charging_amps on a vehicle.
Solar inverters

Curtailment, power factor and, under IEEE 1547-2018, dispatchable reactive support.

DeviceReached byAuthTypical shedHow it is curtailed
Enphase IQ Gateway (local) driver ships
Enphase Energy · enphase_envoy
Meters itself State of charge
Metering at 1-second resolution locally, which is the best baseline evidence any residential site will have.
https://{envoy}
on site
bearer
A token from entrez.enphaseenergy.com, exchanged once and cached; the gateway itself validates it.
Read-only locally. Storage control needs the cloud API or a grid profile change.
Fronius driver ships
Fronius International · sunspec
Meters itself Percentage curtailment
Modbus TCP 502, SunSpec
on site
none SunSpec 123 over Modbus; the Solar API is read-only.
SMA (Sunny Tripower, Data Manager) driver ships
SMA Solar Technology · sunspec
Meters itself Percentage curtailment Power factor
Modbus TCP 502, SunSpec
on site
none
Modbus is unauthenticated; the Data Manager web UI is not.
SunSpec 123 WMaxLimPct.
SolarEdge driver ships
SolarEdge · sunspec
Meters itself Percentage curtailment Battery dispatch
Modbus TCP must be enabled on the inverter's SetApp site-communication screen; it is off by default.
https://monitoringapi.solaredge.com
either
api_key
Monitoring API key for cloud reads; local SunSpec Modbus needs no key and is where control lives.
SunSpec model 123 over local Modbus. The cloud monitoring API is read-only.
Enphase Energy API v4 roadmap
Enphase Energy
Meters itself State of charge Battery dispatch
Rate-limited by plan tier. Use the local gateway for telemetry and the cloud only for control.
https://api.enphaseenergy.com/api/v4
vendor cloud
oauth2 Battery profile and reserve through the systems endpoint.
EV charging

Large, deferrable and increasingly the biggest single load at a site. Smart charging profiles are the standard lever.

DeviceReached byAuthTypical shedHow it is curtailed
OCPP 1.6J / 2.0.1 (EV charging) driver ships
Open Charge Alliance · ocpp
Meters itself Hard kW limit Deferrable
EV load is the most deferrable thing at most sites and the least noticed when deferred.
OCPP over WebSocket at the charger; this driver calls the CSMS REST façade
on site
bearer
Against the CSMS, not the charger. The charger trusts its CSMS; we talk to that.
48 kW SetChargingProfile, TxDefaultProfile, chargingRateUnit W, limit set to the allocation.
ChargePoint roadmap
ChargePoint
Meters itself Hard kW limit Session control
SOAP
vendor cloud
basic
NOS API credentials, issued under a partner agreement.
50 kW shedLoad with an allocation per port or per station group.
Enel X JuiceBox roadmap
Enel X Way
Meters itself Hard kW limit
Enel X Way withdrew from North America in 2024; existing units run on third-party clouds. Confirm what a site is actually pointed at before promising control.
https://jbv1-api.emotorwerks.com/box_pin
vendor cloud
api_key Set the charging current cap.
Wallbox roadmap
Wallbox N.V.
Meters itself Hard kW limit Session control
https://api.wall-box.com
vendor cloud
bearer maxChargingCurrent on the charger.
Water heating

A thermal battery that already exists. CTA-2045 makes it dispatchable without touching the tank.

DeviceReached byAuthTypical shedHow it is curtailed
CTA-2045-B module (water heaters, HVAC) roadmap
ANSI/CTA standard
Native shed command Pre-load Reads state
Every major US water heater brand ships a CTA-2045 port. It is the cheapest residential kW on the market and it needs a serial adapter, not an integration.
CTA-2045-B over the UCM serial port
on site
none 4.5 kW Shed for the event duration.
Meters and gateways

Not controllable, but the measurement that makes everything else settleable.

DeviceReached byAuthTypical shedHow it is curtailed
Shelly (Pro EM, Plus series) driver ships
Allterco · rest_generic
Meters itself On/off
http://{ip}/rpc
on site
none
Optional local basic auth.
Switch the circuit off for the event window — appropriate for a discrete load, never for anything with a compressor.
Green Button Connect My Data roadmap
utility
Interval history
Already wired into the platform's rebate and program matching — see the Green Button flags on the programs page.
ESPI / Atom XML
vendor cloud
oauth2
Per-utility authorization server; the customer authorizes their own data.
Not controllable. This is where the baseline comes from.
Protocols

Generic transports. When a device is not named here, it usually still speaks one of these.

DeviceReached byAuthTypical shedHow it is curtailed
BACnet/IP (any device) driver ships
ASHRAE standard 135 · bacnet_ip
Meters itself Setpoint control Hard kW limit BACnet priority
Writing at priority 1-2 outranks life-safety interlocks. This driver refuses any priority below 8 and there is no override.
BACnet/IP over UDP 47808
on site
none
BACnet/IP has no authentication. Reach it over a management VLAN, never a routable network.
60 kW WriteProperty present-value on the configured analog-value, at priority 8 (Manual Operator).
Generic webhook driver ships
any · rest_generic
Setpoint control Hard kW limit
The escape hatch. A site with a bespoke control system can act on a dispatch in an afternoon without waiting for a driver.
HTTPS POST of the dispatch as JSON
vendor cloud
bearer POST {action, level, kw, event} to the configured URL.
Local script driver ships
any · script
Setpoint control Hard kW limit
For the site that already has automation and only needs to be told when.
Executes a configured command with the dispatch in the environment
on site
none Runs the configured command with ZK_ACTION, ZK_LEVEL, ZK_KW and ZK_EVENT_ID set.
Modbus TCP (any device) driver ships
Modbus Organization · modbus_tcp
Meters itself Setpoint control Hard kW limit
Register maps are per-product and are configured, not guessed. The driver refuses to write a register it has no map entry for.
Modbus TCP, port 502
on site
none
No authentication in the protocol. Segment the network.
Write the kW limit to a configured holding register, scaled per the register map.
SunSpec Modbus (inverters, meters, storage) driver ships
SunSpec Alliance · sunspec
Meters itself Percentage curtailment Power factor Battery dispatch
This is the reason a fleet of mixed inverters is tractable at all: one control path for every conformant device.
Modbus TCP 502, SunSpec model discovery from base 40000
on site
none Model 123 WMaxLimPct plus WMaxLim_Ena — the vendor-neutral way to curtail any conformant inverter.
IEEE 2030.5 / CSIP (Rule 21, HECO) roadmap
IEEE / SunSpec CSIP
Percentage curtailment Power factor Volt-VAR Battery dispatch
Mandatory for utility DER programs in California and Hawaii. Worth building the moment a customer has a Rule 21 obligation — it is a different trust model, not a different protocol shape.
IEEE 2030.5 over HTTPS, XML/EXI
vendor cloud
mtls
Client certificate from a CSIP-approved PKI. There is no password path.
DERControl with opModMaxLimW for the event window.
MQTT / Sparkplug B roadmap
OASIS / Eclipse
Meters itself Setpoint control
The usual answer when a site has an industrial historian and no other way in.
MQTT 3.1.1 / 5.0, optionally Sparkplug B payloads
on site
basic Publish the setpoint to the configured topic.
If your equipment is not listed

Two drivers cover the rest. rest_generic posts the dispatch to a URL you control; script runs a command with the dispatch in its environment. Either takes an afternoon at a site that already has a way to control itself, and neither waits on us.

And if a device on the roadmap is the one you have, say so from the connect page — that is what moves it up the list.

What we will not claim