Skip to main content

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 typeDescription
point_logInstantaneous values (e.g. power in W, temperature in °C)
interval_logAggregated values over intervals (e.g. energy in Wh per period)
cumulative_logContinuously 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

VariantDescription
/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 segmentDescription
logsAll available log types
point_logsInstantaneous measurements (e.g. power in W, temperature in °C)
interval_logsInterval-based data (e.g. energy in Wh per period)
cumulative_logsCumulative counters

Filter parameters

ParameterTypeDescription
typestringComma-separated list of log types (e.g. electricity_consumed, electricity_produced).
class:neqfilterOptional filter to exclude logs.
@fromstringStart of the requested time range in ISO 8601 format (UTC).
@tostringEnd of the requested time range in ISO 8601 format (UTC).
@intervalstringAggregation 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 @from and @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.

AttributeTypeDescription
unitstringe.g. Wh or W
typestringLog type, for example electricity_consumed.
intervaldurationInterval of underlying data, for example PT5M
period start_datedatetimeStart of aggregated period
period end_datedatetimeEnd of aggregated period
period intervaldurationAggregation interval applied to the data.
measurement log_datedatetimeTimestamp of each aggregated datapoint
measurement tariffstringe.g. nl_peak, nl_offpeak
measurement (value)numberMeasured 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

ParameterTypeDescription
timestampintegerUnix timestamp used as the lower bound for incremental updates

Filter parameters

ParameterTypeDescription
modified_date:gefilterReturn objects whose modified_date is greater than or equal to the given Unix timestamp
deleted_date:gefilterReturn objects whose deleted_date is greater than or equal to the given value, typically 0
@memberModifiedDateintegerLower bound for updated nested members within returned domain objects
@localestringOptional 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