Report Objects¶
Document Context¶
- Purpose: Documents raw DLMS/COSEM objects endpoint for accessing meter-native OBIS codes and understanding available measurements
- When to use: Debugging meter communication, mapping custom scalers, understanding meter capabilities, developing OBIS code parsers
- Prerequisites: Knowledge of DLMS/COSEM protocol, OBIS code structure, energy meter communication standards
- Related to: Report polling endpoint, meter communication settings, OBIS reference documentation, custom scalers
- Validates against: Live OBIS object lists from connected smart meters via real device testing
Key Facts¶
- Endpoint: /api/v1/report/objects
- Methods: GET only
- License: Plus or higher required
- Authentication: HTTP Authentication (when device protection enabled)
- Response format: JSON with OBIS logical names and DLMS classes
- Data source: Direct from meter COSEM interface (not processed by device)
- Use cases: Diagnostics, custom parsing, meter capability discovery
- OBIS classes: Class 1 (data), Class 3 (register), Class 40 (push objects)
- Meter dependency: Requires active meter connection and communication
Endpoint Details¶
This endpoint exposes raw DLMS/COSEM objects (OBIS codes) reported by the meter. It is useful for diagnostics, understanding available measurements, and mapping scalers/units.
| Endpoint | api/v1/report/objects |
|---|---|
| Method | GET |
| Response content type | application/json |
Authentication
When a Web UI password is set, HTTP endpoints require HTTP authentication.
Firmware 1.10.X and later: Uses HTTP Digest authentication
- Server challenges with WWW-Authenticate: Digest … (realm is the device hostname)
- Algorithm: MD5-sess (device advertises MD5-sess; integrity variant supported)
- qop: auth (and optionally auth-int for requests with body integrity)
- Nonce and opaque are issued by the device; the client must include cnonce and increment nc
- Expired nonce: server may return 401 with WWW-Authenticate: …, stale=true.
In that case, retry the same request once using the new server challenge, a new cnonce, and reset nc=00000001.
Firmware before 1.10.X: Uses HTTP Basic authentication
- Server challenges with WWW-Authenticate: Basic realm="..."
- Credentials are base64-encoded in Authorization: Basic <encoded-credentials>
Recommended approach: Use --anyauth in curl to automatically detect and use the appropriate method:
Requires Plus license
This endpoint group is available only with an active Plus or higher license.
On devices without the required license, the firmware returns 404 License required
for gated routes using the original HTTP method of the endpoint.
See the REST API License Requirements page for the full endpoint list.
Example response (from device 192.168.99.114)¶
{
"objects": [
{
"logical_name": "0-8:25.9.0",
"class": 40,
"size": 28,
"push_object_list": [
{ "logical_name": "0-8:25.9.0", "class": 40, "attribute": 2, "data_index": 0 },
{ "logical_name": "0-0:42.0.0", "class": 1, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-1:1.8.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-1:2.8.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-1:3.8.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-1:4.8.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "0-0:96.14.0", "class": 1, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:1.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:2.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:32.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:52.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:72.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:31.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:51.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-0:71.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:21.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:41.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:61.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:22.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:42.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:62.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:23.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:43.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:63.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:24.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:44.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "1-4:64.7.0", "class": 3, "attribute": 2, "data_index": 0 },
{ "logical_name": "0-0:96.13.0", "class": 1, "attribute": 2, "data_index": 0 }
]
},
{ "logical_name": "0-0:42.0.0", "class": 1, "tag": 9, "size": 16, "value": "4C475A31303330373834383535323034" },
{ "logical_name": "1-1:1.8.0", "class": 3, "tag": 21, "size": 8, "value": 75133, "unit": 30, "scaler": 0 },
{ "logical_name": "1-1:2.8.0", "class": 3, "tag": 21, "size": 8, "value": 25414, "unit": 30, "scaler": 0 },
{ "logical_name": "1-1:3.8.0", "class": 3, "tag": 21, "size": 8, "value": 82328, "unit": 32, "scaler": 0 },
{ "logical_name": "1-1:4.8.0", "class": 3, "tag": 21, "size": 8, "value": 19481, "unit": 32, "scaler": 0 },
{ "logical_name": "0-0:96.14.0", "class": 1, "tag": 9, "size": 8, "value": "5241544531000000" },
{ "logical_name": "1-0:1.7.0", "class": 3, "tag": 20, "size": 8, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-0:2.7.0", "class": 3, "tag": 20, "size": 8, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-0:32.7.0", "class": 3, "tag": 20, "size": 8, "value": 234, "unit": 35, "scaler": 0 },
{ "logical_name": "1-0:52.7.0", "class": 3, "tag": 20, "size": 8, "value": 0, "unit": 35, "scaler": 0 },
{ "logical_name": "1-0:72.7.0", "class": 3, "tag": 20, "size": 8, "value": 0, "unit": 35, "scaler": 0 },
{ "logical_name": "1-0:31.7.0", "class": 3, "tag": 20, "size": 8, "value": 0, "unit": 33, "scaler": -2 },
{ "logical_name": "1-0:51.7.0", "class": 3, "tag": 20, "size": 8, "value": 0, "unit": 33, "scaler": -2 },
{ "logical_name": "1-0:71.7.0", "class": 3, "tag": 20, "size": 8, "value": 0, "unit": 33, "scaler": -2 },
{ "logical_name": "1-4:21.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-4:41.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-4:61.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-4:22.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-4:42.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-4:62.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 27, "scaler": 0 },
{ "logical_name": "1-4:23.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 29, "scaler": 0 },
{ "logical_name": "1-4:43.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 29, "scaler": 0 },
{ "logical_name": "1-4:63.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 29, "scaler": 0 },
{ "logical_name": "1-4:24.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 29, "scaler": 0 },
{ "logical_name": "1-4:44.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 29, "scaler": 0 },
{ "logical_name": "1-4:64.7.0", "class": 3, "tag": 6, "size": 4, "value": 0, "unit": 29, "scaler": 0 },
{ "logical_name": "0-0:96.13.0", "class": 1, "tag": 9, "size": 21, "value": "436F6E73756D6572204D6573736167652054657874" }
]
}
Tip: See OBIS reference to interpret logical names and DLMS units.
Field reference¶
Base fields for every object:
| Field | Type | Description |
|---|---|---|
objects[] |
array | List of DLMS/COSEM objects present in the last report |
objects[].logical_name |
string | OBIS code in A-B:C.D.E notation |
objects[].class |
uint | COSEM class id (e.g., 1=Data, 3=Register, 4=Extended Register, 8=Clock, 40=Push setup) |
Class-specific fields:
- Class 1 — Data
tag(uint): DLMS data type tagsize(uint): payload length-
value(string/number): value; OCTET STRINGs are hex-encoded; DATE_TIME rendered as ISO8601 local time -
Class 3 — Register (scalable values)
tag(uint),size(uint)value(number)unit(uint): DLMS unit id (see OBIS appendix)-
scaler(int): power-of-ten exponent; physical = value × 10^scaler -
Class 4 — Extended Register
- All fields of Class 3, plus:
status(object):{ tag, size, value }-
captired_time(string): ISO8601 local timestamp captured by meter (note: key name as exposed by API) -
Class 8 — Clock
value(string): ISO8601 local timetime_zone(int)-
status(int) -
Class 40 — Push setup
size(uint): number of itemspush_object_list(array): items with fields{ logical_name, class, attribute, data_index }
Notes¶
- Availability depends on the meter protocol (DLMS/COSEM). Non-COSEM meters may return fewer objects.
- For string OCTET values (tag 9), you can decode hex to ASCII to obtain text (e.g., meter identifiers, messages).
- Use Current scalers or Custom scalers to adjust presentation units.