{
 "manufacturer": "Intesis (HMS Networks)",
 "manufacturer_slug": "intesis",
 "model": "INMBSMHI001R000 Mitsubishi Heavy Industries AC to Modbus RTU gateway",
 "model_slug": "inmbsmhi001r000",
 "short_model": "INMBSMHI001R000 MHI",
 "aliases": [
  "INMBSMHI001R000",
  "MH-RC-MBS-1",
  "Intesis Mitsubishi Heavy Industries Modbus",
  "Intesis MHI Modbus"
 ],
 "equipment_type": "VRF / split AC gateway",
 "applies_to": "Mitsubishi Heavy Industries indoor units (one, or up to 16 controlled together as one) on the XY remote-controller bus, user manual r6.4 (01/2024).",
 "summary": "Modbus RTU server that connects to the XY remote-controller bus of a Mitsubishi Heavy Industries indoor unit, either alongside an MHI wired remote or as bus master on its own. Holding registers give on/off, mode, fan, vanes, setpoint and limits, room and return temperatures, alarm and error code, central/remote lock state and window-contact functions.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 9600,
  "parity": "None",
  "data_bits": 8,
  "stop_bits": 2,
  "tcp_port": null
 },
 "addressing": {
  "convention": "0-based",
  "note": "Tables give a 'protocol address' (base 0) and a 'PLC address' (base 1); the protocol address is the wire address and is used for 'documented'."
 },
 "default_word_order": null,
 "firmware": null,
 "source": {
  "title": "Intesis INMBSMHI001R000 Modbus RTU (EIA-485) Interface for Mitsubishi Heavy Industries air conditioners - User Manual",
  "doc_number": "User's Manual r6.4 EN",
  "revision_date": "2024-01",
  "url": "https://www.hms-networks.com/docs/default-source/products/intesis/manuals-and-guides---manuals/user-manual-inmbsmhi001r000.pdf",
  "pages": "pp. 8-11 (registers), pp. 12-14 (temperature notes, Center/Remote), pp. 15-17 (DIP switches), p. 18 (functions)"
 },
 "notes": [
  "The manual declares every register a 16-bit unsigned holding register; the temperature ranges listed never go below zero, so temperatures are UINT16. The 'no value' marker the manual writes as -32768 is raw 0x8000 (32768) and is listed as an enum entry.",
  "Temperature registers depend on the DIP SW4 setting: x1 °C, x10 °C (decidegrees) or °F (no °F x10). The register-table footnote calls x10 the default, but the DIP-switch table and the quick-start page (all other switches off) give x1 °C as the factory setting, so scale 1 / °C is used. Check the switch on site: if x10 is set use scale 0.1; if °F is set the values are whole °F.",
  "Left out: outdoor intake temperature (register 60). Outdoor air goes below zero but the manual declares every register unsigned and never says how negative values are encoded, so the type cannot be stated with confidence.",
  "External temperature (register 22) does not go straight to the unit when the gateway is XY-bus slave: the gateway shifts the setpoint it sends by the difference between the Modbus room value and the unit's own reading ('virtual temperature'), so register 23 and the MHI remote can show a different setpoint from register 4. As bus master the value is passed directly.",
  "Register 2 values change with the SW1 fan-speed count (1-4 speeds); register 46 used a 0-2 value list up to firmware 0.8.",
  "Error code list (MHI codes) not reproduced; see manual section 7."
 ],
 "registers": [
  {
   "table": "holding_register",
   "address": 0,
   "documented": "0",
   "name": "AC unit On/Off",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 1,
   "documented": "1",
   "name": "AC unit mode",
   "description": "Available modes depend on the indoor unit.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Auto",
    "1": "Heat",
    "2": "Dry",
    "3": "Fan",
    "4": "Cool"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 2,
   "documented": "2",
   "name": "AC unit fan speed",
   "description": "4-speed default shown. 3 speeds: 1-3 Low/Mid/High; 2: Low/High; 1: 1 = High.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Auto",
    "1": "Low",
    "2": "Mid",
    "3": "High",
    "4": "Powerful"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 3,
   "documented": "3",
   "name": "AC unit vane position",
   "description": "Availability depends on the indoor unit.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "1": "Position-1",
    "2": "Position-2",
    "3": "Position-3",
    "4": "Position-4",
    "10": "Swing"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4,
   "documented": "4",
   "name": "AC unit temperature setpoint",
   "description": "18..30 °C (Heat: 16..30 °C). SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "RW",
   "values": {
    "32768": "Initialisation value / no value (0x8000; manual writes -32768)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 5,
   "documented": "5",
   "name": "AC unit temperature reference",
   "description": "Temperature the indoor unit controls on, 10..38 °C. SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": {
    "32768": "Initialisation value / no value (0x8000; manual writes -32768)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 6,
   "documented": "6",
   "name": "Window contact",
   "description": "Virtual window contact written from Modbus.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Closed",
    "1": "Open"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 7,
   "documented": "7",
   "name": "Gateway disablement",
   "description": "Stops the gateway passing commands; stored in NVM.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "INMBSMHI001R000 enabled",
    "1": "INMBSMHI001R000 disabled"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8,
   "documented": "8",
   "name": "AC remote control disablement",
   "description": "Blocks the manufacturer's wired remote; stored in NVM.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Remote control enabled",
    "1": "Remote control disabled"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 9,
   "documented": "9",
   "name": "AC unit operation time",
   "description": "Hours the unit has been on.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "h",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 10,
   "documented": "10",
   "name": "AC unit alarm status",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "No alarm condition",
    "1": "Alarm condition"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 11,
   "documented": "11",
   "name": "Error code",
   "description": "MHI error (manual section 7); 65535 = communication error.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "No active error",
    "65532": "Initialisation (about 2 min) after start-up when the gateway is XY-bus master",
    "65535": "Error in communication of the gateway or remote controller with the AC unit"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 13,
   "documented": "13",
   "name": "Open window switch-off timeout",
   "description": "Countdown after window opens before switch-off (0..30, default 30).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "min",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 14,
   "documented": "14",
   "name": "Modbus RTU baud rate",
   "description": "Baud rate in use (set on DIP switches).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 15,
   "documented": "15",
   "name": "Modbus slave address",
   "description": "Range 1..63.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 21,
   "documented": "21",
   "name": "Max number of fan speeds",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 22,
   "documented": "22",
   "name": "External ambient temperature (Modbus)",
   "description": "Modbus-side room sensor; drives the virtual-temperature setpoint offset. SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "RW",
   "values": {
    "32768": "Initialisation value, no external sensor value (0x8000)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 23,
   "documented": "23",
   "name": "AC real temperature setpoint",
   "description": "Setpoint actually applied in the unit, 16..31 °C. SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 24,
   "documented": "24",
   "name": "Current AC max setpoint",
   "description": "Upper setpoint limit reported by the unit. SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": {
    "32768": "Initialisation value / no value (0x8000; manual writes -32768)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 25,
   "documented": "25",
   "name": "Current AC min setpoint",
   "description": "Lower setpoint limit reported by the unit. SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": {
    "32768": "Initialisation value / no value (0x8000; manual writes -32768)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 31,
   "documented": "31",
   "name": "Window contact status (feedback)",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Not active",
    "1": "Active (window open)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 45,
   "documented": "45",
   "name": "Error reset",
   "description": "Write 1 to reset the error.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": {
    "1": "Reset"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 46,
   "documented": "46",
   "name": "Center/Remote",
   "description": "Central/remote lock state (current firmware; FW 0.8 and older use 0-2).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Remocon unlock (Center/Remote)",
    "1": "Remocon lock On/Off (Center)",
    "2": "Remocon lock All (Center)",
    "3": "Remocon only (Remote)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 48,
   "documented": "48",
   "name": "Switch value",
   "description": "Current DIP switch settings.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 49,
   "documented": "49",
   "name": "Device ID",
   "description": "Reads 0x0F00.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 50,
   "documented": "50",
   "name": "Software version",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 55,
   "documented": "55",
   "name": "Under voltage counter",
   "description": "0..300; stored in NVM.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "h",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 65,
   "documented": "65",
   "name": "Input reference temperature",
   "description": "Reference temperature in use. SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": {
    "32768": "No external sensor value, no virtual temperature (0x8000)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 66,
   "documented": "66",
   "name": "Return path temperature",
   "description": "Indoor unit return-air sensor. SW4 x1 °C assumed (x10: 0.1, or °F).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "°C",
   "access": "R",
   "values": {
    "32768": "Initialisation value / no value (0x8000; manual writes -32768)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 81,
   "documented": "81",
   "name": "Error address",
   "description": "Indoor unit number reporting the error.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 97,
   "documented": "97",
   "name": "Block periodic sendings",
   "description": "1 = only forward Modbus writes that change the value (FW 0.14+).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Non-blocked",
    "1": "Blocked"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 98,
   "documented": "98",
   "name": "Master/Slave (gateway role)",
   "description": "Gateway role on the MHI XY bus.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Slave",
    "1": "Master"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 99,
   "documented": "99",
   "name": "Reset",
   "description": "Write 1 to restart the gateway.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "W",
   "values": {
    "1": "Reset"
   },
   "bits": null,
   "offset": 0
  }
 ],
 "integration": {
  "summary": "Pick the XY-bus role on SW1 (slave with an MHI wired remote, master without), set the fan-speed count and vanes on SW1 and address/baud on SW3/SW4, power-cycle, then poll holding registers 0-11 with function 03 and write with 06.",
  "minimum_registers": [
   {
    "table": "holding_register",
    "address": 0,
    "why": "On/off"
   },
   {
    "table": "holding_register",
    "address": 1,
    "why": "Mode"
   },
   {
    "table": "holding_register",
    "address": 2,
    "why": "Fan speed"
   },
   {
    "table": "holding_register",
    "address": 4,
    "why": "Setpoint"
   },
   {
    "table": "holding_register",
    "address": 5,
    "why": "Room / control temperature"
   },
   {
    "table": "holding_register",
    "address": 10,
    "why": "Alarm flag"
   },
   {
    "table": "holding_register",
    "address": 11,
    "why": "Error code"
   },
   {
    "table": "holding_register",
    "address": 46,
    "why": "Central/remote lock state"
   }
  ],
  "enable": "No enable step; register 7 (gateway disablement) must be 0 for commands to reach the unit. Register 46 reports central locks: 'lock On/Off' (1) blocks On/Off from the gateway and 'lock All' (2) blocks every command.",
  "watchdog": null,
  "quirks": [
   "Temperature scale depends on DIP SW4 and the manual is inconsistent about the factory default.",
   "Fan-speed values shift with the SW1 fan-speed count; with 4 speeds the top value 4 is 'Powerful'.",
   "Error code 65532 for about two minutes after start-up in master mode is normal; writes made during that time are not applied until it ends.",
   "8-N-2 by default; 8-N-1 is auto-detected.",
   "Function 16 is accepted only with a quantity of one register; functions 3 and 4 both read the same holding registers."
  ],
  "setup": [
   "SW1: XY-bus role (slave = default, needs an MHI remote as master; master = no MHI remote, or the remote set as slave), number of fan speeds (4 default), vanes present (default yes).",
   "SW3: slave address; SW3/SW4: baud (9600 default).",
   "SW4: x1/x10, °C/°F and 120 Ω termination.",
   "DIP changes need a power cycle. XY bus max 600 m, not polarity sensitive; EIA-485 max 1,200 m."
  ],
  "gotchas": [
   "The factory default is XY-bus slave: on a unit with no MHI wired remote the gateway will not talk to the unit until SW1 is set to master.",
   "Using the remote's own sensor as the room reference needs the MHI remote as master and 'thermostat sensor in remote controller' enabled by an MHI installer."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/intesis/inmbsmhi001r000",
 "address_note": "address = 0-based Modbus wire (PDU) address; documented = as printed in the source.",
 "note": "Re-typed from the manufacturer's public documentation (see source) and verified against it. Registers vary by firmware and options; verify against the live device before writing."
}
