定制化可能性
定制化可能性
本节介绍能耗监测方案的定制化可能性,帮助售前工程师根据客户需求快速识别定制化机会,并制定合理的工作量估算。学习完成后,您将能够:
- 识别客户的定制化需求
- 评估定制化开发的工作量
- 向客户解释定制化的可行性和边界
- 提供定制化方案建议和报价参考
Customization Dimensions
Section titled “Customization Dimensions”1. 硬件层定制
Section titled “1. 硬件层定制”| 定制项目 | 说明 | 复杂度 | 工作量 |
|---|---|---|---|
| 设备选型 | 根据场景选择 Shelly / Tasmota / 其他 MQTT 设备 | ★☆☆☆☆ | 1 天 |
| 定制固件 | 修改 Tasmota 固件添加特定功能 | ★★★★☆ | 2-4 周 |
| 硬件集成 | 将 Shelly 集成到客户现有配电柜 | ★★★★☆ | 1-2 周 |
| 传感器扩展 | 添加温湿度、光照等额外传感器 | ★★★☆☆ | 1 周 |
2. 数据处理定制
Section titled “2. 数据处理定制”// 示例: 客户特定的能耗计算逻辑// Function: 按客户电价计算电费
var power = msg.payload.power || 0;var todayKwh = msg.payload.today_kwh || 0;
// 客户电价配置 (元/kWh)var PRICE_CONFIG = { peak: { hours: [9,10,11,12,13,14,15,16,17], price: 1.2 }, flat: { hours: [7,8,18,19,20,21], price: 0.8 }, valley: { hours: [22,23,0,1,2,3,4,5,6], price: 0.4 }};
var now = new Date();var hour = now.getHours();var currentPrice = 0.8; // 默认
for (var period in PRICE_CONFIG) { if (PRICE_CONFIG[period].hours.includes(hour)) { currentPrice = PRICE_CONFIG[period].price; break; }}
msg.payload = { device: msg.payload.device, power: power, today_kwh: todayKwh, today_cost: (todayKwh * currentPrice).toFixed(2) + " 元", current_price: currentPrice + " 元/kWh", current_hourly_cost: (power / 1000 * currentPrice).toFixed(4) + " 元/小时"};
return msg;3. 可视化定制
Section titled “3. 可视化定制”| 定制项目 | 说明 | 复杂度 | 工作量 |
|---|---|---|---|
| 品牌仪表板 | 使用客户 Logo 和品牌色 | ★★☆☆☆ | 2-3 天 |
| 定制面板 | 客户特定的数据展示面板 | ★★★☆☆ | 3-5 天 |
| 报表功能 | 定时生成能耗报表 (日报/周报/月报) | ★★★☆☆ | 1 周 |
| 大屏展示 | 工厂大屏数据可视化 | ★★★★☆ | 2-3 周 |
4. 告警定制
Section titled “4. 告警定制”// 示例: 客户特定的告警策略// Function: 多级告警决策引擎
var rules = { // 规则 1: 功率过载 power_overload: { condition: function(data) { return data.power > getThreshold(data.device, data.period); }, message: function(data) { return "设备 " + data.device + " 功率 " + data.power + "W 超过阈值"; }, channels: ["telegram", "email"], priority: "high" },
// 规则 2: 非工作时间异常用电 off_hours_usage: { condition: function(data) { var hour = new Date().getHours(); var isOffHours = (hour < 8 || hour >= 18); var isWeekend = [0, 6].includes(new Date().getDay()); return (isOffHours || isWeekend) && data.power > 100; }, message: function(data) { return "[非工作时间告警] " + data.device + " 在非工作时段消耗 " + data.power + "W"; }, channels: ["telegram"], priority: "medium" },
// 规则 3: 能耗异常增长 abnormal_growth: { condition: function(data, context) { var history = context.get("power_history_" + data.device) || []; if (history.length < 6) return false;
var avg = history.slice(-6).reduce((a,b) => a+b, 0) / 6; return data.power > avg * 2; }, message: function(data) { return "[异常增长] " + data.device + " 功率 " + data.power + "W 是过去平均的 2 倍以上"; }, channels: ["telegram", "email", "webhook"], priority: "medium" },
// 规则 4: 设备离线 device_offline: { condition: function(data, context, node) { // 通过 MQTT 遗嘱消息检测 return data.status === "offline"; }, message: function(data) { return "[设备离线] " + data.device + " 已断开连接"; }, channels: ["telegram", "email"], priority: "critical" }};
// 执行规则引擎var results = [];for (var ruleName in rules) { try { if (rules[ruleName].condition(msg.payload, context, node)) { results.push({ rule: ruleName, message: rules[ruleName].message(msg.payload), channels: rules[ruleName].channels, priority: rules[ruleName].priority }); } } catch (e) { node.warn("Rule " + ruleName + " evaluation error: " + e.message); }}
if (results.length > 0) { msg.payload = { alerts: results, timestamp: Date.now() }; return msg;}
return null;5. 系统集成定制
Section titled “5. 系统集成定制”| 集成对象 | 方式 | 典型场景 | 工作量 |
|---|---|---|---|
| ERP 系统 | REST API | 能耗数据同步到生产管理系统 | 1-2 周 |
| MES 系统 | MQTT / API | 设备状态与生产计划联动 | 2-3 周 |
| 楼宇管理系统 | BACnet / Modbus | 与 HVAC 系统集成 | 3-4 周 |
| 企业微信/钉钉 | Webhook | 告警通知到企业通讯工具 | 1 周 |
| 阿里云 IoT | MQTT Bridge | 云端数据备份和分析 | 2 周 |
Quick Customization Framework
Section titled “Quick Customization Framework”客户提出定制需求 → │ ├── 评估可行性 │ ├── 技术是否可行? │ ├── 成本是否合理? │ └── 时间是否可接受? │ ├── 设计定制方案 │ ├── 方案描述 │ ├── 工作量估算 │ ├── 成本报价 │ └── 交付时间线 │ ├── 实施定制开发 │ ├── 开发环境 │ ├── 测试验证 │ └── 用户验收 │ └── 交付和维护 ├── 文档交付 ├── 培训 └── 维护期支持Common Customization Requests
Section titled “Common Customization Requests”需求 1: “我想要一个手机 App”
Section titled “需求 1: “我想要一个手机 App””方案: 不需要开发原生 App。使用 Grafana 的移动端 Web 界面即可,或者通过 PWA(渐进式 Web 应用)实现类 App 体验。如需原生 App,可开发 Flutter/React Native 应用对接 REST API。
估算:
- Grafana 移动端: ✅ 内置功能,无需开发
- PWA 封装: 3-5 天
- 原生 App: 4-8 周
需求 2: “需要导出月度能耗报表”
Section titled “需求 2: “需要导出月度能耗报表””方案: 使用 Node-RED 定时生成报表数据,通过 Email 节点自动发送。Grafana 也支持报表导出功能(PDF/CSV)。
估算: 3-5 天
需求 3: “与其他传感器联动”
Section titled “需求 3: “与其他传感器联动””方案: Node-RED 天然支持多数据源集成。可添加温度、湿度、光照等传感器数据,与能耗数据一起分析和展示。
估算: 1-2 周(取决于传感器类型和数量)
需求 4: “需要数据对接到云端”
Section titled “需求 4: “需要数据对接到云端””方案: 通过 MQTT Bridge 将本地数据同步到阿里云 IoT 或其他云平台。Node-RED 也可以直接调用云平台 API。
估算: 2-3 周
Customization Pricing Reference
Section titled “Customization Pricing Reference”| 定制类型 | 小规模 (≤50 设备) | 中规模 (50-200) | 大规模 (200+) |
|---|---|---|---|
| 标准部署 | ¥10,000-20,000 | ¥30,000-50,000 | ¥80,000-150,000 |
| 仪表板定制 | ¥5,000-10,000 | ¥10,000-20,000 | ¥20,000-40,000 |
| 告警规则定制 | ¥3,000-8,000 | ¥8,000-15,000 | ¥15,000-30,000 |
| 系统集成 | ¥10,000-20,000 | ¥20,000-50,000 | ¥50,000-150,000 |
| App 开发 | ¥30,000-60,000 | ¥60,000-100,000 | 按需报价 |
说明: 以上为估算参考,实际报价需根据具体需求评估。
Best Practices for Pre-Sales
Section titled “Best Practices for Pre-Sales”✅ 推荐做法:
- 区分标准功能和定制功能,分别报价
- 定制需求先做 POC 验证可行性
- 使用模块化设计降低定制成本
- 提供清晰的定制范围说明书 (SOW)
- 为长期维护预留预算
❌ 避免做法:
- 将定制功能承诺在标准报价中
- 低估系统集成的工作量
- 忽略定制功能的长期维护成本
- 承诺无法实现的技术方案
Summary
Section titled “Summary”- 硬件层定制包括设备选型、固件修改和传感器扩展
- 数据处理定制可实现客户特定的计算逻辑和规则引擎
- 可视化定制支持品牌仪表板、报表和大屏展示
- 告警定制可根据多种条件灵活配置通知策略
- 系统集成支持与 ERP、MES、楼宇管理系统对接