Files
vlt/SwD/SiteComm/AssuranceSiteCT/Assurance SiteCT Success Events.md
T
2026-09-18 23:22:55 +10:00

15 KiB

Concept

SiteCT is an instance of what SwD calls an Assurance Assurances are essentially runtime validations of arbitrary behaviours concerning a client device or utility server itself. Some examples:

  • Validating a device is responding to DERControl commands by checking for DERControlResponses and MirrorMeterReadings (SiteCT)
  • Checking that an aggregator is respecting its set Post/Poll Rates
  • Confirming the UTSRV is generating correct DERControlLists

Structure

Assurances have 3 phases:

  1. Setup
  2. Execution
  3. Teardown

By way of example, in SiteCT these phases have (at time of writing) steps:

  1. Setup
    • Reduce ControlPollRate MeteringListPollRate and MeteringListPostRate to 60s
    • This ensures the device or aggregator responds more quickly to the test and reduces the time the installer has to wait for the test to complete.
  2. Execution
    • The execution consists of the criteria specified in the AssuranceSiteCTExportLimitTelemetry :
      • Assign target device a DefaultDERControl exportLimit=1500W
      • Confirm the device is exporting ~1500W
      • Assign the target device a DERControl exportLimit=0W
  3. Teardown
    • Reset the device's post and polling rates

Events - Successful SiteCT

Events are POSTed to APIM as they happen. The id UUID identifies an individual Assurance The latest updated time telemetry should be considered the source of truth.

What follows are the messages delivered to APIM throughout a SiteCT Export limit test being carried out against the device with LFDI 56a642ff591d939b5f1251bded4d591100052956

Setup

Initially the AssuranceSiteCTTelemetry is empty. All the criteria are pending, all the messages are empty:

{
 "id": "77dd28a4-697f-49de-af7f-8e608761f230",
 "lFDI": "56a642ff591d939b5f1251bded4d591100052956",
 "created": "2025-08-25T01:45:57.339610Z",
 "updated": "2025-08-25T01:45:57.339615Z",
 "status": "pending",
 "message": "",
 "name": "sitectexportlimit",
 "criteria": {
  "a": {
   "updated": "2025-08-25T01:45:57.339627Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power within specified range [CRITERIA A]",
   "result": null,
   "message": "",
   "status": "pending"
  },
  "b": {
   "updated": "2025-08-25T01:45:57.339637Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was received [CRITERIA B]",
   "result": null,
   "message": "",
   "status": "pending"
  },
  "c": {
   "updated": "2025-08-25T01:45:57.339641Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was started [CRITERIA C]",
   "result": null,
   "message": "",
   "status": "pending"
  },
  "d": {
   "updated": "2025-08-25T01:45:57.339646Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power to be within the limited (0) range [CRITERIA D]",
   "result": null,
   "message": "",
   "status": "pending"
  },
  "e": {
   "updated": "2025-08-25T01:45:57.339650Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the control was completed [CRITERIA E]",
   "result": null,
   "message": "",
   "status": "pending"
  }
 }
}

Criteria A

The test begins and the server fills out some details, such as the mRID of the control it is expecting the device to respond to: 1e3584919ce1f6e175d72f9900054666 The device then posts a MMR showing that it is conforming to its DefaultDERControl. This reading actually predates the test initiation as you can see by the start time; the aggregator has delivered it in the latest batch of readings from the last few minutes. It is unimportant as we're simply confirming the device is respecting its default control and able to export.

{
 "id": "77dd28a4-697f-49de-af7f-8e608761f230",
 "lFDI": "56a642ff591d939b5f1251bded4d591100052956",
 "created": "2025-08-25T01:45:57.339610Z",
 "updated": "2025-08-25T01:45:57.339615Z",
 "status": "pending",
 "message": "Test Started",
 "name": "sitectexportlimit",
 "criteria": {
  "a": {
   "updated": "2025-08-25T01:46:08.449832Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power within specified range [CRITERIA A]",
   "result": {
       "value": 1494.58,
       "start": "2025-08-25T01:44:55.732Z",
       "duration": "P3D",
       "unit": "watt",
       "type": "siterealpower"
   },
   "message": "Site is reporting generation of -1494.58W.",
   "status": "success"
  },
  "b": {
   "updated": "2025-08-25T01:45:57.339637Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was received [CRITERIA B]",
   "result": null,
   "message": "Awaiting RECEIVED response for mRID 1e3584919ce1f6e175d72f9900054666",
   "status": "pending"
  },
  "c": {
   "updated": "2025-08-25T01:45:57.339641Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was started [CRITERIA C]",
   "result": null,
   "message": "Awaiting STARTED response for mRID 1e3584919ce1f6e175d72f9900054666",
   "status": "pending"
  },
  "d": {
   "updated": "2025-08-25T01:45:57.339646Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power to be within the limited (0) range [CRITERIA D]",
   "result": null,
   "message": "",
   "status": "pending"
  },
  "e": {
   "updated": "2025-08-25T01:45:57.339650Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the control was completed [CRITERIA E]",
   "result": null,
   "message": "Awaiting COMPLETED response for mRID 1e3584919ce1f6e175d72f9900054666",
   "status": "pending"
  }
 }
}

