{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Active Power",
  "model": "CS XT / CS HD",
  "models": ["CS XT", "CS HD"],
  "vendor_website": "activepower.com",
  "description": "CleanSource CS XT and CS HD flywheel UPS",
  "revision": 3,
  "revised": "2026-10-18",
  "source": "Active Power, a Division of Piller Power Systems Inc., \"CS XT / CS HD Modbus Register Map\", 6090618-1 Rev. E (2019)",
  "notes": [
    "Active Power CleanSource CS XT and CS HD flywheel UPS (sold by Piller Power Systems in some countries).",
    "Tested on a CleanSource UPS, October 2026.",
    "Read-only (FC03). 32-bit values: the lower register holds bits 15-0, so the word order is low word first (CDAB); read both registers in one request."
  ],
  "protocol": "tcp+rtu",
  "byte_order": "big",
  "word_order": "little",
  "address_base": 0,
  "enums": {
    "output_source": {"0": "Unknown", "1": "Flywheel discharging", "2": "No output", "3": "Online mode", "4": "Bypass mode", "5": "Battery discharge mode"}
  },
  "x_status": "verified",
  "registers": [
    {"name": "ACPW fixed ID", "group": "Identity", "area": "holding", "address": 0, "type": "uint16", "access": "R", "enum": {"16720": "AP"}, "reference": 16720, "description": "Always reads 16720 (0x4150, ASCII \"AP\")", "comment": "Identity"},
    {"name": "Published register map version", "group": "Identity", "area": "holding", "address": 1, "type": "uint16", "access": "R"},
    {"name": "CIO firmware version", "group": "Identity", "area": "holding", "address": 5, "type": "uint16", "access": "R", "description": "Major revision in the high byte, minor in the low byte"},
    {"name": "CIO firmware major", "group": "Identity", "area": "holding", "address": 5, "type": "uint16", "bit": 8, "bits": 8, "access": "R"},
    {"name": "CIO firmware minor", "group": "Identity", "area": "holding", "address": 5, "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "UPS PPC firmware version", "group": "Identity", "area": "holding", "address": 7, "type": "uint16", "access": "R", "description": "Major revision in the high byte, minor in the low byte"},
    {"name": "UPS PPC firmware major", "group": "Identity", "area": "holding", "address": 7, "type": "uint16", "bit": 8, "bits": 8, "access": "R"},
    {"name": "UPS PPC firmware minor", "group": "Identity", "area": "holding", "address": 7, "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "UPS FPGA firmware version", "group": "Identity", "area": "holding", "address": 9, "type": "uint16", "scale": 0.01, "access": "R"},
    {"name": "UPS system serial number", "group": "Identity", "area": "holding", "address": 11, "type": "uint32", "access": "R"},
    {"name": "UPS discharge counter", "group": "Counters", "area": "holding", "address": 19, "type": "uint32", "access": "R"},
    {"name": "UPS bearing replacement date", "group": "Counters", "area": "holding", "address": 27, "type": "int32", "unit": "s", "access": "R", "description": "Unix time: seconds since 1970-01-01"},
    {"name": "UPS Bypass voltage AB", "group": "Bypass", "area": "holding", "address": 701, "type": "int16", "scale": 0.1, "unit": "V", "access": "R", "comment": "Measurements"},
    {"name": "UPS Bypass voltage BC", "group": "Bypass", "area": "holding", "address": 702, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Bypass voltage CA", "group": "Bypass", "area": "holding", "address": 703, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS External source voltage AB", "group": "External source", "area": "holding", "address": 704, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS External source voltage BC", "group": "External source", "area": "holding", "address": 705, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS External source voltage CA", "group": "External source", "area": "holding", "address": 706, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Input voltage AB", "group": "Input", "area": "holding", "address": 707, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Input voltage BC", "group": "Input", "area": "holding", "address": 708, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Input voltage CA", "group": "Input", "area": "holding", "address": 709, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Output voltage AB", "group": "Output", "area": "holding", "address": 710, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Output voltage BC", "group": "Output", "area": "holding", "address": 711, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Output voltage CA", "group": "Output", "area": "holding", "address": 712, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Input current A", "group": "Input", "area": "holding", "address": 713, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Input current B", "group": "Input", "area": "holding", "address": 714, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Input current C", "group": "Input", "area": "holding", "address": 715, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Output current A", "group": "Output", "area": "holding", "address": 716, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Output current B", "group": "Output", "area": "holding", "address": 717, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Output current C", "group": "Output", "area": "holding", "address": 718, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Line inductor temperature", "group": "Temperatures", "area": "holding", "address": 732, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Filter inductor temperature", "group": "Temperatures", "area": "holding", "address": 733, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Neutral inductor 1 temperature", "group": "Temperatures", "area": "holding", "address": 734, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Neutral inductor 2 temperature", "group": "Temperatures", "area": "holding", "address": 735, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Flywheel coil temperature 1", "group": "Temperatures", "area": "holding", "address": 736, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R", "description": "CS HD: lower armature; CS XT: armature"},
    {"name": "UPS Flywheel coil temperature 2", "group": "Temperatures", "area": "holding", "address": 737, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R", "description": "CS HD: upper armature; CS XT: upper field coil"},
    {"name": "UPS Lower bearing temperature", "group": "Temperatures", "area": "holding", "address": 738, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Upper bearing temperature", "group": "Temperatures", "area": "holding", "address": 739, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Flywheel coil temperature 3", "group": "Temperatures", "area": "holding", "address": 740, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R", "description": "CS HD: excitation coil; CS XT: lower field coil"},
    {"name": "UPS Air inlet temperature", "group": "Temperatures", "area": "holding", "address": 743, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Cabinet ambient temperature", "group": "Temperatures", "area": "holding", "address": 744, "type": "int16", "scale": 0.1, "unit": "°C", "access": "R"},
    {"name": "UPS Bypass frequency", "group": "Bypass", "area": "holding", "address": 745, "type": "int16", "scale": 0.1, "unit": "Hz", "access": "R"},
    {"name": "UPS Input frequency", "group": "Input", "area": "holding", "address": 746, "type": "int16", "scale": 0.1, "unit": "Hz", "access": "R"},
    {"name": "UPS Output frequency", "group": "Output", "area": "holding", "address": 747, "type": "int16", "scale": 0.1, "unit": "Hz", "access": "R"},
    {"name": "UPS Input real power", "group": "Input", "area": "holding", "address": 749, "type": "int16", "scale": 0.1, "unit": "kW", "access": "R"},
    {"name": "UPS Input apparent power", "group": "Input", "area": "holding", "address": 750, "type": "int16", "scale": 0.1, "unit": "kVA", "access": "R"},
    {"name": "UPS Input power factor", "group": "Input", "area": "holding", "address": 751, "type": "int16", "scale": 0.001, "access": "R"},
    {"name": "UPS Output power", "group": "Output", "area": "holding", "address": 752, "type": "int16", "scale": 0.1, "unit": "kW", "access": "R"},
    {"name": "UPS Output apparent power", "group": "Output", "area": "holding", "address": 753, "type": "int16", "scale": 0.1, "unit": "kVA", "access": "R"},
    {"name": "UPS Output power factor", "group": "Output", "area": "holding", "address": 754, "type": "int16", "scale": 0.001, "access": "R"},
    {"name": "UPS Flywheel percent energy", "group": "Flywheel", "area": "holding", "address": 755, "type": "int16", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "UPS Vacuum gauge", "group": "Flywheel", "area": "holding", "address": 756, "type": "int16", "scale": 0.1, "unit": "mTorr", "access": "R"},
    {"name": "UPS Flywheel tach", "group": "Flywheel", "area": "holding", "address": 757, "type": "int16", "unit": "RPM", "access": "R"},
    {"name": "UPS Percent load", "group": "Output", "area": "holding", "address": 758, "type": "int16", "scale": 0.01, "unit": "%", "access": "R"},
    {"name": "UPS Rated output power", "group": "Ratings", "area": "holding", "address": 759, "type": "int16", "scale": 0.1, "unit": "kW", "access": "R"},
    {"name": "UPS Rated output current", "group": "Ratings", "area": "holding", "address": 760, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Nominal voltage", "group": "Ratings", "area": "holding", "address": 761, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Parallel output power", "group": "Parallel", "area": "holding", "address": 762, "type": "int16", "scale": 0.1, "unit": "kW", "access": "R"},
    {"name": "UPS External source frequency", "group": "External source", "area": "holding", "address": 763, "type": "int16", "scale": 0.1, "unit": "Hz", "access": "R"},
    {"name": "UPS Bypass voltage AN", "group": "Bypass", "area": "holding", "address": 764, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Bypass voltage BN", "group": "Bypass", "area": "holding", "address": 765, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Bypass voltage CN", "group": "Bypass", "area": "holding", "address": 766, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Input voltage AN", "group": "Input", "area": "holding", "address": 767, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Input voltage BN", "group": "Input", "area": "holding", "address": 768, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Input voltage CN", "group": "Input", "area": "holding", "address": 769, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Output voltage AN", "group": "Output", "area": "holding", "address": 770, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Output voltage BN", "group": "Output", "area": "holding", "address": 771, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Output voltage CN", "group": "Output", "area": "holding", "address": 772, "type": "int16", "scale": 0.1, "unit": "V", "access": "R"},
    {"name": "UPS Parallel input power", "group": "Parallel", "area": "holding", "address": 773, "type": "int16", "scale": 0.1, "unit": "kW", "access": "R"},
    {"name": "UPS Parallel input current A", "group": "Parallel", "area": "holding", "address": 774, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Parallel input current B", "group": "Parallel", "area": "holding", "address": 775, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Parallel input current C", "group": "Parallel", "area": "holding", "address": 776, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Parallel output current A", "group": "Parallel", "area": "holding", "address": 777, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Parallel output current B", "group": "Parallel", "area": "holding", "address": 778, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Parallel output current C", "group": "Parallel", "area": "holding", "address": 779, "type": "int16", "scale": 0.1, "unit": "A", "access": "R"},
    {"name": "UPS Load cell output", "group": "Flywheel", "area": "holding", "address": 780, "type": "int16", "scale": 0.1, "unit": "lb", "access": "R"},
    {"name": "UPS notice active", "group": "Status", "area": "holding", "address": 901, "type": "uint16", "access": "R", "enum": {"0": "No", "1": "Yes"}, "comment": "Status (901-903 latch: non-zero for at least five seconds after a condition)"},
    {"name": "UPS alarm active", "group": "Status", "area": "holding", "address": 902, "type": "uint16", "access": "R", "enum": {"0": "No", "1": "Yes"}},
    {"name": "UPS buzzer state", "group": "Status", "area": "holding", "address": 903, "type": "uint16", "access": "R", "enum": {"0": "Off", "1": "On"}},
    {"name": "UPS output source", "group": "Status", "area": "holding", "address": 913, "type": "uint16", "access": "R", "enum": "output_source"},
    {"name": "UPS customer IO reg 01", "group": "Customer I/O", "area": "holding", "address": 964, "type": "uint16", "access": "R"},
    {"name": "Customer input contact 1 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Customer input contact 2 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Customer input contact 3 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Customer input contact 4 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Customer input contact 5 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 4, "access": "R"},
    {"name": "Customer input contact 6 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 5, "access": "R"},
    {"name": "Customer input contact 7 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 6, "access": "R"},
    {"name": "Customer input contact 8 closed", "group": "Customer I/O", "area": "holding", "address": 964, "type": "bool", "bit": 7, "access": "R"},
    {"name": "UPS customer IO reg 02", "group": "Customer I/O", "area": "holding", "address": 965, "type": "uint16", "access": "R"},
    {"name": "Customer output contact 1 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Customer output contact 2 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Customer output contact 3 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Customer output contact 4 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Customer output contact 5 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 4, "access": "R"},
    {"name": "Customer output contact 6 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 5, "access": "R"},
    {"name": "Customer output contact 7 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 6, "access": "R"},
    {"name": "Customer output contact 8 closed", "group": "Customer I/O", "area": "holding", "address": 965, "type": "bool", "bit": 7, "access": "R"},
    {"name": "ExRC PPC firmware version", "group": "ExRC", "area": "holding", "address": 1000, "type": "uint16", "access": "R", "description": "CS HD only; major in the high byte, minor in the low byte", "comment": "ExRC (CS HD only)"},
    {"name": "ExRC FPGA firmware version", "group": "ExRC", "area": "holding", "address": 1001, "type": "uint16", "scale": 0.01, "access": "R", "description": "CS HD only"},
    {"name": "ExRC serial number", "group": "ExRC", "area": "holding", "address": 1002, "type": "uint32", "access": "R", "description": "CS HD only"},
    {"name": "ExRC energy storage DC volts", "group": "ExRC", "area": "holding", "address": 1004, "type": "int16", "scale": 0.1, "unit": "V", "access": "R", "description": "CS HD only"},
    {"name": "ExRC UPS DC volts", "group": "ExRC", "area": "holding", "address": 1005, "type": "int16", "scale": 0.1, "unit": "V", "access": "R", "description": "CS HD only"},
    {"name": "ExRC energy storage amps", "group": "ExRC", "area": "holding", "address": 1006, "type": "int16", "scale": 0.1, "unit": "A", "access": "R", "description": "CS HD only"},
    {"name": "ExRC DC bus power", "group": "ExRC", "area": "holding", "address": 1007, "type": "int16", "scale": 0.1, "unit": "kW", "access": "R", "description": "CS HD only"}
  ]
}
