树莓派3-家庭监控软件Zoneminder的API
API说明
本文档将提供ZoneMinder的API概述。这是正在进行中的工作。
概述
为了进一步“打开”ZoneMinder,一个API是必要的。这将允许快速整合和发展ZoneMinder。
API在/API目录在CakePHP构建。它提供了一个RESTful服务和支持CRUD(创建、检索、更新、删除)显示器,事件框架功能区和配置。
安全
API连接到Zoneminder现有的安全模型。这意味着,如果你有OPT_AUTH启用,您需要登录到Zoneminder使用您计划使用的API从相同的浏览器。如果你正在开发一个应用程序依赖于API,在你可以访问API前,你需要POST一个登录后到ZoneMinder。
然后,您需要重新使用随后的登录名(返回为“cookie状态”)的身份验证信息,以进行身份验证信息流到所需的验证信息的验证信息。
这意味着如果你打算使用CURL来访问,你首先需要做的是
curl -d "username=XXXX&password=YYYY&action=login&view=console" -c cookies.txt http://yourzmip/zm/index.php
分别用你的用户名和密码更换XXXX和YYYY。
请确保你在这个目录有写权限,否则cookies.txt不会创造和命令会悄悄地失败。
“-c cookies.txt” 是存储cookie的状态表明你已经登录到ZM。您现在需要将该饼干状态应用到所有后续的应用接口中。你用一个“-b cookies.txt”后续的API,如果你使用CuRL像这样:
curl -b cookies.txt http://yourzmip/zm/api/monitors.json
这将返回一个列表的监控和通过认证信息对ZM API层。
所以记住,如果你使用的是认证,请添加-b cookies.txt下面每一命令,如果你使用的是CuRL的。如果你不使用CuRL,并编写自己的应用程序,你需要确保你通过在你的应用程序的后续请求的cookies 。
实例(请阅读以上的安全公告)
你会看到每个URL的结尾在XML或JSON。这是请求的格式,它决定了将返回给您的任何数据的格式。我喜欢JSON,但是如果愿意的话你可以使用XML。
(在所有的例子中,取代“服务器”的IP地址或主机名和端口,确保ZoneMinder运行)
API 版本
获取API版本
curl http://server/zm/api/host/getVersion.json
返回所有监视器的列表
curl http://server/zm/api/monitors.json
获取监视器1
curl http://server/zm/api/monitors/1.json
监测器1的变化状态
这个API的变化监测1 modect和启用
curl -XPOST http://server/zm/api/monitors/1.json -d "Monitor[Function]=Modect&Monitor[Enabled]:true"
增加监视器
这命令增加新的http监视器
curl -XPOST http://server/zm/api/monitors.json -d "Monitor[Name]=Cliff-Burton \
&Monitor[Function]=Modect \
&Monitor[Protocol]=http \
&Monitor[Method]=simple \
&Monitor[Host]=usr:pass@192.168.11.20 \
&Monitor[Port]=80 \
&Monitor[Path]=/mjpg/video.mjpg \
&Monitor[Width]=704 \
&Monitor[Height]=480 \
&Monitor[Colours]=4"
编辑监视器1
这命令更改监视器1的名称为test1
curl -XPUT http://server/zm/api/monitors/1.json -d "Monitor[Name]=test1"
删除监视器1
curl -XDELETE http://server/zm/api/monitors/1.json
警报/接触警报监视器1
此命令将迫使监视器1上的发送警报:
curl http://server/zm/api/monitors/alarm/id:1/command:on.json
此命令将迫使监视器1解除警报:
curl http://server/zm/api/monitors/alarm/id:1/command:off.json
此命令将报告监视器1警报状态
curl http://server/zm/api/monitors/alarm/id:1/command:status.json
获取事件列表
http://server/zm/api/events.json
请注意,事件列表可以相当大,这个API(如所有其他API在ZM)使用分页。每个页面返回一组特定的条目。默认是25,关系到在ZM选项菜单web_events_per_page。
因此,遍历所有的事件的逻辑应该是这样的(伪):(不幸的是没有办法不让第一页得到总页数)
data = http://server/zm/api/events.json?page=1 # this returns the first page
# The json object returned now has a property called data.pagination.pageCount
count = data.pagination.pageCount;
for (i=1, i<count, i++)
{
data = http://server/zm/api/events.json?page=i;
doStuff(data);
}
获取ID为1000的事件
curl -XGET http://server/zm/api/events/1000.json
编辑事件1
此命令将更改事件1的“名称”字段,以“寻找并销毁”
curl -XPUT http://server/zm/api/events/1.json -d "Event[Name]=Seek and Destroy"
删除事件1
此命令将删除事件1,和任何取决于它的帧。
curl -XDELETE http://server/zm/api/events/1.json
返回一个特定的监视器标识= 5的事件列表
curl -XGET http://server/zm/api/events/events/index/MonitorId:5.json
注意如果列表太长,同样的分页逻辑应用
在一个特定日期/时间范围内返回一个特定监视器的事件列表
http://server/zm/api/events/events/index/MonitorId:5/StartTime >=:2015-05-15 18:43:56/EndTime <=:2015-05-16 18:43:56.json
要尝试这个在CuRL,你需要的网址CuRL这样的空间:
curl -XGET "http://server/zm/api/events/index/MonitorId:5/StartTime%20>=:2015-05-15%2018:43:56/EndTime%20<=:2015-05-16%2018:43:56.json"
在一个指定的日期/时间范围内返回所有监视器的事件列表
curl -XGET "http://server/zm/api/events/index/StartTime%20>=:2015-05-15%2018:43:56/EndTime%20<=:208:43:56.json"
基于时间和条件的返回事件计数
该接口还支持一个方便的机制来返回一段时间的事件计数。
这个返回每个监视器的事件记录在最后一个小时内
curl "http://server/zm/api/events/consoleEvents/1%20hour.json"
这个返回的记录中的最后一天,至少有10帧,每监测报警”事件数
curl "http://server/zm/api/events/consoleEvents/1%20day.json/AlarmFrames >=: 10.json"
配置APIs
该API允许您访问所有的配置参数ZM你通常设置在Web控制台。返回的配置参数的完整列表:
curl -XGET http://server/zm/api/configs.json
每个配置参数都有一个身份证、名称、值和其他字段。机会是你可能只会专注于这3个。
该脚本编辑功能目前API有点古怪。它的格式偏离了其他蜜蜂的通常的编辑流程。这将是固定的,最终。现在,改变“价值”zm_x10_house_code从A到B:
curl -XPUT http://server/zm/api/configs/edit/ZM_X10_HOUSE_CODE.json -d "Config[Value]=B"
要验证更改已取得:
curl -XGET http://server/zm/api/configs/view/ZM_X10_HOUSE_CODE.json
运行状态的API
ZM API可用于启动/停止/启动/列表状态ZM以及实例:
curl -XGET http://server/zm/api/states.json # returns list of run states
curl -XPOST http://server/zm/api/states/change/restart.json #restarts ZM
curl -XPOST http://server/zm/api/states/change/stop.json #Stops ZM
curl -XPOST http://server/zm/api/states/change/start.json #Starts ZM
创建一个区域
curl -XPOST http://server/zm/api/zones.json -d "Zone[Name]=Jason-Newsted \
&Zone[MonitorId]=3 \
&Zone[Type]=Active \
&Zone[Units]=Percent \
&Zone[NumCoords]=4 \
&Zone[Coords]=0,0 639,0 639,479 0,479 \
&Zone[AlarmRGB]=16711680 \
&Zone[CheckMethod]=Blobs \
&Zone[MinPixelThreshold]=25 \
&Zone[MaxPixelThreshold]= \
&Zone[MinAlarmPixels]=9216 \
&Zone[MaxAlarmPixels]= \
&Zone[FilterX]=3 \
&Zone[FilterY]=3 \
&Zone[MinFilterPixels]=9216 \
&Zone[MaxFilterPixels]=230400 \
&Zone[MinBlobPixels]=6144 \
&Zone[MaxBlobPixels]= \
&Zone[MinBlobs]=1 \
&Zone[MaxBlobs]= \
&Zone[OverloadFrames]=0"
PTZ 控制 APIs
云台控制与监测相关的存储在控制表而不是监控表在ZM。这意味着当你得到一个监控的细节,你只知道它是可控的(是可控的:真)和控制ID可以检索相关信息,控制云台的ID,你需要使用控件API
返回所有的控制定义:
curl http://server/zm/api/controls.json
此返回一个特定的控制标识= 5的控制定义
curl http://server/zm/api/controls/5.json
主机APIs
ZM的API有不同的API,帮助你确定主机(又名ZM)守护状态、负荷等的一些例子:
curl -XGET http://server/zm/api/host/daemonCheck.json # 1 = ZM running 0=not running
curl -XGET http://server/zm/api/host/getLoad.json # returns current load of ZM
curl -XGET http://server/zm/api/host/getDiskPercent.json # returns in GB (not percentage), disk usage per monitor (that is, space taken to store various event related information,images etc. per monitor)
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号