{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Growatt", "model": "MIN / MIC / MOD inverters", "models": ["MIN", "MIC", "MOD", "TL-X", "TL-XH", "MOD TL3-XH"], "vendor_website": "growatt.com", "description": "Single- and three-phase string inverters (TL-X, TL-XH, MOD TL3-XH) that use the 3000-range input registers of the Growatt protocol", "revision": 1, "revised": "2026-11-10", "source": "Growatt Inverter Modbus RTU Protocol V1.24", "sources": [ {"title": "Growatt Inverter Modbus RTU Protocol", "version": "V1.24", "url": "https://github.com/johanmeijer/grott/raw/master/documentatie/Growatt-Inverter-Modbus-RTU-Protocol-II-V1-24-English-new.pdf", "note": "input registers 3000-3124 and holding registers 3000-3016 (section \"Use for TL-X and TL-XH\"), plus a few holding registers of the first group; linked in issue #186"} ], "notes": [ "Difference from the TL3-X / MAX / MIX / SPH map: that map reads the first register group (input 0-124). This one reads the 3000-3124 group, which TL-X / TL-XH (MIN) and MOD TL3-XH inverters use for live data; the same quantities sit at different addresses (for example output power at 3023-3024 instead of 35-36) and the status register is split into a mode byte and a state byte.", "The document lists MIN as TL-X / TL-XH / TL-XH US. It does not name MIC or MOD models separately, except MOD TL3-XH, which it gives the same 3000-3124 input range; MIC is assumed to belong to the same family.", "Only the 3000-3124 input group is mapped. The document also describes 3125-3374 (storage and battery data of the TL-XH variants); those registers are not mapped here.", "32-bit values are sent high word first. Registers the document leaves without a unit or marks reserved (PV4 values, reactive power, the DCI and GFCI currents) are left out.", "Meter-related registers (3041-3046, 3067-3078) only carry data when the inverter has a meter or CT connected.", "Holding registers 0-124 follow the first group; only a few common ones are repeated here. The 03 range for these inverters is 0-124 and 3000-3124.", "Default serial settings follow the first-group map: 9600 baud, 8N1, address range 1-254. The document for this group does not state them again.", "Written from the manufacturer's document; not tested on a device." ], "protocol": "rtu", "unit_id": 1, "baudrate": 9600, "parity": "N", "byte_order": "big", "word_order": "big", "address_base": 0, "max_read_registers": 125, "x_status": "official", "registers": [ {"name": "Inverter status", "group": "Status", "area": "input", "address": 3000, "type": "uint16", "bit": 0, "bits": 8, "enum": {"0": "Waiting", "1": "Normal", "3": "Fault", "4": "Flash"}, "description": "Low byte: machine state shown on the web page"}, {"name": "Inverter mode", "group": "Status", "area": "input", "address": 3000, "type": "uint16", "bit": 8, "bits": 8, "enum": {"0": "Waiting module", "1": "Self-test", "3": "System fault", "4": "Flash", "5": "PV and battery online", "6": "Battery online", "7": "PV offline", "8": "Battery offline"}, "description": "High byte: detailed operating mode"}, {"name": "PV input power", "group": "PV", "area": "input", "address": 3001, "type": "uint32", "scale": 0.1, "unit": "W"}, {"name": "PV1 voltage", "group": "PV", "area": "input", "address": 3003, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "PV1 current", "group": "PV", "area": "input", "address": 3004, "type": "uint16", "scale": 0.1, "unit": "A"}, {"name": "PV1 power", "group": "PV", "area": "input", "address": 3005, "type": "uint32", "scale": 0.1, "unit": "W"}, {"name": "PV2 voltage", "group": "PV", "area": "input", "address": 3007, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "PV2 current", "group": "PV", "area": "input", "address": 3008, "type": "uint16", "scale": 0.1, "unit": "A"}, {"name": "PV2 power", "group": "PV", "area": "input", "address": 3009, "type": "uint32", "scale": 0.1, "unit": "W"}, {"name": "PV3 voltage", "group": "PV", "area": "input", "address": 3011, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "PV3 current", "group": "PV", "area": "input", "address": 3012, "type": "uint16", "scale": 0.1, "unit": "A"}, {"name": "PV3 power", "group": "PV", "area": "input", "address": 3013, "type": "uint32", "scale": 0.1, "unit": "W"}, {"name": "System output power", "group": "Grid", "area": "input", "address": 3019, "type": "uint32", "scale": 0.1, "unit": "W"}, {"name": "Output power", "group": "Grid", "area": "input", "address": 3023, "type": "uint32", "scale": 0.1, "unit": "W"}, {"name": "Grid frequency", "group": "Grid", "area": "input", "address": 3025, "type": "uint16", "scale": 0.01, "unit": "Hz"}, {"name": "Grid voltage 1", "group": "Grid", "area": "input", "address": 3026, "type": "uint16", "scale": 0.1, "unit": "V", "description": "Phase voltage (the only phase on single-phase models)"}, {"name": "Grid current 1", "group": "Grid", "area": "input", "address": 3027, "type": "uint16", "scale": 0.1, "unit": "A"}, {"name": "Grid power 1", "group": "Grid", "area": "input", "address": 3028, "type": "uint32", "scale": 0.1, "unit": "VA"}, {"name": "Grid voltage 2", "group": "Grid", "area": "input", "address": 3030, "type": "uint16", "scale": 0.1, "unit": "V", "description": "Phase voltage"}, {"name": "Grid current 2", "group": "Grid", "area": "input", "address": 3031, "type": "uint16", "scale": 0.1, "unit": "A"}, {"name": "Grid power 2", "group": "Grid", "area": "input", "address": 3032, "type": "uint32", "scale": 0.1, "unit": "VA"}, {"name": "Grid voltage 3", "group": "Grid", "area": "input", "address": 3034, "type": "uint16", "scale": 0.1, "unit": "V", "description": "Phase voltage"}, {"name": "Grid current 3", "group": "Grid", "area": "input", "address": 3035, "type": "uint16", "scale": 0.1, "unit": "A"}, {"name": "Grid power 3", "group": "Grid", "area": "input", "address": 3036, "type": "uint32", "scale": 0.1, "unit": "VA"}, {"name": "Line voltage RS", "group": "Grid", "area": "input", "address": 3038, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "Line voltage ST", "group": "Grid", "area": "input", "address": 3039, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "Line voltage TR", "group": "Grid", "area": "input", "address": 3040, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "Power from grid (total forward)", "group": "Meter", "area": "input", "address": 3041, "type": "uint32", "scale": 0.1, "unit": "W", "description": "Needs a meter or CT"}, {"name": "Power to grid (total reverse)", "group": "Meter", "area": "input", "address": 3043, "type": "uint32", "scale": 0.1, "unit": "W", "description": "Needs a meter or CT"}, {"name": "Load power", "group": "Meter", "area": "input", "address": 3045, "type": "uint32", "scale": 0.1, "unit": "W", "description": "Needs a meter or CT"}, {"name": "Work time total", "group": "Energy", "area": "input", "address": 3047, "type": "uint32", "scale": 0.5, "unit": "s"}, {"name": "Energy today", "group": "Energy", "area": "input", "address": 3049, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "Energy total", "group": "Energy", "area": "input", "address": 3051, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "PV energy total", "group": "Energy", "area": "input", "address": 3053, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "PV1 energy today", "group": "Energy", "area": "input", "address": 3055, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "PV1 energy total", "group": "Energy", "area": "input", "address": 3057, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "PV2 energy today", "group": "Energy", "area": "input", "address": 3059, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "PV2 energy total", "group": "Energy", "area": "input", "address": 3061, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "PV3 energy today", "group": "Energy", "area": "input", "address": 3063, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "PV3 energy total", "group": "Energy", "area": "input", "address": 3065, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "Energy from grid today", "group": "Meter", "area": "input", "address": 3067, "type": "uint32", "scale": 0.1, "unit": "kWh", "description": "Needs a meter or CT"}, {"name": "Energy from grid total", "group": "Meter", "area": "input", "address": 3069, "type": "uint32", "scale": 0.1, "unit": "kWh", "description": "Needs a meter or CT"}, {"name": "Energy to grid today", "group": "Meter", "area": "input", "address": 3071, "type": "uint32", "scale": 0.1, "unit": "kWh", "description": "Needs a meter or CT"}, {"name": "Energy to grid total", "group": "Meter", "area": "input", "address": 3073, "type": "uint32", "scale": 0.1, "unit": "kWh", "description": "Needs a meter or CT"}, {"name": "Load energy today", "group": "Meter", "area": "input", "address": 3075, "type": "uint32", "scale": 0.1, "unit": "kWh", "description": "Needs a meter or CT"}, {"name": "Load energy total", "group": "Meter", "area": "input", "address": 3077, "type": "uint32", "scale": 0.1, "unit": "kWh", "description": "Needs a meter or CT"}, {"name": "PV energy today", "group": "Energy", "area": "input", "address": 3083, "type": "uint32", "scale": 0.1, "unit": "kWh"}, {"name": "Derating mode", "group": "Status", "area": "input", "address": 3086, "type": "uint16", "enum": {"0": "Not derated", "1": "PV high", "2": "Constant power", "3": "Grid voltage high", "4": "Frequency high", "5": "DC source mode", "6": "Inverter temperature", "7": "Active power order", "8": "Load speed process", "9": "Over-back by time", "10": "Internal temperature", "11": "Output temperature", "12": "Line impedance", "13": "Parallel anti-backflow", "14": "Local anti-backflow", "15": "BDC load priority", "16": "CT error"}}, {"name": "PV insulation resistance", "group": "Diagnostics", "area": "input", "address": 3087, "type": "uint16", "unit": "kΩ"}, {"name": "Inverter temperature", "group": "Inverter", "area": "input", "address": 3093, "type": "uint16", "scale": 0.1, "unit": "°C"}, {"name": "IPM temperature", "group": "Inverter", "area": "input", "address": 3094, "type": "uint16", "scale": 0.1, "unit": "°C"}, {"name": "Boost temperature", "group": "Inverter", "area": "input", "address": 3095, "type": "uint16", "scale": 0.1, "unit": "°C"}, {"name": "Communication board temperature", "group": "Inverter", "area": "input", "address": 3097, "type": "uint16", "scale": 0.1, "unit": "°C"}, {"name": "P bus voltage", "group": "Inverter", "area": "input", "address": 3098, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "N bus voltage", "group": "Inverter", "area": "input", "address": 3099, "type": "uint16", "scale": 0.1, "unit": "V"}, {"name": "Output power factor", "group": "Grid", "area": "input", "address": 3100, "type": "uint16", "description": "0-20000, raw value of the PF command"}, {"name": "Real output power percent", "group": "Grid", "area": "input", "address": 3101, "type": "uint16", "unit": "%"}, {"name": "Output max power limit", "group": "Grid", "area": "input", "address": 3102, "type": "uint32", "scale": 0.1, "unit": "W"}, {"name": "Fault main code", "group": "Status", "area": "input", "address": 3105, "type": "uint16"}, {"name": "Warning main code", "group": "Status", "area": "input", "address": 3106, "type": "uint16"}, {"name": "Fault sub code", "group": "Status", "area": "input", "address": 3107, "type": "uint16"}, {"name": "Warning sub code", "group": "Status", "area": "input", "address": 3108, "type": "uint16"}, {"name": "Inverter start delay", "group": "Status", "area": "input", "address": 3115, "type": "uint16", "unit": "s"}, {"name": "Remote on/off", "group": "Control", "area": "holding", "address": 0, "type": "uint16", "access": "RW", "enum": {"0": "Inverter off", "1": "Inverter on"}}, {"name": "Active power rate", "group": "Control", "area": "holding", "address": 3, "type": "uint16", "unit": "%", "access": "RW", "enum": {"255": "Not limited"}, "description": "0-100, or 255 for no limit"}, {"name": "Firmware version", "group": "Info", "area": "holding", "address": 9, "type": "string", "length": 3, "role": "firmware"}, {"name": "Control firmware version", "group": "Info", "area": "holding", "address": 12, "type": "string", "length": 3}, {"name": "Modbus address", "group": "Settings", "area": "holding", "address": 30, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 254}, {"name": "Serial number", "group": "Info", "area": "holding", "address": 3001, "type": "string", "length": 15, "role": "serial", "description": "30 ASCII characters; older units keep it in registers 23-27 instead"}, {"name": "Export limit failed power rate", "group": "Settings", "area": "holding", "address": 3000, "type": "uint16", "scale": 0.1, "unit": "%", "access": "RW", "description": "Power rate applied when the export limit function fails"}, {"name": "Dry contact function enable", "group": "Settings", "area": "holding", "address": 3016, "type": "uint16", "access": "RW", "enum": {"0": "Disable", "1": "Enable"}} ] }