You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的BAC0库创建告警与事件服务?

BAC0库实现BACnet告警与事件服务实操指南

前置准备

首先确认你使用的是最新版本的BAC0库,旧版本存在事件服务解析异常的问题,升级命令:
pip install -U BAC0

核心实现步骤

  • 第一步:初始化BACnet应用时开启事件支持
import BAC0

# 替换为你本地网卡的IP和子网掩码,device_instance需保证在BACnet网络内唯一
bacnet_app = BAC0.connect(ip="192.168.1.10/24", device_instance=1001, event_support=True)

注:event_support参数为必填项,开启后底层才会监听处理事件类BACnet报文

  • 第二步:配置监控对象的告警触发规则
    以监控模拟输入(AI)对象的高限告警为例:
# 连接目标BACnet设备,替换为目标设备的IP和设备实例号
target_device = BAC0.device("192.168.1.20", 2001, bacnet_app=bacnet_app)

# 配置AI点的告警参数
target_device["AI_1"].high_limit = 75.0 # 高限告警触发阈值
target_device["AI_1"].notification_class = 1 # 关联通知类对象,决定告警接收端
target_device["AI_1"].time_delay = 3 # 异常持续3秒才触发告警,避免误报
target_device["AI_1"].deadband = 1.5 # 告警恢复死区,数值低于73.5才会触发告警清除
  • 第三步:绑定事件回调函数处理告警
def alarm_handle(event_data):
    # event_data包含告警类型、触发对象、当前值、触发时间、优先级等信息
    if event_data["event_state"] == "offnormal":
        print(f"告警触发:[{event_data['event_time']}] 对象{event_data['object_name']} 类型{event_data['event_type']} 当前值{event_data['present_value']}")
    elif event_data["event_state"] == "normal":
        print(f"告警恢复:[{event_data['event_time']}] 对象{event_data['object_name']} 当前值{event_data['present_value']}")

# 注册回调到BACnet应用
bacnet_app.on_event = alarm_handle

注意事项

  • 通知类(Notification Class)对象需提前配置,其中定义了告警接收地址、优先级、是否需要确认等规则,未配置的情况下告警报文不会正常上报。
  • 若要接收第三方BACnet设备的主动告警,需提前将你本地BACnet设备的实例号添加到第三方设备的告警接收列表中,部分工业设备需要在其自带的组态工具中手动配置。
  • 除高低限告警外,还支持变化通知、状态告警、浮点溢出告警等事件类型,只需在对应监控对象的属性中配置对应触发条件即可。

内容的提问来源于stack exchange,提问作者Ashish kashyap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:15:00