[SOLVED] Getting monitor status from API
[SOLVED] Getting monitor status from API
I'm not sure this is a 1.34 issue but I did upgrade over the weekend. I'm writing an app and trying to get the monitor status through the API by calling /zm/api/monitors/alarm/id:5/command:status.json but the response I get back always has a blank status: {"status":""}. This is for every monitor. I've also tried forcing an alarm on the monitor but the status doesn't change. It shows up in the web GUI just fine. Maybe I have something configured wrong? I'm expecting to see one of Idle, Alert, Alarm, etc.
Last edited by moasat on Mon Feb 17, 2020 7:08 pm, edited 1 time in total.
Re: Getting monitor status from API
I'm not so great with cakephp.... so I have no idea what the url actually means.
If you just do
/zm/api/monitors/5.json
you will get all the monitor data, including a Monitor_Status field.
If you just do
/zm/api/monitors/5.json
you will get all the monitor data, including a Monitor_Status field.
Re: Getting monitor status from API
This is what I get from api/monitors/2.json. The Monitor_Status only shows "Connected", not one of Idle, Alarm, Alert. Also, I thought I read that Monitor_Status is not available in earlier versions of ZM and I was hoping to support those, although its not a requirement.
Code: Select all
{
"monitor": {
"Monitor": {
"Id": "2",
"Name": "PTZ",
"Notes": null,
"ServerId": "0",
"StorageId": "2",
"Type": "Ffmpeg",
"Function": "Modect",
"Enabled": "1",
"LinkedMonitors": "",
"Triggers": "",
"Device": "\/dev\/video0",
"Channel": "0",
"Format": "255",
"V4LMultiBuffer": null,
"V4LCapturesPerFrame": "1",
"Protocol": "rtsp",
"Method": "rtpRtsp",
"Host": "user:password@ip-camera2",
"Port": "554",
"SubPath": "",
"Path": "rtsp:\/\/user:password@ip-camera2\/live",
"Options": null,
"User": null,
"Pass": null,
"Width": "1920",
"Height": "1080",
"Colours": "4",
"Palette": "0",
"Orientation": "ROTATE_0",
"Deinterlacing": "0",
"DecoderHWAccelName": null,
"DecoderHWAccelDevice": null,
"SaveJPEGs": "3",
"VideoWriter": "1",
"OutputCodec": null,
"OutputContainer": null,
"EncoderParameters": "# Lines beginning with # are a comment \r\n# For changing quality, use the crf option\r\n# 1 is best, 51 is worst quality\r\n#crf=23",
"RecordAudio": "0",
"RTSPDescribe": false,
"Brightness": "-1",
"Contrast": "-1",
"Hue": "-1",
"Colour": "-1",
"EventPrefix": "Event-",
"LabelFormat": "%N - %d\/%m\/%y %H:%M:%S",
"LabelX": "0",
"LabelY": "0",
"LabelSize": "1",
"ImageBufferCount": "30",
"WarmupCount": "2",
"PreEventCount": "15",
"PostEventCount": "15",
"StreamReplayBuffer": "0",
"AlarmFrameCount": "2",
"SectionLength": "600",
"MinSectionLength": "10",
"FrameSkip": "0",
"MotionFrameSkip": "0",
"AnalysisFPSLimit": "5.00",
"AnalysisUpdateDelay": "0",
"MaxFPS": "30.000",
"AlarmMaxFPS": "30.00",
"FPSReportInterval": "100",
"RefBlendPerc": "6",
"AlarmRefBlendPerc": "6",
"Controllable": "0",
"ControlId": null,
"ControlDevice": null,
"ControlAddress": null,
"AutoStopTimeout": null,
"TrackMotion": "0",
"TrackDelay": null,
"ReturnLocation": "-1",
"ReturnDelay": null,
"DefaultRate": "100",
"DefaultScale": "100",
"DefaultCodec": "auto",
"SignalCheckPoints": "10",
"SignalCheckColour": "#0000c0",
"WebColour": "red",
"Exif": false,
"Sequence": "2",
"TotalEvents": "37",
"TotalEventDiskSpace": "434525663",
"HourEvents": "0",
"HourEventDiskSpace": "0",
"DayEvents": "1",
"DayEventDiskSpace": "9388570",
"WeekEvents": "5",
"WeekEventDiskSpace": "50392474",
"MonthEvents": "15",
"MonthEventDiskSpace": "187283227",
"ArchivedEvents": "0",
"ArchivedEventDiskSpace": null,
"ZoneCount": "1",
"Refresh": null
},
"Monitor_Status": {
"MonitorId": "2",
"Status": "Connected",
"CaptureFPS": "14.29",
"AnalysisFPS": "5.26",
"CaptureBandwidth": "154519"
}
}
}
Re: Getting monitor status from API
If you want alarm status then
is correct. I just checked on my monitors and I am correctly getting the right status value based on the alarmed status. I also forced an alarm on a modect monitor, and the status switch correctly from 0 to 2.
Code: Select all
https://server/api/monitors/alarm/id:X/command:status.json
is correct. I just checked on my monitors and I am correctly getting the right status value based on the alarmed status. I also forced an alarm on a modect monitor, and the status switch correctly from 0 to 2.
I no longer work on zmNinja, zmeventnotification, pyzm or mlapi. I may respond on occasion based on my available time/interest.
Please read before posting:
How to set up logging properly
How to troubleshoot and report - ES
How to troubleshoot and report - zmNinja
ES docs
zmNinja docs
Please read before posting:
How to set up logging properly
How to troubleshoot and report - ES
How to troubleshoot and report - zmNinja
ES docs
zmNinja docs
Re: Getting monitor status from API
Hmm, mine is always blank. I have 5 different monitors, all return {"status":""} regardless of the status. Maybe a regression bug in 1.34?
Re: Getting monitor status from API
I have two thoughts on this:
#1 if this was a multi-server setup and we asked a server that wasn't the recording server, it would fail.
#2 If auth not working, perhaps due to timezone problem, then maybe we get nothing.
The thing to do would be turn on debugging and see what zmu is saying.
#1 if this was a multi-server setup and we asked a server that wasn't the recording server, it would fail.
#2 If auth not working, perhaps due to timezone problem, then maybe we get nothing.
The thing to do would be turn on debugging and see what zmu is saying.
Re: Getting monitor status from API
Its a single server setup. And all of the previous calls are working. But zmu.log is giving an error of:
I'm using token based auth, so the URLs look like this:
I tried changing the url to https://user@zm and also https://user:pass@zm but neither made a difference. What username should I be using here? Again, all the other API calls I'm using seem to be working ok. I also tried adding user as a query param and also user and pass as query params. Still no difference.
Code: Select all
02/12/20 18:37:58.035870 zmu[27091].ERR-zmu.cpp/435 [Username must be supplied]
Code: Select all
https://zm:443/zm/api/monitors/alarm/id:2/command:status.json?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJab25lTWluZGVyIiwiaWF0IjoxNTgxNTUwNTc3LCJleHAiOjE1ODE1NTc3NzcsInVzZXIiOiJhZG1pbiIsInR5cGUiOiJhY2Nlc3MifQ.4X2kXbEuqq-uo9N6kj4sJ5NdJFpDFjaqLlt9xVlRmnk
Re: Getting monitor status from API
Try setting AUTH_RELAY to hashed.
I no longer work on zmNinja, zmeventnotification, pyzm or mlapi. I may respond on occasion based on my available time/interest.
Please read before posting:
How to set up logging properly
How to troubleshoot and report - ES
How to troubleshoot and report - zmNinja
ES docs
zmNinja docs
Please read before posting:
How to set up logging properly
How to troubleshoot and report - ES
How to troubleshoot and report - zmNinja
ES docs
zmNinja docs
Re: Getting monitor status from API
Setting AUTH_RELAY to Hashed fixed it. It looks like that change had no other adverse effects so I'll keep it. Any explanation why everything else was working but that wasn't?