Read the statement by Michael Teeuw here.
{HowTo} turn on/off your monitor (Time based, PIR/Button, App)
-
Was the MMM-PIR sensor module active while you tried the script of 2.2? You will have to disable the module. Then you create and load the scripts and create the cronjob. If you don’t disable the MMM-PIR module then it will keep waking up the screen even if you disabled the pir.py script.
Please excuse me if that’s what you did and I just got it wrong.
-
Hey sorry, i thought u disabled the MMM-PIR for sure.
U cannot use both (Module and the script) at the same time.
Thats because i said u should disable the autostart in the rc.local to see if the MMM-PIR is active.
So please disable the module and just use the script. Then the pkill command will work as u want :)
-
everything is working after disabling module :)
just one remark there is needed to add also to crontab to turn off monitor at f.e. 21:02 because if there will be movement in last seconds before pir.py will be killed monitor will stay on :)
-
@Module-Developers im trying to do something a bit different maybe you can help.
I’d like to use PIR but I also want that on one particular day of the week PIR shouldn’t work and it should stay on no matter what.
Is that possible? -
Read the last few posts ;)
For example u want to use the pir from Sunday 22pm over the whole week until next Sunday 6am.
So on every Sunday from 6am to 22pm the monitor should stay on.So you just need two cronjobs. On Sunday, 6am u need to kill the pir.py and on Sunday, 22pm you need to start it again :)
Try it like this:
-
nano killpir.sh -
Write this into file and save with CTRL+X and Yes
#!/bin/bash sudo pkill $(ps aux | grep python pir.py | awk '{ print $2 }') vcgencmd display_power 1-
chmod +x killpir.sh -
sudo nano /etc/crontab -
Write this into file and save with CTRL+X and Yes:
0 22 * * 7 /usr/bin/sh /home/pi/killpir.sh 0 6 * * 7 /usr/bin/python /home/pi/pir.pySo for example your crontab looks like this:
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) 0 22 * * 7 root /usr/bin/sh /home/pi/killpir.sh 0 6 * * 7 root /usr/bin/python /home/pi/pir.py # -
-
You’re the king of cronjobs!
-
I tried your script but unfortunately it doesn’t seems to work yet. Like @blebbens , my MM is on the floor and activated a little bit too easy.
Any other suggestion?
Regards,
-
Well, for my solution it is totally necessary to NOT use the PIR-Module. You must use just my external script solution!
Tests i made working fine… :)Anyhow… You could try to use clear nail polish.
I used it to cover certain regions and it works :)
Just paint several layers of the polish over the area u want to cover.Or play with the sensitivity

