Read the statement by Michael Teeuw here.
Want to turn off my monitor
-
You could try this for ON
if (something) {
exec("/opt/vc/bin/tvservice -o", null); }
And this for OFF
{ exec("/opt/vc/bin/tvservice --preferred && sudo chvt 6 && sudo chvt 7", null); }
Or
{ exec('xset dpms force on', null); }
{ exec('xset dpms force off', null); }
-
did u try:
sudo tvservice -o
to turn off your Monitor
sudo tvservice -p
to 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 -p
save with “ctrl+x” and say “y” to save the file.
nano monitor_off.sh
write this in this file:
sudo tvservice -o
save with “ctrl+x” and say “y” to save the file.
chmod +x monitor_on.sh
(to make it executable)
chmod +x monitor_off.sh
So 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.py
You 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.local
write 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 0
Here 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.sh
this 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 -o
Last 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.