This page is part of archived documentation for openHAB 3.0. Go to the current stable version
# ZoneMinder Binding
Supports the ZoneMinder video surveillance system.
# Supported Things
The following thing types are supported:
Thing | ID | Discovery | Description |
---|---|---|---|
Server | server | Manual | Server bridge manages all communication with ZoneMinder server |
Monitor | monitor | Automatic | Monitor represents a ZoneMinder camera monitor |
# Installation
The binding requires ZoneMinder version 1.34.0 or greater and API version 2.0 or greater. It also requires that you enable the OPT_USE_API parameter in the ZoneMinder configuration.
If your ZoneMinder is installed using a non-standard URL path or port number, that must be specified when you add the ZoneMinder server thing.
There are two different styles of operation, depending on whether or not you have ZoneMinder configured to use authentication.
# Non-Authenticated
If ZoneMinder authentication is not used, the User and Password parameters should be empty in the ZoneMinder Server thing configuration. No other configuration is required.
# Authenticated
The binding can access ZoneMinder with or without authentication. If ZoneMinder authentication is used, first make sure the ZoneMinder user has the API Enabled permission set in the ZoneMinder Users configuration. Then, enter the user name and password into the ZoneMinder Server thing configuration.
# Discovery
The server bridge must be added manually. Once the server bridge is configured with a valid ZoneMinder host name or IP address, all monitors associated with the ZoneMinder server will be discovered.
# Thing Configuration
# Server Thing
The following configuration parameters are available on the Server thing:
Parameter | Parameter ID | Required/Optional | Description |
---|---|---|---|
Host | host | Required | Host name or IP address of the ZoneMinder server. |
Use secure connection | useSSL | Required | Use http or https for connection to ZoneMinder. Default is http. |
Port Number | portNumber | Optional | Port number if not on ZoneMinder default port 80. |
Url Path | urlPath | Required | Path where Zoneminder is installed. Default is /zm. |
Refresh Interval | refreshInterval | Required | Frequency in seconds at which monitor status will be updated. |
Default Alarm Duration | defaultAlarmDuration | Required | Can be used to set the default alarm duration on discovered monitors. |
Default Image Refresh Interval | defaultImageRefreshInterval | Optional | Can be used to set the image refresh interval in seconds on discovered monitors. Leave empty to not set an image refresh interval. |
Monitor Discovery Enabled | discoveryEnabled | Required | Enable/disable the automatic discovery of monitors. Default is enabled. |
Monitor Discovery Interval | discoveryInterval | Required | Frequency in seconds at which the binding will try to discover monitors. Default is 300 seconds. |
User ID | user | Optional | User ID of ZoneMinder user when using authentication. |
Password | pass | Optional | Password of ZoneMinder user when using authentication. |
# Monitor Thing
The following configuration parameters are available on the Monitor thing:
Parameter | Parameter ID | Required/Optional | Description |
---|---|---|---|
Monitor ID | monitorId | Required | Id of monitor defined in ZoneMinder. |
Image Refresh Interval | imageRefreshInterval | Optional | Interval in seconds in which snapshot image channel will be updated. |
Alarm Duration | alarmDuration | Required | How long the alarm will run once triggered by the triggerAlarm channel. |
# Channels
# Server Thing
Channel | Type | Description |
---|---|---|
imageMonitorId | String | Monitor ID to use for selecting an image URL. Also, sending an OFF command to this channel will reset the monitor id and url to UNDEF. |
imageUrl | String | Image URL for monitor id specified by imageMonitorId. Channel is UNDEF if the monitor id is not set, or if an OFF command is sent to the imageMonitorId channel. |
videoMonitorId | String | Monitor ID to use for selecting a video URL. Also, sending an OFF command to this channel will reset the monitor id and url to UNDEF. |
videoUrl | String | Video URL for monitor id specified by videoMonitorId. Channel is UNDEF if the monitor id is not set, or if an OFF command is sent to the videoMonitorId channel. |
# Monitor Thing
Channel | Type | Description |
---|---|---|
id | String | Monitor ID |
name | String | Monitor name |
image | Image | Snapshot image |
enable | Switch | Enable/disable monitor |
function | String | Monitor function (e.g. Nodect, Mocord) |
alarm | Switch | Monitor is alarming |
state | String | Monitor state (e.g. IDLE, ALARM, TAPE) |
triggerAlarm | Switch | Turn alarm on/off |
hourEvents | Number | Number of events in last hour |
dayEvents | Number | Number of events in last day |
weekEvents | Number | Number of events in last week |
monthEvents | Number | Number of events in last month |
yearEvents | Number | Number of events in last year |
totalEvents | Number | Total number of events |
imageUrl | String | URL for image snapshot |
videoUrl | String | URL for JPEG video stream |
eventId | String | Event ID |
eventName | String | Event name |
eventCause | String | Event cause |
eventNotes | String | Event notes |
eventStart | DateTime | Event start date/time |
eventEnd | DateTime | Event end date/time |
eventFrames | Number | Event frames |
eventAlarmFrames | Number | Event alarm frames |
eventLength | Number:Time | Event length in seconds |
# Thing Actions
# triggerAlarm
The triggerAlarm
action triggers an alarm that runs for the number of seconds specified by the parameter duration
.
# triggerAlarm - trigger an alarm
void triggerAlarm(Number duration)
Parameters:
duration - The number of seconds for which the alarm should run.
# triggerAlarm
The triggerAlarm
action triggers an alarm that runs for the number of seconds specified
in the Monitor thing configuration.
# triggerAlarm - trigger an alarm
void triggerAlarm()
# triggerAlarmOff
The triggerAlarmOff
action cancels a running alarm.
# triggerAlarmOff - cancel an alarm
void triggerAlarmOff()
# Requirements
The binding requires ZoneMinder version 1.34.0 or greater, and API version 2.0 or greater. The API must be enabled in the ZoneMinder configuration using the OPT_USE_API parameter.
# Full Example
# Things
Bridge zoneminder:server:server [ host="192.168.1.100", refreshInterval=5, defaultAlarmDuration=120, discoveryEnabled=true, useDefaultUrlPath=true ]
Thing zoneminder:monitor:1 "Monitor 1" (zm:server:server) [ monitorId="1", imageRefreshInterval=10, alarmDuration=180 ]
Thing zoneminder:monitor:2 "Monitor 2" (zm:server:server) [ monitorId="2", imageRefreshInterval=10, alarmDuration=180 ]
# Items
// Server
String ZmServer_ImageMonitorId "Image Monitor Id [%s]" { channel="zoneminder:server:server:imageMonitorId" }
String ZmServer_ImageUrl "Image Url [%s]" { channel="zoneminder:server:server:imageUrl" }
String ZmServer_VideoMonitorId "Video Monitor Id [%s]" { channel="zm:server:server:videoMonitorId" }
String ZmServer_VideoUrl "Video Url [%s]" { channel="zoneminder:server:server:videoUrl" }
// Monitor
String ZM_Monitor1_Id "Monitor Id [%s]" { channel="zoneminder:monitor:1:id" }
String ZM_Monitor1_Name "Monitor Name [%s]" { channel="zoneminder:monitor:1:name" }
Image ZM_Monitor1_Image "Image [%s]" { channel="zoneminder:monitor:1:image" }
Switch ZM_Monitor1_Enable "Enable [%s]" { channel="zoneminder:monitor:1:enable" }
String ZM_Monitor1_Function "Function [%s]" { channel="zoneminder:monitor:1:function" }
Switch ZM_Monitor1_Alarm "Alarm Status [%s]" { channel="zoneminder:monitor:1:alarm" }
String ZM_Monitor1_State "Alarm State [%s]" { channel="zoneminder:monitor:1:state" }
Switch ZM_Monitor1_TriggerAlarm "Trigger Alarm [%s]" { channel="zoneminder:monitor:1:triggerAlarm" }
Number ZM_Monitor1_HourEvents "Hour Events [%.0f]" { channel="zoneminder:monitor:1:hourEvents" }
Number ZM_Monitor1_DayEvents "Day Events [%.0f]" { channel="zoneminder:monitor:1:dayEvents" }
Number ZM_Monitor1_WeekEvents "Week Events [%.0f]" { channel="zoneminder:monitor:1:weekEvents" }
Number ZM_Monitor1_MonthEvents "Month Events [%.0f]" { channel="zoneminder:monitor:1:monthEvents" }
Number ZM_Monitor1_TotalEvents "Total Events [%.0f]" { channel="zoneminder:monitor:1:totalEvents" }
String ZM_Monitor1_ImageUrl "Image URL [%s]" { channel="zoneminder:monitor:1:imageUrl" }
String ZM_Monitor1_VideoUrl "Video URL [%s]" { channel="zoneminder:monitor:1:videoUrl" }
String ZM_Monitor1_EventId "Event Id [%s]" { channel="zoneminder:monitor:1:eventId" }
String ZM_Monitor1_Event_Name "Event Name [%s]" { channel="zoneminder:monitor:1:eventName" }
String ZM_Monitor1_EventCause "Event Cause [%s]" { channel="zoneminder:monitor:1:eventCause" }
DateTime ZM_Monitor1_EventStart "Event Start [%s]" { channel="zoneminder:monitor:1:eventStart" }
DateTime ZM_Monitor1_EventEnd "Event End [%s]" { channel="zoneminder:monitor:1:eventEnd" }
Number ZM_Monitor1_Frames "Event Frames [%.0f]" { channel="zoneminder:monitor:1:eventFrames" }
Number ZM_Monitor1_AlarmFrames "Event Alarm Frames [%.0f]" { channel="zoneminder:monitor:1:eventAlarmFrames" }
Number:Time ZM_Monitor1_Length "Event Length [%.2f]" { channel="zoneminder:monitor:1:eventLength" }
# Sitemap
Selection item=ZmServer_ImageMonitorId
Image item=ZmServer_ImageUrl
Selection item=ZmServer_VideoMonitorId
Video item=ZmServer_VideoUrl url="" encoding="mjpeg"
Selection item=ZM_Monitor1_Function
Selection item=ZM_Monitor1_Enable
Image item=ZM_Monitor1_Image
# Rules
The following examples assume you have a motion sensor that is linked to an item called MotionSensorAlarm.
rule "Record When Motion Detected Using Channel"
when
Item MotionSensorAlarm changed to ON
then
ZM_TriggerAlarm.sendComand(ON)
end
rule "Record for 120 Seconds When Motion Detected"
when
Item MotionSensorAlarm changed to ON
then
val zmActions = getActions("zoneminder", "zoneminder:monitor:1")
zmActions.triggerAlarmOn(120)
end
rule "Record When Motion Detected"
when
Item MotionSensorAlarm changed to ON
then
val zmActions = getActions("zoneminder", "zoneminder:monitor:1")
zmActions.triggerAlarmOn()
end
rule "Record When Motion Detection Cleared"
when
Item MotionSensorAlarm changed to OFF
then
val zmActions = getActions("zoneminder", "zoneminder:monitor:1")
zmActions.triggerAlarmOff()
end
val int NUM_MONITORS = 6
var int monitorId = 1
rule "Rotate Through All Monitor Images Every 10 Seconds"
when
Time cron "0/10 * * ? * * *"
then
var String id = String::format("%d", monitorId)
ZmServer_ImageMonitorId.sendCommand(id)
monitorId = monitorId + 1
if (monitorId > NUM_MONITORS) {
monitorId = 1
}
end