使用IOTGW-NUC100构建智慧园区能源监测系统

应用场景

工业园区、商业综合体、学校医院等场所需要对电、水、气等能源进行分项计量,以实现能耗分析、费用分摊、节能优化。传统方案使用有线抄表系统,改造成本高;本文介绍使用 IOTGW-NUC100 物联网网关,低成本 搭建智慧园区能源监测系统。

系统架构

┌─────────────────────────────────────────────────────────────────┐
│                           云平台                                 │
│   ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐    │
│   │ 能耗大屏  │  │ 费用分摊  │  │ 节能分析  │  │ 报表系统  │    │
│   └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘    │
│        │              │              │              │            │
│   ┌────┴──────────────┴──────────────┴──────────────┴─────┐    │
│   │                    MQTT / HTTP API                     │    │
│   └───────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────┘

                              │ MQTT / HTTP
┌─────────────────────────────┼───────────────────────────────────┐
│ 边缘层 │                    │                                   │
│        │         ┌─────────┴──────────┐                      │
│        │         │   IOTGW-NUC100      │                      │
│        │         │  ┌──────────────┐   │                      │
│        │         │  │  Modbus采集   │   │                      │
│        │         │  │  数据聚合     │   │                      │
│        │         │  │  定时上报     │   │                      │
│        │         │  └──────────────┘   │                      │
│        │         └─────────┬──────────┘                      │
│        │                   │ RS485总线                         │
└────────┼───────────────────┼───────────────────────────────────┘
         │ Modbus-RTU
┌────────┼────────────────────────────────────────────────────────┐
│ 设备层 │  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  │
│        │  │ 智能电表 │  │ 智能水表 │  │ 智能气表 │  │ 热量表  │  │
│        │  │ Modbus │  │ M-Bus   │  │ Modbus │  │ Modbus │  │
│        │  └─────────┘  └─────────┘  └─────────┘  └─────────┘  │
└─────────────────────────────────────────────────────────────────┘

硬件准备

设备型号数量说明
物联网网关IOTGW-NUC1001台主控
智能电表DDSU666若干单相导轨式
智能水表超声波水表若干Modbus/M-Bus
RS485集线器8口1台扩展接口
网线/电源-若干-

电表接入配置

DDSU666单相电表寄存器

寄存器地址参数数据类型单位
0x0000电压u32V
0x0002电流u32A
0x0004有功功率s32W
0x0006无功功率s32var
0x0008功率因数u32-
0x000C正向有功总电能u32kWh

NodeRed配置

读取电表数据

拖入「modbus read」节点:

名称:电表采集
单元ID:1(表地址)
功能码:Read Holding Registers (3)
起始地址:0
寄存器数量:8
轮询间隔:60秒

数据解析function

// DDSU666电表数据解析
var regs = msg.payload;

// 高低位字节转换(DDSU666格式)
function parseU32(high, low) {
    return (low << 16) | high;
}
function parseS32(high, low) {
    var val = parseU32(high, low);
    if (val >= 0x80000000) {
        return val - 0x100000000;
    }
    return val;
}

var voltage = parseU32(regs[1], regs[0]) / 10;      // V
var current = parseU32(regs[3], regs[2]) / 100;      // A  
var power = parseS32(regs[5], regs[4]);              // W
var pf = parseU32(regs[9], regs[8]) / 1000;         // 功率因数
var energy = parseU32(regs[13], regs[12]);           // kWh

return {
    meter_id: "electric_01",
    timestamp: new Date().toISOString(),
    meter_type: "electricity",
    data: {
        voltage: voltage.toFixed(1),
        current: current.toFixed(2),
        power: power,
        power_factor: pf.toFixed(3),
        total_energy: energy,
        power_level: power > 0 ? "positive" : "reverse"
    }
};

水表接入配置

M-Bus转RS485

水表通常使用M-Bus协议,需通过M-Bus转RS485转换器:

水表(M-Bus) ──→ [M-Bus转RS485] ──→ IOTGW RS485接口

水表数据解析

// 超声波水表数据解析(示例)
var regs = msg.payload;

return {
    meter_id: "water_01",
    timestamp: new Date().toISOString(),
    meter_type: "water",
    data: {
        flow_rate: regs[0] / 100,           // m³/h
        total_flow: regs[2] / 1000,          // m³(累计)
        temperature: regs[4] / 10,           // °C
        pressure: regs[6] / 100,            // MPa
        battery_level: regs[8]              // %
    }
};

