Skip to main content

CHANGELOG.md

# Changelog

All notable changes to this project are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0] - 2024-07-03

First public release.

### Added

- `sonnenstand` module with the public API: `day_of_year/1`, `declination/1`,
  `equation_of_time/1`, `hour_angle/2`, `elevation/3`, and `azimuth/3`.
- Type specs and EDoc documentation for all public functions.
- EUnit test suite, including reference values for Berlin and a regression test
  for the azimuth quadrant.
- Validation suite against the NOAA Solar Calculator (Berlin, Johannesburg, and
  Sydney at the solstices and equinoxes), confirming solar noon to within ~30 s
  and sunrise/sunset to within a few minutes. See `test/sonnenstand_noaa_tests.erl`.
- `rebar3` project setup with Dialyzer and `ex_doc` configuration.

### Changed

- English public API replacing the previous mixed German/English names
  (`hoehe` → `elevation`, `azimut` → `azimuth`, `zeitgleichung` →
  `equation_of_time`, `stundenwinkel` → `hour_angle`).
- Degree-to-radian conversion now uses `math:pi()/180` instead of a hardcoded
  constant, improving precision.
- Date/time inputs are now interpreted as **UTC** (the original algorithm was
  fixed to the 15° E / UTC+1 meridian). The seconds component of the time is
  now taken into account.

### Fixed

- Azimuth quadrant bug: afternoon azimuths were mirrored onto the morning
  (eastern) side because `math:acos/1` only returns `0..180°`. Azimuths now
  correctly fall in the western half after solar noon.

### Removed

- Unused OTP application/supervisor scaffolding (`sonnenstand_app`,
  `sonnenstand_sup`); `sonnenstand` is now a pure library application.
- Exploratory `playground_calendar/0` function.