Read the statement by Michael Teeuw here.
{HowTo} turn on/off your monitor (Time based, PIR/Button, App)
-
@cruunnerr
I have had success with your help and my PIR sensor but only after running pir.py from .bashrcThe script is working however I read the following warning when accessing my Magic Mirror with SSH:
RuntimeWarning. This channel is already in use, continuing anyway. io.setup(LED_PIN, io.OUT)
My end result is not affected. The PIR works fine.
Thank you
-
Just a little feedback that was a huge help for me.
@cruunnerr don’t know if you want to add this information on your first message.I have a samsung d6000 series tv that wouldn’t work anyway with modules for PIR sensor. A BIG aplause for all developers but i coudn’t get the tv out of “No Signal” message. The MagicMirror would turn image off but tv only in “No Signal”.
I’m not a programmer and just went on test and try.
I figured out that the https://github.com/bugsounet/MMM-NewPIR from @Bugsounet (BIG thanks to you also!) managed the problem!!
With this module set to mode: 4 - use HDMI CEC the TV shuts down when the MagicMirror tells her to shut down!
It’s straight through ON and OFF as expected!I’me very thankful to you all managing to help us out!
Thanks! -
its possible to kill 2.2 Using PIR-Script in rasp pi?
Can you tell me how I cans do it please?
thanks -
@ulster kill 2.2 what?
-
This one. Mentioned in the first page.
how to remove it?#!/usr/bin/env python
import sys
import time
import RPi.GPIO as io
import subprocessio.setmode(io.BCM)
SHUTOFF_DELAY = 120 # in seconds, how long the monitor will be on until next button press or PIR detection
PIR_PIN = 22 # 15 on the board (this needn’t to be a PIR. Can be a button also)
LED_PIN = 16 # optional, don’t use as Relay-PIN. It just shows detection time of the PIR without delay timedef 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/monitor_on.sh”, shell=True)def turn_off():
subprocess.call(“sh /home/pi/monitor_off.sh”, shell=True)if name == ‘main’:
try:
main()
except KeyboardInterrupt:
io.cleanup() -
@ulster sorry, i dont know anything about the module and dont read ( or re-read) every page of posts
-
Hello everyone, I’m getting desperate. I’ve now read the entire tutorial but I can’t find my mistake.
I am using my MM with a PIR sensor and would like to switch the backlight of the display with a relay. so i use this script pir.py:
#!/usr/bin/env python import sys import time import RPi.GPIO as io import subprocess io.setmode(io.BCM) SHUTOFF_DELAY = 120 # in seconds, how long the monitor will be on until next button press or PIR detection PIR_PIN = 22 # 15 on the board (this needn't to be a PIR. Can be a button also) LED_PIN = 16 # optional 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/monitor_on.sh", shell=True) def turn_off(): subprocess.call("sh /home/pi/monitor_off.sh", shell=True) if __name__ == '__main__': try: main() except KeyboardInterrupt: io.cleanup()
Unfortunately, when I run this script in the terminal, I only get the feedback from the PIR sensor (…) but the relay is not switched. But if I run the monitor_on.sh or monitor_off.sh script it works:
monitor_on.sh
gpio -g mode 27 out sleep 0.2 gpio -g write 27 1
monitor_off.sh
gpio -g mode 27 out sleep 0.2 gpio -g write 27 0
But the PIR.py doesn’t work. Where could the mistake lie?
Many greetings Andreas
-
@andi-aw-weiss I think you are using the wrong script. With just a quick look it seems you’re running the script from point 2.2 (Using PIR script) of the first post. What you want is point 5.2 (Use relay with a PIR). That script used in 5.2 is different than that of 2.2, which does not have code to control the relay.
Have a look at it again.
-
@MadScientist Hey, unfortunately the problem hasn’t changed. I have now like you said the script from 5.2. The problem remains. PIR detects motion. Relay does not switch. :loudly_crying_face: I don’t know
-
@MadScientist ok it seems to be working now. However, the relay switches the first time after the 120 s have expired and a movement is detected. not previously. The change quote: “io.output(RELAY_PIN, False)” and for monitor off “io.output(RELAY_PIN, True)” only causes the relay to work in reverse. I now use this script:
#!/usr/bin/env python import sys import time import RPi.GPIO as io import subprocess io.setmode(io.BCM) SHUTOFF_DELAY = 120 # in seconds, how long the monitor will be on until next button press or PIR detection PIR_PIN = 22 # 15 on the board (this needn't to be a PIR. Can be a button also) LED_PIN = 17 # 11 on the board (optional): It just shows detection time of PIR without delay time RELAY_PIN = 27 # 13 on the board def main(): io.setup(PIR_PIN, io.IN) io.setup(LED_PIN, io.OUT) io.setup(RELAY_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(): io.output(RELAY_PIN, True) def turn_off(): io.output(RELAY_PIN, False) if __name__ == '__main__': try: main() except KeyboardInterrupt: io.cleanup()
where could the error lie? or is that how it should be? Thank you MadScientist