数据聚合与上报

小时汇总统计

使用「function」节点实现本地聚合:

// 累计用电量差值计算
var current = msg.data.total_energy;
var last = context.get('last_energy') || current;
var consumption = current - last;
context.set('last_energy', current);

return {
    meter_id: msg.meter_id,
    timestamp: msg.timestamp,
    period: "hourly",
    consumption: consumption > 0 ? consumption : 0,  // kWh
    data: msg.data
};

MQTT上报配置

拖入「mqtt out」节点:

服务器:broker.example.com:1883
主题:energy/building_01/meters/+
QoS:1
保留:true

上报JSON格式:

{
    "meter_id": "electric_01",
    "timestamp": "2026-04-16T10:00:00Z",
    "meter_type": "electricity",
    "data": {
        "voltage": 220.5,
        "current": 25.3,
        "power": 5200,
        "power_factor": 0.95,
        "total_energy": 12580.5,
        "power_level": "positive"
    },
    "consumption": {
        "hourly": 5.2,
        "daily": 125.8,
        "monthly": 3850.2
    }
}

能耗大屏展示

Web大屏展示

使用HTML+Chart.js实现实时能耗大屏:

<!DOCTYPE html>
<html>
<head>
    <title>园区能耗监测</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
    <h1>实时能耗监控</h1>
    <div style="display:flex;">
        <canvas id="powerChart"></canvas>
        <canvas id="consumptionPie"></canvas>
    </div>
    <script>
        // 连接WebSocket获取实时数据
        var ws = new WebSocket('ws://gateway-ip:1880/ws/energy');
        ws.onmessage = function(e) {
            var data = JSON.parse(e.data);
            updateCharts(data);
        };
    </script>
</body>
</html>

关键指标展示

指标计算方式展示位置
实时功率直接读取大屏顶部
当日用电量今日累计-昨日累计卡片
分项用电照明/空调/动力分别统计饼图
用电趋势24小时数据点折线图
费用估算用电量×单价右上角

分项计量配置

尖峰平谷统计

// 根据时间段计算电费
var now = new Date();
var hour = now.getHours();

var price = 0;
var period = "";

if (hour >= 0 && hour < 6) {
    price = 0.3; period = "低谷";
} else if (hour >= 6 && hour < 8) {
    price = 0.6; period = "平段";
} else if (hour >= 8 && hour < 12) {
    price = 0.9; period = "高峰";
} else if (hour >= 12 && hour < 18) {
    price = 0.6; period = "平段";
} else if (hour >= 18 && hour < 21) {
    price = 0.9; period = "高峰";
} else {
    price = 0.6; period = "平段";
}

var consumption = msg.consumption;
var cost = consumption * price;

return {
    ...msg,
    billing: {
        period: period,
        unit_price: price,
        consumption: consumption,
        cost: cost.toFixed(2)
    }
};

节能分析

用电异常检测

// 检测用电异常(如非工作时间大功率)
var now = new Date();
var hour = now.getHours();
var dayOfWeek = now.getDay();

var isWorkingHour = hour >= 8 && hour < 18;
var isWeekday = dayOfWeek > 0 && dayOfWeek < 6;

var power = msg.data.power;

if (!isWorkingHour && power > 1000) {
    // 非工作时间功率超过1kW,可能存在异常
    return {
        alert: true,
        level: "warning",
        message: "非工作时间用电异常",
        power: power,
        expected_max: 500
    };
}

if (isWeekday && !isWorkingHour && power < 50) {
    // 工作日非工作时间功率过低,可能设备未关闭
    return {
        alert: true,
        level: "info",
        message: "建议检查下班后设备状态"
    };
}

成本估算

设备单价(元)数量(100点位)小计
IOTGW-NUC10089921798
电表 DDSU6662806016800
水表4503013500
RS485集线器1802360
辅材/施工--5000
合计37458

每点位成本约 375元,远低于传统有线抄表系统。

总结

使用IOTGW-NUC100构建能源监测系统的优势:

  • 多协议支持:Modbus/M-Bus/RS485全兼容
  • 边缘计算:本地聚合、异常检测、减少云端压力
  • 灵活扩展:RS485总线可并联多个设备
  • 成本低廉:每点位成本不到400元
  • 实时监测:秒级采集,分钟级上报
  • 数据分析:本地OEE计算、节能分析