zmcontrol.pl(8)

πŸ“¦
version 1.38.1 Β· 3 versions
, in alpine 3.24

πŸ’… zmcontrol.pl(8) β€” the ZoneMinder control script, bestie edition ✨

okay so this is zmcontrol.pl, straight out of the zoneminder manual, and it's literally the remote-control for your cameras πŸŽ₯✨


🌸 NAME 🌸

zmcontrol.pl β€” the ZoneMinder control script. that's it, that's the whole name, and honestly? iconic.


πŸŽ€ SYNOPSIS πŸŽ€

here's how you call her, exactly like this, no cap:

zmcontrol.pl --id {monitor_id} [--command={command}] [various options]
zmcontrol.pl --protocol {module} --address {addr} [--device {dev}] --command {cmd}

✨ DESCRIPTION ✨

bestie. this is the ZoneMinder camera control script, and she's got two whole modes, like two personalities, both valid πŸ’–

πŸ¦‹ Monitor mode (--id)

so in monitor mode you pass --id and she connects to the control daemon for that monitor 🫢 β€” or, plot twist, she starts the daemon for you if you run her without --command. main character energy fr.

heads up though: this mode requires a running ZoneMinder instance with database access. no database, no vibes. 😭

🌈 Direct protocol mode (--protocol)

this one's the lowkey fave for testing ngl β€” she loads a ZoneMinder::Control module directly and runs one single command, and she does not need database access or a running ZoneMinder instance at all. so useful for testing control modules 🧚✨


πŸ’… OPTIONS πŸ’…

one bullet per flag, all fifteen of them, no skipping, we don't do that here:

  • --id [ monitor_id ] β€” the monitor ID, used in monitor mode πŸ‘‘
  • --protocol [ name ] β€” the control module name, like ONVIF, used in direct mode 🌟
  • --address [ addr ] β€” the ControlAddress, formatted like user:pass@host:port, direct mode only πŸ“
  • --device [ dev ] β€” the ControlDevice / profile token, direct mode only πŸŽ€
  • --command [ cmd ] β€” the command you wanna execute, e.g. moveConUp or get_config πŸ”₯
  • --autostop β€” the manualpage gives no description for this one, so I'm not gonna invent one πŸ™ˆ (no argument shown, just the flag)
  • --xcoord [ arg ] β€” X-coord πŸ’œ
  • --ycoord [ arg ] β€” Y-coord πŸ’œ
  • --speed [ arg ] β€” speed ✨
  • --step [ arg ] β€” description not given in the original, but she takes an argument πŸ¦‹
  • --panspeed [ arg ] β€” description not given, takes an argument 🌸
  • --panstep [ arg ] β€” description not given, takes an argument 🌸
  • --tiltspeed [ arg ] β€” description not given, takes an argument 🌈
  • --tiltstep [ arg ] β€” description not given, takes an argument 🌈
  • --preset [ arg ] β€” description not given, takes an argument ⭐
ok real talk: several of these are listed with just a dash in the original, so I'm telling you exactly that β€” they exist, they take an argument, and the page doesn't spell out what they do. no guessing, that's the rule πŸ’€

πŸ”₯ EXAMPLES πŸ”₯

these are verbatim, copy them exactly, do not touch the syntax:

direct protocol testing, no database needed at all πŸ’–

zmcontrol.pl --protocol ONVIF --address admin:pass@192.168.1.100 --command get_config

with a profile token πŸŽ€

zmcontrol.pl --protocol ONVIF --address admin:pass@cam:8080 --device prof0 --command get_config

send a command to a running monitor daemon πŸ‘‘

zmcontrol.pl --id 1 --command moveConUp

and that's the whole page, bestie 🫢 β€” this version is zmcontrol.pl(8) from zoneminder, and the footer stamp on the original was --stderr, dated 2026-03-04 πŸ’œβœ¨ go forth and control some cameras, periodt.

πŸ“¦ where this page comes from