This is a motion detector module for MagicMirror
MIT License
Just clone the module into your MagicMirror modules folder.
Assuming you are in your MagicMirror directory execute these commands:
cd modules
git clone https://github.com/rejas/MMM-MotionDetector.git
Accessing your (web)cam requires to have the client run on localhost or a HTTPS host (due to new requirements in Chrome for getUserMedia).
The default value in your MagicMirror config.js is already localhost
so most users shouldn't be affected.
Just in case you still have problems (like here) check your config and see if you can solve it by outcommenting the ip-address under
let config = {
address : '0.0.0.0',
...
Due to some changes on chromium and raspiOS (see https://github.com/rejas/MMM-MotionDetector/issues/56) the legacy raspios is needed.
Any help getting this module run on the default raspiOS is greatly appreciated!
Some people had success with enabling the legacy camera mode in the default raspiOS, but this is not a 100% confirmed:
sudo raspi-config
Then go to
3 Interface Options -> I1 Legacy Camera
and enable legacy camera support.
So far I only used a PlayStation3 Eye Webcam for motion-detection at my MagicMirror. If you have successfully used this module with any other webcam, I'd be happy to hear about it.
If you want to use the wired PI-camera follow these steps provided by @rev138:
- Open /etc/modules-load.d/modules.conf
- Add bcm2835-v4l2 to the end of the file and save it.
- Reboot.
- Profit
Another tutorial on how to enable the PI-camera in the browser can be found in this blog post.
Thanks to 3vidar you can also use this module on a Mac. For now the code only resides in the branch called "mac" in this git repo.
I hope to find the time to generalize it and have it in the mainline too.
To use this module, add it to the modules array in the config/config.js
file:
modules: [
{
module: "MMM-MotionDetector",
position: "top_left", // Optional. This can be any of the regions. Displays debug informations.
config: {
// The config property is optional.
// See 'Configuration options' for more information.
},
},
];
The following properties can be configured:
Option | Description |
---|---|
captureIntervalTime |
Time in ms between capturing images for detectionDefault value: 1000
|
scoreThreshold |
Threshold minimum for an image to be considered significantDefault value: 20
|
timeout |
Time in ms after which monitor is turned off when no motion is detectedSet to -1 to never turn off the monitorDefault value: 120000
|
deviceId |
(optional) specify which camera to use in case multiple exist in the system. |
You need to retrieve the deviceId from the browser / electron instance you are running this module on.
navigator.mediaDevices.enumerateDevices()
to get all devices.You can do this by doing a simple workaround. You need to config the MagicMirror address to localhost (default) and set up a reverse proxy for the other module.
As MagicMirror uses an express server, you can install http-proxy-middleware plugin for express. Then you need to create 2 files:
routes.json
{
"routes": [
{
"route": "/mirror", // any path you like
"address": "http://localhost:8080" // adrress of MagicMirror
}
]
}
proxyserver.js
// Dependencies
const express = require('express');
const proxy = require('http-proxy-middleware');
// Config
const { routes } = require('./routes.json');
const app = express();
for (route of routes) {
app.use(route.route,
proxy({
target: route.address,
pathRewrite: (path, req) => {
return path.split('/').slice(2).join('/'); // Could use replace, but take care of the leading '/'
}
})
);
}
// Start server and listen on port 8081
app.listen(8081, () => {});
Now just start the proxyserver e.g. with PM2 like you may run your MagicMirror.
You can now call http://ipaddress:8081/mirror/modulename and it will be forwarded to http://localhost:8080/modulename.
As you are bypassing browser security with this workaround you may want to add some credentials and/or ip-ranges which can access your proxyserver.
Notification | Payload | Description |
---|---|---|
MOTION_DETECTED |
score | score calculated by the diff-cam-engine, 0 or greater |
DEACTIVATE_MONITOR |
percentageOff | percentage of time the monitor was deactivated since the module started |
Many thanks to