Packet Format
ID SEQ FLAGS PAYLOAD[0] PAYLOAD[1] ... PAYLOAD[x]
1B 1B 1B Array Array Array
| Field | Size | Value |
|---|---|---|
| ID | 1 byte | 0x78 |
| SEQ | 1 byte | Exchange operation number (0–255) |
| FLAGS | 1 byte | Device status flags |
| PAYLOAD | array | See format-specific description below |
- The
IDfield is a constant identifier of Protocol78 packets. - The
SEQfield is an exchange counter incremented with each transmission. - The
FLAGSfield contains bit flags that describe the current device state.
Detailed breakdown of each field follows in the next sections.
Device Status Flags
FLAGS — 1 byte (8 bits), each bit indicates a separate device condition.
| Bit | Flag Meaning | OrionMeter LA-IP | OrionMeter TWM | OrionLighting | LWO | SLC |
|---|---|---|---|---|---|---|
| 0 | Device type dependent | Battery low | Battery low | Schedule missing | - | - |
| 1 | Low temperature | + | + | + | + | + |
| 2 | High temperature | + | + | + | + | + |
| 3 | Tamper (magnetic) | + | + | ― | + | + |
| 4 | Device type dependent | ― | Removed | ― | - | Door opened |
| 5 | Time requires update | + | + | + | + | + |
| 6 | Device type dependent | ― | Overlight | ― | ― | ― |
| 7 | Device type dependent | ― | Reverse flow | ― | Reverse flow | ― |
Payload Field
The PAYLOAD field is a data array transmitted from the device to the application server. Each array element (PAYLOAD[0], PAYLOAD[1], ..., PAYLOAD[n]) has the following structure:
| Element | FORMAT | DATA |
|---|---|---|
| LENGTH | 1 byte | ― |
| VALUE | See below | Array |
The FORMAT field specifies the type of data being sent, and the DATA field contains the associated content. Specific FORMAT values are described in the following sections.
FORMAT Values
The FORMAT field (1 byte) defines the type of data contained in each PAYLOAD entry.
| FORMAT | Short Description | Detailed Explanation |
|---|---|---|
| 0x00 | Instant data | Snapshot of counter inputs at the moment of transmission |
| 0x01 | Archive: day, Counter 1 | Daily archive of hourly readings, Counter 1 (legacy). Timestamp = value + 3600 |
| 0x02 | Archive: day, Counter 1 | Daily archive of hourly readings, Counter 1 |
| 0x03 | Archive: day, Counter 2 | Daily archive of hourly readings, Counter 2 (legacy). Timestamp = value + 3600 |
| 0x04 | Archive: day, Counter 2 | Daily archive of hourly readings, Counter 2 |
| 0x05 | Archive: day, Counter 3 | Daily archive of hourly readings, Counter 3 (legacy). Timestamp = value + 3600 |
| 0x06 | Archive: day, Counter 3 | Daily archive of hourly readings, Counter 3 |
| 0x07 | Tamper events | Detected tampering: magnetic field or enclosure breach |
| 0x08 | Service data | Internal device information: version, configuration, etc. |
| 0x09 | Sensor archive | Historical values from analog and digital sensors |
| 0x0A | DI input events | Trigger events from discrete inputs (e.g., on/off) |
| 0x0B | DI archive events | Logged history of discrete input states and events |
| 0x10 | Description on request | Responds with structure and metadata description |
| 0x11 | Electric meter data (EM) | Received energy data from EM: energy, power, etc. |
| 0x12 | Sensor data | Flow, pressure, and temperature sensor readings |
| 0x13 | Heat meter data (HM) | Received heat consumption data from HM |
| 0x14 | Extended HM data | Additional parameters from heat meters |
| 0x15 | Meter events | Tamper, restarts, faults |
| 0x16 | Tariff schedules | Timetable for applying specific tariffs |
| 0x17 | Raw meter data | Unprocessed raw data directly from meter |
| 0x20 | MODBUS | Data read from Modbus-enabled devices |
| 0x30 | SLC schedule | Device control based on predefined SLC schedule |
Since the FORMAT field does not specify the exact length of the DATA section, the decoder must support all FORMAT types described in this document.
If an unknown FORMAT value is encountered, further processing must be halted and the remainder of the packet ignored.