Skip to content

HUIZHONG SCL-61D Ultrasonic Water Meter Integration

Model catalog

Search for these models in ThinkLink by name or ID.

Model typeNameid_namePlatform model ID
RPC[SCL-61D GET] 23111scl61d_get_23111110312230444077061
RPC[SCL-61D SET] 23111scl61d_set_23111110312286060548101
TemplateSCL-61D110312390112841733
Thing Model[SCL-61D]scl61d_23111110311140134752261
Thing Model[HZ-23111-SCL-61D资产] 区域聚合scl61d_asset_23111119677189950959619
Parameter Thing Model[SCL-61D-PARA]scl61d_para_23111110311197902901253

This document describes how to connect the HUIZHONG SCL-61D5/6 Ultrasonic Water Meter to the ThinkLink platform via a KC21 data collector using Modbus RTU + EdgeBus protocol. It covers:

  • Device wiring and communication parameters
  • ThinkLink platform configuration
  • Data reporting and third-party subscription
  • Advanced EB integration (EBHelper / Thing Model / RPC)

Part 1: User Guide


2. Sensor Information (SCL-61D Ultrasonic Water Meter)

2.1 Basic Information

ItemDetails
BrandHUIZHONG (汇中仪表)
ModelSCL-61D5 / SCL-61D6
Device TypeUltrasonic Water Meter
Power SupplyInternal battery (self-powered, no external power required)

2.2 Communication Parameters (RS485 / Modbus RTU)

ParameterValue
ProtocolModbus RTU
Baud Rate9600 bps
Data Bits8
ParityNone
Stop Bits1
Device Address Range0x01–0xFA
Function Code0x03 (Read Holding Registers)

2.3 Data Registers

Register AddressDataUnitBytesData Type
0x0000–0x0001Instantaneous Flow0.001 m³/h4Float Inverse (FloatLE)
0x0002–0x0003Positive Cumulative Flow0.1 m³4Long Inverse (Uint32LE)
0x0004–0x0005Positive Cumulative Run Timeh4Long Inverse (Uint32LE)
0x0006–0x0007Negative Cumulative Flow0.1 m³4Long Inverse signed (Int32LE)
0x0008–0x0009Negative Cumulative Run Timeh4Long Inverse signed (Int32LE)
0x000A–0x000BWater Temperature4Float Inverse (FloatLE)
0x000C–0x000DPressure0.001 MPa4Float Inverse (FloatLE)
0x000EMeter Information / Diagnostic Code2Hex

The high byte of Meter Information is fixed at 0x00; the low byte is the diagnostic code (JD). 0x00 = normal. See appendix for details.

2.4 Wiring

KC21 WireConnect to Meter
Blue (RS485 A)RS485 A
White (RS485 B)RS485 B
Black (GND)GND

⚠️ Notes:

  • The SCL-61D has an internal battery — do not connect the KC21 red/brown power wire to the meter
  • No preamble wake-up required: SCL-61D uses standard Modbus RTU — send query commands directly

3. Collector Information (KC21)

3.1 Basic Information

ItemDetails
ModelKC21 (A1 version, 10800 mAh internal battery)
Power SupplyInternal battery
External Power Output15V (not used in this setup — meter is self-powered)

3.2 KC21 Wiring

Wire ColorFunction
Red / BrownPower + (not connected in this setup)
BlackPower − / GND
BlueRS485 A
WhiteRS485 B

4.1 Adding a Device

  1. Log in to the ThinkLink platform
  2. Navigate to Device Management → Add Device
  3. Search for and select the template HZ-BATTERY-23111
  4. Complete device creation

4.2 Parameter Configuration (Poll Period & Address)

Path: Device ManagementSelect DeviceConfigurationRPC

Select RPC: [EB SET] easy para

ParameterMeaningNotes
periodPoll periodUnit: seconds, recommended 900 (15 min)
addrMeter Modbus addressFactory default 0x01

Changes take effect on the device's next uplink.

4.3 Third-Party Platform Subscription

MQTT Topic

/v32/{Organization Account}/tkl/up/telemetry/{eui}

Sample Payload

json
{
    "eui": "6353012af10a9331",
    "active_time": "2026-05-21T08:00:00.000Z",
    "thingModelId": "scl61d_23111",
    "thingModelIdName": "scl61d_23111",
    "telemetry_data": {
        "snr": 12.5,
        "rssi": -55,
        "battery": 3.6,
        "instant_flow": -1.955,
        "pos_total_flow": 155.2,
        "pos_run_time": 1360,
        "neg_total_flow": -13.1,
        "neg_run_time": 7,
        "temperature": 29.00,
        "pressure": 0.9150,
        "meter_info": 0,
        "update_time": 1747814400000
    }
}

Part 2: Advanced Integration


5. Data Acquisition (EBHelper)

5.1 Protocol Details

ItemValue
ProtocolModbus RTU
ImplementationEBHelper
BzType23111
Single Query Range0x0000–0x000E (15 registers, all data in one request)

5.2 OTA Configuration

javascript
let otaConfig = getOtaConfig({
    BaudRate: 9600,
    StopBits: 1,
    DataBits: 8,
    Checkbit: CheckbitEnum.NONE,
    Battery: true,
    ConfirmDuty: 60,
    BzType: 23111,
    BzVersion: 1
})

5.3 EB Code

