Перейти до вмісту

Device Templates Reference

Цей контент ще не доступний вашою мовою.

This reference covers the technical specification of the device template Excel file format used for import and export in Overvis Cloud. For a general overview of how templates work, see the Device Templates guide.

Device templates use the Microsoft Excel .xlsx format. Only .xlsx is accepted — older .xls files, CSV, and other formats are not supported.

A template workbook contains two required sheets and two optional sheets. The sheet names are exact and case-sensitive — any unrecognized sheet name causes an import error.

SheetRequiredPurpose
InfoYesDevice metadata and communication settings
ParamsYesParameter definitions (one row per parameter)
VisualizationNoEmbeddable device visualization (HTML/JS source)
AlertsNoAlert template definitions in YAML format

The Info sheet stores device-level metadata and communication defaults. Values are read from fixed cell positions (not by column headers).

RowColumn A (1) — labelColumn B (2) — valueRequired
1Manufacturer:Manufacturer name (up to 200 characters)No
2Model:Template name / device model (1–200 characters)Yes
3Device Version:Version string (up to 50 characters)No
4Category:Category text (up to 200 characters)No
5(empty)
6Read Group Size:Integer 1–255Yes
7Write Function:normal, always-6, or always-16Yes

Description is stored in column D (4), starting from row 2. If the description is longer than 32,000 characters, it is split across multiple cells in that column (row 2, row 3, etc.). On import, all cells in column D below row 1 are concatenated.

Template name (row 2) is the primary identifier. Together with manufacturer and version, it forms a unique identity within a scope (global or per-organization). Importing a template with the same name+manufacturer+version as an existing one in your organization replaces the existing template.

Read group size controls how many consecutive Modbus registers Overvis combines into a single read request. A value of 1 reads each parameter individually. Higher values (e.g. 16) batch adjacent registers into fewer requests, which speeds up polling but requires the device to support multi-register reads across that range.

Write function determines which Modbus function code is used when writing parameter values:

ValueMeaning
normalOvervis chooses automatically — function 06 (Write Single Register) for single-register values, function 16 (Write Multiple Registers) for multi-register values.
always-6Always use function 06, regardless of value size.
always-16Always use function 16, regardless of value size.

The Params sheet defines all device parameters. Row 1 is the header row; data starts from row 2. Columns are matched by header name (not by position), so column order does not matter.

Every parameter row must provide values for these columns. Missing values cause an import error for that row.

Column headerFieldDescription
NamenameParameter display name (1–200 characters).
AddressaddressModbus register address, integer 0–65535.
TypevalueTypeData type identifier. See Value types.
Register KindregisterKindRegister type: holding, input, coil, or discrete-input.
Is TrackedisTracked1 to store historical readings, 0 to skip.
Is ProgrammableisProgrammable1 if the parameter can be written from the UI, 0 if read-only.
Read As GroupreadAsGroup1 to include in grouped reads, 0 to read individually.
WidgetautoAddWidget1 to create a dashboard widget when the template is applied, 0 to skip.
Column headerFieldDescription
CategorycategoryGrouping label (up to 200 characters), e.g. Inputs, Configuration, Status.
MnemoniclabelShort identifier (up to 20 characters), e.g. T1, P.out. The column can also be named Label.
DescriptiondescriptionLonger explanation of what this parameter represents.
UnitsunitNameMeasurement units (up to 20 characters), e.g. °C, kW, bar, %.
MultipliermultiplierScaling factor applied to the raw register value. displayed = raw × multiplier + shift. A value of 1 is treated as “no multiplier.” Not allowed for bit, string, IP address, and MAC address types.
ShiftshiftOffset added after multiplying. A value of 0 is treated as “no shift.” Same type restrictions as multiplier.
Decimal PrecisiondecimalPrecisionNumber of decimal places to display (integer 0–20).
MinminValueMinimum expected value (for display and validation).
MaxmaxValueMaximum expected value (for display and validation).
Bit PositionbitPositionFor bit and bits types: which bit within the register to start from (0–15). Required for bit and bits, not allowed for other types.
Bits NumbitsAmountFor bits type only: how many consecutive bits to extract (1–16). Required for bits, not allowed for other types including bit.
Represent AsintreprEnumeration mappings or a system bit-representation code. See Enumerations and representations.

Parameter text fields can be translated into additional languages. Add translation columns by appending a space and a language code to the base column name:

