PIR-Sensor - put your mirror to sleep if not used


  • Admin

    Description:

    MMM-PIR-Sensor will monitor a connected PIR-sensor and putt your mirror to sleep if no one uses it either by disabling HDMI output or by turning of a relay.

    Download:

    FAQ

    “An unhandled error occurred inside electron-rebuild. Unable to find electron-prebuilt’s version number, either install it or specify an explicit version”

    Possible solution: Change your package.json file in ~/MagicMirror/modules/MMM-PIR-Sensor like this.

    Developer note

    If you are a developer and want to pause your module while no one uses it (if it is processor intense), you can listen to the USER_PRESENCE broadcast. It will return true or false as its payload.

    Changelog


    Initial release


  • Moderator

    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.


  • Moderator

    Please do not cross-post the same question across multiple categories. Answers will get lost in the various posts.


  • Admin

    @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. :)


  • Moderator

    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 7

    You 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 the conf.json file. Don’t forget to add the comma behind the previous entry.
    • Optional but recommended to get a clean exit:
      Insert the whole for loop in a try 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.



  • 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


Log in to reply
 

Looks like your connection to MagicMirror Forum was lost, please wait while we try to reconnect.