跳转到内容

定制化可能性

定制化可能性

本节从售前工程师视角,介绍远程巡检方案的可定制化方向,帮助您针对不同客户的特定需求提供定制方案。学习完成后,您将能够:

  • 识别客户的个性化需求并提供定制方案
  • 设计定制化的触发逻辑和通知规则
  • 扩展方案以集成其他系统和传感器
  • 为客户提供弹性的定制报价
┌────────────────────────────────────────────────────────────┐
│ 远程巡检定制框架 │
├────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 触发层 (Trigger) │ │
│ │ ├── PIR 运动检测 │ │
│ │ ├── 定时拍照 (可编程 cron) │ │
│ │ ├── 外部传感器 (门磁/震动/烟雾) │ │
│ │ ├── MQTT 命令触发 │ │
│ │ └── AI 视觉检测 (TensorFlow Lite) │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 处理层 (Processing) │ │
│ │ ├── 图片分辨率/质量动态调整 │ │
│ │ ├── 图像预处理 (裁剪/水印/标注) │ │
│ │ ├── 多图片合成 (全景拼接) │ │
│ │ ├── 云存储 (阿里云OSS/S3) │ │
│ │ └── AI 推理 (物体检测/人数统计) │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ 通知层 (Notification) │ │
│ │ ├── 多级告警 (通知+电话+工单) │ │
│ │ ├── 定时报告 (日报/周报) │ │
│ │ ├── 企业微信/钉钉/飞书集成 │ │
│ │ ├── 告警升级链 (逐级上报) │ │
│ │ └── 数据分析看板 (趋势/异常检测) │ │
│ └──────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────┘
// Node-RED Function: 多传感器逻辑融合
// 结合 PIR + 门磁 + 定时器
var pirState = msg.payload.pir; // PIR 状态
var doorState = msg.payload.door; // 门磁状态
var illuminance = msg.payload.light; // 光照强度
var hour = new Date().getHours();
// 自定义触发逻辑
var shouldTrigger = false;
// 规则 1: 非工作时间 + 门打开 + PIR 检测到运动
if (hour >= 18 || hour < 8) {
if (doorState === "open" && pirState === "detected") {
shouldTrigger = true;
msg.alertLevel = "critical";
}
}
// 规则 2: 白天 + 光照变化 + PIR 检测 (区域无人但被入侵)
if (hour >= 8 && hour < 18) {
if (pirState === "detected" && illuminance < 100) {
shouldTrigger = true;
msg.alertLevel = "normal";
}
}
// 规则 3: 周期性健康检查 (每 4 小时)
// 由定时器独立触发,不从该逻辑处理
msg.payload = {
trigger: shouldTrigger,
reason: shouldTrigger ? getTriggerReason() : "none",
level: msg.alertLevel
};
return msg;

定制要点:

  • 可以组合任意传感器信号
  • 支持时间窗口、阈值组合逻辑
  • 告警级别可动态调整
// ESP32: TensorFlow Lite 物体检测
// 检测到人/车辆/特定物体时触发拍照发送
#include "tensorflow/lite/micro/all_ops_resolver.h"
#include "tensorflow/lite/micro/micro_interpreter.h"
// 加载预训练模型 (在烧录时闪入 flash)
extern const unsigned char person_detection_model[];
extern const int person_detection_model_len;
// 推理函数
bool detectPerson(const uint8_t* image_data) {
// 1. 将图片数据输入模型
// 2. 运行推理
// 3. 返回检测结果
return personDetected;
}
void takePhotoWithAI() {
camera_fb_t* fb = esp_camera_fb_get();
if (!fb) return;
// 运行 AI 检测
if (detectPerson(fb->buf)) {
// 仅当检测到人才发送
sendPhotoViaMQTT(fb);
}
esp_camera_fb_return(fb);
}

说明: ESP32-S3 支持 TensorFlow Lite Micro,可在设备端运行轻量级 AI 模型。OV2640 VGA 输入下推理时间约 200-500ms。