Criteria B

After ~2m the aggregator notifies the UTSRV that the device has received the control to reduce its export to 0W. This significant delay is one of the reasons why the ControlListPoll rate is reduced at the start of the test. The client is instructed to fetch this list every minute, but they do not always comply.

{
 "id": "77dd28a4-697f-49de-af7f-8e608761f230",
 "lFDI": "56a642ff591d939b5f1251bded4d591100052956",
 "created": "2025-08-25T01:45:57.339610Z",
 "updated": "2025-08-25T01:45:57.339615Z",
 "status": "pending",
 "message": "Test Started",
 "name": "sitectexportlimit",
 "criteria": {
  "a": {
   "updated": "2025-08-25T01:45:57.339627Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power within specified range [CRITERIA A]",
   "result": {
       "value": 1494.58,
       "start": "2025-08-25T01:44:55.732Z",
       "duration": "P3D",
       "unit": "watt",
       "type": "siterealpower"
   },
   "message": "Site is reporting generation of -1494.58W.",
   "status": "success"
  },
  "b": {
   "updated": "2025-08-25T01:47:44.44667Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was received [CRITERIA B]",
   "result": {
    "createdDateTime": "2025-08-25T01:47:44Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 1
   },
   "message": "Site has received controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  },
  "c": {
   "updated": "2025-08-25T01:45:57.339641Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was started [CRITERIA C]",
   "result": null,
   "message": "Awaiting STARTED response for mRID 1e3584919ce1f6e175d72f9900054666",
   "status": "pending"
  },
  "d": {
   "updated": "2025-08-25T01:45:57.339646Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power to be within the limited (0) range [CRITERIA D]",
   "result": null,
   "message": "",
   "status": "pending"
  },
  "e": {
   "updated": "2025-08-25T01:45:57.339650Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the control was completed [CRITERIA E]",
   "result": null,
   "message": "Awaiting COMPLETED response for mRID 1e3584919ce1f6e175d72f9900054666",
   "status": "pending"
  }
 }
}

Criteria C

A few seconds later, the device reports it has started the curtailment control.

{
 "id": "77dd28a4-697f-49de-af7f-8e608761f230",
 "lFDI": "56a642ff591d939b5f1251bded4d591100052956",
 "created": "2025-08-25T01:45:57.339610Z",
 "updated": "2025-08-25T01:47:47.322671Z",
 "status": "pending",
 "message": "Test Started",
 "name": "sitectexportlimit",
 "criteria": {
  "a": {
   "updated": "2025-08-25T01:45:57.339627Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power within specified range [CRITERIA A]",
   "result": {
       "value": 1494.58,
       "start": "2025-08-25T01:44:55.732Z",
       "duration": "P3D",
       "unit": "watt",
       "type": "siterealpower"
   },
   "message": "Site is reporting generation of -1494.58W.",
   "status": "success"
  },
  "b": {
   "updated": "2025-08-25T01:47:44.44667Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was received [CRITERIA B]",
   "result": {
    "createdDateTime": "2025-08-25T01:47:44Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 1
   },
   "message": "Site has received controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  },
  "c": {
   "updated": "2025-08-25T01:47:47.322671Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was started [CRITERIA C]",
   "result": {
    "createdDateTime": "2025-08-25T01:47:47Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 2
   },
   "message": "Site has started controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  },
  "d": {
   "updated": "2025-08-25T01:45:57.339646Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power to be within the limited (0) range [CRITERIA D]",
   "result": null,
   "message": "",
   "status": "pending"
  },
  "e": {
   "updated": "2025-08-25T01:45:57.339650Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the control was completed [CRITERIA E]",
   "result": null,
   "message": "Awaiting COMPLETED response for mRID 1e3584919ce1f6e175d72f9900054666",
   "status": "pending"
  }
 }
}

Criteria D

The site reports reduced generation:

{
 "id": "77dd28a4-697f-49de-af7f-8e608761f230",
 "lFDI": "56a642ff591d939b5f1251bded4d591100052956",
 "created": "2025-08-25T01:45:57.339610Z",
 "updated": "2025-08-25T01:47:47.322671Z",
 "status": "pending",
 "message": "Test Started",
 "name": "sitectexportlimit",
 "criteria": {
  "a": {
   "updated": "2025-08-25T01:45:57.339627Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power within specified range [CRITERIA A]",
   "result": {
       "value": 1494.58,
       "start": "2025-08-25T01:44:55.732Z",
       "duration": "P3D",
       "unit": "watt",
       "type": "siterealpower"
   },
   "message": "Site is reporting generation of -1494.58W.",
   "status": "success"
  },
  "b": {
   "updated": "2025-08-25T01:47:44.44667Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was received [CRITERIA B]",
   "result": {
    "createdDateTime": "2025-08-25T01:47:44Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 1
   },
   "message": "Site has received controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  },
  "c": {
   "updated": "2025-08-25T01:47:47.322671Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was started [CRITERIA C]",
   "result": {
    "createdDateTime": "2025-08-25T01:47:47Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 2
   },
   "message": "Site has started controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  },
  "d": {
   "updated": "2025-08-25T01:45:57.339646Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power to be within the limited (0) range [CRITERIA D]",
   "result": {
       "value": -6.2540000000000004,
       "start": "2025-08-25T23:37:43.732Z",
       "duration": "P3D",
       "unit": "watt",
       "type": "siterealpower"
   },
   "message": "Site has reduced generation to -6.2540000000000004W.",
   "status": "success"
  },
  "e": {
   "updated": "2025-08-25T01:45:57.339650Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the control was completed [CRITERIA E]",
   "result": null,
   "message": "Awaiting COMPLETED response for mRID 1e3584919ce1f6e175d72f9900054666",
   "status": "pending"
  }
 }
}

Criteria E - Completed

The device reports completing the curtailment control and the Assurance is marked as Success

{
 "id": "77dd28a4-697f-49de-af7f-8e608761f230",
 "lFDI": "56a642ff591d939b5f1251bded4d591100052956",
 "created": "2025-08-25T01:45:57.339610Z",
 "updated": "2025-08-25T01:56:09.339650Z",
 "status": "success",
 "message": "Assurance Complete",
 "name": "sitectexportlimit",
 "criteria": {
  "a": {
   "updated": "2025-08-25T01:45:57.339627Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power within specified range [CRITERIA A]",
   "result": {
       "value": 1494.58,
       "start": "2025-08-25T01:44:55.732Z",
       "duration": "P3D",
       "unit": "watt",
       "type": "siterealpower"
   },
   "message": "Site is reporting generation of -1494.58W.",
   "status": "success"
  },
  "b": {
   "updated": "2025-08-25T01:47:44.44667Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was received [CRITERIA B]",
   "result": {
    "createdDateTime": "2025-08-25T01:47:44Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 1
   },
   "message": "Site has received controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  },
  "c": {
   "updated": "2025-08-25T01:47:47.322671Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the limit control was started [CRITERIA C]",
   "result": {
    "createdDateTime": "2025-08-25T01:47:47Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 2
   },
   "message": "Site has started controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  },
  "d": {
   "updated": "2025-08-25T01:47:58.251646Z",
   "description": "Wait for a MirrorMeterReading event (POST) for (Site or DER) Real Power to be within the limited (0) range [CRITERIA D]",
   "result": {
       "value": -6.2540000000000004,
       "start": "2025-08-25T01:47:57.555Z",
       "duration": "P3D",
       "unit": "watt",
       "type": "siterealpower"
   },
   "message": "Site has reduced generation to -6.2540000000000004W.",
   "status": "success"
  },
  "e": {
   "updated": "2025-08-25T01:56:09.339650Z",
   "description": "Wait for a DERControlResponse event (POST) to confirm the control was completed [CRITERIA E]",
   "result": {
    "createdDateTime": "2025-08-25T01:56:09Z",
    "endDeviceLFDI": "56a642ff591d939b5f1251bded4d591100052956",
    "subject": "1e3584919ce1f6e175d72f9900054666",
    "status": 3
   },
   "message": "Site has completed controlId 1e3584919ce1f6e175d72f9900054666",
   "status": "success"
  }
 }
}