예제 #1
0
        private void SendEmail(alarm_definitionRow alarm, Point pt)
        {
            // old:  Alarm condition at site WICEWS for parameter GH -- value = 0.43
            var siteDescription = "";
            var t = m_server.Table("sitecatalog", "select description from sitecatalog where siteid='" + alarm.siteid + "'");

            if (t.Rows.Count > 0)
            {
                siteDescription = t.Rows[0][0].ToString();
            }

            var parameterName = "";

            t = m_server.Table("parametercatalog", "select name from parametercatalog where id='" + alarm.parameter + "' and timeinterval = 'Irregular'");
            if (t.Rows.Count > 0)
            {
                parameterName = t.Rows[0][0].ToString();
            }

            var subject = "Alarm Condition at" + siteDescription + " " + alarm.siteid;
            var body    = "Alarm condition at site" + alarm.siteid + "   parameter = " + alarm.parameter;

            var emails = GetEmailList(alarm.list);

            if (emails.Length == 0)
            {
                Logger.WriteLine("subject: " + subject);
                Logger.WriteLine("body: " + body);
            }
            else
            {
                SendEmail(emails, subject, body);
            }
        }
예제 #2
0
        private void Check(Series s, alarm_definitionRow alarm)
        {
            Logger.WriteLine("found alarm definition " + s.SiteID + " " + s.Parameter);

            AlarmRegex alarmEx = new AlarmRegex(alarm.alarm_condition);

            if (alarmEx.IsMatch())
            {
                var c = alarmEx.GetAlarmCondition();
                if (c.Condition == AlarmType.Above)
                {
                    CheckForAboveAlarm(s, alarm, c);
                }
                else
                if (c.Condition == AlarmType.Below)
                {
                    CheckForBelowAlarm(s, alarm, c);
                }
                else
                if (c.Condition == AlarmType.Dropping ||
                    c.Condition == AlarmType.Rising)
                {
                    CheckForRateOfChangeAlarm(s, alarm, c);
                }
            }
        }
예제 #3
0
 private void CheckForBelowAlarm(Series s, alarm_definitionRow alarm, AlarmCondition c)
 {
     foreach (Point p in s)
     {
         if (!p.FlaggedBad && !p.IsMissing && p.Value < c.Value)
         {
             Console.WriteLine("Alarm below found");
             CreateAlarm(alarm, p);
             break;
         }
     }
 }
예제 #4
0
 private void CheckForAboveAlarm(Series s, alarm_definitionRow alarm, AlarmCondition c)
 {
     foreach (Point p in s)
     {
         if (!p.FlaggedBad && !p.IsMissing && p.Value > c.Value)
         {
             Logger.WriteLine("alarm_condition: " + alarm.alarm_condition);
             Logger.WriteLine("Alarm above found: " + p.Value);
             CreateAlarm(alarm, p);
             break;
         }
     }
 }
예제 #5
0
        private void CheckForRateOfChangeAlarm(Series s, alarm_definitionRow alarm, AlarmCondition c)
        {
            Logger.WriteLine("Checking Rate of Change: " + c.Condition + " " + c.Value);
            // need data one time step before.. read from database.

            if (s.TimeInterval == TimeInterval.Irregular)
            {
                s.Read(s.MinDateTime.AddMinutes(-20), s.MaxDateTime.AddMinutes(1));
            }
            else if (s.TimeInterval == TimeInterval.Daily)
            {
                s.Read(s.MinDateTime.AddDays(-1), s.MaxDateTime.AddMinutes(1));
            }

            for (int i = 1; i < s.Count; i++)
            {
                var pt   = s[i];
                var prev = s[i - 1];

                if (!pt.IsMissing && !pt.FlaggedBad
                    & !prev.IsMissing && !prev.FlaggedBad)
                {
                    double hrs    = pt.DateTime.Subtract(prev.DateTime).TotalHours;
                    double change = 0;
                    if (c.Condition == AlarmType.Rising)
                    {
                        change = (pt.Value - prev.Value) / hrs;
                    }
                    ;
                    if (c.Condition == AlarmType.Dropping)
                    {
                        change = (prev.Value - pt.Value) / hrs;
                    }

                    Logger.WriteLine(pt.ToString() + " Change per hour: " + change.ToString("F2"));
                    if (change > c.Value)
                    {
                        Console.WriteLine("Alarm " + c.Condition);
                        CreateAlarm(alarm, pt);
                        break;
                    }
                }
            }
        }
예제 #6
0
        private void SendEmail(alarm_definitionRow alarm, Point pt)
        {
            // vms message:  Alarm condition at site WICEWS for parameter GH -- value = 0.43
            var    tn = "instant_" + alarm.siteid + "_" + alarm.parameter;
            string siteDescription   = "siteid = " + alarm.siteid;
            var    seriesDescription = "siteid = " + alarm.siteid + " parameter = " + alarm.parameter;
            var    series            = m_db.GetSeriesFromTableName(tn.ToLower());

            if (series != null)
            {
                siteDescription   = series.SiteDescription();
                seriesDescription = series.SeriesDescription();
            }


            var subject = "Alarm Condition at " + siteDescription
                          + " (" + alarm.siteid.ToUpper() + ") " + alarm.parameter + ": " + alarm.alarm_condition;
            var body = "\n<br/>";

            body += "This email is from the Hydromet system.\n<br/>";
            body += subject;
            body += "\n<br/>alarm condition: " + alarm.parameter + " " + alarm.alarm_condition;
            body += "\n<br/>" + alarm.parameter + " = " + seriesDescription;
            body += "\n<br/>" + " ";

            body += "\n<br/>" + pt.ToString();
            body += "\n<br/>\n<br/>" + subject;

            var emails = GetEmailList(alarm.list);

            if (emails.Length == 0)
            {
                Logger.WriteLine("no emails found for list='" + alarm.list + "'");
                Logger.WriteLine("subject: " + subject);
                Logger.WriteLine("body: " + body);
            }
            else
            {
                SendEmail(emails, subject, body);
            }
        }
예제 #7
0
 public alarm_definitionRowChangeEvent(alarm_definitionRow row, global::System.Data.DataRowAction action)
 {
     this.eventRow    = row;
     this.eventAction = action;
 }
예제 #8
0
파일: AlarmDataSet.cs 프로젝트: usbr/Pisces
        private void SendEmail(alarm_definitionRow alarm, Point pt)
        {
            // old:  Alarm condition at site WICEWS for parameter GH -- value = 0.43
            var siteDescription = "";
            var t = m_server.Table("sitecatalog", "select description from sitecatalog where siteid='" + alarm.siteid + "'");
            if (t.Rows.Count > 0)
                siteDescription = t.Rows[0][0].ToString();

            var parameterName = "";
            t = m_server.Table("parametercatalog", "select name from parametercatalog where id='" + alarm.parameter + "' and timeinterval = 'Irregular'");
            if (t.Rows.Count > 0)
                parameterName = t.Rows[0][0].ToString();

            var subject = "Alarm Condition at" + siteDescription + " " + alarm.siteid;
            var body = "Alarm condition at site" + alarm.siteid + "   parameter = " + alarm.parameter;

            var emails = GetEmailList(alarm.list);
             if( emails.Length == 0)
             {
                 Logger.WriteLine("subject: " + subject);
                 Logger.WriteLine("body: " + body);
             }
             else
             {
            SendEmail(emails, subject, body);
             }
        }