{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Altus",
  "model": "Optidrive Eco",
  "models": ["Optidrive Eco", "Optidrive ECO", "ODV-3"],
  "vendor_website": "altus.com.br",
  "description": "HVAC variable speed drive: control word, speed reference, ramp time, status and trip code, output frequency, current, torque and power, inputs, DC bus, temperature and energy meters",
  "revision": 1,
  "revised": "2026-11-10",
  "source": "Guia do usuário do Optidrive ECO, Versão 3.12",
  "sources": [
    {"title": "Guia do usuário do Optidrive ECO", "version": "Versão 3.12", "note": "linked in issue #119; section 10.2 (Comunicações do Modbus RTU); written for firmware 2.51"}
  ],
  "notes": [
    "Modbus RTU on the RJ45 connector (pin 7 RS485-, pin 8 RS485+), also used by BACnet MS/TP. FC03, FC06 and FC16 (registers 1 to 4 only). Registers are numbered from 1, as in the guide: masters that start at 0 must subtract 1.",
    "Factory settings: address 1 (P5-01, 1 to 63; P5-16 allows 0 to 247), 115.2 kbit/s (P5-03), no parity and 1 stop bit (P5-04 = n-1). P5-04 also allows n-2, odd and even parity with one stop bit; P5-01, P5-03 and P5-04 cannot be changed over Modbus.",
    "Registers 1 and 2 control the drive only when P1-12 = 4 (Modbus RTU) and no fieldbus module is fitted; register 4 needs fieldbus ramp control. Registers 6 to 35 can always be read. Register 3 is reserved.",
    "Every parameter of groups 1 to 5 is also a register: its number is the parameter number (P1-01 is register 101). Values with a decimal point are sent multiplied by 10. Only P1-01 is listed here as an example.",
    "Register 6: the low byte is the status byte, the high byte is the fault number. The guide's text for the pre-ramp speed reference (register 22) gives no scale; it is shown raw. Energy meters are two registers each (kWh and MWh parts) with no stated decimals. The guide is written for firmware 2.51.",
    "Written from the user guide; this map has not been tested on a device."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 115200,
  "parity": "N",
  "databits": 8,
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "big",
  "address_base": 1,
  "x_status": "official",
  "registers": [
    {"name": "Run", "group": "Control", "area": "holding", "address": 1, "type": "bool", "bit": 0, "access": "RW", "description": "1 = run, 0 = stop"},
    {"name": "Fast stop", "group": "Control", "area": "holding", "address": 1, "type": "bool", "bit": 1, "access": "RW", "description": "1 = stop with the second deceleration ramp"},
    {"name": "Reset", "group": "Control", "area": "holding", "address": 1, "type": "bool", "bit": 2, "access": "RW", "description": "1 = reset an active trip; set back to 0 after the fault clears"},
    {"name": "Coast stop", "group": "Control", "area": "holding", "address": 1, "type": "bool", "bit": 3, "access": "RW", "description": "1 = coast to stop"},
    {"name": "Speed reference", "group": "Control", "area": "holding", "address": 2, "type": "uint16", "scale": 0.1, "unit": "Hz", "access": "RW", "description": "Setpoint in Hz with one decimal"},
    {"name": "Ramp time", "group": "Control", "area": "holding", "address": 4, "type": "uint16", "scale": 0.01, "unit": "s", "access": "RW", "write_min": 0, "write_max": 600, "description": "Acceleration and deceleration time, 0 to 60000 raw; used when fieldbus ramp control is enabled"},
    {"name": "Running", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 0, "enum": {"0": "Stopped", "1": "Running"}},
    {"name": "Tripped", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 1, "enum": {"0": "OK", "1": "Tripped"}},
    {"name": "Manual mode", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 2, "enum": {"0": "Automatic", "1": "Manual"}},
    {"name": "Inhibited", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 3},
    {"name": "Service overdue", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 4},
    {"name": "Standby", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 5},
    {"name": "Ready", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 6},
    {"name": "Load alarm", "group": "Status", "area": "holding", "address": 6, "type": "bool", "bit": 7, "description": "1 = low or high load detected"},
    {"name": "Trip code", "group": "Status", "area": "holding", "address": 6, "type": "uint16", "bit": 8, "bits": 8, "description": "Number of the active fault; see the fault list in the guide"},
    {"name": "Output frequency", "group": "Measurements", "area": "holding", "address": 7, "type": "uint16", "scale": 0.1, "unit": "Hz"},
    {"name": "Output current", "group": "Measurements", "area": "holding", "address": 8, "type": "uint16", "scale": 0.1, "unit": "A"},
    {"name": "Output torque", "group": "Measurements", "area": "holding", "address": 9, "type": "int16", "scale": 0.1, "unit": "%"},
    {"name": "Output power", "group": "Measurements", "area": "holding", "address": 10, "type": "uint16", "scale": 0.01, "unit": "kW"},
    {"name": "Digital inputs", "group": "Measurements", "area": "holding", "address": 11, "type": "uint16", "description": "Bit 0 = digital input 1, and so on"},
    {"name": "Analog input 1", "group": "Measurements", "area": "holding", "address": 20, "type": "uint16", "scale": 0.1, "unit": "%"},
    {"name": "Analog input 2", "group": "Measurements", "area": "holding", "address": 21, "type": "uint16", "scale": 0.1, "unit": "%"},
    {"name": "Pre-ramp speed reference", "group": "Measurements", "area": "holding", "address": 22, "type": "uint16", "scale": 1, "description": "Internal frequency setpoint"},
    {"name": "DC bus voltage", "group": "Measurements", "area": "holding", "address": 23, "type": "uint16", "unit": "V"},
    {"name": "Heatsink temperature", "group": "Measurements", "area": "holding", "address": 24, "type": "int16", "unit": "°C"},
    {"name": "Energy kWh (resettable)", "group": "Energy", "area": "holding", "address": 30, "type": "uint16", "description": "User-resettable energy meter, kWh part (P0-26); decimals not stated"},
    {"name": "Energy MWh (resettable)", "group": "Energy", "area": "holding", "address": 31, "type": "uint16", "description": "User-resettable energy meter, MWh part (P0-27)"},
    {"name": "Energy kWh (total)", "group": "Energy", "area": "holding", "address": 32, "type": "uint16", "description": "Non-resettable energy meter, kWh part"},
    {"name": "Energy MWh (total)", "group": "Energy", "area": "holding", "address": 33, "type": "uint16", "description": "Non-resettable energy meter, MWh part"},
    {"name": "Operating hours", "group": "Info", "area": "holding", "address": 34, "type": "uint16", "unit": "h", "description": "Total operating time, hours (P0-31)"},
    {"name": "Operating minutes and seconds", "group": "Info", "area": "holding", "address": 35, "type": "uint16", "description": "Total operating time, minutes and seconds (P0-31); packing not described"},
    {"name": "Maximum frequency", "group": "Parameters", "area": "holding", "address": 101, "type": "uint16", "scale": 0.1, "unit": "Hz", "access": "RW", "description": "P1-01"}
  ]
}
