#!/usr/bin/env python3 from datetime import datetime import pathlib import re import pytz from suntime import Sun _here = pathlib.Path(__file__).resolve().parent def _read_conf(path): conf = {} try: with open(path) as f: for line in f: line = line.strip() if not line or line.startswith('#') or '=' not in line: continue k, v = line.split('=', 1) k = k.strip() v = v.strip() v = re.sub(r'\s+#.*$', '', v) # strip inline comments v = v.strip('"').strip("'") # Extract default from bash ${VAR:-default} pattern m = re.match(r'^\$\{[^}]+:-([^}]*)\}$', v) if m: v = m.group(1).strip('"').strip("'") conf[k] = v except FileNotFoundError: pass return conf conf = _read_conf(_here / 'sky-cam.conf') # .env overrides sky-cam.conf — mirrors the sourcing order at the bottom of sky-cam.conf conf.update(_read_conf(_here / '.env')) for _key in ('LATITUDE', 'LONGITUDE', 'TIMEZONE'): if not conf.get(_key): raise SystemExit(f"sunrise.py: {_key} not set in sky-cam.conf or .env") latitude = float(conf['LATITUDE']) longitude = float(conf['LONGITUDE']) tz = pytz.timezone(conf['TIMEZONE']) sun = Sun(latitude, longitude) now = datetime.now(tz) sunrise_utc = sun.get_sunrise_time(now) sunrise_time = sunrise_utc.astimezone(tz) print(sunrise_time.strftime('%Y-%m-%d %H:%M:%S'))