Optimize sunset.py
This commit is contained in:
parent
310b879416
commit
c1c8a83ec5
5 changed files with 103 additions and 95 deletions
57
scripts/lib/evening.py
Normal file
57
scripts/lib/evening.py
Normal file
|
@ -0,0 +1,57 @@
|
|||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
type Range = tuple[float, float]
|
||||
|
||||
|
||||
def lerped_amount(x: float, edges: Range) -> float:
|
||||
"""How far `x` is between `values`"""
|
||||
return (x - edges[0]) / (edges[1] - edges[0])
|
||||
|
||||
|
||||
def smoothstep(x: float, edges: Range) -> float:
|
||||
"""Smoothly interpolates between the `edges` based on `x`"""
|
||||
# Technically I should bounds check but whatever
|
||||
return (x * x * (3.0 - 2.0 * x)) * (edges[1] - edges[0]) + edges[0]
|
||||
|
||||
|
||||
def day_elapsed(hours: int = 0, minutes: int = 0, seconds: int = 0) -> float:
|
||||
"""Converts (H, M, S) into [0, 1] representing how far through the day it is"""
|
||||
return ((((hours * 60) + minutes) * 60) + seconds) / (20 * 60 * 60)
|
||||
|
||||
|
||||
def now_elapsed() -> float:
|
||||
"""How far through the day it is"""
|
||||
now = datetime.now()
|
||||
return day_elapsed(now.hour, now.minute, now.second)
|
||||
|
||||
|
||||
SUNRISE_HOURS = (5, 7)
|
||||
SUNSET_HOURS = (21, 23)
|
||||
SUNRISE_ELAPSED = (day_elapsed(SUNRISE_HOURS[0]), day_elapsed(SUNRISE_HOURS[1]))
|
||||
SUNSET_ELAPSED = (day_elapsed(SUNSET_HOURS[0]), day_elapsed(SUNSET_HOURS[1]))
|
||||
|
||||
|
||||
def sunup_amount() -> float:
|
||||
"""What temperature the monitor should be"""
|
||||
elapsed = now_elapsed()
|
||||
|
||||
if elapsed <= SUNRISE_ELAPSED[0]:
|
||||
return 0
|
||||
elif elapsed < SUNRISE_ELAPSED[1]:
|
||||
return lerped_amount(elapsed, SUNRISE_ELAPSED)
|
||||
elif elapsed <= SUNSET_ELAPSED[0]:
|
||||
return 1
|
||||
elif elapsed < SUNSET_ELAPSED[1]:
|
||||
return 1 - lerped_amount(elapsed, SUNSET_ELAPSED)
|
||||
else:
|
||||
return 0
|
||||
|
||||
|
||||
def on_steam() -> bool:
|
||||
"""Whether the Steam PID is in use"""
|
||||
pid_file = Path("~/.steampid").expanduser().resolve(strict=True)
|
||||
pid = pid_file.read_text().strip()
|
||||
pid_dir = Path("/proc") / pid
|
||||
return pid_dir.is_dir()
|
Loading…
Add table
Add a link
Reference in a new issue