Skip to main content

heinzel-weather

Weather where you are, keyless by default from Open-Meteo: now, the next hours and days, and a heads-up when it changes. Bring an OpenWeather key instead if you prefer it. A plugin for Heinzelmännchen.

Install it with:

hz system plugin add weather --confirm
hz setup weather    # your places and the units (and the provider; Open-Meteo needs no key); the app: Settings > Weather
# With no place set, the city of your time zone is used until you set one.

Open-Meteo needs no account and no key. Its data is licensed CC BY 4.0 and free for non-commercial use, so it is credited wherever the weather shows: in the status item's detail, on the Today list and graphic, in CLI output and structured results, and in notices. It has no severe weather alerts. Location queries are redacted from request logs; an Open-Meteo response is stopped after 2 MB instead of downloading an unbounded body.

With weather.provider = "openweather" the API key is a credential, kept in your keychain (hz system credential set weather.api-key) or read from HZ_CREDENTIAL_WEATHER_API_KEY, else OPENWEATHER_API_KEY; never from a config file. It needs OpenWeather's One Call API 3.0, free up to 1,000 calls a day once you subscribe to it at openweathermap.org; it also brings severe weather alerts.

In the web app

Contributed as data (ADR 0056), nothing to install on the app's side:

  • A status item in the footer and the sidebar: the temperature and sky, with the place, feels-like, what the Heinzelmännchen wears and the attribution on hover; "Change place" opens Settings > Weather; nothing is typed into a terminal.
  • Today: a graphic with the temperature beside the Heinzelmännchen dressed for the weather (an umbrella in or near rain, sunglasses in clear daylight, a scarf in the cold), and a list of the next days with the attribution.
  • Notices (the daemon's weather.watch job) when rain starts within the hour, the temperature swings or, with OpenWeather, an alert is issued.

Until a place is set, the status item says "Set a location".

Use

Surface CLI MCP tool REST (hz system serve api, and /api/... in hz ui)
The weather now at your primary location, with today's high, low and rain chance hz weather weather GET /weather
Current weather and its coordinates, the next 12 hours, 5 days and severe weather alerts hz weather show [--location PLACE] weather_show GET /weather/show?location=...
The next days hz weather forecast [--location PLACE] [--days N] weather_forecast GET /weather/forecast
What the app shows: the weather now, the days, what to wear, the attribution hz weather conditions weather_conditions GET /weather/conditions
Shared timestamped report and candidate changes, without notices hz weather observe weather_observe GET /weather/observe
The provider, the plugin version and the attribution the data asks for hz weather info weather_info GET /weather/info
What a theme can follow: the weather in one word, sunrise, sunset hz weather signals weather_signals GET /weather/signals
Notices when rain starts within the hour, the temperature swings, or an alert is issued the daemon's weather.watch job
Whether a place (and, with OpenWeather, a key) is set hz system doctor system_doctor GET /system/doctor

Every command takes --json. A place is a city and country ("Lisbon, PT") or coordinates ("38.72,-9.14").

In hz ui, Weather adds a condition and temperature status item to the footer and sidebar, a detailed Today card, and a Weather entry under Settings. The status and card share one plugin observation, refreshed every 15 minutes; if a refresh fails, they keep the last observation and mark it stale. The Settings/sidebar entry opens the full forecast command.

Settings

Key Default
weather.provider open-meteo open-meteo (no key) or openweather (your key)
weather.locations none Your places, yours first
weather.units by locale metric or imperial
weather.refresh_minutes 15 How often the job checks the forecast
weather.rain_chance 0.5 From which chance rain within the hour is news
weather.temperature_swing 8 Degrees within 12 hours that are news
weather.base_url https://api.openweathermap.org OpenWeather only: https, or http on 127.0.0.1 for the fake below

Notices are de-duplicated: each change once, and rain at most once in three hours per place.

Try OpenWeather offline: the fake OpenWeather

python -m heinzel_weather.fake --port 8787 &
HZ_WEATHER__PROVIDER=openweather HZ_WEATHER__BASE_URL=http://127.0.0.1:8787 HZ_WEATHER__LOCATIONS='["Berlin, DE"]' OPENWEATHER_API_KEY=fake hz weather show

Fixed weather relative to the current hour: 21.5 °C and clear now, rain from the next hour, a thunderstorm warning. The tests and the docs' recordings use the same fake (heinzel_weather.fake).

Development and release commands: repository guide.

Observations and trend advice

hz weather observe --json is a read-only report for workflows; it does not send notices. The plugin also ships the weather-trend skill: hz system skill show weather-trend. Details: ADR 0002.

Screenshots

Current weather and the coming days on Today — fictional Berlin forecast

Current weather and the coming days on Today — fictional Berlin forecast

Inspect conditions, feels-like temperature and rain chance — fictional local forecast

Inspect conditions, feels-like temperature and rain chance — fictional local forecast

Weather and near forecast in the phone-sized Today view — fictional local forecast

Weather and near forecast in the phone-sized Today view — fictional local forecast

Command line Hourly conditions and approaching rain through the real CLI — local fictional forecast

Hourly conditions and approaching rain through the real CLI — local fictional forecast

A concise three-day outlook through the real CLI — local fictional forecast

A concise three-day outlook through the real CLI — local fictional forecast

Open the screenshot gallery.

Metadata

Release files for heinzel-weather 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for heinzel-weather 0.4.1
File Size Uploaded Provenance Actions
heinzel_weather-0.4.1.tar.gz 625.5 kB Without provenance Details for heinzel_weather-0.4.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for heinzel-weather 0.4.1
File Interpreter ABI Platform Actions
heinzel_weather-0.4.1-py3-none-any.whl Python 3 none any Details for heinzel_weather-0.4.1-py3-none-any.whl

Total release size: 662.2 kB

Release files / heinzel_weather-0.4.1.tar.gz

Download URL heinzel_weather-0.4.1.tar.gz
Size 625.5 kB
Tags Source
SHA-256 checksum
How to use checksums
93efe456955fd06113cc8182ab81d66c384defd89d28074aae17e6c6469596ea
BLAKE2b-256 checksum
How to use checksums
ae235c5d548b12e6162f8bdb9b2cf034b79137101f6506e62670f51a4d7c111a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / heinzel_weather-0.4.1-py3-none-any.whl

Download URL heinzel_weather-0.4.1-py3-none-any.whl
Size 36.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2907a1201fcaed0d81b22bb131fe54054f4b5aa965959c9079fa26aa318adb33
BLAKE2b-256 checksum
How to use checksums
18662ef0107365f2e30df7840ee9fad2e0ffaf98b91887066fb3bff8b71efaea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for heinzel-weather 0.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page