Base columnTranslation column examples
NameName uk, Name pl, Name ru
CategoryCategory uk, Category pl, Category ru
DescriptionDescription uk, Description pl, Description ru
UnitsUnits uk, Units pl, Units ru

Supported language codes: en, uk (Ukrainian), pl (Polish), ru (Russian). English is the base language — the main column values are always English, and en translation columns are not needed.

A translation column requires the corresponding English column to have a non-empty value in the same row. You cannot translate an empty field.

Enumeration translations use a separate column format — see Enumeration translations.

The Type column specifies how raw register bytes are interpreted. The value must exactly match one of the identifiers below.

TypeSizeDescription
u81 register (low byte)Unsigned 8-bit integer (0–255)
i81 register (low byte)Signed 8-bit integer (-128–127)
u16-be1 registerUnsigned 16-bit, big-endian
u16-le1 registerUnsigned 16-bit, little-endian (byte-swapped)
i16-be1 registerSigned 16-bit, big-endian
i16-le1 registerSigned 16-bit, little-endian (byte-swapped)
u32-be2 registersUnsigned 32-bit, big-endian
u32-byte-le2 registersUnsigned 32-bit, byte-swapped
u32-word-le2 registersUnsigned 32-bit, word-swapped
i32-be2 registersSigned 32-bit, big-endian
i32-byte-le2 registersSigned 32-bit, byte-swapped
i32-word-le2 registersSigned 32-bit, word-swapped
u64-be4 registersUnsigned 64-bit, big-endian
u64-byte-le4 registersUnsigned 64-bit, byte-swapped
u64-word-le4 registersUnsigned 64-bit, word-swapped
i64-be4 registersSigned 64-bit, big-endian
i64-byte-le4 registersSigned 64-bit, byte-swapped
i64-word-le4 registersSigned 64-bit, word-swapped
u48-be3 registersUnsigned 48-bit, big-endian
u24-zero-sep2 registersUnsigned 24-bit with zero separator
u16-bcd1 registerUnsigned 16-bit, BCD-encoded
TypeSizeDescription
float2 registersIEEE 754 single-precision (32-bit), big-endian
float-byte-le2 registersSingle-precision, byte-swapped
float-word-le2 registersSingle-precision, word-swapped
double4 registersIEEE 754 double-precision (64-bit), big-endian
double-byte-le4 registersDouble-precision, byte-swapped
double-word-le4 registersDouble-precision, word-swapped
TypeDescription
bitA single bit within a register. Requires Bit Position (0–15). Bits Num must not be set.
bitsMultiple consecutive bits within a register, read as an integer. Requires both Bit Position and Bits Num.

For coil and discrete-input register kinds, the type must be bit.

TypeDescription
byte-strASCII string, one character per byte (two characters per register)
word-strASCII string, one character per register (low byte)
byte-ipaddrIPv4 address stored as 4 bytes across 2 registers
word-ipaddrIPv4 address stored as 4 registers (one octet per register)
byte-macaddrMAC address stored as 6 bytes across 3 registers
word-macaddrMAC address stored as 6 registers (one octet per register)
TypeDescription
enumNumeric value mapped to human-readable labels via the Represent As column. See Enumerations and representations.

For multi-register types, the suffix indicates byte order:

  • -be (or no suffix for float/double) — big-endian: most significant byte first. This is the standard Modbus byte order and the most common.
  • -byte-lebyte-swapped (little-endian bytes): bytes within each register are reversed. Some devices use this non-standard order.
  • -word-leword-swapped: the register order is reversed (least significant register first), but bytes within each register remain big-endian.

The following types do not support multiplier or shift values: bit, byte-str, word-str, byte-ipaddr, word-ipaddr, byte-macaddr, word-macaddr. Setting a multiplier or shift on these types causes a validation error.

The Represent As column serves two purposes depending on the value type.

When the Type is enum, the Represent As cell defines mappings from numeric values to display text. The cell must contain multiple lines, each with fields separated by semicolons (;):

<value>;<display text>
<value>;<display text>;<description>

The description is optional. Example cell content (each line in the same cell):

0;Stopped
1;Running
2;Error;Critical fault detected
3;Maintenance;Scheduled service mode

Rules:

  • English mappings are required — the base Represent As column must be filled.
  • Each numeric value must be unique within the English mappings.
  • At least one mapping is required.

