Construct an oadrDistributeEvent payload per the OpenADR 2.0b schema (CTS-2-A profile) with eiEvent containing: eventID (UUID), eventStatus (far/near/active/completed), dtstart (xCal VEVENT DTSTART in UTC), duration (PT1H), and EiEventSignal with signalType LOAD_DISPATCH and currentValue in kW
Set the eventDescriptor.eiNotification.dtstart to 30 minutes before the event start to allow the VEN adequate notice; configure testEvent to false for production dispatch
Deliver the event via HTTP PUSH to the VEN's registered endpoint URL, or make the event available via PULL at the VTN's /OpenADR2/Simple/2.0b/EiEvent endpoint if the VEN uses polling
Parse the VEN's oadrCreatedEvent response containing eventResponses with optType OPTED_IN, OPTED_OUT, or X-NORESPONSE and the corresponding requestID
If optType is OPTED_OUT, log the reason code and exclude the VEN from event performance calculations
After event completion, send an updated oadrDistributeEvent with eventStatus COMPLETED and trigger M&V interval data pull from the utility AMI or building meter API
Known gotchas
OpenADR 2.0b requires mutual TLS (OADR_CTS_HTTPS) for production VTN-VEN communications; HTTP-only implementations fail certification and expose control signals to interception
The EiEvent signalPayload currentValue must use the correct unitType (REAL_POWER for kW, ENERGY for kWh); mismatched units cause the VEN to misinterpret the dispatch magnitude
VENs may legitimately take up to the notification period to respond; polling for opt-in confirmation immediately after event push will return 'pending' — wait at least the notification window before treating non-response as OPTED_OUT
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp