Expand obs window to full dark+moon period; label with illumination%

moon_phase.py: add sun_altaz() to compute sun altitude for dark-sky check

moon_phase_monthly.py:
- Replace fixed 22:00-23:00 window with dynamic dark+moon intervals:
  sample every 10 min across ±24h of the phase moment, keep blocks where
  sun < DARK_SKY_SUN_ALT_DEG and moon > MIN_ALTITUDE — covers the full
  night the moon is actually visible in a dark sky regardless of month
- First east frame with quality >= MIN_QUALITY in that window wins
- Illumination% computed at the detection time and shown in the image
  caption and Mattermost message
- Remove OBS_TIME_H/M; add DARK_SKY_SUN_ALT_DEG config var

sky-cam.conf: replace MOON_OBS_TIME_LOCAL with MOON_DARK_SKY_SUN_ALT_DEG=-6
and explain the sun-altitude threshold options

https://claude.ai/code/session_01HkTxpNSTWtViZzxbrbKytR
This commit is contained in:
Claude
2026-05-01 22:32:16 +00:00
parent a6989a9ea8
commit 3fc77ab75e
3 changed files with 109 additions and 82 deletions
+14 -12
View File
@@ -491,19 +491,21 @@ MOON_TRACK_FPS=12 # output mp4 framerate
MOON_TRACK_CRF=24 # output mp4 CRF
MOON_TRACK_RETENTION_DAYS=90 # delete tracker mp4s older than this; 0 = forever
# Observation time ────────────────────────────────────────────────────────────
# Local time that defines the observation window: MOON_OBS_TIME_LOCAL to
# MOON_OBS_TIME_LOCAL+1h. East frames in this window are checked for a clear
# moon detection (quality >= MOON_MIN_QUALITY). If any frame qualifies, the
# NASA Dial-a-Moon image for MOON_OBS_TIME_LOCAL UTC is fetched and posted.
# If no frame shows a clear moon, the month is skipped entirely.
# Dark-sky observation window ─────────────────────────────────────────────────
# The script searches ±24h around the exact phase moment for east frames where:
# 1. The sun is below MOON_DARK_SKY_SUN_ALT_DEG (sky is dark)
# 2. The moon is above MOON_MIN_ALTITUDE_DEG (moon is visible above trees)
#
# 22:00 aligns directly with NASA's hourly renders. Full moon and third
# quarter both rise after dark and are visible at this hour. First quarter
# is up only until ~midnight from a new-moon start, so it may not be visible
# at 22:00 depending on the exact date — set MOON_FIRST_QUARTER_ENABLED=false
# if first-quarter posts are consistently missed.
MOON_OBS_TIME_LOCAL=22:00
# Sun altitude thresholds:
# -6 civil twilight — noticeably dark, bright stars visible (default)
# -12 nautical — horizon barely visible
# -18 astronomical — fully dark, no twilight glow
#
# The first east frame in that window with quality >= MOON_MIN_QUALITY is used.
# Its exact timestamp drives the NASA Dial-a-Moon fetch (rounded to nearest hour)
# and the parallactic angle rotation. The caption shows illumination% at that
# moment. If no clear frame is found, the month is skipped entirely.
MOON_DARK_SKY_SUN_ALT_DEG=-6
# Post delay ──────────────────────────────────────────────────────────────────
# How many days after the exact phase to run the post. The post delay gives