CATALOG

芯步的复合开关设备提供了标准化的开放接口,支持HTTP和MQTT两种对接方式。以下方案围绕“故障检测-事件推送-告警分发”这条链路展开,你可以根据实际部署环境(公网/私有化)和编程语言偏好进行调整。

解决方案:基于芯步开放接口的智能门禁照明复合开关故障告警系统二次开发

1. 概述与设计

针对“智能门禁照明复合开关”的二次开发,核心在于利用设备现有的状态上报心跳机制,结合HTTP/MQTT推送能力,构建一个独立的告警中台。

  • 核心目标:实时监测复合开关控制的门磁状态、照明负载通断及设备在线情况。

  • 触发机制

    • 被动上报:门被非法打开、照明灯故障(电流/电压异常)时,设备实时上报数据。

    • 主动探测:定时巡检设备最后上线时间,判定“设备离线”故障。

  • 通知方式:集成第三方通知渠道(如钉钉、微信、邮件、本地声光报警器)。

系统架构流程图:

graph TD
    A[智能复合开关设备] -->|HTTP/MQTT推送| B(芯步云平台)
    B -->|消息转发| C[用户自建告警服务器]
    C -->|数据解析与逻辑判断| D{故障类型判定}
    D -- 非法开门 --> E[推送安保告警]
    D -- 照明/电路故障 --> F[推送设备维修告警]
    D -- 设备离线/心跳丢失 --> G[推送网络/断电告警]
    E --> H[第三方通知渠道]
    F --> H
    G --> H
    H --> I[管理员/运维人员]

2. 智能复合开关的关键接口解析

在进行二次开发前,需理解芯步此类复合开关(如型号:UNI-KG-KC)的接口特性。其核心接口分为两类:下行控制(服务器发指令给设备)和 上行推送(设备上报状态给服务器)

2.1 设备上行消息(故障数据源)

设备会在状态变化时向您的服务器推送 JSON 数据。您需要在芯步控制台配置您的 HTTP 接收 URLMQTT 订阅主题

主要关注以下推送数据:

  • 设备状态推送

    • 触发:门锁打开/关闭、照明开关动作、电量/电流异常。

    • 字段解析:通常包含 device_id(设备ID)、power(继电器状态)、door_status(门磁状态,需确认该型号是否支持外接门磁)。

  • 设备上下线消息(关键告警源)

    • 上线:设备联网成功(type: connect)。

    • 下线:设备断开连接(type: disconnect)。这里的 reason 字段非常重要:若为 timeout 通常代表断网或断电,是典型的故障告警触发点

  • 透传/异常数据:如果照明灯具出现过载或短路,复合开关内部的保护机制可能会触发断电并上报特定错误码。

2.2 下行控制接口(用于故障修复/复位)

当接收到告警后,管理员可能希望通过远程操作进行初步修复。

  • 接口地址http(s)://api.thingboot.com/{AppId}/device/control/

  • 请求方式:POST

  • 关键参数

    • device:目标设备ID。

    • order: 控制指令。例如 {"power": 0} 表示关闭照明,{"power": 1} 表示重启照明尝试恢复。

3. 故障告警逻辑的二次开发实现

二次开发的核心工作是编写业务逻辑处理程序。以下分三个典型故障场景阐述开发方案。

3.1 第一种场景:门禁未关/非法开门告警

实现逻辑

  1. 数据接收:服务器接收到设备推送的状态数据。

  2. 逻辑判断

    • 解析数据中的门磁状态(假设字段为 lockcontact)。

    • 若状态为 open,且当前系统时间处于“布防时段”(如深夜23:00-06:00),或该状态持续时间超过阈值(如5分钟)。

  3. 动作触发:生成告警事件。

伪代码示例

3.2 第二种场景:照明负载故障(灯具损坏/线路异常)

实现逻辑

  1. 数据采集:复合开关具备电压/电流检测功能(需确认具体参数)。当照明开启时,电流低于阈值(灯具损坏)或高于阈值(短路)。

  2. 数据接收:设备推送包含 currentload_status 字段的数据。

  3. 匹配判定:指令下发状态(power:1)与实际电流值(current:0)不符,则判定为故障。

二次开发处理流程

  • 服务器维护一个设备状态表。

  • 若指令要求开灯,但收到的功率为0,则输出“灯具断路故障”。

  • 立即调用告警接口,并管理员切断电源避免风险。

3.3 第三种场景:设备离线/心跳中断告警

实现逻辑

设备默认会发送心跳包。如果连续一段时间未收到设备消息,或收到 disconnect 消息

  1. 消息接收:收到 type: disconnect

  2. 策略优化:由于网络波动可能导致频繁上下线,使用滑动窗口策略。

    • 收到 disconnect 后不立即告警,而是标记为“疑似离线”。

    • 启动定时器(例如30秒)。若30秒内未收到 connect,则确认真实故障。

    • 调用芯步查询接口,确认设备当前状态。

4. 告警通知体系的集成(输出端)

在识别到故障后,需要通过多种渠道将信息送达。

4.1 企业微信/钉钉/飞书机器人(最推荐,免费且实时)
  • 实现:在您的服务器代码中,集成企业微信 Webhook。

  • 场景:当触发“非法开门”时,群机器人自动发送卡片消息,包含设备位置、现场照片(需另配摄像头)、处理按钮。

  • 进阶操作:可在消息卡片中附带“远程关灯”或“重启门禁”的链接。点击链接调用芯步的下行接口 [citation:2],实现直接在 IM 内修复故障。

4.2 语音播报告警(现场声光)
  • 硬件:若现场有芯步的“智能语音喇叭”

  • 集成:在告警逻辑中,顺便调用语音喇叭的接口:http://[喇叭IP]/speak?text= "仓库门未关闭,请立即检查"。同时,可以通过复合开关的接口,控制现场灯光闪烁(例如每隔1秒开关一次照明)作为视觉提醒。

4.3 数据持久化与统计看板
  • 目的:便于追踪偶发性故障。

  • 开发:将接收到的所有状态数据存入 MySQL/PostgreSQL。建立一个运维看板,统计“最常离线”或“灯泡故障率最高”的设备,进行预测性维护。

5. 私有化部署与网络容灾

芯步支持私有化部署,这对门禁系统至关重要,因为断网不能导致门禁失控

  1. 局域网纯闭环

    • 如果您的园区有本地服务器,开启私有化模式。所有故障告警数据在局域网内传输,延迟更低(<10ms),且断外网不影响告警逻辑(例如外网断了,但本地短信网关或警铃依然可以触发)。

  2. 离线缓存策略

    • 在二次开发的服务端增加缓存(Redis)。即使告警接收端(如第三方 IM API)挂了,服务器也要保留最近 24 小时的故障记录,待恢复后补推。

6. 总结实施步骤

在具体落地实施时,可以按以下顺序推进:

  1. 环境准备:在芯步控制台创建应用,获取 AppIdAppSecret,配置消息推送 URL(通过内网穿透工具或在公网服务器上进行本地测试)。

  2. 数据捕获:编写简单的 HTTP 接口打印 Request Body。让复合开关插拔一次,观察具体的 JSON 数据结构,确认门磁和灯的字段名。

  3. 逻辑编码:根据字段编写 if-else 判定逻辑(延时容错)。

  4. 通道打通:配置企业微信机器人,将解析出的“故障文本”发到手机上进行测试验证。

  5. 闭环测试:模拟故障(比如拔掉照明灯、手动关门不到位),检查通知是否触发及恢复后是否发送了恢复通知。