-
I actually use option 2.2 - external script and already set both sensitivity and time delay to minimal (all the way to left).
would you mind to send me your pir.py?
Regards,
-
Sure, my pir.py is the same as shown on point 2.2 but with other GPIO used
#!/usr/bin/env python import sys import time import RPi.GPIO as io import subprocess import pigpio io.setmode(io.BCM) SHUTOFF_DELAY = 119 # seconds PIR_PIN = 25 # 22 on the board LED_PIN = 16 def main(): io.setup(PIR_PIN, io.IN) io.setup(LED_PIN, io.OUT) turned_off = False last_motion_time = time.time() while True: if io.input(PIR_PIN): last_motion_time = time.time() io.output(LED_PIN, io.LOW) print ".", sys.stdout.flush() if turned_off: turned_off = False turn_on() else: if not turned_off and time.time() > (last_motion_time + SHUTOFF_DELAY): turned_off = True turn_off() if not turned_off and time.time() > (last_motion_time + 1): io.output(LED_PIN, io.HIGH) time.sleep(.1) def turn_on(): subprocess.call("sh /home/pi/lights_on.sh", shell=True) def turn_off(): subprocess.call("sh /home/pi/lights_off.sh", shell=True) if __name__ == '__main__': try: main() except KeyboardInterrupt: io.cleanup()Because i use some LED Stripes which turn on when the pir detects movement my “monitor_on.sh” is called “lights_on.sh”
lights_on.sh:
vcgencmd display_power 1 pigs p 17 1 pigs p 22 1 pigs p 24 1 sleep 0.06s pigs p 17 2 pigs p 22 2 pigs p 24 2 sleep 0.06s pigs p 17 3 pigs p 22 3 pigs p 24 3 sleep 0.06s pigs p 17 4 pigs p 22 4 pigs p 24 4 sleep 0.06s pigs p 17 5 pigs p 22 5 pigs p 24 5 sleep 0.06s pigs p 17 6 pigs p 22 6 pigs p 24 5 sleep 0.06s pigs p 17 7 pigs p 22 7 pigs p 24 6 sleep 0.06s pigs p 17 8 pigs p 22 8 pigs p 24 7 sleep 0.06s pigs p 17 9 pigs p 22 9 pigs p 24 8 sleep 0.06s pigs p 17 10 pigs p 22 10 pigs p 24 9 sleep 0.06s pigs p 17 11 pigs p 22 11 pigs p 24 10 sleep 0.06s pigs p 17 12 pigs p 22 12 pigs p 24 11lights_off.sh:
pigs p 17 12 pigs p 22 12 pigs p 24 11 sleep 0.06s pigs p 17 11 pigs p 22 11 pigs p 24 10 sleep 0.06s pigs p 17 10 pigs p 22 10 pigs p 24 9 sleep 0.06s pigs p 17 9 pigs p 22 9 pigs p 24 8 sleep 0.06s pigs p 17 8 pigs p 22 8 pigs p 24 7 sleep 0.06s pigs p 17 7 pigs p 22 7 pigs p 24 6 sleep 0.06s pigs p 17 6 pigs p 22 6 pigs p 24 5 sleep 0.06s pigs p 17 5 pigs p 22 5 pigs p 24 5 sleep 0.06s pigs p 17 4 pigs p 22 4 pigs p 24 4 sleep 0.06s pigs p 17 4 pigs p 22 4 pigs p 24 4 sleep 0.06s pigs p 17 3 pigs p 22 3 pigs p 24 3 sleep 0.06s pigs p 17 2 pigs p 22 2 pigs p 24 2 vcgencmd display_power 0 sleep 0.06s pigs p 17 1 pigs p 22 1 pigs p 24 1 sleep 0.06s pigs p 17 0 pigs p 22 0 pigs p 24 0
But what exactly doesn’t work with my script? Maybe i can help :)
-
Thanks @cruunnerr.
In my case, no LED involved hence should be simpler :)
I run PIR.PY externally (via PM2) to call monitor on/off shell script and everything seems to work fine i.e.: turn screen blank and back on does work. No error reported. Its just the adding your script does not seems to make any difference, the turn on still instant.
Here is my PIR.py file
#!/usr/bin/env python import sys import time import RPi.GPIO as io import subprocess io.setmode(io.BCM) SHUTOFF_DELAY = 15 # seconds delay to turn off PIR_PIN = 17 # Pin 11 on the board TURNON_DELAY = 10 # seconds delay to turn on def main(): io.setup(PIR_PIN, io.IN) turned_off = False last_motion_time = time.time() while True: if io.input(PIR_PIN): last_motion_time = time.time() sys.stdout.flush() if turned_off and time.time() > TURNON_DELAY: turned_off = False turn_on() else: if not turned_off and time.time() > (last_motion_time + SHUTOFF_DELAY): turned_off = True turn_off() time.sleep(.1) def turn_on(): subprocess.call("sh monitor_on.sh", shell=True) def turn_off(): subprocess.call("sh monitor_off.sh", shell=True) if __name__ == '__main__': try: main() except KeyboardInterrupt: io.cleanup()Here is the monitor_off.sh
#! /bin/bash export DISPLAY=:0 xset dpms force offAnd Monitor_on.sh
export DISPLAY=:0 xset dpms force on -
Hey mate,
you are using this script.
As i wrote in my post, it was just brainstorming. I never tested this script. :(But i can imagine that this will not work… For a Turn_on delay u probably need a loop-function.
But when i read your posts i can’t find, that u need this :D
So just try the script from the original 1# post :) -
Hello,
I‘m using the PIR python-script-method.
It is working fine… but, my mirror is installed in a floor, where people are crossing the mirror several times a day without looking at it.It would be a helpful solution, if the script switches on the monitor if a person is standing in front of the mirror for 6 seconds.
Is there a possibility for modifying the script ?
-
This will not work with a simple motion detector. Because “standing” is not “motion”. ;)
Then u would need a light barrier or something like that.
Or u need to shake your body for 6 seconds in front of the mirror XD
-
I wouldn’t know how to program it but you could try playing around with a photo resistor like this or this. But I think that will only work if you have constant light conditions. Maybe an IR light barrier with a reflector on the other side would work better.
No idea if what you want is possible but that would be an awesome project.
-
Or use an ultrasonic sensor. You could let it measure the distance and if its under a specific value for a specific time it could turn on the monitor
-
Would you mind sharing how you wired your LED to pin16 in step 2.2 Using PIR-Script for LED_PIN = 16?
are you using resistors or mosfets etc? im a noob and dont want to break anything. -
In my Case I am using a RGB 5050 Stripe. I am using three pins with mosfets and for the software part PIGPIOD.
Just like that: https://dordnung.de/raspberrypi-ledstrip/
Here are my scripts:
monitor on:
vcgencmd display_power 1 pigs p 17 1 pigs p 22 1 pigs p 24 1 sleep 0.06s pigs p 17 2 pigs p 22 2 pigs p 24 2 sleep 0.06s pigs p 17 3 pigs p 22 3 pigs p 24 3 sleep 0.06s pigs p 17 4 pigs p 22 4 pigs p 24 4 sleep 0.06s pigs p 17 5 pigs p 22 5 pigs p 24 5 sleep 0.06s pigs p 17 6 pigs p 22 6 pigs p 24 5 sleep 0.06s pigs p 17 7 pigs p 22 7 pigs p 24 6 sleep 0.06s pigs p 17 8 pigs p 22 8 pigs p 24 7 sleep 0.06s pigs p 17 9 pigs p 22 9 pigs p 24 8 sleep 0.06s pigs p 17 10 pigs p 22 10 pigs p 24 9 sleep 0.06s pigs p 17 11 pigs p 22 11 pigs p 24 10 sleep 0.06s pigs p 17 12 pigs p 22 12 pigs p 24 11Monitor off:
pigs p 17 12 pigs p 22 12 pigs p 24 11 sleep 0.06s pigs p 17 11 pigs p 22 11 pigs p 24 10 sleep 0.06s pigs p 17 10 pigs p 22 10 pigs p 24 9 sleep 0.06s pigs p 17 9 pigs p 22 9 pigs p 24 8 sleep 0.06s pigs p 17 8 pigs p 22 8 pigs p 24 7 sleep 0.06s pigs p 17 7 pigs p 22 7 pigs p 24 6 sleep 0.06s pigs p 17 6 pigs p 22 6 pigs p 24 5 sleep 0.06s pigs p 17 5 pigs p 22 5 pigs p 24 5 sleep 0.06s pigs p 17 4 pigs p 22 4 pigs p 24 4 sleep 0.06s pigs p 17 4 pigs p 22 4 pigs p 24 4 sleep 0.06s pigs p 17 3 pigs p 22 3 pigs p 24 3 sleep 0.06s pigs p 17 2 pigs p 22 2 pigs p 24 2 vcgencmd display_power 0 sleep 0.06s pigs p 17 1 pigs p 22 1 pigs p 24 1 sleep 0.06s pigs p 17 0 pigs p 22 0 pigs p 24 0 -
@cruunnerr Hey there great tutorial,
I want to use the cronjob to turn on and off the mirror at certain times of the day.
My monitor is a DVI monitor so it is connected digitally with a cable that on one end is HDMI that sticks in the Rpi and the other end is a DVI connector that goes in the monitor.
When i try the commands you have mentioned;sudo tvservice -o to turn off sudo tvservice -p to turn on vcgencmd display_power 0 to turn off vcgencmd display_power 1 to turn onBoth commands for OFF turn off the display however none of the ON commands work right …it does not come on fully!!!
Meaning that it is On just no picture… it says DVI = Active VGA - No Signal and the Rpi is working there is just no picture …and no there is no Power Saving feature, i don’t think, because the back light of the LCD i can see is on after the ON command.
I send the On and Off commands through Putty ssh but i am also logged in with VNC and the moment you click reboot from VNC (there is nothing on the screen just dark with On LCD back light) the picture comes immediately back on and reboot carries on as usual and the picture is back on!!
So i think the Rpi HDMI signal is at fault and not the monitor feature but i may be wrong …what do you think may man??Thank you in advance
Denisp.s I read all 11 pages of this thread form the begging to the end with the hopes of finding a solution before bothering you LOL :)
-
@cruunnerr @Maros
Thanks to you guys I finally got it working although for me I needed to use crontab -e because if I edit the ect/ file it doenst work. Also I had to make the two changes @Maros had to make. I changed the pkill to kill and removed the /usr directory. I wish I understood more of what I was doing but it works now. Next question
I would also like to remove a specific module that I have called mmm facial recognition during certain hours. Would this be possible?
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login
