From 86538e9e4111e7bc09310e74a87728a3947de386 Mon Sep 17 00:00:00 2001 From: Alessandro Mauri Date: Sun, 6 Oct 2024 16:35:20 +0200 Subject: [PATCH] automatic user offset reduction for large brightness changes --- ambient.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/ambient.py b/ambient.py index 51ad8d4..20ca6d8 100755 --- a/ambient.py +++ b/ambient.py @@ -33,35 +33,41 @@ with open('/sys/class/backlight/intel_backlight/max_brightness', 'r') as f: max_brightness = int(f.read()) min_brightness = int(max_brightness * 0.05) +# loop delay in seconds +delay = 3 lum = [get_luminance()]*4 user_offset = 0 +brightness_target = min_brightness +brightness_old = min_brightness while True: lum.append(lum.pop(0)) lum[0] = get_luminance() luminance = sum(lum)/len(lum) luminance_percent = min(luminance/max_luminance, 1.0) + brightness_old = brightness_target brightness_target = max(int(luminance_percent * max_brightness), min_brightness) + brightness_delta = abs((brightness_target - brightness_old)/brightness_old) - brightness_adjusted = min(max(brightness_target+user_offset, min_brightness), max_brightness) + # if the brightness changes by more than 10% reduce the user offset, scaling + # with the delta, this accounts for large changes in brightness no longer + # corresponding to the adjustments that the user made to the brightness + if brightness_delta > 0.1: + user_offset = int(user_offset * max(min(1-(brightness_delta*1.2), 1), 0)) + + brightness_adjusted = min(max(brightness_target + user_offset, min_brightness), max_brightness) b = open('/sys/class/backlight/intel_backlight/brightness', 'w') b.write(str(brightness_adjusted)) b.close() - time.sleep(3) + time.sleep(delay) # if the value of the brightness changed then update the user offset - # TODO: if the brightness remains stable within a range then apply the full - # offset, else ease out the offset back to zero. - # example: full brightness but the user chooses to tune it down, when - # full brightness is no longer needed tune the offset down a = open('/sys/class/backlight/intel_backlight/actual_brightness') x = int(a.read()) - brightness_target a.close() if brightness_target != max_brightness or x < 0: user_offset = x - print("brightness target: ", brightness_target, "user offset: ", user_offset, "brightness adjusted: ", brightness_adjusted) - #print(luminance, luminance_percent, brightness) - + #print("brightness target: ", brightness_target, "user offset: ", user_offset, "brightness adjusted: ", brightness_adjusted)