Read the statement by Michael Teeuw here.
Motion Detector
-
Yes, that was what I tried to say in my first post yesterday.
I had the same problem.
Old monitors do not turn off by themselve if there is no signal. Newer monitor do turn off, and all is fine.My solution was tu use a relais to turn on/off the current of the monitor. Therefore I used a pin of the GPIOs to control the relais.
For controlling this GPIO pin I used the wiringpi library
I had to add some lines in the node_helper.js - please look at the lines with: exec("gpio -g …
pi@magicmirror:~/MagicMirror/modules/motiondetector $ more node_helper.js
'use strict'; /* Magic Mirror * Module: MMM-PIR-Sensor * * By Paul-Vincent Roll http://paulvincentroll.com * MIT Licensed. */ const NodeHelper = require('node_helper'); const exec = require('child_process').exec; var moment = require('moment'); module.exports = NodeHelper.create( { start: function () { //this.started = false; exec("gpio -g write 4 1", null); console.log('motiondetector started ...'); console.log('monitor relais on'); }, activateMonitor: function () { exec("gpio -g write 4 1", null); console.log(moment().format() + ' monitor relais on'); //this.started = false; }, deactivateMonitor: function () { exec("gpio -g write 4 0", null); console.log(moment().format() + ' monitor relais off'); //this.started = false; }, socketNotificationReceived: function (notification) { //const self = this; if (notification === 'MOTION_DETECTED') { //const self = this; //this.started = true; this.activateMonitor(); } if (notification === 'DEACTIVATE_MONITOR') { //const self = this; //this.started = true; this.deactivateMonitor(); } } } );
-
@danielis Hi! I’ve tried, but still can’t get it. So I was thinking, instead of putting of the monitor, is it possible to show a black image for example?
So when it detects movement, the MM appears, and when not, a black photo is shown.
Is it possible? -
@pepemujica
There is a module called HideAll (or something similar) which simply hides all modules and leaves a black background. Maybe you want to try it -
Could someone please write up a working instruction for the motion detector with the rasperry pi camera? Not the pir sensor, need to make use of the camera somehow. :)
-
@alexyak Does this module switch off the pi, i’m only asking since i have Alexa running in the background which requires 3 terminals to be open all the time? If the pi goes into ‘standby’ or goes off i have to re-enter the information into the 3 terminals consecutively to get it up and running again. Thanks
Mick -
@Kimzer I wrote up a method using a version of Motion for the RasPi. It’s under the tutorials section of the forum. It’s a non-module solution, so there’s some weirdness involved. But I did get it to work with a Raspicam.
@mickyas - This module doesn’t switch off the pi, it just switches off the output to the monitor.
-
@bhepler Yup that’s what I did too.
-
I’m trying to use this model on my Raspberry Pi Zero W with the Raspberry Cam. I run
MM in serveronly mode, using the Midori-browser. This setup itself works fine and also the camera is able to make picturesraspistill -o testpicture.jpg
However, if I try to add the ‘motiondetector’ module to the config I just get an empty (black, but not switched of) screen after reboot. This is even the case for a very small config.js :
var config = { port: 8080, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], language: "en", timeFormat: 24, units: "metric", modules: [ { module: "clock", position: "top_left" }, { module: 'motiondetector', config: { timeout: 5*60*1000 } }, ] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") {module.exports = config;}
Things I did:
cd ~/MagicMirror/modules git clone https://github.com/alexyak/motiondetector
Added line
bcm2835-v4l2
to/etc/modules
andhdmi_blanking=1
to/boot/config.txt
If I omit the motiondetecotor entry in the config.js it loads fine and I can see the loaded modules. If I execute
/opt/vc/bin/tvservice -o
the screen goes off (completely black). I I afterwards run
/opt/vc/bin/tvservice --preferred && sudo chvt 6 && sudo chvt 7
the background light of the screen goes on, however the modules that were there previously don’t show up again ( I waited for several minutes).
If I run/opt/vc/bin/tvservice --preferred && sudo chvt 6 && sudo chvt 2
the modules become visible again. Therefore I changed the line in
~/MagicMirror/modules/motiondetector/node_helper.js
accordingly. However then I got still an empty screen and in the log:
Jul 16 18:59:23 me startMagicMirror.sh[480]: ** Message: console message: [native code] @0: Starting module: motiondetector Jul 16 18:59:23 me startMagicMirror.sh[480]: ** Message: console message: http://localhost:8080/modules/motiondetector//motiondetector.js @39: TypeError: Attempted to assign to readonly property. Jul 16 18:59:24 me startMagicMirror.sh[480]: monitor :state 0x12000a [HDMI DMT (82) RGB full 16:9], 1920x1080 @ 60.00Hz, progressive Jul 16 18:59:24 me startMagicMirror.sh[480]: ** Message: console message: http://localhost:8080/js/main.js @134: TypeError: null is not an object (evaluating 'moduleWrapper.getElementsByClassName')
To me as a beginner it looks like a permission problem. However even making the motiondetector folder and all files therein rw for everybody it didn’t work.
I hope that somebody who has knowledge about JS can comment on this issue. Many thanks in advance.
-
@Hawking try to change line 39 to:
cameraPreview.style.visibility = "hidden";
-
Thanks for the quick help. I also found the line in motiondetector.js a bit strange (why the semicolon within the parenthesis…) but as I don’t know JS or details about the code, I couldn’t judge.
I still have the same effect (blank screen) but the new error message is
Jul 17 23:16:55 me startMagicMirror.sh[445]: ** Message: console message: [native code] @0: Starting module: motiondetector Jul 17 23:16:55 me startMagicMirror.sh[445]: ** Message: console message: http://localhost:8080/modules/motiondetector//diff-cam-engine.js @81: TypeError: undefined is not an object (evaluating '(navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia).call')
Maybe all these things give empty? As a workaround I surrounded the function by
function requestWebcam() { var self = this; method = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); if ( !! method ) { .... } }
Now at least the other modules load successfully.
However, the modules don’t get deactivated after some minutes :-/ I assume that one of these navigator methods is needed for the motiondetector to work? If I look at https://developer.mozilla.org/en/docs/Web/API/Navigator/getUserMedia they seem anyway outdated? How would the user grand permission in a headless setup? Does somebody know if they are supported by the Midori browser?