Read the statement by Michael Teeuw here.
-
For troubleshooting or HOWTO questions, please post in the Troubleshooting thread:
https://forum.magicmirror.builders/topic/208/pir-sensor-put-your-mirror-to-sleep-if-not-used/1 -
I was wondering if there is a way to toggle the power to the TV via HDMI CEC commands (sent by pi) and integrating a PIR sensor?
Example setup: The pi is always powered on. I walk into the room, the PIR senses me, and sends a power on signal to my TV via HDMI CEC command, and the mirror modules are displayed.
After a set duration, if no activity sensed by PIR sensor, a power off CEC command is sent to the TV by PI.
Has this been done before?
Any guidance would be much appreciated.
-
Please do not cross-post the same question across multiple categories. Answers will get lost in the various posts.
-
@sameershah23 Should be possible. There already is a function that turns of the HDMI output of the Pi you would just need to replace that part (or add a new mode) that sends a command to the monitor. Feel free to send a pull request!
-
@paviro I am fairly new to the programming world, but i was wondering what I need to add to the “//Detected Movement” & “//No movement” parts so that it sends the appropriate power toggle CEC signal to my TV?
Do I need to install the CEC library? How do I initialize this CEC library in your node_helper.js file?
After some googling, i found this library for CEC.
https://github.com/Pulse-Eight/libcec/issues/84
Will this library work for this application?
Any help would be greatly appreciated. :)
-
Assuming your monitor/TV supports proper HDMI CEC commands, you need to first install the necessary binaries on your rpi and test that yourself - that’s outside of MM².
Once you figured out that it works, then you need to write (or ask someone else to write) a module that interacts with the CEC binaries sending the proper commands. - that’s MM² related.
-
@sameershah23 maybe power off and on your hdmi signal and let your monitor/tv go to sleep mode when no signal.
The command will be:
OFF:
/opt/vc/bin/tvservice --off
ON:
/opt/vc/bin/tvservice --preferred && sudo chvt 6 && sudo chvt 7You can easily execute commands in node.js
-
Using motion detection to switch your mirror on and off is very appealing. PIRs are a good option and Paviro’s module does a wonderful job. However, for an aesthetic point of view, I would like to mount the motion sensor behind the mirror, i.e. in such a way you can’t see the sensor. Since glass absorbs the light the PIR is sensitive to, PIRs (or at least the ones I tested, played with sensitivities as well) are not the best option. I played around a bit and found an alternative solution based on the Picamera, OpenCV and Paviro’s MMM-PIR module.
Downsides include having to run a python program next to the Magic Mirror. On a RPi3 it this is not a problem and is in my view therefore a rather minor drawback. If you run your MM on a RPi2, this may be an issue. Getting this to work also requires a non-trivial installation of OpenCV. However, thanks to the fantastic people over at PyImageSearch, detailed instructions are available. Upsides of this solution are: motion detection using a camera from behind the glass and the possibility to upload a photo taken by the camera each time it detects motion to your dropbox account.
Steps to follow:
- Disable the red LED on the Picamera by adding
disable_camera_led = 1
to\boot\config.txt
(you don’t want to see red LED of the camera when looking at your mirror) - Install a full version of OpenCV on the RPi. Detailed instructions can be found here
- Follow the two part tutorial on writing a python based code for motion detection: Part I and Part II
- Modify the python program found on the second page to generate a 3.3 V signal on a specified pin when the camera detects motion. This pin (pin 4 below) is then connected by a wire to the pin you specified in the MMM-PIR section of the MM
config.js
file. My modifications to the python code are:
On line 14 of the python code, add:
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) OPENCV_pin = 4 # specify whatever pin you want to generate the 3.3 V at when motion is detected. GPIO.setup(OPENCV_pin, GPIO.OUT)
On line 26 add:
UnoccupiedCounter = 0 NumUnoccFramesSwitchOff = conf["fps"] * conf["time_to_switch_off"]
On line 108 insert:
UnoccupiedCounter = 0 if GPIO.input(OPENCV_pin) == 0 # check if openCV pin is high or low. If low, turn high GPIO.output(OPENCV_pin,1) print "Switched Mirror ON"
On line 137 insert:
UnoccupiedCounter = UnoccupiedCounter + 1 if UnoccupiedCounter = numUnoccFramesSwitchOff and GPIO.input(OPENCV_pin)==1: GPIO.output(OPENCV_pin, 0) print "Switched Mirror OFF"
- Add
"time_to_switch_off": 30
to theconf.json
file. Don’t forget to add the comma behind the previous entry. - Optional but recommended to get a clean exit:
Insert the wholefor
loop in atry
statement.
Between line 53 and 54, add
try:
Don’t forget to indent all the code that comes next. Add the very bottom, add:
except KeyboardInterrupt: print "Stopped camera surveillance" # exit the program when you press CNRL +C except: print "Other error or exception occurred!" # catch all other errors finally: GPIO.cleanup() # this ensures a clean exit.
I hope the above is of use to some of you.
- Disable the red LED on the Picamera by adding
-
HI @IngmarSwart,
great hack!! Did you use the original Camera behind the glass? Noir or without the IR Filter?
I’m using a PI2, can you specify why this should be an issue?
Best regards
Dirk -
Hi @DirkS,
I use a standard first generation RPi camera board. In other words, this solution works perfectly fine with IR filter on the camera.
The reason I think there might be issues with the RPi2: you should realize that this solution requires the RPi to analyze 10 images per second (give or take a few, you can specify the frame rate) using OpenCV routines. This causes a significant bump in processor load (approximately 33% on the RPi3 on top of everything else, if I’m not mistaken). I simply don’t know if the processor of the RPi2 is fast enough to do the image analysis, run the MM and the operating system simultaneously. The only way to know for sure is to test. I can’t help you with that as I don’t own a RPi2. Should the RPi2 struggle, perhaps you can get away with analyzing fewer frames (5 or maybe even 2). I encourage you to try and report back!
Best wishes,
Ingmar