Does a way to import batch of Alarms from csv exist ?

Hi Florent,

I think you could whip something up pretty quickly using PowerShell and MilestonePSTools.

Here’s an example of how you could create an alarm given a known camera ID, and message. I also optionally modify some parameters of the alarm before sending it off to the event server. If your CSV has the message and source ID’s for the originator of the alarms, it would be pretty easy to put this into a foreach ($row in Import-Csv .\alarms.csv) and set your parameters using $row.Message and $row.Source for example.

$alarmParams = @{
    Message = "My test alarm"
    Description = "This is a test alarm"
    Source = Get-Camera -Id 623B9BE3-9FD9-4867-BECA-5B44D78E15BF | Get-PlatformItem
}
 
$alarm = New-Alarm @alarmParams
$alarm.EventHeader.Priority = 3
$alarm.EventHeader.PriorityName = "Low"
Send-Alarm -Alarm $alarm -PassThru

Here’s a good starting place for documentation on working with alarms and events via our SDK:

https://doc.developer.milestonesys.com/html/index.html?base=gettingstarted/intro_events.html&tree=tree_4.html

Hi Josh,

Thanks for your reply @Josh Hendricks (Milestone Systems)​ .

Finally i did a console App based on ConfigAddCameras.

My method AddAlarms :

 static private bool AddAlarm(string parms)
        {
            string[] parameters = parms.Split(';');
            string name = parameters[0];
            string description = parameters[1];
            string eventTypeGroup = parameters[2];
            string eventType = parameters[3];
            string sourceList = parameters[4];
            string enableRule = parameters[5];
            string timeProfile = parameters[6];
            string enableEventList = parameters[7];
            string disableEventList = parameters[8];
            string managementTimeoutTime = parameters[9];
            string managementTimeoutEventList = parameters[10];
            string relatedCameraList = parameters[11];
            string relatedMap = parameters[12];
            string owner = parameters[13];
            string priority = parameters[14];
            string category = parameters[15];
            string triggerEventList = "";
            if (parameters.Length > 16)
            {
                 triggerEventList = parameters[16];
            }
            
            ManagementServer managementServer = new ManagementServer(EnvironmentManager.Instance.MasterSite);
            AlarmDefinitionFolder alarmFolder = managementServer.AlarmDefinitionFolder;
 
 
            if (alarmFolder.AlarmDefinitions.Where(a => a.Name.Equals(name)).Any()) 
            {
                Console.WriteLine("Alarm: " + name + "already exist deleting");
                AlarmDefinition alarmDefinition = alarmFolder.AlarmDefinitions.Where(a => a.Name.Equals(name)).Single();
                ServerTask deleteAlarmServerTask = alarmFolder.RemoveAlarmDefinition(alarmFolder.RemoveAlarmDefinition().ItemSelectionValues.Where(k => k.Key == name).Select(k => k.Value).Single());
                while (deleteAlarmServerTask.State != StateEnum.Error && deleteAlarmServerTask.State != StateEnum.Success)
                {
                    System.Threading.Thread.Sleep(1000);
                    deleteAlarmServerTask.UpdateState();
                }
                Console.WriteLine("Alarm remove task: " + deleteAlarmServerTask.State);
                if (deleteAlarmServerTask.State == StateEnum.Error)
                {
                    Console.WriteLine("Alarm remove error: " + deleteAlarmServerTask.ErrorText);
                    return false;
                }
            }
            //Dictionary<string, string> x = alarmFolder.RemoveAlarmDefinition().ItemSelectionValues;
            Console.WriteLine("Will now attempt to add: " + name);
            ServerTask addAlarmServerTask = alarmFolder.AddAlarmDefinition(name,description,eventTypeGroup,eventType,sourceList,enableRule,timeProfile,enableEventList,disableEventList,managementTimeoutTime,managementTimeoutEventList,relatedCameraList,relatedMap,owner,priority,category,triggerEventList);
            
            while (addAlarmServerTask.State != StateEnum.Error && addAlarmServerTask.State != StateEnum.Success)
            {
                System.Threading.Thread.Sleep(1000);
                addAlarmServerTask.UpdateState();
            }
            Console.WriteLine("Alarm add task: " + addAlarmServerTask.State);
            if (addAlarmServerTask.State == StateEnum.Error)
            {
                Console.WriteLine("Alarm add error: " + addAlarmServerTask.ErrorText);
                return false;
            }
            else if (addAlarmServerTask.State == StateEnum.Success)
            {
                string path = addAlarmServerTask.Path;       // For the added hardware
                AlarmDefinition alarmDefinition = new AlarmDefinition(EnvironmentManager.Instance.MasterSite.ServerId, path);
                alarmDefinition.Name = name;
                alarmDefinition.Enabled = true;
                alarmDefinition.Save();
               
            }
 
            return true;
        }

This works perfectly.

Regards,

Florent