用 Python 给 CE-AJ12N 非接触电流电压传感器做本地异常检测与钉钉告警 – 化凡蜕变

用 Python 给 CE-AJ12N 非接触电流电压传感器做本地异常检测与钉钉告警 – 化凡蜕变


この記事では、実行可能なエッジサイド ガジェットを紹介します。pymodbus を使用して SSET CE-AJ12N 非接触電流および電圧センサーをポーリングし、電流、電圧、電力がルールに従って制限を超えているかどうかを判断します。制限を超えると、DingTalk ロボットがプッシュされます。機器の異常な電力消費に対するバックアップアラームとして、ゲートウェイまたは産業用コンピュータ上で実行するのに適しています。

1. ハードウェアとプロトコルの前提条件

CE-AJ12N は穴あき断線構造、0 ~ 800A 範囲内で AC 電流精度 ≤0.5%、電圧精度 ≤1.5%、電力精度 ≤1.0%、RS485 Modbus 出力、45 ~ 65Hz 範囲内の直接読み取りを備えています。この記事の例では、共通保持レジスタ マッピングに従って電流、電圧、電力を読み取ります。特定のレジスタ アドレスは、sset.cn の公式 Web サイトに準拠します。

2. 依存関係と構成

"""CE-AJ12N 本地异常检测与钉钉告警示例。"""
from pymodbus.client import ModbusSerialClient
import requests
import time


PORT = "COM3"          # 改为实际串口或 tcp 形式
SLAVE = 1              # 传感器 Modbus 地址
DING_URL = "
RULES = {              # 越限规则:字段 -> (下限, 上限)
    "voltage": (198.0, 242.0),
    "current": (0.0, 750.0),
    "power": (0.0, 400.0),
}

3. 読み取りと変換

次に、3 つの保持レジスタを読み取り、レンジ変換を実行します。換算係数は機器の仕様に応じて設定されます。

def read_metrics():
    """返回一组电参量字典,单位 A/V/W。"""
    client = ModbusSerialClient(port=PORT, baudrate=9600, timeout=1)
    client.connect()
    rr = client.read_holding_registers(address=0, count=3, slave=SLAVE)
    client.close()
    if rr.is_error():
        return None
    raw = rr.registers
    return {
        "voltage": raw[0] * 0.1,   # 电压换算系数示例
        "current": raw[1] * 0.1,   # 电流换算系数示例
        "power": raw[2] * 1.0,     # 功率换算系数示例
    }

4. ルールエンジンとアラ​​ーム

def check_rules(metrics):
    """返回越限字段列表。"""
    hits = []
    for field, (low, high) in RULES.items():
        val = metrics.get(field)
        if val is None:
            continue
        if val < low or val > high:
            hits.append((field, val, low, high))
    return hits


def alert_ding(hits):
    """推送钉钉机器人文本消息。"""
    lines = ["CE-AJ12N 用电异常告警"]
    for field, val, low, high in hits:
        lines.append("%s=%.1f,超出 [%.1f, %.1f]" % (field, val, low, high))
    requests.post(DING_URL, json={"msgtype": "text", "text": {"content": "
".join(lines)}})


def loop(interval=5):
    """主轮询循环。"""
    while True:
        m = read_metrics()
        if m:
            hits = check_rules(m)
            if hits:
                alert_ding(hits)
        time.sleep(interval)

5. 操作と注意事項

産業用コンピュータまたはゲートウェイでは、次を使用します。 python ceaj12n_alert.py ただ実行してください。運用環境では、アラーム ストームを回避するために、ログ記録、異常な再接続、および電流制限を追加することをお勧めします。電圧精度は、ワイヤ径が穴径の 2/3 を超えない場合にのみ 1.5% 以下で安定します。最初にインストールプロセスを確認する必要があります。

プロジェクト 説明する
サンプリング期間 デフォルトは 5 秒ですが、プロセスに応じて調整できます。
伝送方式 シリアルポート RS485、9600 8N1
アラームチャンネル DingTalk カスタム ロボット Webhook
データソース SSET CE-AJ12N

Q1: この例は実稼働環境で直接使用できますか?
A1: この例はバックボーン ロジックを示しており、運用には切断と再接続、ログとアラームの電流制限を追加する必要があります。レジスタアドレスと変換係数は、sset.cn の公式 Web サイトに準拠します。

Q2: センサーはTCPをサポートしていますか?
A2: CE-AJ12N はネイティブ RS485 Modbus であり、シリアル ポート サーバーまたはゲートウェイを介して TCP に変換できます。例では使用されています ModbusTcpClient 接続可能です。

Q3: 誤報が多すぎる場合はどうすればよいですか?
A3: ヒステリシスと継続時間のしきい値をルールに追加すると (N 回連続してしきい値を違反した場合にのみアラートを出すなど)、一時的な誤警報を大幅に減らすことができます。



Source link

Leave a Reply

Your email address will not be published. Required fields are marked *