switch off display via xorg.xset
parent
0d085862db
commit
5281b56eef
|
@ -14,6 +14,7 @@
|
|||
src = ./src;
|
||||
propagatedBuildInputs = with pkgs.python311Packages; [
|
||||
pkgs.brightnessctl
|
||||
pkgs.xorg.xset
|
||||
|
||||
coloredlogs
|
||||
configargparse
|
||||
|
@ -27,6 +28,7 @@
|
|||
name = "development shell";
|
||||
nativeBuildInputs = with pkgs.python311Packages; [
|
||||
pkgs.brightnessctl
|
||||
pkgs.xorg.xset
|
||||
|
||||
coloredlogs
|
||||
configargparse
|
||||
|
|
|
@ -24,6 +24,7 @@ class DisplayBrightnessManager():
|
|||
brightness_level = BrightnessLevel.LEVEL_BRIGHT
|
||||
mqtt_entity = None
|
||||
|
||||
display_switched_off = False
|
||||
touch_device = None
|
||||
logger = None
|
||||
|
||||
|
@ -74,6 +75,17 @@ class DisplayBrightnessManager():
|
|||
self.brightness_mode_new = mode
|
||||
logging.info(f'brightness mode: {self.brightness_mode}, new mode: {self.brightness_mode_new}')
|
||||
|
||||
def switch_display_on(self):
|
||||
self.logger.info('switching screen on')
|
||||
self.display_switched_off = False
|
||||
await asyncio.create_subprocess_exec('xset dpms force on')
|
||||
|
||||
def switch_display_off(self):
|
||||
self.logger.info('switching screen off')
|
||||
self.display_switched_off = True
|
||||
await asyncio.create_subprocess_exec('xset dpms force off')
|
||||
|
||||
|
||||
async def input_device_loop(self):
|
||||
async for ev in self.touch_device.async_read_loop():
|
||||
now = time.time()
|
||||
|
@ -89,17 +101,24 @@ class DisplayBrightnessManager():
|
|||
elif self.brightness_level == BrightnessLevel.LEVEL_BRIGHT:
|
||||
from_value = 50
|
||||
|
||||
step_val=(to_value-from_value)/25
|
||||
for i in range(1, 25):
|
||||
if to_value != 0 and self.display_switched_off:
|
||||
self.switch_display_on()
|
||||
|
||||
self.logger.info(f'dimming screen from {from_value} to {to_value}')
|
||||
step_val=(to_value-from_value)/20
|
||||
for i in range(1, 20):
|
||||
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)
|
||||
|
||||
if to_value == 0:
|
||||
self.switch_display_off()
|
||||
|
||||
async def brightness_loop(self):
|
||||
self.logger.info('starting brightness loop')
|
||||
while True:
|
||||
if self.brightness_mode != self.brightness_mode_new:
|
||||
self.logger.info(f'brightness mode changede to {self.brightness_mode_new}')
|
||||
self.logger.info(f'brightness mode changed to {self.brightness_mode_new}')
|
||||
if self.brightness_mode_new == BrightnessMode.MODE_MAN:
|
||||
await self.dim_screen(50)
|
||||
self.brightness_level = BrightnessLevel.LEVEL_BRIGHT
|
||||
|
@ -108,6 +127,7 @@ class DisplayBrightnessManager():
|
|||
self.brightness_mode = self.brightness_mode_new
|
||||
|
||||
if self.brightness_mode == BrightnessMode.MODE_AUTO:
|
||||
self.logger.debug(f'brightness loop begin: {self.last_input}, {time.time()}')
|
||||
if self.last_input + 30 < time.time():
|
||||
if self.brightness_level != BrightnessLevel.LEVEL_OFF:
|
||||
await self.dim_screen(0)
|
||||
|
|
|
@ -25,11 +25,11 @@ async def main():
|
|||
parser.add_argument("--debug", action='store_true', default=False)
|
||||
parser.add_argument("--device-id", dest='device_id', default=os.environ.get('DEVICE_ID'), required=True)
|
||||
parser.add_argument("--device-name", dest='device_name', default=os.environ.get('DEVICE_NAME'), required=True)
|
||||
parser.add_argument("--display-device", dest='display_device', default=os.environ.get('DISPLAY_DEVICE'))
|
||||
parser.add_argument("--mqtt-host", dest='mqtt_host', default=os.environ.get('MQTT_HOST', 'localhost'))
|
||||
parser.add_argument("--mqtt-port", dest='mqtt_port', default=os.environ.get('MQTT_PORT', 1883))
|
||||
parser.add_argument("--mqtt-user", dest='mqtt_user', default=os.environ.get('MQTT_USER'))
|
||||
parser.add_argument("--mqtt-pass", dest='mqtt_pass', default=os.environ.get('MQTT_PASS'))
|
||||
parser.add_argument("--touch-device", dest='touch_device', default=os.environ.get('TOUCH_DEVICE'))
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
@ -63,8 +63,8 @@ async def main():
|
|||
|
||||
|
||||
tasks = []
|
||||
if args.display_device:
|
||||
dbm = DisplayBrightnessManager(device, args.display_device, logger)
|
||||
if args.touch_device:
|
||||
dbm = DisplayBrightnessManager(device, args.touch_device, logger)
|
||||
tasks.append(dbm.run())
|
||||
|
||||
tasks.append(sensor_loop(logger, sensor_entities))
|
||||
|
@ -73,4 +73,4 @@ async def main():
|
|||
await asyncio.gather(*tasks)
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
asyncio.run(main())
|
||||
|
|
Loading…
Reference in New Issue