Historical and live data
Logs and data retrieval
Measurement data in the Plugwise API is exposed through logs. Logs represent time-based measurements and are available on both locations and appliances.
There are three log types:
| Log type | Description |
|---|---|
point_log | Instantaneous values (e.g. power in W, temperature in °C) |
interval_log | Aggregated values over intervals (e.g. energy in Wh per period) |
cumulative_log | Continuously increasing counters |
Logs are always associated with a specific resource (location or appliance) and can be accessed via dedicated endpoints or embedded within resource responses.
Time filtering
Most log endpoints support:
@from→ start timestamp@to→ end timestamp@interval→ aggregation interval
If no time range is specified, the API returns data based of the most recent day for each log with available measurements.
Historical data
GET /core/{resource}{;id={resource_id}}/{log_type}
This endpoint retrieves historical measurement data for locations or appliances. Data can be returned for all resources or scoped to a single resource.
⚠️ Requests over large date ranges can be slow.
Scope
| Variant | Description |
|---|---|
/core/locations/... | Returns logs for all locations |
/core/locations;id={location_id}/... | Returns logs for a single location |
/core/appliances/... | Returns logs for all appliances |
/core/appliances;id={appliance_id}/... | Returns logs for a single appliance |
Log type
| Path segment | Description |
|---|---|
logs | All available log types |
point_logs | Instantaneous measurements (e.g. power in W, temperature in °C) |
interval_logs | Interval-based data (e.g. energy in Wh per period) |
cumulative_logs | Cumulative counters |
Filter parameters
| Parameter | Type | Description |
|---|---|---|
type | string | Comma-separated list of log types (e.g. electricity_consumed, electricity_produced). |
class:neq | filter | Optional filter to exclude logs. |
@from | string | Start of the requested time range in ISO 8601 format (UTC). |
@to | string | End of the requested time range in ISO 8601 format (UTC). |
@interval | string | Aggregation interval, for example PT1H (hourly), P1D (daily), or P1W (weekly). |
Default time range behaviour
If no @from and @to parameters are provided, the API returns data based on the most recent available measurements per log.
- For each log, the system determines the latest available measurement date
- All measurements from that same calendar day are returned
- This behaviour is applied independently per log
Example
- Log A has measurements today → returns all measurements from today
- Log B has last measurement 3 days ago → returns all measurements from that day
- Log C has last measurement 1 week ago → returns all measurements from that day
As a result, the response may contain data from different dates across logs.
💡 To ensure a consistent time range across all logs, always specify both
@fromand@to.
Response
Returns a <locations> or <appliances> element containing one or more resource elements. Each resource includes <interval_log> and/or <point_log> elements with aggregated measurements.
| Attribute | Type | Description |
|---|---|---|
unit | string | e.g. Wh or W |
type | string | Log type, for example electricity_consumed. |
interval | duration | Interval of underlying data, for example PT5M |
period start_date | datetime | Start of aggregated period |
period end_date | datetime | End of aggregated period |
period interval | duration | Aggregation interval applied to the data. |
measurement log_date | datetime | Timestamp of each aggregated datapoint |
measurement tariff | string | e.g. nl_peak, nl_offpeak |
| measurement (value) | number | Measured values |
Example requests
All locations, all log types
GET /core/locations/logs
All locations, point logs
GET /core/locations/point_logs
Single location, all log types
GET /core/locations;id=80ea9c3b292e4d65bf192011929df27b/logs
Single location, interval logs (daily aggregation)
GET /core/locations;id=80ea9c3b292e4d65bf192011929df27b/interval_logs;type=electricity_consumed,electricity_produced;@from=2025-08-03T22:00:00.000Z;@to=2025-08-10T22:00:00.000Z;@interval=P1D
Single location, interval logs (weekly aggregation)
GET http/core/locations;id=80ea9c3b292e4d65bf192011929df27b/logs;class:neq:CumulativeLogFunctionality;type=electricity_consumed,electricity_produced;@from=2025-08-03T22:00:00.000Z;@to=2025-08-10T22:00:00.000Z;@interval=P1D
All appliances, all log types
GET /core/appliances/logs
Example response
<locations>
<location id='80ea9c3b292e4d65bf192011929df27b'>
<logs>
<interval_log id='e7ea3b3c1dbf4ac8b891c44b0afe522b'>
<unit>Wh</unit>
<type>electricity_produced</type>
<interval>PT5M</interval>
<last_consecutive_log_date>2025-08-08T13:50:00+02:00</last_consecutive_log_date>
<updated_date>2025-08-08T13:55:00+02:00</updated_date>
<period start_date="2025-08-08T00:00:00.000+02:00" end_date="2025-08-08T14:00:00.000+02:00" interval="PT1H">
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_peak">0</measurement>
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_offpeak">0</measurement>
<!-- more data -->
</period>
</interval_log>
<interval_log id='9b6fdbe5ff374e61b976f034fa403a3b'>
<unit>Wh</unit>
<type>electricity_consumed</type>
<interval>PT5M</interval>
<last_consecutive_log_date>2025-08-08T13:50:00+02:00</last_consecutive_log_date>
<updated_date>2025-08-08T13:55:00+02:00</updated_date>
<period start_date="2025-08-08T00:00:00.000+02:00" end_date="2025-08-08T14:00:00.000+02:00" interval="PT1H">
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_peak">0</measurement>
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_offpeak">876</measurement>
<!-- more data -->
</period>
</interval_log>
<point_log id='b5a66250bf374b29839dc924388f9bef'>
<unit>W</unit>
<type>electricity_produced</type>
<interval/>
<last_consecutive_log_date>2025-08-08T13:59:44+02:00</last_consecutive_log_date>
<updated_date>2025-08-08T13:59:44+02:00</updated_date>
<period start_date="2025-08-08T00:00:00.000+02:00" end_date="2025-08-08T15:00:00.000+02:00" interval="PT1H">
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_peak">0.00</measurement>
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_offpeak">0.00</measurement>
<!-- more data -->
</period>
</point_log>
<point_log id='7dc573ceeb314dc5ba62d73aeb929b73'>
<unit>W</unit>
<type>electricity_consumed</type>
<interval/>
<last_consecutive_log_date>2025-08-08T13:59:44+02:00</last_consecutive_log_date>
<updated_date>2025-08-08T13:59:44+02:00</updated_date>
<period start_date="2025-08-08T00:00:00.000+02:00" end_date="2025-08-08T15:00:00.000+02:00" interval="PT1H">
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_peak">0.00</measurement>
<measurement log_date="2025-08-08T00:00:00.000+02:00" tariff="nl_offpeak">579.00</measurement>
<!-- more data -->
</period>
</point_log>
</logs>
</location>
</locations>
Live updates
For live user interface updates, Plugwise clients typically poll /core/domain_objects for incrementally changed objects. Updated location and appliance objects may contain refreshed electricity measurements and actuator state.
The recommended approach is to poll /core/domain_objects every few seconds and request only objects that have changed since the last known timestamp.
GET /core/domain_objects;modified_date:ge:{timestamp};deleted_date:ge:0;@memberModifiedDate={timestamp}
This returns domain objects that were created, updated, or deleted since the given timestamp. Updated appliance and location objects may contain refreshed electricity logs, relay state changes, or other measurement updates.
Polling interval
A polling interval of approximately 5 seconds is typically used by the Plugwise user interface.
Scope parameters
| Parameter | Type | Description |
|---|---|---|
timestamp | integer | Unix timestamp used as the lower bound for incremental updates |
Filter parameters
| Parameter | Type | Description |
|---|---|---|
modified_date:ge | filter | Return objects whose modified_date is greater than or equal to the given Unix timestamp |
deleted_date:ge | filter | Return objects whose deleted_date is greater than or equal to the given value, typically 0 |
@memberModifiedDate | integer | Lower bound for updated nested members within returned domain objects |
@locale | string | Optional locale for localised values, for example nl |
Example requests
GET /core/domain_objects;modified_date:ge:1776256875;deleted_date:ge:0;@memberModifiedDate=1776256875
GET /core/domain_objects;modified_date:ge:1776256880;deleted_date:ge:0;@memberModifiedDate=1776256880
GET /core/domain_objects;modified_date:ge:1776256886;deleted_date:ge:0;@memberModifiedDate=1776256886
Response
Returns a <domain_objects> structure containing updated resources such as <location>, <appliance>, and related nested elements.
Updated objects may include:
- refreshed
<logs>(e.g. electricity consumption or production) - updated
<actuator_functionalities>(e.g. relay state) - metadata changes (e.g. name, preset, grouping)
Notes
- This endpoint is more suitable for live UI updates than repeatedly requesting full log collections
- For historical charts and time aggregation, use the historical log endpoints instead
- A polling interval of around 5 seconds is typically sufficient