Sending Analytic Events and Alarms to the Alarm Manger

Our problem is the following: from our plugin, we are trying to send Analytic Events, as well as Alarm Events for recognized license plates from the list. Actually, we implemented the code itself according to the SDK documentation.

As a result, we expect to see our events in the Alarm Manager tab in the XProtect Smart Client. But alas, we do not observe our events there.

  • Enable events in Management Client options (off by default)

  • Add Alarm Definition in the Management Client, after creating an event group and event type, code example:
internal static Guid EventGroupId = new Guid("bff7400e-b0b3-4786-9300-0078a1e281ff");
internal EventGroup _eventGroup = new EventGroup() { ID = EventGroupId, Name = "MIPSDK CarGuroo" };
 
internal static Guid LicensePlateInListId = new Guid("e02123f1-fb46-4803-9e2e-29c54689ac3f");
internal static string LicensePlateInListMessage = "License plate in list";
 
public override Collection<EventGroup> GetKnownEventGroups(CultureInfo culture)
{
return new Collection<EventGroup>() { _eventGroup };
}
 
	
public override Collection<EventType> GetKnownEventTypes(CultureInfo culture)
        {
            return new Collection<EventType>()
            {
                new EventType()
                {
                    GroupID = EventGroupId,
                    ID = LicensePlateInListId,
                    DefaultSourceKind = CarGurooDefinition.CameraItemKind,
                    Message = LicensePlateInListMessage,
                    SourceKinds = new List<Guid>() { CarGurooDefinition.CameraItemKind }
                }
            };
        }

  • Then I create Create Analytic Event in the Management Client

  • When activating our camera item (for test example), I try to send events and alarms. Examples (various options):
private void SendAlarmMessage(Item myCameraControlItem)
{
    EventHeader eventHeader = new EventHeader()
    {
        ID = Guid.NewGuid(),
        Class = "Analytics",
        Type = "type",
        Timestamp = DateTime.Now,
        Message = "CarGurooAlarmDefinition",
        Name = "CarGurooAlarmDefinition",
        Source = new EventSource { FQID = myCameraControlItem.FQID, Name = myCameraControlItem.Name },
        CustomTag = "<My><MiniXml>info</MiniXml></My>",
        MessageId = CameraItemManager.LicensePlateInListId,
        Priority = 1,
    };
 
    var eventData = new Alarm
    {
        EventHeader = eventHeader,
    };
 
    var res = EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(MessageId.Server.NewAlarmCommand) { Data = eventData });
}
 
private void SendAlarmMessage2(Item myCameraControlItem)
{
    EventHeader eventHeader = new EventHeader()
    {
        ID = Guid.NewGuid(),
        Class = "Analytics",
        Type = "type",
        Timestamp = DateTime.Now,
        Message = "MyAnalyticsEvent",
        Name = "MyAnalyticsEvent",
        Source = new EventSource { FQID = myCameraControlItem.FQID, Name = myCameraControlItem.Name },
        Priority = 2,
        PriorityName = "Medium"
    };
 
    Alarm alarm = new Alarm()
    {
        EventHeader = eventHeader,
        StateName = "New",
        State = 1,
    };
 
    var res = EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(MessageId.Server.NewAlarmCommand) { Data = alarm });
}
 
private void SendEventMessage(Item myCameraControlItem)
{
    EventHeader eventHeader = new EventHeader()
    {
        ID = Guid.NewGuid(),
        Timestamp = DateTime.Now,
        Message = "CarGurooAlarmDefinition",
        MessageId = CameraItemManager.LicensePlateInListId,
        Name = "CarGurooAlarmDefinition",
        Source = new EventSource { FQID = myCameraControlItem.FQID, Name = myCameraControlItem.Name },
    };
 
    VideoOS.Platform.Data.AnalyticsEvent eventData = new VideoOS.Platform.Data.AnalyticsEvent()
    {
        EventHeader = eventHeader,
    };
 
    var res = EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(MessageId.Server.NewEventCommand) { Data = eventData });
}
 
private void SendEventMessage2(Item myCameraControlItem)
{
    EventHeader eventHeader = new EventHeader()
    {
        ID = Guid.NewGuid(),
        Timestamp = DateTime.Now,
        Message = "MyAnalyticsEvent",
        Name = "MyAnalyticsEvent",
        Source = new EventSource { FQID = myCameraControlItem.FQID, Name = myCameraControlItem.Name },
    };
 
    VideoOS.Platform.Data.AnalyticsEvent eventData = new VideoOS.Platform.Data.AnalyticsEvent()
    {
        EventHeader = eventHeader,
    };
 
    var res = EnvironmentManager.Instance.SendMessage(new VideoOS.Platform.Messaging.Message(MessageId.Server.NewEventCommand) { Data = eventData });
}
  • The res variables at the end of each method contain an empty collection.
  • As a result, the Smart Client Alarms Manager is empty. But if you click on the Test Event button in the Management Client (see point 3), then this test event appears in the Smart Client.

We already investigate these sources:

Did not help=(

Already find a similar case here: https://developer.milestonesys.com/s/question/0D53X00007Dil47SAB/send-newalarmcommand-to-the-event-server

But still struggling to solve our issue.

Please as a first step revert to the unmodified AnalyticsEventTriggerViaLibrary and the described instructions here:

https://doc.developer.milestonesys.com/html/index.html?base=samples/componentsamples/analyticseventtriggervialibrary/readme.html&tree=tree_2.html

A first step to see the unmodified sample work would be a proof that your XProtect VMS installation is working.

PS. A little older but this might be a more detailed guide.. http://download.milestonesys.com/MIPSDK/Samples/TriggerAlarmFromExternal-ConceptSolution.pdf

Thank you for your reply! Will try it.