// Node-RED Function: 上传图片到阿里云 OSS
// 需要安装 node-red-contrib-aliyun-oss
// 保存到本地
var fs = require('fs');
var localPath = "/data/esp32cam/photo_" + Date.now() + ".jpg";
fs.writeFileSync(localPath, msg.payload);
// 同步到阿里云 OSS
msg.bucket = "factory-surveillance";
msg.path = "esp32cam/" + new Date().toISOString().split('T')[0] + "/" + Date.now() + ".jpg";
msg.file_path = localPath;
return msg;
// OSS 节点自动完成上传
归档级别存储位置保留期限访问频率
热数据Node-RED 本地7 天高 (实时查看)
温数据阿里云 OSS30 天中 (调查使用)
冷数据OSS 归档存储180 天低 (合规要求)
// Node-RED Function: 按热/温/冷三级归档
var fs = require('fs');
var path = require('path');
var now = Date.now();
var photoData = msg.payload;
var photoId = Date.now();
// 热: 保存到本地 (7 天)
var hotPath = "/data/esp32cam/hot/" + photoId + ".jpg";
fs.writeFileSync(hotPath, photoData);
// 温: 上传到阿里云 OSS (30 天)
// 直接在本 Function 中调用阿里云 SDK
// 清理过期热数据 (每小时执行)
function cleanHotData() {
var hotDir = "/data/esp32cam/hot/";
var files = fs.readdirSync(hotDir);
var cutoff = now - 7 * 24 * 60 * 60 * 1000;
files.forEach(function(file) {
var filePath = path.join(hotDir, file);
var stat = fs.statSync(filePath);
if (stat.mtimeMs < cutoff) {
fs.unlinkSync(filePath);
}
});
}
// Node-RED Function: 企业微信机器人通知
var wxUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY";
var msgBody = {
msgtype: "markdown",
markdown: {
content: "## ⚠️ 远程巡检告警\n" +
"**检测时间**: " + new Date().toLocaleString() + "\n" +
"**设备**: ESP32-CAM (Area A)\n" +
"**事件**: 检测到运动\n" +
"> 请及时查看现场情况"
}
};
msg.url = wxUrl;
msg.method = "POST";
msg.headers = {"Content-Type": "application/json"};
msg.payload = msgBody;
return msg;
// Node-RED Function: 告警升级逻辑
// 根据告警次数和时间逐级通知
var alertCount = context.get("alertCount") || 0;
var firstAlertTime = context.get("firstAlertTime") || 0;
var now = Date.now();
alertCount++;
context.set("alertCount", alertCount);
if (alertCount === 1) {
context.set("firstAlertTime", now);
}
// 升级逻辑
if (alertCount >= 5 && (now - firstAlertTime) < 600000) {
// 10 分钟内连续 5 次告警 → 升级到经理
msg.channel = "telegram_manager";
msg.content = "🔴 [升级] 异常告警频率过高,请立即处理!";
} else if (alertCount >= 3 && (now - firstAlertTime) < 300000) {
// 5 分钟内连续 3 次 → 升级到值班主管
msg.channel = "telegram_supervisor";
msg.content = "🟡 [升级] 多次告警,请关注!";
} else {
// 正常告警
msg.channel = "telegram_normal";
msg.content = "ℹ️ 检测到运动事件";
}
// 30 分钟无告警后重置计数器
if ((now - firstAlertTime) > 1800000) {
context.set("alertCount", 0);
context.set("firstAlertTime", 0);
}
return msg;
// Node-RED Function: 拍照时自动生成 MES 工单
// 触发拍照 → 自动在 MES 中创建检查记录
msg.url = "http://mes-api.factory.com/api/inspection-records";
msg.method = "POST";
msg.headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_MES_TOKEN"
};
msg.payload = {
area: "Assembly Hall A",
equipment: "ESP32-CAM-01",
timestamp: new Date().toISOString(),
eventType: "motion_detected",
imageUrl: "http://oss.factory.com/esp32cam/photo_12345.jpg",
status: "pending_review"
};
return msg;
// Node-RED Function: 转发到阿里云 IoT
// 使用阿里云 IoT MQTT Bridge
var aliyunMsg = {
topic: "/factory/esp32cam/event",
payload: {
deviceId: "esp32cam-01",
eventType: "photo_captured",
timestamp: Date.now(),
photoOssUrl: "http://factory-oss.aliyuncs.com/photo_12345.jpg",
metadata: {
resolution: "640x480",
size: 28501,
trigger: "pir"
}
},
qos: 1
};
// 通过阿里云 MQTT 客户端发布
aliyunClient.publish(aliyunMsg);
定制类型复杂度额外人天参考费率 (USD)
触发逻辑定制低-中0.5-2$250-$1,000
存储方案定制1-3$500-$1,500
通知渠道定制低-中0.5-2$250-$1,000
AI 视觉集成5-10$2,500-$5,000
MES/ERP 集成3-8$1,500-$4,000
阿里云 IoT 集成2-4$1,000-$2,000
多节点管理平台5-15$2,500-$7,500
OTA 升级系统3-6$1,500-$3,000
客户需求 → 快速评估流程:
1. 该定制影响哪一层?
[触发层] → 修改 ESP32 代码或 Node-RED 逻辑
[处理层] → 增加存储/处理节点
[通知层] → 配置新的通知通道
2. 复杂度评估:
- 仅配置修改: 低 (0.5 人天)
- 新增功能节点: 中 (1-3 人天)
- 外部系统集成: 高 (3-8 人天)
- AI 模型开发: 极高 (10+ 人天)
3. 报价原则:
- 配置修改: 包含在系统费用中
- 新增功能: 按人天报价
- 外部集成: 按集成复杂度报价
- AI 模型: 独立项目报价

推荐做法:

  • 建立标准化的定制评估模板
  • 维护预制的定制模块库(减少重复开发)
  • 每次定制后更新模块库和文档
  • 在合同中说明定制的维护范围
  • 为客户提供定制自服务选项(如 Node-RED 流程编辑)

避免做法:

  • 承诺无限定制(明确定制边界)
  • 忽略定制对系统稳定性的影响
  • 定制后不更新文档和配置
  • 低价值定制消耗过多开发资源
  • 未评估定制对升级兼容性的影响
  1. 三层定制框架: 触发层 → 处理层 → 通知层
  2. AI 视觉: ESP32-S3 + TensorFlow Lite Micro 实现设备端 AI
  3. 企业集成: MES/ERP/阿里云 IoT/企业微信
  4. 存储方案: 热/温/冷三级归档,阿里云 OSS
  5. 定制报价: 配置修改低至 0.5 人天,AI 集成可高达 10+ 人天