AboutBlogContact
ArchivBlack App v1.0.0Contribute

Adding Modbus Device

This guide explains how to add support for a new Modbus device (sensor, energy meter, etc.) to boneIO Black. The device definition is stored as a JSON file that describes how to read and interpret Modbus registers.

Web Application - Device Creator

The easiest way to create a new Modbus device definition is using the built-in Modbus Device Creator in the web interface.

Accessing the Creator

  1. Open the boneIO web interface
  2. Navigate to Modbus Helper section
  3. Select the Creator tab

Modbus Device Creator

Device Information

OptionDescription
Model NameDevice model name displayed in Home Assistant (e.g., "SHT30 Temperature and Humidity Sensor")
File NameName for the JSON file (e.g., "sht30"). If empty, it will be generated from model name
CategoryDevice category: sensors, energy_meters, hvac, inverters, or other
Test Device AddressModbus address of a connected device for testing registers

Adding Registers

Click Add Register to define each data point you want to read from the device.

OptionDescription
NameSensor name displayed in Home Assistant
AddressModbus register address (check device documentation)
Register Typeholding or input register
UnitUnit of measurement (e.g., °C, %, V, A, kWh)
Value TypeData type - see table below
Device ClassHome Assistant device class (temperature, humidity, voltage, etc.)
State Classmeasurement, total, or total_increasing

Value Types

TypeDescriptionSize
U_WORDUnsigned 16-bit integer1 register
S_WORDSigned 16-bit integer1 register
U_DWORDUnsigned 32-bit integer (Big Endian)2 registers
S_DWORDSigned 32-bit integer (Big Endian)2 registers
U_DWORD_RUnsigned 32-bit integer (Little Endian)2 registers
S_DWORD_RSigned 32-bit integer (Little Endian)2 registers
FP3232-bit float (Big Endian)2 registers
FP32_R32-bit float (Little Endian)2 registers
U_QWORDUnsigned 64-bit integer4 registers
S_QWORDSigned 64-bit integer4 registers

Filters

Filters allow you to transform raw register values. Click the + button next to "Filters" to add:

  • Multiply - Multiply the value (e.g., 0.1 to convert 245 → 24.5°C)
  • Offset - Add/subtract a value

Testing Registers

Before saving, you can test each register by clicking the button. This reads the actual value from a connected device to verify the configuration is correct.

Set Base Configuration (Optional)

Enable these options if the device supports changing its Modbus address or baud rate:

OptionDescription
Enable Set AddressDevice supports changing Modbus address
Address RegisterRegister address for writing new Modbus address
Enable Set BaudrateDevice supports changing baud rate
Baudrate RegisterRegister address for writing baud rate
Baudrate MappingsMap baud rates to register values (e.g., 9600 → 0, 19200 → 1)

Exporting

  • Show JSON Preview - Preview the generated configuration
  • Copy JSON - Copy to clipboard
  • Download JSON - Download as a file

JSON File Structure

Device definitions are stored in boneio/modbus/devices/<category>/ directory.

Sample Configuration

sht30.json
{
  "model": "SHT30 Temperature and Humidity Sensor",
  "set_base": {
    "set_address_address": 256
  },
  "registers_base": [
    {
      "base": 1,
      "length": 2,
      "register_type": "holding",
      "registers": [
        {
          "name": "Temperature",
          "address": 1,
          "unit_of_measurement": "°C",
          "state_class": "measurement",
          "device_class": "temperature",
          "value_type": "S_WORD",
          "filters": [
            { "multiply": 0.1 }
          ]
        },
        {
          "name": "Humidity",
          "address": 2,
          "unit_of_measurement": "%",
          "state_class": "measurement",
          "device_class": "humidity",
          "value_type": "S_WORD",
          "filters": [
            { "multiply": 0.1 }
          ]
        }
      ]
    }
  ]
}

Configuration Variables

Root Level

VariableRequiredDescription
modelYesModel name displayed in Home Assistant
set_baseNoConfiguration for changing device address/baudrate
registers_baseYesArray of register blocks

set_base

VariableDescription
set_address_addressRegister address for writing new Modbus address
set_baudrate.addressRegister address for writing baud rate
set_baudrate.possible_baudratesMap of baud rate to register value

registers_base (Block)

VariableDescription
baseStarting register address for this block
lengthNumber of registers to read in one request
register_typeholding or input
registersArray of register definitions

registers (Individual Register)

VariableRequiredDescription
nameYesSensor name in Home Assistant
addressYesRegister address
unit_of_measurementYesUnit (°C, %, V, A, etc.)
state_classYesmeasurement, total, or total_increasing
device_classNoHA device class
value_typeYesData type (see Value Types table)
filtersNoArray of filters to apply

Contributing Your Device

After creating and testing your device definition:

  1. Fork the boneIO repository
  2. Add your JSON file to the appropriate folder:
    • boneio/modbus/devices/sensors/ - sensors (temperature, humidity, distance)
    • boneio/modbus/devices/energy_meters/ - energy meters
    • boneio/modbus/devices/hvac/ - HVAC devices
    • boneio/modbus/devices/inverters/ - inverters
    • boneio/modbus/devices/other/ - other devices
  3. Create a Pull Request

Your contribution will help other users with the same device!