Skip to content
Elausys

HyperVisu / Integrations

Modbus TCP Integration

Registers, function codes, polling, scaling — with a worked inverter example.

elausys · 27 July 2026
On this page

Modbus TCP integration

Modbus TCP connects HyperVisu to industrial and energy equipment: solar inverters, EV chargers, heat pumps, ventilation units, PLCs. HyperVisu is the Modbus client — it polls the equipment's registers and writes to them when you control a widget.

What you need: the device's IP address, Modbus port (usually 502), its register map (from the manufacturer's Modbus documentation), and its slave/unit ID.

Connections. Switch on Modbus TCP Protocol on the Services page first (see “Services & Protocols”); it is off on a new server. Modbus TCP is a multi-connection protocol: create one connection per Modbus server (per IP/port) on the Connections page (see “Connections”). In Add connection, select the Modbus TCP card and enter an Instance Name, the Server IP Address and a Poll Interval (seconds) — how often HyperVisu reads all objects on that connection. Type the interval: the grey 30 is only a hint, and a field left empty makes the server poll every 5 seconds.

The dialog has no port field: the connection is created on port 502. If the equipment listens on another port, select the new connection, change Modbus TCP Port and click Save connection.

A Modbus connection has no Test button. The status Connected on the Connections page and the live value of a bound object are the check.

Binding an object. Bind Modbus registers to widget objects in the Devices workspace. Per object you set:

SettingMeaning
Slave IDThe unit identifier, 1–247.
Register typeCoil, discrete input, input register or holding register.
Register addressThe register address from the device's register map, from 0 to 65535. It is sent to the equipment exactly as typed: enter the protocol address, not a 4xxxx or 3xxxx reference number. Watch for off-by-one: some vendors document addresses starting at 1, Modbus counts from 0.
Data typeHow the raw registers are decoded (16/32-bit integer signed/unsigned, float, …).
Byte orderThe word/byte order for multi-register values — the vendor documentation states it. The field appears only for data types that span two or more registers (32-bit, 64-bit and floating point).
Write FunctionHolding registers only. Leave it on Automatic (FC6 / FC16) unless the equipment does not implement FC6; then choose Always FC16 (write multiple).
ScalingScale, Offset, Decimal Places and Units. The Formula line shows Display = (Raw × scale) + offset with a fixed sample raw value, not the equipment's reading. A scale of 0 is read as 1.

📘 Note: The object's scale and offset run before any transformation on the same object (see “Value Transformations & Health”). Do not add a scaling transformation on top of them, or the value is scaled twice.

Worked example — inverter power into a meter

The inverter's documentation says: active power, input register 32080, signed 32-bit integer, gain 1, unit W, unit ID 1.

  1. Create a Modbus TCP connection for the inverter: Server IP Address 192.168.1.120, Poll Interval (seconds) 10 (see “Connections”). The connection is created on port 502.
  2. In Devices, add a Meter widget "Solar production", room Technical, category Energy. Under Protocol, select the inverter's connection, listed by the name you gave it.
  3. Open its power object and enter: Slave ID 1, Register type Input register, Register address 32080, Data type INT32, Byte order as documented.
  4. Set Scaling: scale 0.001, offset 0, decimals 2, units kW. A raw value of 5230 becomes 5.23 kW.
  5. Click Save object, then click Apply changes in the sidebar and confirm. The connection, the device and its objects go live together at that moment.
  6. Wait at least one poll interval. The live value appears on the widget row; check it against the inverter's own display.

💡 Tip: Enable logging on the object (see “Object Settings, Logging & Notifications”) so the meter gets charts and history in the app.

Modbus object editor.

Binding Modbus

Modbus objects are configured in the object settings dialog (open the object with Edit, see “Object Settings, Logging & Notifications”). The Modbus sections are:

Connection

FieldDescription
Slave IDThe Modbus slave device ID (1–247).

Data Configuration

FieldDescription
Register TypeWhich register table to read or write (e.g. holding or input registers).
Register AddressThe register number.
Data TypeHow the register bytes are interpreted (integer sizes, float, …).
Byte OrderThe word/byte order used by the device.

Scaling & Conversion

FieldDescription
ScaleMultiply the raw value by this factor (e.g. 0.1 to divide by 10).
OffsetAdded after scaling (e.g. -273.15 for Kelvin → Celsius).
Decimal Places / UnitsDisplay precision and unit.

The dialog shows the live formula — Display = (Raw × scale) + offset — with a worked example, so you can check the conversion before saving.

The Modbus object settings.

💡 Tip: Register numbers, function codes and a full worked example are in the Modbus chapter.

Frequently Asked Questions

What information do I need for a Modbus device?

Its IP address, port, slave/unit ID and manufacturer register map, including register types, addresses, data types and byte order.

Do I need a connection for every register?

No. Create one connection per Modbus server IP and port, then bind its registers to individual widget objects.

Why is a Modbus reading incorrect?

Check the register address base, data type, byte order and scaling against the manufacturer’s map. Some documents number addresses from one while Modbus counts from zero.

How do I convert a raw reading to the displayed unit?

Set scale and offset in the object settings. The Formula line shows Display = (Raw × scale) + offset with a fixed sample raw value, not the equipment's reading.

How often are Modbus readings refreshed?

Each connection has its own poll interval. Compare the live value with the equipment’s display after a poll.

Keep exploring

Find the other guides for this product in the documentation.

Back to Integrations