{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "REDZ", "model": "LKM124 / LKM614", "models": [ "LKM124", "LKM614" ], "vendor_website": "redz-sc.com", "description": "P1 Companion Standard meter to Modbus RTU gateway, RS485 on the Modbus side. Reads one meter", "revision": 2, "source": "REDZ, \"LKM Series Electricity Meter Protocol to Modbus Protocol Gateways User Manual\", sections 6.1, 6.5-6.10 and 8 (standard 24-register firmware)", "sources": [ { "title": "LKM Series Electricity Meter Protocol to Modbus Protocol Gateways User Manual", "note": "sections 6.1, 6.5-6.10 and 8 (standard 24-register firmware)" } ], "notes": [ "Standard firmware with the OBIS_EURO list (24 values per meter). Other firmware (OBIS_EURO_1..14, TRF, 64-register versions) keeps the same addresses but maps different OBIS codes, so the names below would be wrong for it.", "Data addresses: the manual's table lists them as 1, 3, 5... (1-based), while its Modbus Poll and ZTerminal examples read", "Time at wire address 0 and 1.8.0 at 4. This map follows the examples. The settings (128-133) and monitoring (160-189)", "addresses are wire addresses, as the FC06/FC16 examples show.", "Values are the read-out digits without the decimal point, so no scale or unit is given: they depend on the meter.", "Mode switch 1 (OFF-OFF): 9600 8N1; modes 2-4 are 19200, 57600 and 115200 8N1 on both sides.", "Table code, reading method and init string are IEC 62056-21 settings; the manual does not say whether the P1 firmware uses them.", "Mode switch 1 (OFF-OFF): 19200 8N1 on the Modbus side, 300 baud auto-switching on the meter side." ], "protocol": "rtu", "unit_id": 1, "baudrate": 9600, "parity": "N", "databits": 8, "stopbits": 1, "byte_order": "big", "word_order": "big", "address_base": 0, "enums": { "reading_method": { "0": "Method 1: full table + BCC (obsolete)", "1": "Method 2: line by line" } }, "x_status": "official", "registers": [ { "name": "Time (0.9.1)", "group": "Meter 1", "area": "holding", "address": 0, "type": "uint32", "access": "R", "description": "OBIS 0.9.1. hhmmss as digits (10:25:07 reads 102507). 0 if not in the read-out" }, { "name": "Date (0.9.2)", "group": "Meter 1", "area": "holding", "address": 2, "type": "uint32", "access": "R", "description": "OBIS 0.9.2. yymmdd as digits (22-09-14 reads 220914). 0 if not in the read-out" }, { "name": "Active energy import A+ (1.8.0)", "group": "Meter 1", "area": "holding", "address": 4, "type": "uint32", "access": "R", "description": "OBIS 1.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Active energy export A- (2.8.0)", "group": "Meter 1", "area": "holding", "address": 6, "type": "uint32", "access": "R", "description": "OBIS 2.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Reactive energy R+ (3.8.0)", "group": "Meter 1", "area": "holding", "address": 8, "type": "uint32", "access": "R", "description": "OBIS 3.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Reactive energy R- (4.8.0)", "group": "Meter 1", "area": "holding", "address": 10, "type": "uint32", "access": "R", "description": "OBIS 4.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Reactive inductive energy import Q1 (5.8.0)", "group": "Meter 1", "area": "holding", "address": 12, "type": "uint32", "access": "R", "description": "OBIS 5.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Reactive capacitive energy import Q2 (6.8.0)", "group": "Meter 1", "area": "holding", "address": 14, "type": "uint32", "access": "R", "description": "OBIS 6.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Reactive inductive energy export Q3 (7.8.0)", "group": "Meter 1", "area": "holding", "address": 16, "type": "uint32", "access": "R", "description": "OBIS 7.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Reactive capacitive energy export Q4 (8.8.0)", "group": "Meter 1", "area": "holding", "address": 18, "type": "uint32", "access": "R", "description": "OBIS 8.8.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Maximum demand import P+max (1.6.0)", "group": "Meter 1", "area": "holding", "address": 20, "type": "uint32", "access": "R", "description": "OBIS 1.6.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Maximum demand export P-max (2.6.0)", "group": "Meter 1", "area": "holding", "address": 22, "type": "uint32", "access": "R", "description": "OBIS 2.6.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Average import power last period (1.5.0)", "group": "Meter 1", "area": "holding", "address": 24, "type": "uint32", "access": "R", "description": "OBIS 1.5.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Active power import P+ (1.7.0)", "group": "Meter 1", "area": "holding", "address": 26, "type": "uint32", "access": "R", "description": "OBIS 1.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Current L1 (31.7.0)", "group": "Meter 1", "area": "holding", "address": 28, "type": "uint32", "access": "R", "description": "OBIS 31.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Current L2 (51.7.0)", "group": "Meter 1", "area": "holding", "address": 30, "type": "uint32", "access": "R", "description": "OBIS 51.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Current L3 (71.7.0)", "group": "Meter 1", "area": "holding", "address": 32, "type": "uint32", "access": "R", "description": "OBIS 71.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Voltage L1 (32.7.0)", "group": "Meter 1", "area": "holding", "address": 34, "type": "uint32", "access": "R", "description": "OBIS 32.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Voltage L2 (52.7.0)", "group": "Meter 1", "area": "holding", "address": 36, "type": "uint32", "access": "R", "description": "OBIS 52.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Voltage L3 (72.7.0)", "group": "Meter 1", "area": "holding", "address": 38, "type": "uint32", "access": "R", "description": "OBIS 72.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Power factor (13.7.0)", "group": "Meter 1", "area": "holding", "address": 40, "type": "int32", "access": "R", "description": "OBIS 13.7.0. Can be negative; the manual lists UInt32. 0 if not in the read-out" }, { "name": "Frequency (14.7.0)", "group": "Meter 1", "area": "holding", "address": 42, "type": "uint32", "access": "R", "description": "OBIS 14.7.0. Digits of the read-out value without the decimal point (e.g. 6895.2317 reads 68952317): apply the meter's decimals. 0 if not in the read-out" }, { "name": "Meter number (C.1.0)", "group": "Meter 1", "area": "holding", "address": 44, "type": "uint32", "access": "R", "description": "OBIS C.1.0. Meter ID / serial number. 0 if not in the read-out" }, { "name": "Active power sum A+ - A- (16.7.0)", "group": "Meter 1", "area": "holding", "address": 46, "type": "int32", "access": "R", "description": "OBIS 16.7.0. Can be negative; the manual lists UInt32. 0 if not in the read-out" }, { "name": "Modbus address", "group": "Settings", "area": "holding", "address": 128, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 247, "description": "Gateway slave id; answers the write with the old id" }, { "name": "Reading period", "group": "Settings", "area": "holding", "address": 129, "type": "uint16", "unit": "s", "access": "RW", "write_min": 1, "write_max": 255, "description": "Wait after each read attempt (default 10)" }, { "name": "Table code", "group": "Settings", "area": "holding", "address": 130, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 255, "description": "ASCII code sent in the IEC 62056-21 option select message (0x30 = '0' default; 0x37 = '7')" }, { "name": "Reading method", "group": "Settings", "area": "holding", "address": 131, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1, "enum": "reading_method", "description": "Default 1" }, { "name": "Init string repeat count", "group": "Settings", "area": "holding", "address": 132, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 4, "description": "Times the init string is sent before the request; 0 = off" }, { "name": "Meter count", "group": "Settings", "area": "holding", "address": 133, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 1, "description": "Meters read on the bus (this model reads one meter)" }, { "name": "IEC address meter 1", "group": "Monitoring", "area": "holding", "address": 160, "type": "uint32", "access": "RW", "write_min": 0, "write_max": 4294967295, "description": "IEC 62056-21 device address (usually the serial number); 0 = not used. Write with FC16" }, { "name": "IEC read counter", "group": "Monitoring", "area": "holding", "address": 162, "type": "uint32", "access": "R", "description": "Successful meter reads" }, { "name": "Uptime", "group": "Monitoring", "area": "holding", "address": 164, "type": "uint32", "unit": "s", "access": "R", "description": "Seconds since power-up; the gateway restarts every 24 h" }, { "name": "Firmware original", "group": "Monitoring", "area": "holding", "address": 166, "type": "uint32", "access": "R", "description": "0xDDMYYYVV: day byte; month nibble; year 12 bits; version byte" }, { "name": "Firmware upgraded", "group": "Monitoring", "area": "holding", "address": 168, "type": "uint32", "access": "R", "description": "Same layout as Firmware original; differs after a field upgrade" }, { "name": "Init string", "group": "Monitoring", "area": "holding", "address": 170, "type": "uint32", "access": "RW", "write_min": 0, "write_max": 4294967295, "description": "4 wake-up bytes sent before the read-out (needs Init string repeat count >= 1). Write with FC16" } ] }