Gå till innehållet

scMail – Användning

scMail är ett självkörande skriptbibliotek och behöver ingen styrning från huvudskriptet. Konfigurationen görs via konstanter i skriptet.

Konfiguration

Följande konstanter kan justeras direkt i skriptet:

Konstant Standardvärde Beskrivning
MAILNAME "Mail1" Namnet på e-postobjektet i DataStore. Måste matcha exakt.
SEVERITY 10 Allvarlighetsgrad för larmfiltrering. Används om du väljer att filtrera på svårighetsgrad.
CHECK_INTERVAL 10000 Hur ofta larmsatusförändringar kontrolleras, i millisekunder. 10000 = 10 sekunder.
ACTIVATEDMAILHEADER "The following alarms have been activated:" Rubrik i e-postmeddelandet vid larmaktivering.
INACTIVATEDMAILHEADER "The following alarms have been inactivated:" Rubrik i e-postmeddelandet vid larmåterställning.
ACTIVEMAILHEADER "The following alarms are active:" Rubrik för listan över fortfarande aktiva larm.

Larmval

Skriptet hämtar larm via scExtensions.FindAllAlarms. Välj ett av de två alternativen i skriptet:

// Hämta alla larm (standard)
scExtensions.FindAllAlarms(alarms, "", DataStore);

// Hämta bara larm med specifik allvarlighetsgrad (SEVERITY)
scExtensions.FindAllAlarms(alarms, "", DataStore, SEVERITY);

E-postmeddelandets innehåll

Vid en larmhändelse byggs e-postets brödtext upp av:

  1. En rubrik som beskriver vad som hänt (aktiverade eller inaktiverade larm)
  2. En lista med namnen på de berörda larmen
  3. En sammanfattning av alla larm som fortfarande är aktiva

Exempel på e-postinnehåll:

The following alarms have been activated:

DataStore.Larm.Rörelse_Entré

The following alarms are active:

DataStore.Larm.Rörelse_Entré
DataStore.Larm.Dörr_öppen

Skriptet

Ladda ner scMail.js

    //***********************************************//
    // The purpose of this script library
    // is to send an E-mail containing all
    // currently active alarms in the system.
    // Version 1.1 (2022-11-09)
    // Copyright © 2022 Kentima AB. No rights reserved.
    //***********************************************//

try
{    
    //Initialize variables
    var MAILNAME              = "Mail1";                                                  // Name of the Email you want to use, this has to be created and can be found in the variable browser.
    var SEVERITY              = 10;                                                       // The specific severity you are interested in
    var CHECK_INTERVAL        = 10000;                                                    // How often to check for active alarms, in milliseconds. 10000 = 10 seconds.
    var ACTIVATEDMAILHEADER   = "\n\nThe following alarms have been activated:\n";        // Set header for e-mail body, when alarms are activated.
    var INACTIVATEDMAILHEADER = "\n\nThe following alarms have been inactivated:\n";      // Set header for e-mail body, when alarms are inactivated.
    var ACTIVEMAILHEADER      = "\n\n\n\nThe following alarms are active:\n";             // Set header for e-mail body, when alarms are already active.
    var alarms                = new Array();                                              // Create a list of alarms in the system.

    // Check for existance of E-mail '<MAILNAME>'
    if(typeof DataStore[MAILNAME] == "undefined")
    {
        throw new Error("E-Mail '" + MAILNAME + "' is missing from the configuration");
    }

    // Check for existance of script library 'scExtensions'
    if(typeof scExtensions == "undefined") 
    {
        throw new Error("Script library 'scExtensions' is missing."); //Script library is missing, we can't continue
    }

    // Select ONE of the following options for finding alarms.
    scExtensions.FindAllAlarms(alarms, "", DataStore);                  //Get all alarms available
    //scExtensions.FindAllAlarms(alarms, "", DataStore, SEVERITY);      //Get all alarms available, with a specific severity.

    // Create a cyclic timer for sending e-mails, interval is set in the constant <CHECK_INTERVAL>
    this.timer = new Timer(CHECK_INTERVAL, true);

    // On timeout, check if any alarm has been activated
    this.timer.onTimeout = function()
    {
        try
        {
            var activatedMailBody     = ACTIVATEDMAILHEADER; // Set header to mail body
            var activatedAlarmCount   = 0; // Variable to keep track of how many alarms where activated since last check
            var inactivatedMailBody   = INACTIVATEDMAILHEADER; // Set header to mail body
            var inactivatedAlarmCount = 0; // Variable to keep track of how many alarms where inactivated since last check
            var activeMailBody        = ACTIVEMAILHEADER; // Set header to mail body

            for(var alarm in alarms)
            {
                // Check if alarm has been activated since last check
                if (alarms[alarm].Alarm && !alarms[alarm].Active)
                {
                    // Add to activated mail body
                    activatedMailBody += "\n" + alarms[alarm].Name; // Add alarm name to mail body.
                    activatedAlarmCount++; // Add 1 to count.
                    //Remove comment below for debugging.
                    //Debug.Print(alarms[alarm].Name + " has been activated");
                }
                else if (!alarms[alarm].Alarm && alarms[alarm].Active)  // Check if alarms has returned to inactive state.
                {
                    // Add to inactivated mail body
                    inactivatedMailBody += "\n" + alarms[alarm].Name; // Add alarm name to mail body.
                    inactivatedAlarmCount++;  // Add 1 to count.   
                    //Remove comment below for debugging.
                    //Debug.Print(alarms[alarm].Name + " is no longer active");
                }

                if (alarms[alarm].Alarm && alarms[alarm].Active)
                {    
                    // Add to active
                    activeMailBody += "\n" + alarms[alarm].Name; // Add alarm name to mail body.
                    //Remove comment below for debugging.
                    //Debug.Print(alarms[alarm].Name + " is active");
                }

                // Remember last state of alarm
                alarms[alarm].Active = Boolean(alarms[alarm].Alarm);    // Force conversion to Boolean value
            }

            // If any alarms have been activated, format and send e-mail
            if (activatedAlarmCount > 0)
            {
                DataStore[MAILNAME].Body = activatedMailBody + activeMailBody;  // Add message to body of mail
                DataStore[MAILNAME].Send(); //Execute e-mail Send() function.
            }

            // If any alarms have been inactivated, format and send mail
            if (inactivatedAlarmCount > 0)
            {
                DataStore[MAILNAME].Body = inactivatedMailBody + activeMailBody;  //Add message to body of mail
                DataStore[MAILNAME].Send(); //Execute e-mail Send() function.
            }
        }
        catch(e)
        {
            Debug.Print("scMail.timer.onTimeout(): " + e);
        }
    }
}
catch(e)
{
    Debug.Print("scMail: " + e);
}