{
  "spec_version": 1,
  "slug": "intesis-inmbstos001-toshiba",
  "manufacturer": "HMS Networks (Intesis)",
  "model": "INMBSTOS001R000 – Toshiba VRF and Digital systems to Modbus RTU interface",
  "category": "Protocol gateway",
  "supplier_url": "https://www.hms-networks.com/docs/default-source/products/intesis/manuals-and-guides---manuals/user-manual-inmbstos001r000.pdf",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 9600,
      "data_bits": 8,
      "stop_bits": 2
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 0,
      "count": 1,
      "name": "AC unit on/off",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 1,
      "count": 1,
      "name": "AC unit mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = Auto, 1 = Heat, 2 = Dry, 3 = Fan, 4 = Cool; the available values depend on the indoor unit."
    },
    {
      "address": 2,
      "count": 1,
      "name": "AC unit fan speed",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = Auto, 1 = Low, 2 = Mid, 3 = High."
    },
    {
      "address": 3,
      "count": 1,
      "name": "AC unit vane position",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = POS1 (horizontal), 2 = POS2 (horizontal), 3 = POS3 (medium), 4 = POS4 (vertical), 5 = POS5 (vertical), 6 = POS6, 7 = POS7, 10 = Swing."
    },
    {
      "address": 4,
      "count": 1,
      "name": "AC unit temperature setpoint",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "-32768 = initialization value; 16..32 °C (raw 160..320 at the factory degC x10 setting), 61..90 °F."
    },
    {
      "address": 5,
      "count": 1,
      "name": "AC unit temperature reference",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "-32768 = the value from the indoor unit's own sensor is invalid; when register 22 carries a valid value this register takes it over."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Window contact",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = closed (default), 1 = open."
    },
    {
      "address": 7,
      "count": 1,
      "name": "Gateway disablement",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = INMBSTOS001R000 enabled (default), 1 = disabled. Stored in non-volatile memory."
    },
    {
      "address": 8,
      "count": 1,
      "name": "AC remote control disablement",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = remote control enabled (default), 1 = disabled. Stored in non-volatile memory."
    },
    {
      "address": 9,
      "count": 1,
      "name": "AC unit operation time",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0..65535 hours, counts the time the indoor unit is in the 'On' state. Stored in non-volatile memory."
    },
    {
      "address": 10,
      "count": 1,
      "name": "AC unit alarm status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = no alarm condition, 1 = alarm condition."
    },
    {
      "address": 11,
      "count": 1,
      "name": "Error code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = no error; 65535 (= -1) = communication error between gateway and AC indoor unit; any other value is listed in the manual's error-code table."
    },
    {
      "address": 13,
      "count": 1,
      "name": "'Open Window' switch-off timeout",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0..30 minutes; factory setting 30."
    },
    {
      "address": 14,
      "count": 1,
      "name": "Modbus RTU baud rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "2400 / 4800 / 9600 (default) / 19200 / 38400 / 57600 / 76800 / 115200 bps; above 19200 needs firmware 2.3 or newer."
    },
    {
      "address": 15,
      "count": 1,
      "name": "Modbus slave address",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1..63."
    },
    {
      "address": 21,
      "count": 1,
      "name": "Max number of fan speeds",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of fan speeds the indoor unit offers."
    },
    {
      "address": 22,
      "count": 1,
      "name": "Indoor unit ambient temperature from external sensor",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "-32768 = no external sensor value; otherwise a temperature supplied from the Modbus side."
    },
    {
      "address": 23,
      "count": 1,
      "name": "AC real temperature setpoint",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Equals register 5 in practice: the gateway implements no virtual temperature, so the user value is what the indoor unit uses."
    },
    {
      "address": 49,
      "count": 1,
      "name": "Device ID",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0x1F00."
    },
    {
      "address": 50,
      "count": 1,
      "name": "Software version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Gateway firmware version."
    },
    {
      "address": 97,
      "count": 1,
      "name": "Block periodic sendings",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = non-blocked (default), 1 = blocked."
    }
  ],
  "combined_registers": [],
  "notes": "Source: HMS Networks / Intesis user manual 'INMBSTOS001R0xx Toshiba VRF and Digital systems to Modbus RTU Interface', r2.9, section 4.2 'Modbus Registers' (4.2.1 control and status, 4.2.2 configuration). The gateway is Modbus RTU (RS-485) and exposes its own fixed holding-register map that mirrors the indoor unit; reach it through a Modbus RTU-to-TCP gateway using the factory serial settings above (9600 bps, 8-N-2, Modbus server address 1; the gateway auto-detects 8-N-1 and 8-N-2). All registers are 16-bit unsigned holding registers, big-endian. The addresses in this file are the manual's base-0 'protocol addresses' (the manual also prints a base-1 'PLC address', which is always this address + 1). Temperature registers are signed 16-bit and their magnitude follows the gateway's DIP switches (degC x1, degC x10 or degF), so the 0.1 scale factors below assume the factory default degC x10; with the x1 setting the readings are whole degrees. The manual's section 4.3 'advanced registers' block is left out on purpose: those addresses are computed per indoor unit as (IU-1)*25+4000 and only exist for the non-default indoor-unit type selected on SW1, so they are not a fixed part of the map."
}