typescript
import { Buffer } from "buffer";
import { buildOtaFile } from "@EBSDK/run";
import { EBModel } from "@EBSDK/EBCompiler/EBModel/EBModel";
import { EventInfoItem } from "@EBSDK/EBCompiler/plugins/EBHelper";
import type { UserConfUPItem } from "@EBSDK/EBCompiler/plugins/EBHelper";
import { CheckbitEnum, getOtaConfig } from "@EBSDK/otaConfig";

// SCL-61D5/6 超声水表,Modbus RTU,一次读取 0x0000-0x000E(15个寄存器)
// KC21 电池供电;水表自供电,KC21 不对水表供电
// 无前导码:标准 Modbus RTU,不需要 preamble

const eventInfo: UserConfUPItem[] = [
    {
        name: "water",
        port: 22,
        version: "0x83",
        dataType: "0x32",
        upPeriod: "10y",
        upPeriodIndex: 70,
        quInfo: [
            {
                protocol: "modbus",
                addr: "0x01",
                code: "0x03",
                periodIndex: 70,
                indexAPP: 150, indexCMD: 0, copySize: 1,
                payIndex: 3, ackAddrIndex: 0,
                isLast: true,
                listVal: [
                    { start: "0x0000", end: "0x0001" }, // 瞬时流量 FloatCDAB (FloatLE)
                    { start: "0x0002", end: "0x0003" }, // 正累积流量 UintCDAB (Uint32LE)
                    { start: "0x0004", end: "0x0005" }, // 正累积运行时间 UintCDAB (Uint32LE)
                    { start: "0x0006", end: "0x0007" }, // 负累积流量 IntCDAB (Int32LE)
                    { start: "0x0008", end: "0x0009" }, // 负累积运行时间 IntCDAB (Int32LE)
                    { start: "0x000A", end: "0x000B" }, // 水温 FloatCDAB (FloatLE)
                    { start: "0x000C", end: "0x000D" }, // 压力 FloatCDAB (FloatLE)
                    { start: "0x000E", end: "0x000E" }, // 仪表信息/诊断码 Uint16LE
                ]
            }
        ]
    }
]

let otaConfig = getOtaConfig({
    BaudRate: 9600,
    StopBits: 1,
    DataBits: 8,
    Checkbit: CheckbitEnum.NONE,
    Battery: true,
    ConfirmDuty: 60,
    BzType: 23111,
    BzVersion: 1
})

const MODBUS_TT = (ebModel: EBModel) => {
    for (let i = 0; i < eventInfo.length; i++) {
        let event = new EventInfoItem(eventInfo[i]);
        event.upEventSetup()
        event.eventInstall()
    }
    return JSON.stringify(ebModel, null, 2)
}

buildOtaFile(import.meta.url, otaConfig, MODBUS_TT)

6. Thing Model

Port: 22

EBHelper standard frame (single query: 15 registers × 2 bytes = 30 bytes payload):

FieldOffsetLength (Bytes)Description
version01Protocol version, fixed 0x83
dataType11Fixed 0x32
covStatus21Reserved
status31Query event status
battery41Battery level
addr51Modbus device address
instant_flow64Instantaneous flow, FloatCDAB
pos_total_flow104Positive cumulative flow, UintCDAB
pos_run_time144Positive run time, UintCDAB
neg_total_flow184Negative cumulative flow, IntCDAB
neg_run_time224Negative run time, IntCDAB
temperature264Water temperature, FloatCDAB
pressure304Pressure, FloatCDAB
meter_info342Diagnostic code, Uint16LE

Total frame length: 36 bytes

6.2 Thing Model Info

ItemValue
Thing Model NameSCL-61D
ThingModel ID Namescl61d_23111
Event Namewater

6.3 Field Mapping

FieldMeaningUnitScale
instant_flowInstantaneous flowm³/hraw × 0.001
pos_total_flowPositive cumulative flowraw × 0.1
pos_run_timePositive run timeh
neg_total_flowNegative cumulative flowraw × 0.1
neg_run_timeNegative run timeh
temperatureWater temperature
pressurePressureMParaw × 0.001
meter_infoDiagnostic code0x00 = normal
batteryKC21 battery level
rssiSignal strengthdBm
snrSignal-to-noise ratiodB

6.4 RPC Parameter Configuration

  • RPC Name: [EB SET] easy para
  • ID Name: eb_set_easy_para
AddressMeaning
app_70Poll period (seconds)
app_150Meter Modbus address

Appendix: Diagnostic Code Reference (meter_info low byte JD)

CodeMeaning
0x00Normal
JD & 0x0F = 0x01Battery voltage below 3.37V — replace battery
JD & 0x0F = 0x02Empty pipe or transducer fault — no measurement signal
JD & 0x0F = 0x03Codes 01 and 02 both active
JD & 0x0F = 0x04Battery voltage below 3.3V — must replace battery immediately
JD & 0x0F = 0x05Communication fault between calculator and transducer
JD & 0x0F = 0x06E2PROM failure
JD & 0x10 = 0x10Supply temperature sensor fault or supply temperature below 2℃
JD & 0x20 = 0x20Supply temperature exceeds 150℃
JD & 0x40 = 0x40Return temperature sensor fault or return temperature below 2℃
JD & 0x80 = 0x80Return temperature exceeds 150℃

Summary

  • Complete integration path: SCL-61D → KC21 → EdgeBus → ThinkLink
  • Supports: remote parameter configuration, periodic full-field data collection (8 fields), standard MQTT third-party subscription
  • Thing Model: scl61d_23111
  • RPC: eb_set_easy_para
  • Template: HZ-BATTERY-23111
  • Low-power, battery-operated design suitable for water metering and pipe network monitoring