Read the statement by Michael Teeuw here.
Want to turn off my monitor
-
did u try:
sudo tvservice -oto turn off your Monitor
sudo tvservice -pto turn on your monitor
?If this isn’t working i think your Monitor or your HDMI Cable are not supporting CEC.
If this works u have several options.
For example u can create two *.sh files and make them executable. Put these scripts into cronjob file for time based turning on or off the monitor.
Or u can use a PIR or a simple Button to do that. Let me give you a small software tutorial for this example:Tutorial beginning:
cd
nano monitor_on.sh(creates the file)write this in this file:
sudo tvservice -psave with “ctrl+x” and say “y” to save the file.
nano monitor_off.shwrite this in this file:
sudo tvservice -osave with “ctrl+x” and say “y” to save the file.
chmod +x monitor_on.sh(to make it executable)
chmod +x monitor_off.shSo now you have two options. Write a python script to automatically start the shell scripts by using a GPIO or just put the Shell scripts into a cronjob.
Here is the first way:
nano pir.py(creates a script which executes the *.sh files via PIR or Button)write this into the file:
#!/usr/bin/env python import sys import time import RPi.GPIO as io import subprocess io.setmode(io.BCM) SHUTOFF_DELAY = 119 # in seconds, how long the monitor will be on until next button press or PIR detection PIR_PIN = 25 # 22 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()save with “ctrl+x” and say “y” to save the file.
chmod +x pir.pyYou can check if your button works by simply typing
python pir.py. Every time u move through the PIR or press the button it will show you some …
End the test with “ctrl+c”now we editing the rc.local to start the script after booting the Pi:
sudo nano /etc/rc.localwrite this in the file (above the “exit 0”):
python /home/pi/pir.py &save with “ctrl+x” and say “y” to save the file.
after all it should look like this:
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi python /home/pi/pir.py exit 0Here comes the second way:
Next steps we will do as root to be sure it works. Maybe not the best way, but i am just a simple guy, who is still learning the stuff. ^^
Lets say we want to turn on the monitor every day at 6am and turn off at 8pm:sudo nano /etc/crontab(to open the crontab)write this into the file:
0 6 * * * /home/pi/monitor_on.sh
0 20 * * * /home/pi/monitor_off.shthis should look 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 6 * * * root /home/pi/monitor_on.sh 0 20 * * * root /home/pi/monitor_off.sh #I wrote this just out of my head so i hope i didn’t forget anything.
Tutorial ending!
That is just an example of using a GPIO to turn off and on your monitor via HDMI-CEC.
How i said, if your monitor or cable doesn’t support this u need to choose another way (turn a relays on and off to the power supply of the monitor e.g.)edit:
sorry @mykle1, did not notice that you already answered, because I already started to write while you answered :D
-
No worries, mate. I hope to learn something from your answer. (which is totally amazing to me)
Peace!
-
Thanks this is very useful information that I didn’t know before.
I have issued the sudo tvservice -o command and it did indeed shut down my monitor.
But what I am trying at the moment is to have it shutdown and wakeup the monitor with a usb webcam now.
That’s what I’m struggling with.
Cheers -
One interesting thing I like about the second way is it seems easy :) lol.
Would it be possible to say have the screen come on 6-9am in the morning Monday to Friday then come on again 4-10pm as everyone out at work or school during the day. Than say set it so that its on 8am till 10pm on a saturday and sunday when everyone is usually about.
Thanks
-
Sure, this is possible. For the beginning it seems easy, because u needn’t any optional hardware :)
For your understanding how cronjobs works u should note the following:
* * * * * user executive_command ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └──── Weekday (0-7, Sunday is 0 or 7) │ │ │ └────── Month (1-12) │ │ └──────── Day (1-31) │ └────────── Hour (0-23) └──────────── Minute (0-59)So for your special wish ^^it should look 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 6,16 * * 1,2,3,4,5 root /home/pi/monitor_on.sh 0 9,22 * * 1,2,3,4,5 root /home/pi/monitor_off.sh 0 8 * * 6,7 root /home/pi/monitor_on.sh 0 22 * * 6,7 root /home/pi/monitor_off.sh #Or if you don’t want to create the *.sh files u can also just type the directly command.
Like this:0 6,16 * * 1,2,3,4,5 root /usr/bin/tvservice -p 0 9,22 * * 1,2,3,4,5 root /usr/bin/tvservice -o 0 8 * * 6,7 root /usr/bin/tvservice -p 0 22 * * 6,7 root /usr/bin/tvservice -oLast thing is the extremely easiest way because u just need to modify the crontab. there is nothing else needed at all.
Just put these commands in your crontab and u are done ^^ -
That’s brill your a legend, got a few hours to myself tomorrow so armed with all this information and sure be giving this a try see what the outcome is.
Thank you so much :) -
@Mykle1 said in Want to turn off my monitor:
{ exec(‘xset dpms force on’, null); }
{ exec(‘xset dpms force off’, null); }These commands do work. I just tested them on my desktop machine with a monitor connected through DVI and a laptop. Displays are immediately turned off (standby) and on. Here’s the laptop.
-
@Mykle1 that’s cool as :) what are you using for the voice command I love that its brill.
-
@robmcc83 said in Want to turn off my monitor:
that’s cool as :) what are you using for the voice command I love that its brill.
-
@cruunnerr i made your tutorial, works like charm! only problem i found is: replaced print “.”, with: print (“.”), Thenks!
-
@Jonae
i encounterd another problem, sometimes after display goes ON the resolution is changed. any ideas why? -
-
@karsten13 said in Want to turn off my monitor:
I had similar problems using
xrandrfor disabling/enabling the monitor.We did a fix in mm for the above problem (coming with next release) but I don’t know if this fixes your problem too.
You can find the fix in this PR.
Thank you, i updated the file, hope for the best :)
-
so far so good, no problems. so i can call it a fix for me.
Thanks
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