{
  "spec_version": 1,
  "slug": "midea-md-ac-mbs-1",
  "manufacturer": "Midea",
  "model": "MD-AC-MBS-1 (Intesis INMBSMID001I000 interface for Midea split and VRF indoor units)",
  "category": "Protocol gateway",
  "supplier_url": "https://www.midea.es/",
  "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": "Protocol address 0 (PLC 1). 0 = Off, 1 = On."
    },
    {
      "address": 1,
      "count": 1,
      "name": "AC unit Mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 1 (PLC 2). 0 = Auto (default), 1 = Heat, 2 = Dry, 3 = Fan, 4 = Cool. The available modes 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": "Protocol address 2 (PLC 3). 0 = Auto (default), 1 = SP1, 2 = SP2, 3 = SP3; the available speeds depend on the indoor unit."
    },
    {
      "address": 3,
      "count": 1,
      "name": "AC unit Up/Down vane position",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 3 (PLC 4). 0 = Off (default), 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": "Protocol address 4 (PLC 5). -32768 = initialisation value; 17.0-30.0 °C with the factory x10 °C magnitude, or 63-86 °F with the Fahrenheit DIP setting (see 4.5)."
    },
    {
      "address": 5,
      "count": 1,
      "name": "AC unit Temperature reference",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 5 (PLC 6). -32768 = initialisation value; the range is set by the indoor unit's manufacturer."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Window contact",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 6 (PLC 7). 0 = Closed (default), 1 = Open."
    },
    {
      "address": 7,
      "count": 1,
      "name": "Interface disablement",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 7 (PLC 8). 0 = INMBSMID001I000 enabled (default), 1 = disabled. Stored in non-volatile memory."
    },
    {
      "address": 8,
      "count": 1,
      "name": "Remote control disablement",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 8 (PLC 9). 0 = Remote enabled (default), 1 = Remote disabled; blocks the remote controller on the MD-RC bus. 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": "Protocol address 9 (PLC 10). 0-65535 hours of '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": "Protocol address 10 (PLC 11). 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": "Protocol address 11 (PLC 12). 0 = No error active, 65535 = communication error between the interface and the AC unit, anything else = the error table in section 7 of the manual."
    },
    {
      "address": 13,
      "count": 1,
      "name": "Open Window switch-off timeout",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 13 (PLC 14). 0-30 minutes."
    },
    {
      "address": 14,
      "count": 1,
      "name": "Modbus RTU baud rate",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 14 (PLC 15). Read-back of the DIP-switch setting: 2400, 4800, 9600 (default), 19200, 38400, 57600, 76800 or 115200 bps."
    },
    {
      "address": 15,
      "count": 1,
      "name": "Device's Modbus slave address",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 15 (PLC 16). Read-back of the SW3 DIP-switch address, 1-63; factory 1."
    },
    {
      "address": 21,
      "count": 1,
      "name": "Max number of fan speeds",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 21 (PLC 22). Set by the SW1 DIP switches (2 or 3 speeds)."
    },
    {
      "address": 22,
      "count": 1,
      "name": "Indoor unit ambient temperature from external sensor (Modbus side)",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 22 (PLC 23). -32768 = no temperature is being provided by an external sensor; otherwise the value in °C x10 (or °F, or °C x1 per the DIP setting)."
    },
    {
      "address": 23,
      "count": 1,
      "name": "AC real temperature setpoint",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 23 (PLC 24). -32768 = initialisation value; 17.0-30.0 °C in the factory x10 °C magnitude."
    },
    {
      "address": 49,
      "count": 1,
      "name": "Device ID",
      "data_type": "Hex",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 49 (PLC 50). 0x2200 for the INMBSMID family."
    },
    {
      "address": 50,
      "count": 1,
      "name": "Software version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 50 (PLC 51)."
    },
    {
      "address": 66,
      "count": 1,
      "name": "Return path temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 66 (PLC 67). -32768 = initialisation value; the range is set by the indoor unit's manufacturer."
    },
    {
      "address": 97,
      "count": 1,
      "name": "Block periodic sendings",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Protocol address 97 (PLC 98). 0 = Non-blocked (default), 1 = Blocked. Stored in non-volatile memory."
    },
    {
      "address": 99,
      "count": 1,
      "name": "Reset / reboot device",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "W",
      "description": "Protocol address 99 (PLC 100). Write 1 to reset the interface."
    },
    {
      "address": 2031,
      "count": 1,
      "name": "Capacity",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Protocol address 2031 (PLC 2032). 1 = INMBSMID001I000 (1 indoor unit)."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Midea vendor document “MD-AC-MBS-1 — Modbus interface for Midea air conditioning units, user's manual”, the Midea edition of HMS/Intesis document INMBSMID---I000 r1.3 EN, hosted by Midea at https://www.midea.es/wp-content/uploads/2021/04/210406_MU_F_CTR_MD-AC-MBS-1-4-8-32-EN.pdf. The hardware is an Intesis INMBSMID interface, which is why the register tables and the manual text carry the Intesis document number. §4.1 and the quick-start list give the factory line settings: 9600 bps, 8 data bits, no parity, 2 stop bits (8N2), slave address 1 (SW3), set by DIP switches SW3/SW4. §4.2.1-4.2.2 are the registers of the single-indoor-unit model INMBSMID001I000; the protocol address column is stored as the wire address (zero_based, the PLC column is the same number +1 as a 4xxxx reference). Temperature registers are °C x10 by default, hence scale 0.1; the Fahrenheit and x1 °C magnitudes are DIP-switch options and the row descriptions say so. Coils and discrete inputs are not exposed by this interface. The multi-indoor-unit models (INMBSMID004/008/032, holding registers 1000 + 20n + x and 2000-block) are a different product and are not claimed here. Note the document's own inconsistency on the temperature magnitude: footnote 2 of 4.2.1 calls the x10 magnitude the default, while Table 4.3 marks the x1 position as the default DIP setting; the temperature rows here use the x10 reading (scale 0.1), which is also what the library's other Intesis-derivative seed (intesis-inmbsmit001-mitsubishi) uses. The manual's inner title page names Frigicoll air conditioners - Frigicoll is the brand this Midea-hosted edition is written for; the order code MD-AC-MBS-1 is the Frigicoll/Intesis code."
}
