• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
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 22.4k 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.
  • M Offline
    Mykle1 Project Sponsor Module Developer @robmcc83
    last edited by Mykle1 Jan 20, 2018, 2:29 PM Jan 20, 2018, 2:26 PM

    @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

    M 1 Reply Last reply Jan 21, 2018, 1:03 AM Reply Quote 2
    • C Offline
      cruunnerr
      last edited by cruunnerr Jan 20, 2018, 9:12 PM Jan 20, 2018, 2:53 PM

      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

      M J 2 Replies Last reply Jan 20, 2018, 3:13 PM Reply Quote 1
      • M Offline
        Mykle1 Project Sponsor Module Developer @cruunnerr
        last edited by Jan 20, 2018, 3:13 PM

        @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 Jan 20, 2018, 5:11 PM

          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 Jan 20, 2018, 5:19 PM

            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
            • C Offline
              cruunnerr
              last edited by cruunnerr Jan 20, 2018, 8:09 PM Jan 20, 2018, 5:52 PM

              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 Jan 20, 2018, 6:25 PM

                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
                • M Offline
                  Mykle1 Project Sponsor Module Developer @Mykle1
                  last edited by Mykle1 Jan 21, 2018, 1:56 AM Jan 21, 2018, 1:03 AM

                  @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 Jan 21, 2018, 4:06 PM Reply Quote 2
                  • R Offline
                    robmcc83 @Mykle1
                    last edited by Jan 21, 2018, 4:06 PM

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

                    M 1 Reply Last reply Jan 21, 2018, 5:02 PM Reply Quote 0
                    • M Offline
                      Mykle1 Project Sponsor Module Developer @robmcc83
                      last edited by Jan 21, 2018, 5:02 PM

                      @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
                      2 / 3
                      • First post
                        17/27
                        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