Skip to main content

Resources

Now that we have a site, we can add flexible resources to it. This step is crucial for providing flexibility and enables our platform to accurately gauge activation rates, resulting in more activations for your resources. 🚀

Types​

There's a long list of resources (devices, assets) that can be flexible, the most common ones are listed below.

The Powernaut platform is indifferent to the type of resource, meaning all types can be registered. However, the type of asset is a required data point to adequately activate flexibility.

  • Batteries
  • Electric Vehicles (EV)
  • Charging stations for EVs
  • Heat pumps
  • Solar panels
  • Electrical boilers
  • Windmill

Managing​

Creating​

To create a new flexible resource, you need at least its site, type and power constraints.

import requests
import json

url = "https://api.powernaut.io/v1/connect/resources"

payload = json.dumps({
"site_id": "<uuid>",
"type": "electric_vehicle_charging_point",
"power": {
"active": {
"minimum": "0",
"maximum": "7.4"
}
}
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer <token>'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
Numbers

You'll notice that throughout the API, numbers are communicated with a string datatype, instead of the usual number. This is on purpose, and is done to avoid floating point errors. Number types will be rejected by the API.

Update​

You can also update a resource, e.g. update its name.

import requests
import json

url = "https://api.powernaut.io/v1/connect/resources/<uuid>"

payload = json.dumps({
"name": "Home Battery"
})
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer <token>'
}

response = requests.request("PATCH", url, headers=headers, data=payload)

print(response.text)

Delete​

Deleting a resource is done similarly to sites:

import requests

url = "https://api.powernaut.io/v1/connect/resources/<uuid>"

payload = {}
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer <token>'
}

response = requests.request("DELETE", url, headers=headers, data=payload)

print(response.text)
warning

Deleting a resource is a permanent action and will delete all future flexibility. Ensure this is the intended action. The API will reject the creation of bids and baselines for resources that have been deleted.

In the case that a bid was selected for a procurement in the future, this bid will also be cancelled and the resource will not be activated.

Listing​

You can fetch a resource by its ID, or list all of them.

Listing all Resources​

import requests

url = "https://api.powernaut.io/v1/connect/resources"

payload = {}
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer <token>'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Listing a Site's Resources​

import requests

url = "https://api.powernaut.io/v1/connect/resources"

payload = {}
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer <token>'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)

Status​

We continuously monitor all resources through automated health checks. The status of all these health checks is aggregated into a single, high-level resource status, providing a quick overview of a resource's operational readiness.

StatusMeaning
onboardingThe resource has been added to the platform, but no meter data has been received yet.
operationalAll health checks are successful.
degradedSome health checks are failing. This causes suboptimal steering.
suspendedThe resource has failing health checks.

â„šī¸ Note on a Future Update: For now, the statuses are purely informational to help you troubleshoot and resolve issues with your resources. In a future update, resources with status suspended will no longer be eligible to have their flexibility bids activated.

Health checks​

The Powernaut platform performs several health checks on each resource to ensure it's functioning properly and can deliver flexibility as promised.

Availability​

The availability health check monitors if the Powernaut platform is receiving meter data from the resource.

StatusMeaning
initialHealth check hasn't run yet.
onlineThe platform is receiving meter data.
offlineThe platform hasn't received any data for the past 15 minutes.

Activation compliance​

🚧 We are working to add this health check

The activation compliance health check monitors if resources are accurately delivering as much flex as was requested.

StatusMeaning
initialHealth check hasn't run yet.
compliantThe resource is delivering between 60-140% of the energy requested.
not_compliantDelivered energy deviates more than 40% from the energy requested for 4 consecutive quarter hours.

Baselines too inaccurate​

🚧 We are working to add this health check

This health check monitors the accuracy of the baselines for your site and resources. Without accurate baselines we cannot verify the delivered flexibility accurately.

Keep the following in mind:

  • For connection points, baselines need to be accurate even when their individual resources are not bidding, as they might be part of a larger pool that is being balanced.
  • You can update baselines for any resource on a connection point up until the moment the first resource on that connection point gets activated. We encourage you to take full advantage of this window to finalise your baselines for maximum accuracy and fair settlement.
StatusMeaning
initialHealth check hasn't run yet.
accurateBaseline is accurate.
inaccurateNormalised MAE* of corresponding site's baseline is larger than 0.75 for over 1 day.

* MAE stands for Mean Absolute Error. This is the average of the difference between the baseline and actual meter data. We normalise MAE by dividing by the average absolute consumption.

No Bids​

🚧 We are working to add this health check

This health check monitors the bids made by a resource. If a resource has not made any bids for a long time, something is probably wrong. To see how we expect resources to bid have a look at our examples.

StatusMeaning
initialHealth check hasn't run yet.
activeResource is actively making bids.
no_bidsResource has not made any bids for a longer period.

When we flag resources for not bidding depends on the resource type:

  • Solar Panels: after 1 day
  • Batteries: after 1 day
  • Electric Vehicles: after 5 days

Meter data anomalies​

🚧 We are working to add this health check

This health check monitors if resources submit weird meter data.

StatusMeaning
initialHealth check hasn't run yet.
okResource has logged meter data correctly.
rare_anomalyLess than 1% of meter data is outside of bounds in the last 1 day.
frequent_anomalyMore than 1% of meter data is outside of bounds in the last 1 day.