dim screen in a smooth way

main
Hendrik Sokolowski 2024-03-25 05:11:03 +01:00
parent 2d002979ea
commit 0fe090ae12
1 changed files with 26 additions and 14 deletions

View File

@ -13,13 +13,13 @@ import ha_mqtt_discoverable
import sensors
class BrightnessMode(enum.Enum):
MODE_OFF = 0
MODE_DIM = 1
MODE_BRIGHT = 2
MODE_AUTO_OFF = 0
MODE_AUTO_DIM = 1
MODE_AUTO_BRIGHT = 2
class InputListener():
last_input = 0
brightness_mode = BrightnessMode.MODE_OFF
brightness_mode = BrightnessMode.MODE_AUTO_OFF
def get_last_input(self):
return self.last_input
@ -37,21 +37,33 @@ class InputListener():
self.last_input = now
async def dim_screen(self, to_value):
from_value = 0
if self.brightness_mode == BrightnessMode.MODE_AUTO_DIM:
from_value = 5
elif self.brightness_mode == BrightnessMode.MODE_AUTO_BRIGHT:
from_value = 50
step_val=(to_value-from_value)/25
for i in range(1, 25):
new_val = "{:.0f}".format(from_value + i*step_val)
await asyncio.create_subprocess_exec('brightnessctl', 'set', f'{new_val}%', stdout=asyncio.subprocess.DEVNULL, stderr=asyncio.subprocess.DEVNULL)
await asyncio.sleep(0.005)
async def brightness_loop(self, logger):
logger.info('starting brightess loop')
while True:
if self.last_input + 30 < time.time():
if self.brightness_mode != BrightnessMode.MODE_OFF:
await asyncio.create_subprocess_exec('brightnessctl', 'set', '0', stdout=asyncio.subprocess.DEVNULL, stderr=asyncio.subprocess.DEVNULL)
self.brightness_mode = BrightnessMode.MODE_OFF
if self.brightness_mode != BrightnessMode.MODE_AUTO_OFF:
await self.dim_screen(0)
self.brightness_mode = BrightnessMode.MODE_AUTO_OFF
elif self.last_input + 15 < time.time():
if self.brightness_mode != BrightnessMode.MODE_DIM:
await asyncio.create_subprocess_exec('brightnessctl', 'set', '5%', stdout=asyncio.subprocess.DEVNULL, stderr=asyncio.subprocess.DEVNULL)
self.brightness_mode = BrightnessMode.MODE_DIM
elif self.brightness_mode != BrightnessMode.MODE_BRIGHT:
await asyncio.create_subprocess_exec('brightnessctl', 'set', '50%', stdout=asyncio.subprocess.DEVNULL, stderr=asyncio.subprocess.DEVNULL)
self.brightness_mode = BrightnessMode.MODE_BRIGHT
await asyncio.sleep(29)
if self.brightness_mode != BrightnessMode.MODE_AUTO_DIM:
await self.dim_screen(5)
self.brightness_mode = BrightnessMode.MODE_AUTO_DIM
elif self.brightness_mode != BrightnessMode.MODE_AUTO_BRIGHT:
await self.dim_screen(50)
self.brightness_mode = BrightnessMode.MODE_AUTO_BRIGHT
await asyncio.sleep(0.1)