To provide enumeration mappings in other languages, add columns named Represent As XX where XX is the language code in uppercase:

  • Represent As UK — Ukrainian
  • Represent As PL — Polish
  • Represent As RU — Russian

Each translation column uses the same semicolon-and-newline format as the base column. The numeric values must match the English values exactly — the same set of values, in any order. Example Represent As UK cell:

0;Зупинено
1;Працює
2;Помилка;Критична несправність
3;Обслуговування;Планове сервісне обслуговування

When the Type is bit, the Represent As cell can contain a system representation code — a short text identifier referencing a built-in bit representation (e.g. showing On/Off or Open/Closed instead of 1/0).

The value must reference an existing system bit representation code. If the code is not recognized, import fails with an error listing the available codes.

This is distinct from enum mappings: the cell contains a plain string (no semicolons or newlines), and it is only valid for bit type parameters.

The optional Visualization sheet contains the HTML/JavaScript source code for an embeddable device visualization. Row 1 is a header; the actual content starts from row 2 in column A (1).

Long content is split across multiple cells (row 2, 3, etc.) at 32,000-character boundaries and concatenated on import.

When the template is applied to a device, the visualization source can contain {{device_id}} and {{network_id}} placeholders, which Overvis replaces with the actual IDs.

The optional Alerts sheet contains alert template definitions in YAML format. Row 1 is a header; the YAML content starts from row 2 in column A (1).

Like the Visualization sheet, long YAML is split across cells at 32,000-character boundaries and concatenated on import.

For the complete alert template YAML syntax, see the Alerts Templates Reference.

Alert templates can also be edited directly in the Overvis web interface through the template settings page, without modifying the Excel file.

Overvis validates the template during import at multiple levels. If any validation fails, the template is not imported, and errors are reported with their sheet name, row, and cell reference.

  • The workbook must contain sheets named exactly Info and Params. Any other sheet name besides Visualization and Alerts is rejected.
  • The Info sheet values must be in the correct cell positions.
  • The Params sheet must have a header row with recognized column names.
  • Model (template name) is required and must be 1–200 characters.
  • Read Group Size is required and must be an integer between 1 and 255.
  • Write Function is required and must be exactly normal, always-6, or always-16.
  • Manufacturer must be at most 200 characters; version at most 50; category at most 200.

Each parameter row is validated independently. A row with errors is skipped, but other rows are still validated (all errors are collected and reported).

  • Name is required (1–200 characters).
  • Address must be an integer between 0 and 65535.
  • Type must be one of the recognized value type identifiers.
  • Register Kind must be holding, input, coil, or discrete-input.
  • Is Tracked, Is Programmable, Read As Group, and Widget must be 0 or 1.
  • Multiplier and Shift must be numbers (if provided).

After individual field validation, business rules are checked:

  • coil and discrete-input register kinds require value type bit.
  • bit type requires Bit Position (0–15) and must not have Bits Num.
  • bits type requires both Bit Position (0–15) and Bits Num (1–16).
  • Other types must not have Bit Position or Bits Num.
  • Multiplier and shift are not allowed for bit, string, IP address, and MAC address types.
  • System bit representation codes (in Represent As) are only allowed for bit type.
  • enum type parameters must have at least one mapping in the Represent As column.
  • English mappings are required. The base Represent As column must be populated.
  • Numeric values in the English mappings must be unique.
  • Translation columns (e.g. Represent As UK) must contain the same set of numeric values as the English column. Missing or extra values cause an error.

If the Alerts sheet is present, its YAML is parsed and validated:

  • The top level must be a YAML array.
  • Each alert must have name, level, conditions, and actions (see Alerts Templates Reference for the full structure).
  • Each condition’s param reference must match a parameter defined in the Params sheet (by address and register kind).
  • Templates are always imported into the current organization (never directly to the global library). To make a template global, use the separate “Make global” action in the web interface.
  • If a template with the same name, version, and manufacturer already exists in the organization, the existing template and all its parameters, translations, and enumeration definitions are replaced with the imported data.
  • Import is atomic: if any validation error occurs, no changes are made.

Exporting a template produces an .xlsx file with the same structure described above. The exported file can be edited in any spreadsheet application and re-imported.

The export includes:

  • Info sheet with all device metadata.
  • Params sheet with all parameters, including any translation columns that have data.
  • Visualization sheet (only if the template has a device visualization).
  • Alerts sheet (only if the template has alert YAML).

Exported files use frozen header rows and auto-filters on the Params sheet for easier navigation.