Nordlys

A clean, config-first weather dashboard for weewx.

The entire dashboard - pages, layout, tiles, charts, theme - is configured from skin.conf. No template or JavaScript edits are ever needed.

MIT · 62.2 KB of JavaScript, gzipped · Runs on your own hardware

The dashboard

Aldersundet weatherAldersundet, Lurøy, Norway

Outside temperature

13.6°C

9.815.2+0.4 /h

Feels like

12.1°C

8.213.9

Barometer

1012.4hPa

1011.8-1.2 /h

Wind speed

4.2m/s

gust 6.47.1

Temperature · last 24 hours

9.515.5 °C

Humidity

79%0100
68 13:2293 03:50

Polar night

Outside temperature

13.6°C

9.8 · ↑ 15.2

Arctic daylight

Outside temperature

13.6°C

9.8 · ↑ 15.2

Both themes ship. The dashboard follows the visitor’s system preference, or you can pin one in skin.conf. The tiles above are rendered here from Nordlys’s own design tokens and its fixtures/today.json demo data - the real dashboard is live at weather.al199.no.

Configured, not coded

A page is a list of rows. A row is a list of tiles. A tile is a type plus a handful of options. That is the whole model, and it lives entirely in one file.

There are ten tile types and six chart types, so most changes are a line of config rather than a component. Sensors you do not have hide themselves. Bad config is skipped and logged rather than breaking the report.

Colours, spacing and type are design tokens, so re-theming means overriding a variable - not forking a stylesheet.

skin.conf

[[[[charts]]]]
    title = Last 24 hours
    columns = 2
    [[[[[temperature]]]]]
        type = chart
        chart = line
        span = 24h
        obs = outTemp, dewpoint, appTemp
        title = Temperature

That block is the chart above.

The numbers

Core bundle

62.2KB

gzipped, uPlot included

Stylesheet

4.9KB

gzipped

MQTT client

109KB

lazy, only when live is configured

Drop shadows

0

in the entire source

Measured at v0.4.2, under budgets enforced by a check in CI.

What ships

Pages

  • Today, yesterday, week, month, year, climate, celestial and archive
  • Generated per-week, per-month and per-year archive pages
  • Every page is a real HTML file: bookmarkable, indexable, works without JavaScript

Tiles

  • Ten tile types: gauge, stat, chart, table, climatology, celestial, forecast, reports, history and text
  • Sensors you do not have hide themselves, with no configuration
  • Thresholds colour a value when it crosses them

Charts

  • Line, area, bar, scatter, wind rose and calendar heatmap
  • Spans from 24 hours to a year, with a second axis for overlays like rain rate
  • Drawn with uPlot and hand-rolled SVG, themed from the same tokens as everything else

Data

  • Sixteen observations wired up by default
  • NOAA monthly and yearly text reports
  • A Zambretti forecast computed locally from your own barometer
  • Nordic climatological days: frost, ice, summer and tropical days, tropical nights, precipitation, growing and storm days

Live and offline

  • Live updates over MQTT, with the client downloaded only when you configure it
  • Installable as a PWA, with a service worker and a web manifest
  • Auto-refresh each time weewx writes a new report

Findable

  • Sitemap, robots.txt and JSON-LD
  • Per-station social cards rendered server-side, showing current conditions

Install

Terminal

weectl extension install weewx-nordlys-0.4.2.zip
weectl report run

Nordlys installs as a weewx extension. The report is written to HTML_ROOT/nordlys/ and regenerates on each archive interval.

pip install ephem is optional and unlocks the full Celestial page. Without it the celestial tiles still show sunrise, sunset, day length and moon phase.

Everything else is configuration: the configuration reference covers every option, and the theming guide covers the tokens.