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.
    • 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
                      • J Offline
                        Jonae @cruunnerr
                        last edited by

                        @cruunnerr i made your tutorial, works like charm! only problem i found is: replaced print “.”, with: print (“.”), Thenks!

                        J 1 Reply Last reply Reply Quote 0
                        • 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