MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    Want to turn off my monitor

    Scheduled Pinned Locked Moved Troubleshooting
    monitorpower-saving
    27 Posts 9 Posters 23.1k Views 7 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Mykle1M Offline
      Mykle1 Project Sponsor Module Developer @robmcc83
      last edited by Mykle1

      @robmcc83

      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); }

      Create a working config
      How to add modules

      Mykle1M 1 Reply Last reply Reply Quote 2
      • cruunnerrC Offline
        cruunnerr
        last edited by cruunnerr

        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

        Mykle1M J 2 Replies Last reply Reply Quote 1
        • Mykle1M Offline
          Mykle1 Project Sponsor Module Developer @cruunnerr
          last edited by

          @cruunnerr

          No worries, mate. I hope to learn something from your answer. (which is totally amazing to me)

          Peace!

          Create a working config
          How to add modules

          1 Reply Last reply Reply Quote 0
          • R Offline
            robmcc83
            last edited by

            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

            1 Reply Last reply Reply Quote 0
            • R Offline
              robmcc83
              last edited by

              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

              1 Reply Last reply Reply Quote 0
              • cruunnerrC Offline
                cruunnerr
                last edited by cruunnerr

                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 ^^

                1 Reply Last reply Reply Quote 0
                • R Offline
                  robmcc83
                  last edited by

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

                  1 Reply Last reply Reply Quote 0
                  • Mykle1M Offline
                    Mykle1 Project Sponsor Module Developer @Mykle1
                    last edited by Mykle1

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

                    https://youtu.be/3ldlUPkw2nM

                    Create a working config
                    How to add modules

                    R 1 Reply Last reply Reply Quote 2
                    • R Offline
                      robmcc83 @Mykle1
                      last edited by

                      @Mykle1 that’s cool as :) what are you using for the voice command I love that its brill.

                      Mykle1M 1 Reply Last reply Reply Quote 0
                      • Mykle1M Offline
                        Mykle1 Project Sponsor Module Developer @robmcc83
                        last edited by

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

                        https://github.com/mykle1/Hello-Lucy

                        Create a working config
                        How to add modules

                        1 Reply Last reply Reply Quote 1
                        • 1
                        • 2
                        • 3
                        • 2 / 3
                        • First post
                          Last post
                        Enjoying MagicMirror? Please consider a donation!
                        MagicMirror created by Michael Teeuw.
                        Forum managed by Sam, technical setup by Karsten.
                        This forum is using NodeBB as its core | Contributors
                        Contact | Privacy Policy