Difference between revisions of "ZMTrigger"

From ZoneMinder Wiki
Jump to navigationJump to search
 
(67 intermediate revisions by 2 users not shown)
Line 1: Line 1:
==About==
/usr/bin/zmtrigger.pl (debian location) is an optional program for Zoneminder that listens on the network for commands. Read the perl script for more information. It is a telnet server.


It can be used in different ways.


/usr/bin/zmtrigger.pl (debian location) is an optional program for Zoneminder that listens on the network for commands. Read the script for a brief description.  
'''1)''' it can be used is to overlay text information (e.g. temperature sensor) onto the video feed.  


One way it can be used is to overlay text information from an external source (e.g. temperature sensor) onto the video feed. It can also be used as an external trigger source for cameras. By using an external trigger source, you can avoid some of the problems inherent in ZM - that of false alarms. False alarms are commonly caused when the video feed has a change come across it, such as a weather events, bugs, or the transition from daylight filter to night ir filter. An external trigger source might be one or more of a PIR, Microwave, or Ultrasonic sensor.
'''2)''' It can also be used as an external trigger / alarm source for cameras. By using an external alarm, you can avoid some of the problems inherent in ZM software modect - false alarms, and CPU usage. False alarms are commonly caused when the video feed has an ambient change come across it, e.g. weather events, wildlife, or the transition from daylight to night ir filter.  


Note that if you have a small house, or single breaker, you might want to consider using [[X10]] for Zoneminder. This will save you the need for ethernet wiring, or setting up wifi.
'''3)''' You can monitor which alarms are active or not at a given time. ZMTrigger reports when alarms are active, and when they are closed. This data can be queried by external programs.
 
Note that if you have a house, or single breaker, you might want to consider using [[X10]] for Zoneminder. This will save you the need for ethernet wiring, or setting up wifi.


==Configuration==
==Configuration==




Enable it first, by going into options, config, and checking Enable Triggers.
Enable it first, by going into options, config, and checking Enable Triggers (OPT_TRIGGER).
 
Then
<pre># service restart zoneminder</pre>


Then restart ZM.
# /etc/init.d/zoneminder restart
Verify it is running with  
Verify it is running with  
<pre>ps auxw | grep zmtrigger</pre>
ps auxw | grep zmtrigger
 
Verify the port is 6802 and tcp
netstat -ntulp
or
ss -ntulp
Make sure no firewall is blocking it on port 6802.
iptables -L
or
nft list tables
nft list table <result of previous command>


==Usage==
==Usage==
Line 37: Line 47:
<pre>1|show||||testingOSD</pre>
<pre>1|show||||testingOSD</pre>
then press return.
then press return.


