thread_func.py 8.6 KB
from datetime import datetime

from app.models import Device, Alarm
from app import db
import app.image as img
import os
from flask import current_app


def gas_concentration(app, data):
    if data is not None:
        device_type = data.get("type", "")
        device_addr = data.get("addr", "")
        with (app.app_context()):
            device = Device.query.filter_by(address=device_addr).filter_by(devicetype_id=device_type)
            if device.count() == 1:
                v = data.get("value", 0)

                if v is not None and v > device[0].threshold and \
                        Alarm.query.filter_by(device_id=device[0].id).filter_by(
                            addtime=data["lastUpdateTime"]).count() <= 0:
                    alarm = Alarm(
                        msg="浓度高报警-浓度值:" + str(data["value"]),
                        device_id=device[0].id,
                        addtime=data["lastUpdateTime"],
                        preview=0,
                        handle=0,
                    )
                    db.session.add(db.session.merge(alarm))
                    db.session.commit()


def pressure(app, data):
    if data is not None:
        device_type = data.get("type", "")
        device_addr = data.get("addr", "")
        with (app.app_context()):
            device = Device.query.filter_by(address=device_addr).filter_by(devicetype_id=device_type)
            if device.count() == 1:
                v = data.get("value", 0)

                if v is not None and v > device[0].threshold and \
                        Alarm.query.filter_by(device_id=device[0].id).filter_by(
                            addtime=data["lastUpdateTime"]).count() <= 0:
                    alarm = Alarm(
                        msg="压力高报警-压力值:" + str(data["value"]),
                        device_id=device[0].id,
                        addtime=data["lastUpdateTime"],
                        preview=0,
                        handle=0,
                        day=str(data["lastUpdateTime"]).split(' ')[0].split('-')[2],
                        month=str(data["lastUpdateTime"]).split(' ')[0].split('-')[1],
                        year=str(data["lastUpdateTime"]).split(' ')[0].split('-')[0],
                        date=str(data["lastUpdateTime"]).split(' ')[0],
                    )
                    db.session.add(db.session.merge(alarm))
                    db.session.commit()


def switch(app, data):
    if data is not None:
        device_type = data.get("type", "")
        device_addr = data.get("addr", "")
        with (app.app_context()):
            device = Device.query.filter_by(address=device_addr).filter_by(devicetype_id=device_type)
            if device.count() == 1:
                v = data.get("value", 0)

                if v is not None and (v == 1 or v == -1) and \
                        Alarm.query.filter_by(device_id=device[0].id).filter_by(
                            addtime=data["lastUpdateTime"]).count() <= 0:
                    if v == 1:
                        msg = "急停按钮-打开:"
                    else:
                        msg = "急停按钮-离线:"
                    alarm = Alarm(
                        msg=msg,
                        device_id=device[0].id,
                        addtime=data["lastUpdateTime"],
                        preview=0,
                        handle=0,
                        day=str(data["lastUpdateTime"]).split(' ')[0].split('-')[2],
                        month=str(data["lastUpdateTime"]).split(' ')[0].split('-')[1],
                        year=str(data["lastUpdateTime"]).split(' ')[0].split('-')[0],
                        date=str(data["lastUpdateTime"]).split(' ')[0],
                    )
                    db.session.add(db.session.merge(alarm))
                    db.session.commit()


def video(app, data):
    if data is not None:
        device_type = data.get("type", "")
        device_addr = data.get("addr", "")
        # print(f'device_type={device_type}')
        # print(f'device_addr={device_addr}')
        with (app.app_context()):
            device = Device.query.filter_by(address=device_addr).filter_by(devicetype_id=device_type)
            if device.count() == 1:
                if Alarm.query.filter_by(device_id=device[0].id).filter_by(
                            addtime=data["lastUpdateTime"]).count() <= 0:
                    if not os.path.exists(current_app.config["AL_DIR"]):
                        # 创建一个多级目录
                        os.makedirs(current_app.config["AL_DIR"])  # 创建文件夹
                        os.chmod(current_app.config["AL_DIR"], "rw")  # 设置权限

                    file = str(device_type)  + datetime.now().__format__('%Y%m%d%H%M%S%f') + '.png'
                    path = current_app.config["AL_DIR"] + file
                    img.save_image(img.base64_to_image(data["base64Picture"]), path)
                    alarm = Alarm(
                        msg=data["eventName"],
                        img=file,
                        device_id=device[0].id,
                        addtime=data["lastUpdateTime"],
                        preview=1,
                        handle=0,
                        day=str(data["lastUpdateTime"]).split(' ')[0].split('-')[2],
                        month=str(data["lastUpdateTime"]).split(' ')[0].split('-')[1],
                        year=str(data["lastUpdateTime"]).split(' ')[0].split('-')[0],
                        date=str(data["lastUpdateTime"]).split(' ')[0],
                    )
                    db.session.add(db.session.merge(alarm))
                    db.session.commit()


def radar(app, data):
    if data is not None:
        device_type = data.get("type", "")
        device_addr = data.get("addr", "")
        with (app.app_context()):
            device = Device.query.filter_by(address=device_addr).filter_by(devicetype_id=device_type)
            if device.count() == 1:
                if Alarm.query.filter_by(device_id=device[0].id).filter_by(
                            addtime=data["lastUpdateTime"]).count() <= 0:

                    alarm = Alarm(
                        msg=data["eventName"],
                        device_id=device[0].id,
                        addtime=data["lastUpdateTime"],
                        preview=0,
                        handle=0,
                        day=str(data["lastUpdateTime"]).split(' ')[0].split('-')[2],
                        month=str(data["lastUpdateTime"]).split(' ')[0].split('-')[1],
                        year=str(data["lastUpdateTime"]).split(' ')[0].split('-')[0],
                        date=str(data["lastUpdateTime"]).split(' ')[0],
                    )
                    db.session.add(db.session.merge(alarm))
                    db.session.commit()


def pcm(app, data):
    if data is not None:
        device_type = data.get("type", "")
        device_addr = data.get("addr", "")
        with (app.app_context()):
            device = Device.query.filter_by(address=device_addr).filter_by(devicetype_id=device_type)
            if device.count() == 1:
                if Alarm.query.filter_by(device_id=device[0].id).filter_by(
                            addtime=data["lastUpdateTime"]).count() <= 0:

                    msg = None
                    IH = data.get("IH", 0)
                    IA = data.get("IA", 0)
                    IB = data.get("IB", 0)
                    IC = data.get("IC", 0)

                    ILH0 = data.get('ILH0', 0)
                    IL = data.get('IL', 0)
                    if IH < IA:
                        msg = f"A相电流{IA}A大于电流上限{IH}A;"
                    if IH < IB:
                        msg = f"B相电流{IB}A大于电流上限{IH}A;"
                    if IH < IC:
                        msg = f"C相电流{IB}A大于电流上限{IH}A;"
                    if ILH0 < IL:
                        msg = f"漏电流{IL}mA大于漏电流上限{ILH0}mA;"

                    if msg is not None:
                        alarm = Alarm(
                            msg=msg,
                            device_id=device[0].id,
                            addtime=data["lastUpdateTime"],
                            preview=0,
                            handle=0,
                            day=str(data["lastUpdateTime"]).split(' ')[0].split('-')[2],
                            month=str(data["lastUpdateTime"]).split(' ')[0].split('-')[1],
                            year=str(data["lastUpdateTime"]).split(' ')[0].split('-')[0],
                            date=str(data["lastUpdateTime"]).split(' ')[0],
                        )
                        db.session.add(db.session.merge(alarm))
                        db.session.commit()