Turn off screen of Android device

Hi, I have an Android smartphone with the Home Assistant Companion app installed. It’s battery charging circuit has failed, so I modified it to work without a battery.
I want to keep the screen on if there is movement in the room it’s in, and turn it off if there isn’t.
To keep the screen on (but at minimum brightness unless someone touches it), I use Caffeine Tile.
To turn the screen on, I use the command_screen_on notification command. (I have no screen lock set.)
To detect if the screen is on, I use the Interactive sensor.
However, I can’t figure out how to turn the screen off.

My template switch that I control with an automation:

switch:
  - platform: template
    switches:
      pixel_screen:
        value_template: >-
          {{ is_state('binary_sensor.term_pixel_2_interactive', 'on') }}
        turn_on:
          service: notify.mobile_app_term_pixel_2
          data:
            message: command_screen_on
            data:
              # needed to make sure the notification is received after long
              # inactivity
              ttl: 0
              priority: high
        # TODO turn the screen off
        turn_off:
          service: script.dummy
        icon_template: "mdi:cellphone"

Any suggestions?

there is no way to turn off the screen, just set a proper screen timeout in android settings and go by that

Thanks for the reply.

If I used the standard screen timeout, the screen would stay at standard brightness. I don’t want to cause burn-in of the AMOLED display. With that caffeine thing, the screen stays at minimal brightness (same as in the last seconds before it completely turns off when using the standard screen timeout) until I touch it, and then it goes to standard brightness.

Have you looked at the Tasker app? You can do all kinds of customizations and automations on Android.

Yes, I know Tasker. That’s my backup plan. I wanted to use only free and open source software if possible (and avoid adding my Google account to that device).

Another option you can look into is the Wallpanel app, which is also open-source or available on Google Play store. It supports MQTT where you can send commands to turn on the screen, but I wasn’t able to turn off the screen using MQTT. There is a feature to dim the screen by 99% after a set period of inactivity. It’s not exactly what you’re looking for but maybe you can make it work.

thanksmister/wallpanel-android: WallPanel is an Android application for Web Based Dashboards and Home Automation Platforms (github.com)

1 Like

Thanks, WallPanel seems to work quite well. I’ll experiment with it.

This may help or give you inspiration:

This basically (ab)uses the fact that playing a video on Android keeps the screen from turning off, right?
I don’t think this will help here, because it would also keep the screen at full brightness. I don’t want to do that because of AMOLED display burn-in.
Thanks for the suggestion though.

Yeah it (ab)uses iframes to keep the screen on, but you can also do that with command notifications or wallpanel mqtt. Command notifications need to be resent every x minutes depending on what time out you set on the tablet, and to turn it off, just dont use that caffeine tile and let the timeout timer elapse. Wake the screen whenever there is motion again, or the lights go on.

I use that method on out two tablets.

I send a message to the tablet with topic “turn off” and message “turn off” and tasker reacts on it to switch it off.
Then I have a boolean that is the condition of an automation, and the trigger is the screen interactive on.

When all that is combined, it’s a way to make your kids stop using the tablets (or phones).

I think I already have what I want with WallPanel, although it’s still quite a mess because I haven’t had time to completely move away from Home Assistant Companion yet.
I don’t use Caffeine Tile, and I have the screen timeout set to 5 minutes. I have an automation that sends command_screen_on every 290 seconds.
I still have the Home Assistant Companion app running in background, and use that to get the “interactive” sensor status and to handle command_screen_on notifications.
I have configured WallPanel to reduce screen brightness by 99% after 15 seconds. This way, the screen is at minimal brightness most of the time, and all I need to do to wake it up is to touch it.

Thank you all for your help.