Refer to [[Documentation]] for what this command means. A brief explanation for this is: <pre>MonitorID # | Show text mode |||| text to put in.</pre>
Refer to [[Documentation]] for what this command means. A brief explanation for this is: <pre>MonitorID # | Show text mode |||| text to put in.</pre>
Line 44: Line 55:
For more examples and scripts of ZMTrigger search the [https://forums.zoneminder.com forums].
For more examples and scripts of ZMTrigger search the [https://forums.zoneminder.com forums].


====Example Script====
Note: You can also send this to telnet in a shell script via:
<pre>
#!/bin/bash
 
# call script and pass monitor number
# e.g.
# "$ ./telnet_zmtrigger_test.sh 12"
# fields are:
# B<id>|B<action>|B<score>|B<cause>|B<text>|B<showtext>
 
IPADDRESSOFZMSRV=192.168.1.178
 
telnet $IPADDRESS 6802 <<EOF
$1|on+3|10|ZMTEST||
EOF
</pre>
 
====Example Setup====




Here is a script of connecting to an ipaddress that serves a value from a sensor.  
Here is a script that connects to an ipaddress which serves a sensor value.  
Wget is not as fast as possible, but this is simple and works quickly as a test.
Wget is not as fast as possible, but this is simple and works quickly as a test.


Line 64: Line 92:
</pre>
</pre>


This text overlay can be used for any information, not just from the LAN. Maybe you want to overlay the time of sunrise / sunset, or any information from an online database or website. It's limited by your imagination.
This text overlay can be used for any information, not just from the LAN. Maybe you want to overlay information from an online database or website.  
 
'''Possible uses of text trigger'''
* temperature
* air pressure
* humidity
* sunset/sunrise time
* which alarm activated
* which person entered an electronically locked door
* random quote / message
* id of last camera alarm that went off on system
* the name of the person buying something from the POS system
* insert idea here


===As an External Trigger===
===As an External Trigger===


It is possible with minor effort, to communicate with ZMTrigger.pl at the Zoneminder Server IP Address, using a microcontroller and a device that does the actual triggering.  Common options would be 8-bit microcontrollers such as the Arduino Uno, the ESP8266, or an ARM based SBC such as the Raspberry Pi, Beaglebone, and others.
It is possible with minor effort, to communicate with ZMTrigger.pl at the Zoneminder Server IP Address, using a microcontroller and a device that does the actual triggering.  Common options would be 8-bit microcontrollers such as the Arduino Uno, the ESP8266, or an ARM based SBC such as the Raspberry Pi, Beaglebone, and others.
Some benefits
* Fully customizable
* Less false positives
* Less CPU usage
* No zone configuration required
Some drawbacks
* Some assembly required
* Zone configuration isn't necessary, but you may have to install these, which is slow and requires fish tape, drywall saw, experience with installing an ethernet or electrical outlet, etc...


====Types of Controllers====
====Types of Controllers====
[[File:ArduinoUno.jpg|thumb|right|upright=0.5|alt=Uno||Arduino Uno DIP]]
[[File:ArduinoUno.jpg|thumb|right|upright=0.5|alt=Uno||Arduino Uno DIP]]
This is up to you. If you have a wired ethernet connection available for the external sensor, then an Arduino Uno is a good choice. If you desire wireless, then an ESP8266 or ESP32 will work. An Arduino Uno will require a separate ethernet board.
This is up to you. If you have a wired ethernet connection available for the external sensor, then an [[Arduino]] Uno is a good choice. If you don't want to run ethernet, then an ESP8266 or Arduino w/wifi should do. An Arduino Uno will require a separate ethernet board. You can also connect an Arduino via USB, if the computer is within 15 feet.


====Types of Sensors====
====Types of Sensors====


You will need to decide which sensors to use. There are many options, and in fact it is limited by your imagination. I'll start with the common options, the ones most likely to be used by a weekend linux hacker, and then discuss future expansion potential. The first available options for Arduino solutions would be a PIR sensor, a Microwave sensor, or an Ultrasonic sensor.
You will need to decide which sensors to use. There are many options. This is what I've used.


=====PIR Sensors=====
=====PIR Sensors=====


PIR stands for Passive Infrared. These devices can be obtained from prices of $4 and up online. Across auction sites from China for the cheapest, to [https://www.sparkfun.com/products/13968 hobbyist electronics stores] for tested chinese products, and then for brand name sensors from electronics distributors like Digikey, Mouser, and Farnell. These sensors are useful, but have limitations.
PIR stands for Passive Infrared. These can be obtained from $4 and up online. Across auction sites from China for the cheapest, to [https://www.sparkfun.com/products/13968 hobbyist electronics stores] for tested chinese products, and then for brand name sensors from electronics distributors like Digikey, Mouser, and Farnell. These sensors are useful, but have limitations.


* Range is limited to 10-20 Feet.
* Range is limited to 10-20 Feet. Sensitivity can be tuned.
* Sunlight will cause false triggers. Direct OR indirect.
* Sunlight will cause false triggers. Direct OR indirect. Software or hardware may be able to mitigate this (TODO).
* Works good in a hallway, or room where no outdoor sunlight will penetrate.
* Works good in a hallway, or room where no outdoor sunlight will penetrate.


Overall, the PIR Sensors are good if you have the right environment. They are not feasible outside, but indoors, away from sunlight, they do the trick.
Overall, the PIR Sensors are good if you have the right environment. They are not feasible outside, but indoors, away from sunlight, they work well.


=====Microwave Sensors=====
=====Microwave Sensors=====
[[File:hb100.jpeg|frame|HB100 10GHz Microwave module without circuitry||HB100]]
[[File:hb100.jpeg|frame|HB100 10GHz Microwave module without circuitry||HB100]]


Microwave sensors operate in the 10-24GHz radio bands. The 10 GHz sensors have a range of about 20-30 feet for a person, more for large vehicles (reflective metal objects). The 24GHz sensors have shorter range. There are a variety of these, from brand name, to cheap. HB100 is a common 10GHz model, though it requires an external amplifier to read the uV signal. This can be as simple as an lm386 arduino module. Other sensors have [https://www.parallax.com/product/32213 circuitry built in] to output a high or low signal depending on the motion, and how sensitive you make it. These sensors are a step above the PIR in some ways, but have their own limitations.
Microwave sensors operate in the 5-24GHz radio bands. The 10 GHz sensors have a range of about 20-30 feet for a person, more for large vehicles (reflective metal objects). The 24GHz sensors have shorter range. There are a variety of these, from brand name, to cheap. The best sensor currently available at the lowest price is the HFS-DC06H.  


* Relatively short range for radio. Typically 10M, but some claim 15M. Depends on how conductive the item in motion is.
* Relatively short range for radio. Depends on RF frequency, but typically you get 5GHz = 10M, 10GHz = 5M, 24GHz = <3M
* Can't use multiple of these, as they may interfere with each other. (need to test)
* Some of these can interfere with each other (some do not, depends on model).
* Items are detected greater when moving towards or away the sensor, not as much when moving across its field of sight.
* Detection of items depends on conductivity (large metal objects such as cars are detected from a larger distance than people. This is expected).
* May work too well - Mice can set off alarms (not false, but essentially unwanted alarms)(sensitivity can usually be adjusted).  


'''Why don't I make a radio sensor that goes longer than 10M?'''
'''Why don't I make a radio sensor that goes longer than 10M?'''


[https://github.com/Ttl/fmcw It's been done]. But they can't be used (unless you have money enough to FCC test them). While It is possible to [https://hackaday.com/2014/02/24/guest-post-try-radar-for-your-next-project/ make FMCW radars] from components and transmit in the public/unlicensed ICM bands such as 5.8GHz, you need a amateur radio license to operate them outside of testing. If you don't have an amateur radio license, then you can only use FCC certified transmitting radios. Not affordable or practical for the average hacker. You are stuck with the cheap stuff.
[https://github.com/Ttl/fmcw It's been done]. And if they are within the ISM bands they can be used without FCC testing and approval. More details here: [https://hackaday.com/2014/02/24/guest-post-try-radar-for-your-next-project/ make FMCW radars]. Not easy but doable. The trick will be to make one that is practical enough but also not $100 each.


=====Ultrasonic Sensors=====
=====Ultrasonic Sensors=====


I have not and will not use ultrasonic sensors, but maybe someone else has some experience they can chime in with here (no pun intended).
I do not use ultrasonic sensors, but maybe someone else has some experience they can chime in with here (no pun intended).


* Uses high frequency sound, may disrupt animals.
* Uses high frequency sound, may disrupt animals.
=====Infrared Trip Sensors=====
It's easy to find infrared trip sensors (think a laser going from 10-50 feet across). These can be setup with a microcontroller, and if someone walks across the beam, you can activate the alarm. Some brands are [http://www.sick.com/us/en Sick] or Seco-larm Enforcer. If you need a real short IR (inches), off the shelf Arduino modules will work (ir photo beam detector). These can be purchased from distributors such as [http://www.allelectronics.com] and others online. Search the opto-electronics section (subject to change). Buy used if you are on a budget.
* Requires a bit of installation, though works well, when installed.
* Requires power at both ends of the laser.
* More Immune to sun interference than PIR
* One end must connect back to server somehow (ethernet/wifi/usb/X10)
* Reasonably long distance. Some are up to 100M.
* Possible to avoid if you step over them. Put these aiming at a device that moves such as a door or gate. You can also get larger sensors, which can be a 6-7 feet tall, and are used in elevators to detect people in the doorway (search "[https://www.pepperl-fuchs.com/global/en/classid_104.htm elevator door sensors]").
* These are all in the class of "photo electric sensors"
* the single beam modules (that don't have a receiver) may require a reflective sticker (bike reflector) on the other side
An example sketch is included in the links at the bottom.
=====Inductive Sensors=====
There are products that, similar to capacitive sensors, (think a Theremin https://en.wikipedia.org/wiki/theremin) you can for example attach a wire to a doorknob (or any piece of metal), then when someone touches the other side of the doorknob, the alarm is set off. These can be purchased on eBay advertised as "120db Wireless Touch Sensor Security Alarm Loud Door Knob" or some variation thereof, with even a loud buzzer should room service try to enter your room (oops).
[[File:Hotel_door_alarm.jpg|400px|thumb|right|For security purposes, tracking contact on any piece of metal is easy.]]


=====Other Sensors=====
=====Other Sensors=====


An infinite amount of devices could be used as triggers. House alarms use reed switches on windows and doors. Laser diodes could be used across long distances. If you have the capital, then there are many off the shelf products that can be purchased.
An infinite amount of devices could be used as triggers. House alarms use reed switches on windows and doors. If you have the capital, then there are many off the shelf products that can be purchased including expensive but powerful RF modect sensors.


==Troubleshooting==
==Troubleshooting==
Line 128: Line 200:
This timeout error doesn't seem to adversely affect any other features of ZM so, a low wait_timeout may be acceptable if you don't use ZMTrigger.
This timeout error doesn't seem to adversely affect any other features of ZM so, a low wait_timeout may be acceptable if you don't use ZMTrigger.


The default wait timeout is 8 hours for MySQL. The solution seems to be add a wait_timeout >300, or use the default.  
The default wait timeout is 8 hours for MySQL. The solution seems to be add a wait_timeout >300, or use the default. Note that this might be fixed for ZM > 1.30.4
Reference:[https://forums.zoneminder.com/viewtopic.php?t=26316]
Reference:[https://forums.zoneminder.com/viewtopic.php?t=26316]


Line 136: Line 208:
This means you could have multiple sensors, each triggering a different location. A reed switch on a window, a laser
This means you could have multiple sensors, each triggering a different location. A reed switch on a window, a laser
on a door, etc... When the alarm goes off, the video feed displays the alarm that was triggered.
on a door, etc... When the alarm goes off, the video feed displays the alarm that was triggered.
* "Can I have these arduino sketches set off multiple cameras?" Yes. You can edit the Arduino sketch to send more packets, or "link monitors" in Zoneminder. Two approaches (the latter is easier). https://forums.zoneminder.com/viewtopic.php?f=36&t=26794


== See Also ==
== See Also ==


* [[How to use your external camera's motion detection with ZM]]
* [[How to use your external camera's motion detection with ZM]] - A good writeup on ZMTrigger from the original developer of ZMNinja
 
* https://sparxeng.com/blog/software/zoneminder-network-triggering - More explanations


* [https://forums.zoneminder.com/viewtopic.php?f=36&t=25704 ZM Forums: Add temperature to image]
* [https://forums.zoneminder.com/viewtopic.php?f=36&t=25704 ZM Forums: Add temperature to image]


* [[Dedicated SBC Camera Monitor]]
* [[Dedicated SBC Camera Monitor]]
* Arduino Infrared Tripwire Sketch via ethernet: [https://forums.zoneminder.com/viewtopic.php?f=9&t=27442]
* Arduino Sketch via USB [https://forums.zoneminder.com/viewtopic.php?f=9&t=26945]
* [[Arduino]]
[[Category:Dummies_Guide]]

Latest revision as of 22:59, 2 September 2024

/usr/bin/zmtrigger.pl (debian location) is an optional program for Zoneminder that listens on the network for commands. Read the perl script for more information. It is a telnet server.

It can be used in different ways.

1) it can be used is to overlay text information (e.g. temperature sensor) onto the video feed.

2) It can also be used as an external trigger / alarm source for cameras. By using an external alarm, you can avoid some of the problems inherent in ZM software modect - false alarms, and CPU usage. False alarms are commonly caused when the video feed has an ambient change come across it, e.g. weather events, wildlife, or the transition from daylight to night ir filter.

3) You can monitor which alarms are active or not at a given time. ZMTrigger reports when alarms are active, and when they are closed. This data can be queried by external programs.

Note that if you have a house, or single breaker, you might want to consider using X10 for Zoneminder. This will save you the need for ethernet wiring, or setting up wifi.

Configuration

Enable it first, by going into options, config, and checking Enable Triggers (OPT_TRIGGER).

Then restart ZM.

# /etc/init.d/zoneminder restart

Verify it is running with

ps auxw | grep zmtrigger

Verify the port is 6802 and tcp

netstat -ntulp
or
ss -ntulp

Make sure no firewall is blocking it on port 6802.

iptables -L
or
nft list tables
nft list table <result of previous command>

Usage

Overlaying Text Data onto a Video Feed

After you have verified the script is running, test it is working.

Choose a monitor by monitor ID, say monitor 1, then add %Q to the monitors timestamp section.

The monitor must be in either modect, mocord, or nodect mode.

Open the video feed for monitor 1.

Then type in another terminal

telnet ipaddress 6802

in the telnet session type the following

1|show||||testingOSD

then press return.


Refer to Documentation for what this command means. A brief explanation for this is:

MonitorID # | Show text mode |||| text to put in.

You should immediately see testingOSD in place of the %Q you put in the timestamps section.

For more examples and scripts of ZMTrigger search the forums.

Note: You can also send this to telnet in a shell script via:

#!/bin/bash

# call script and pass monitor number
# e.g.
# "$ ./telnet_zmtrigger_test.sh 12"
# fields are:
# B<id>|B<action>|B<score>|B<cause>|B<text>|B<showtext>

IPADDRESSOFZMSRV=192.168.1.178

telnet $IPADDRESS 6802 <<EOF
$1|on+3|10|ZMTEST||
EOF

Example Setup

Here is a script that connects to an ipaddress which serves a sensor value. Wget is not as fast as possible, but this is simple and works quickly as a test.

#!/bin/bash
counter=1

while [$counter -le 10]
do
PRESSURE=`wget ipaddress -q -O -`
echo "1|show||||$PRESSURE" | telnet ipaddress 6802
sleep 4

#((counter++))
done

This text overlay can be used for any information, not just from the LAN. Maybe you want to overlay information from an online database or website.

Possible uses of text trigger

  • temperature
  • air pressure
  • humidity
  • sunset/sunrise time
  • which alarm activated
  • which person entered an electronically locked door
  • random quote / message
  • id of last camera alarm that went off on system
  • the name of the person buying something from the POS system
  • insert idea here

As an External Trigger

It is possible with minor effort, to communicate with ZMTrigger.pl at the Zoneminder Server IP Address, using a microcontroller and a device that does the actual triggering. Common options would be 8-bit microcontrollers such as the Arduino Uno, the ESP8266, or an ARM based SBC such as the Raspberry Pi, Beaglebone, and others.


Some benefits

  • Fully customizable
  • Less false positives
  • Less CPU usage
  • No zone configuration required


Some drawbacks

  • Some assembly required
  • Zone configuration isn't necessary, but you may have to install these, which is slow and requires fish tape, drywall saw, experience with installing an ethernet or electrical outlet, etc...

Types of Controllers

Uno
Arduino Uno DIP

This is up to you. If you have a wired ethernet connection available for the external sensor, then an Arduino Uno is a good choice. If you don't want to run ethernet, then an ESP8266 or Arduino w/wifi should do. An Arduino Uno will require a separate ethernet board. You can also connect an Arduino via USB, if the computer is within 15 feet.

Types of Sensors

You will need to decide which sensors to use. There are many options. This is what I've used.

PIR Sensors

PIR stands for Passive Infrared. These can be obtained from $4 and up online. Across auction sites from China for the cheapest, to hobbyist electronics stores for tested chinese products, and then for brand name sensors from electronics distributors like Digikey, Mouser, and Farnell. These sensors are useful, but have limitations.

  • Range is limited to 10-20 Feet. Sensitivity can be tuned.
  • Sunlight will cause false triggers. Direct OR indirect. Software or hardware may be able to mitigate this (TODO).
  • Works good in a hallway, or room where no outdoor sunlight will penetrate.

Overall, the PIR Sensors are good if you have the right environment. They are not feasible outside, but indoors, away from sunlight, they work well.

Microwave Sensors
HB100

Microwave sensors operate in the 5-24GHz radio bands. The 10 GHz sensors have a range of about 20-30 feet for a person, more for large vehicles (reflective metal objects). The 24GHz sensors have shorter range. There are a variety of these, from brand name, to cheap. The best sensor currently available at the lowest price is the HFS-DC06H.

  • Relatively short range for radio. Depends on RF frequency, but typically you get 5GHz = 10M, 10GHz = 5M, 24GHz = <3M
  • Some of these can interfere with each other (some do not, depends on model).
  • Detection of items depends on conductivity (large metal objects such as cars are detected from a larger distance than people. This is expected).
  • May work too well - Mice can set off alarms (not false, but essentially unwanted alarms)(sensitivity can usually be adjusted).

Why don't I make a radio sensor that goes longer than 10M?

It's been done. And if they are within the ISM bands they can be used without FCC testing and approval. More details here: make FMCW radars. Not easy but doable. The trick will be to make one that is practical enough but also not $100 each.

Ultrasonic Sensors

I do not use ultrasonic sensors, but maybe someone else has some experience they can chime in with here (no pun intended).

  • Uses high frequency sound, may disrupt animals.
Infrared Trip Sensors

It's easy to find infrared trip sensors (think a laser going from 10-50 feet across). These can be setup with a microcontroller, and if someone walks across the beam, you can activate the alarm. Some brands are Sick or Seco-larm Enforcer. If you need a real short IR (inches), off the shelf Arduino modules will work (ir photo beam detector). These can be purchased from distributors such as [1] and others online. Search the opto-electronics section (subject to change). Buy used if you are on a budget.

  • Requires a bit of installation, though works well, when installed.
  • Requires power at both ends of the laser.
  • More Immune to sun interference than PIR
  • One end must connect back to server somehow (ethernet/wifi/usb/X10)
  • Reasonably long distance. Some are up to 100M.
  • Possible to avoid if you step over them. Put these aiming at a device that moves such as a door or gate. You can also get larger sensors, which can be a 6-7 feet tall, and are used in elevators to detect people in the doorway (search "elevator door sensors").
  • These are all in the class of "photo electric sensors"
  • the single beam modules (that don't have a receiver) may require a reflective sticker (bike reflector) on the other side

An example sketch is included in the links at the bottom.

Inductive Sensors

There are products that, similar to capacitive sensors, (think a Theremin https://en.wikipedia.org/wiki/theremin) you can for example attach a wire to a doorknob (or any piece of metal), then when someone touches the other side of the doorknob, the alarm is set off. These can be purchased on eBay advertised as "120db Wireless Touch Sensor Security Alarm Loud Door Knob" or some variation thereof, with even a loud buzzer should room service try to enter your room (oops).

For security purposes, tracking contact on any piece of metal is easy.
Other Sensors

An infinite amount of devices could be used as triggers. House alarms use reed switches on windows and doors. If you have the capital, then there are many off the shelf products that can be purchased including expensive but powerful RF modect sensors.

Troubleshooting

tail -f  /var/log/zm/zmtrigger.log

Enable debug on it in the logs and set to 9. The logs that contain the /var/log/zm/ logs are the component logs in options.


MySQL server has gone away error

After following forum recommendations to use mysqltuner (see MySQL), mysqltuner told me to add wait_timeout=300 to my.cnf.

Unfortunately, ZMTrigger will disconnect every five minutes, if this is enabled. It appears that ZMTrigger will "Loading monitors" every five minutes, so you can't have a wait_timeout equal or lower than that. Otherwise the MySQL server will go away. If the wait timeout is higher, then ZMTrigger will "Loading monitors" without error.

This timeout error doesn't seem to adversely affect any other features of ZM so, a low wait_timeout may be acceptable if you don't use ZMTrigger.

The default wait timeout is 8 hours for MySQL. The solution seems to be add a wait_timeout >300, or use the default. Note that this might be fixed for ZM > 1.30.4 Reference:[2]

Notes

This means you could have multiple sensors, each triggering a different location. A reed switch on a window, a laser on a door, etc... When the alarm goes off, the video feed displays the alarm that was triggered.

See Also

  • Arduino Infrared Tripwire Sketch via ethernet: [3]
  • Arduino Sketch via USB [4]