فهرست منبع

根据最新协议,更改完设备中断报警模块

舍得 1 سال پیش
والد
کامیت
266a2a8b54

+ 1 - 0
Alarm.pro

@@ -8,4 +8,5 @@ SUBDIRS += \
     MQTTAgent/MQTTAgent.pro \
 #    AlarmVerification/AlarmVerification.pro \
     AlarmRecognition/AlarmRecognition.pro \
+    CommRecognition/CommRecognition.pro \
     EngineAlarm/EngineAlarm.pro \

+ 18 - 1
AlarmRecognition/Module.cpp

@@ -162,7 +162,24 @@ void Module::OnSubData(std::string name,std::string val)
     std::vector<std::string>::iterator itr;
     for( itr = m_szOutputs.begin(); itr != m_szOutputs.end(); ++itr )
     {
-        m_pDataConsumer->OnData(*itr,QVariant(m_mpRangeConfig[name].nStatus));
+        QString szStatus;
+        switch( m_mpRangeConfig[name].nStatus )
+        {
+        case EAS_Normal:
+            szStatus = "Normal";
+            break;
+        case EAS_OverThan:
+            szStatus = "OverThan";
+            break;
+        case EAS_UnderThan:
+            szStatus = "OverThan";
+            break;
+        case EAS_Both:
+            szStatus = "Both";
+            break;
+        }
+
+        m_pDataConsumer->OnData(*itr,QVariant(szStatus));
     }
 }
 

+ 3 - 1
AlarmRecognition/Module.h

@@ -1,5 +1,5 @@
 #pragma once
-#include "RunnableModule.h"
+#include "BaseModule.h"
 #include "libaray_symbols.h"
 #include "LockFreeQueue.h"
 #include <QtCore/QDateTime>
@@ -14,6 +14,7 @@ enum EAlarmStatus
 };
 
 // 全局唯一实例
+// 数据越限报警
 class ALARMRECOGNITION_EXPORT Module : public BaseModule
 {
 public:
@@ -38,6 +39,7 @@ private:
         {
             name = n;
             value = v;
+            tm = QDateTime::currentDateTime();
         }
     };
 

+ 7 - 4
EngineAlarm/DataEngine.cpp

@@ -118,11 +118,14 @@ void DataEngine::Startup()
     m_pMqtt->Connect(mpConfig["mqtt"]);             // mqtt
 
     // server.id
-    Config config;
-    loadConfig(szWorkDir.toLocal8Bit().toStdString() + "config/alarm.json",config);
-
     DeviceManagerProxy dm(m_pRedis);
-    std::list<DeviceInfo> lstDevices = dm.loadDevices(config.serverId, config.appName);
+    DeviceInfo da = dm.loadDataAlarm("alarmrule", "plugins/AlarmRecognition.dll");
+    DeviceInfo ca = dm.loadCommAlarm("alarmruledevicestatus", "plugins/CommRecognition.dll");
+
+    std::list<DeviceInfo> lstDevices;
+    lstDevices.push_back(da);
+    lstDevices.push_back(ca);
+
     std::list<DeviceInfo>::iterator itr;
     for( itr = lstDevices.begin();itr!= lstDevices.end();++itr)
     {

+ 45 - 7
EngineAlarm/DeviceManagerProxy.cpp

@@ -5,6 +5,8 @@
 #include <QtCore/QTextCodec>
 #include <fstream>
 
+#define DEVICE_NODE "devices"
+
 std::string loadContent(std::string szFilename)
 {
     szFilename = QString::fromLocal8Bit(szFilename.c_str()).toLocal8Bit().toStdString();
@@ -24,7 +26,7 @@ DeviceManagerProxy::DeviceManagerProxy(RedisAgent* redis)
 
 bool DeviceManagerProxy::parse(QString cfg,AlarmRuler& ar)
 {
-    qDebug() << __FILE__ << __LINE__ << cfg;
+    //qDebug() << __FILE__ << __LINE__ << cfg;
 
     //通过网页传来的 json内承运商中文名是 utf-8 编码
     QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
@@ -64,15 +66,14 @@ bool DeviceManagerProxy::parse(QString cfg,AlarmRuler& ar)
     return true;
 }
 
-std::list<DeviceInfo> DeviceManagerProxy::loadDevices(std::string id,std::string app)
+DeviceInfo DeviceManagerProxy::loadDataAlarm(std::string id,std::string app)
 {
-    std::list<DeviceInfo> lstDevices;
+    DeviceInfo di;
     if( m_pRedis != nullptr)
     {
-        DeviceInfo di;
         ModuleInfo mi;
         mi.Code = "alarm";
-        mi.AssemblyName = "plugins/AlarmRecognition.dll";
+        mi.AssemblyName = app;
 
         DataItem oDT;
         oDT.Code = "data";
@@ -103,8 +104,45 @@ std::list<DeviceInfo> DeviceManagerProxy::loadDevices(std::string id,std::string
             }
         }
         di.ModuleInfo = mi;
-        lstDevices.push_back(di);
     }
 
-    return lstDevices;
+    return di;
+}
+
+DeviceInfo DeviceManagerProxy::loadCommAlarm(std::string id,std::string app)
+{
+    DeviceInfo di;
+    if( m_pRedis != nullptr)
+    {
+        ModuleInfo mi;
+        mi.Code = "alarm";
+        mi.AssemblyName = app;
+
+        DataItem oDT;
+        oDT.Code = "comm";
+        mi.Properties.push_back(oDT);
+        QHash<QString, QString> mps = m_pRedis->hgetall(id.c_str());
+        QHash<QString, QString>::iterator itr;
+        for( itr = mps.begin(); itr != mps.end(); ++itr)
+        {
+            if( itr.key().isEmpty() || itr.value().isEmpty() )
+            {
+                continue;
+            }
+
+            if( itr.key().compare(DEVICE_NODE,Qt::CaseInsensitive) != 0 )
+            {
+                continue;
+            }
+
+            Setting oSet;
+            oSet.Name = itr.key().toLocal8Bit().toStdString();
+            oSet.qValue = itr.value();
+            mi.vSettings.push_back(oSet);
+            break;
+        }
+        di.ModuleInfo = mi;
+    }
+
+    return di;
 }

+ 2 - 1
EngineAlarm/DeviceManagerProxy.h

@@ -15,5 +15,6 @@ private:
     bool parse(QString cfg,AlarmRuler& ar);
 
 public:
-    std::list<DeviceInfo> loadDevices(std::string id,std::string app);
+    DeviceInfo loadDataAlarm(std::string id,std::string app);
+    DeviceInfo loadCommAlarm(std::string id,std::string app);
 };

+ 5 - 0
RedisAgent/RedisAgent.cpp

@@ -69,3 +69,8 @@ QStringList RedisAgent::hvals(QString k)
 {
     return objRedis.hvals(k);
 }
+
+QHash<QString, QString> RedisAgent::hgetall(QString k)
+{
+    return objRedis.hgetall(k);
+}

+ 1 - 0
RedisAgent/RedisAgent.h

@@ -34,6 +34,7 @@ public:
     bool Subscribe(std::list<std::string> lstTopic);
     void Publish(std::string,QVariant v);
     QStringList hvals(QString k);
+    QHash<QString, QString> hgetall(QString k);
 };
 
 //extern "C" {//一定要添加上