I'm trying to develop a status "connector" for Milestone to connect it with the Zabbix monitoring platform.

What would be the best way to implement this? Here is what I’m trying to accomplish:

  1. Connect to the system and retrieve a list of all cameras and their devices (ie I don’t care about inputs/outputs, generic events, etc).

  2. Get their current status

  3. Get updated whenever their status changes

By “status” I just mean connected/disconnected, device overflow, etc.. events that mean something to the operational state of the camera/device. I want to discard any motion events or other extraneous events like that.

It looks like the StatusViewer sample is the closest to my requirements but since I’ve never worked with MIP messaging I wanted to make sure. I also would like some guidance on the best way to filter the devices and events I receive.

I just realized that my post is missing a whole paragraph.. not sure what happened to it. Let me try again:

The StatusViewerConsole sample appears to use a completely different means than StatusViewer to keep tabs on what is going on with all the devices on a system. Seems like its the Status API vs the MIP Messaging/Event Server API. I’d like to know what the differences are and which would be better for my application.

I experimented with the StatusViewer sample and by running a modified copy of the sample and extracting the GUIDs for the messages I’m interested in, I thought I could use those GUIDs in the CommunicationIdFilter… but that doesn’t work. Even if it did it would be nice to have a list of them all…

Would appreciate getting pointed in the right direction.

Hi James.

Did you ever work this out? We are in the process of setting up Zabbix and also would like to monitor Milestone events like failover and fail to archive.

https://developer.milestonesys.com/s/article/get-all-possible-Status-Event-messages-SDK

Hi Owen,

I did… though as you can see I never got a response until after your post. There are still some unanswered questions like what is the practical different between the Status API and MIP Messaging/Event Server API and why you would use one over the other. I was also never able to properly filter events to only get ones I’m interested in, so I get all events and only pay attention to the ones I want.

Overall it wasn’t too difficult, the real issue is that Zabbix is really designed for polling status and Milestone wants to push status. It gets challenging when you want triggers to go off based on time (ie down for more than 5 minutes). Zabbix has no way to define a trigger for that unless you have data coming in at least one every 5 minutes. So you’re stuck re-sending the same data into zabbix on a schedule instead of just pushing only on a change. If you’re a Zabbix guru and have a way around that I’d love to know.

What language are you developing in? I ended up customizing some ZabbixSender code I found online so that I could send both item updated and LLD data (because who wants to create all those items by hand).

Hey, I am trying to get the same thing done…can you share what did you do to get it resolved?

I used the config api to pull a list of all the cameras, then used the MessageCommunicationManager api to subscribe to new events and process them as they come. It’s not pretty or full-proof. I really wanted to enhance it to alarm in Zabbix if retention time for any camera fell below a certain value, but had to give up. Milestone has no way to query when a camera was added to the config (and zabbix has no way of querying the LLD discovery date), so I would always get alarms for the first X days a camera was below my retention threshold. If you have any specific questions or code examples I’m happy to point you in the right direction.