{
  "spec_version": 1,
  "slug": "kstar-ksg1-60k",
  "manufacturer": "KSTAR",
  "model": "KSG1K-60K series string inverters (KSG1KSM3 ... KSG60K, incl. KSG25/36/50/60KHV)",
  "category": "Solar inverter",
  "supplier_url": "https://www.kstar.com/download.html",
  "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": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 3000,
      "count": 1,
      "name": "PV1 input voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3001,
      "count": 1,
      "name": "PV2 input voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-3K models."
    },
    {
      "address": 3002,
      "count": 1,
      "name": "PV3 input voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3003,
      "count": 1,
      "name": "PV1 input current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3004,
      "count": 1,
      "name": "PV2 input current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-3K models."
    },
    {
      "address": 3005,
      "count": 1,
      "name": "PV3 input current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3006,
      "count": 2,
      "name": "PV1 input power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "32-bit value over two registers, high word first."
    },
    {
      "address": 3008,
      "count": 2,
      "name": "PV2 input power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-3K models."
    },
    {
      "address": 3010,
      "count": 2,
      "name": "PV3 input power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3012,
      "count": 1,
      "name": "PBUS voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3013,
      "count": 1,
      "name": "NBUS voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3014,
      "count": 1,
      "name": "RS-phase grid voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3015,
      "count": 1,
      "name": "ST-phase grid voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3016,
      "count": 1,
      "name": "TR-phase grid voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3017,
      "count": 1,
      "name": "RS-phase grid frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3018,
      "count": 1,
      "name": "ST-phase grid frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3019,
      "count": 1,
      "name": "TR-phase grid frequency",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3020,
      "count": 1,
      "name": "R-phase grid-tied current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3021,
      "count": 1,
      "name": "S-phase grid-tied current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3022,
      "count": 1,
      "name": "T-phase grid-tied current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3023,
      "count": 2,
      "name": "Grid-tied power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "32-bit value over two registers, high word first."
    },
    {
      "address": 3025,
      "count": 1,
      "name": "Radiator temperature",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "The document prints only the scale (0.1) in the unit column; it names no unit for this row."
    },
    {
      "address": 3026,
      "count": 1,
      "name": "Module temperature",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models. The document prints only the scale (0.1) and names no unit."
    },
    {
      "address": 3027,
      "count": 1,
      "name": "DSP alarm code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit field, Table 3.1.2 (W00 FanA lock, W01 FanB lock, W02 FanC lock, W04 zero power, W05 array warning)."
    },
    {
      "address": 3028,
      "count": 2,
      "name": "DSP error code",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit field over two registers, high word first; Table 3.1.3 (F00 grid volt low ... F23)."
    },
    {
      "address": 3031,
      "count": 1,
      "name": "Fan A speed",
      "data_type": "UInt16",
      "units": "r/min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3032,
      "count": 1,
      "name": "Fan B speed",
      "data_type": "UInt16",
      "units": "r/min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3033,
      "count": 1,
      "name": "Fan C speed",
      "data_type": "UInt16",
      "units": "r/min",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3034,
      "count": 2,
      "name": "Total energy yield",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "32-bit value over two registers, high word first."
    },
    {
      "address": 3038,
      "count": 2,
      "name": "Total energy yield (second counter as printed)",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "The document prints a second 'Total energy yield' row at this address; kept as printed, high word first."
    },
    {
      "address": 3040,
      "count": 2,
      "name": "Annual energy yield",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "32-bit value over two registers, high word first."
    },
    {
      "address": 3042,
      "count": 1,
      "name": "Daily energy yield",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3043,
      "count": 1,
      "name": "Power-on voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3044,
      "count": 1,
      "name": "Power-on delay",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3045,
      "count": 1,
      "name": "Lower grid voltage threshold",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3046,
      "count": 1,
      "name": "Upper grid voltage threshold",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3047,
      "count": 1,
      "name": "Lower grid frequency threshold",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3048,
      "count": 1,
      "name": "Upper grid frequency threshold",
      "data_type": "UInt16",
      "units": "Hz",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3049,
      "count": 1,
      "name": "Preset power factor",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Value range in Table 3.4.2 of the document."
    },
    {
      "address": 3050,
      "count": 1,
      "name": "Preset active power",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Value range in Table 3.4.3."
    },
    {
      "address": 3052,
      "count": 2,
      "name": "Apparent power",
      "data_type": "Int32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "32-bit value over two registers, high word first."
    },
    {
      "address": 3054,
      "count": 2,
      "name": "Reactive power",
      "data_type": "Int32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "32-bit value over two registers, high word first."
    },
    {
      "address": 3056,
      "count": 1,
      "name": "Power factor",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Table 3.4.2 gives the value range."
    },
    {
      "address": 3057,
      "count": 1,
      "name": "DC insulation resistance",
      "data_type": "UInt16",
      "units": "kOhm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Not present on the 1-5K models."
    },
    {
      "address": 3058,
      "count": 1,
      "name": "Overfrequency derating enable",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = enabled, 1 = disabled."
    },
    {
      "address": 3059,
      "count": 1,
      "name": "Overfrequency derating threshold",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Table 3.4.7 gives the thresholds."
    },
    {
      "address": 3060,
      "count": 1,
      "name": "High voltage of the QV curve",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3061,
      "count": 1,
      "name": "High-voltage power factor of the QV curve",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3062,
      "count": 1,
      "name": "Low voltage of the QV curve",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 3063,
      "count": 1,
      "name": "Low-voltage power factor of the QV curve",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [
    {
      "address": 3200,
      "count": 5,
      "name": "Machine model",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "10 bytes of ASCII model text (registers 3200-3204)."
    }
  ],
  "combined_registers": [],
  "notes": "MIRROR-SOURCED. Source document: Shenzhen Kstar Science & Technology \"KSTAR KSG1-60K Inverter - Modbus RS485 Communications Protocol V1.8\", doc code SFT-KSG1-60K-08, release A/0 (19 pages). Kstar's own download page (kstar.com/download.html) does not serve this protocol document; the copy used is a public mirror of the vendor PDF at https://github.com/sshahryiar/KStar-Inverter-MODBUS/blob/main/KStar%20Inverter%20Modbus%20Communication%20Protocol.pdf, SHA-256 81bc1a1ae224c49fc153e311c6652b0e09b1ffab34e43127079151c17e5f215b. Section 1.2 gives the serial settings: 1 start bit, 8 data bits, 1 stop bit, no parity, and 2400/4800/9600 bps with 9600 bps as the default rate; data is transmitted big-endian, so word_order is HighFirst. Section 2.3.1 (ID) gives the client address range 0-32 with 0 as the broadcast address and states no factory address, so unit ID 1 is a placeholder for the inverter's configured address. The seed carries the 04H telemetry block (registers 3000-3063, input registers) and the 03H machine-model string (3200-3204, holding register). Deliberate omissions: every 1-byte item, because the document packs two U8/S8 values into one 16-bit register (3030 operating mode + inverter model, 3036 ARM alarm code + ARM error code, 3037 input mode + mains standard, 3051 preset reactive power S8 + reactive control mode U8) and the app has no 8-bit type; the 3205 DSP/ARM version pair for the same reason; and the 10H setup block (clock 3300-3306, eight 1-byte fields; QV curve 3307-3310). Tables 3.1.1 and 3.3.3 disagree on the QV aliases (3.1.1: 3058-3059 overfrequency derating, 3060-3063 QV; 3.3.3: 3058-3061 QV); this seed follows 3.1.1. The 06H instruction block (4000-4008) is a set of executed commands, not a register map. Rows marked \"1-3K not have\"/\"1-5K not have\" exist only on the larger models and say so. The document prints two 'Total energy yield' rows (3034 and 3038); both are kept, the second labelled as printed."
}
