• 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 20.9k 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.
  • R Offline
    robmcc83
    last edited by Jan 17, 2018, 9:37 AM

    Yeah cheers I’m aware of that, it’s just monitor uses 37w whilst on and 2w in standby so I really don’t mind it being in standby at night.
    I think I’m going to look into mmm-remote as trying the other method using vgenmcd power makes my screensaver come back to life even though it’s Been disabled for the last 8 months.
    Is there any tutorials anywhere in setting up mmm-schedule and mmm-remote.
    Cheers all

    1 Reply Last reply Reply Quote 0
    • R Offline
      robmcc83
      last edited by Jan 20, 2018, 11:27 AM

      Ok so after trying various ways to get my monitor to turn off I have still been unsuccessful.
      What I am trying now is with a webcam.
      I found in my box of computer bits a Microsoft lifecam hd 3000.
      After a little Google research I can confirm the webcam works with the pi using motion software.
      I also found a site explaining how I can add a start and and event on detection so I set vgencmd display_power 1 as start event and vgencmd display_power 0 as end event but still no luck it just keeps display on but if I enter the command in terminal my display turns on/off as it should.
      Am I going about this in the most awkward way or is there a simple way to get the monitor to sleep using the usb webcam.
      Thanks in advance

      M 1 Reply Last reply Jan 20, 2018, 2:26 PM Reply Quote 0
      • 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
                      • 1
                      • 2
                      • 3
                      • 2 / 3
                      2 / 3
                      • First post
                        11/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