Skip to content

Releases: chaunceygardiner/weewx-loopdata

Release v6.7

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 31 Jul 18:41

weewx-loopdata 6.7

A complete Spanish translation of the sample report ships (Beta).
Drop-in upgrade — install over 6.x; no configuration changes, and every
existing fields line produces the same values as before. Released
alongside weewx-skyfield 1.16 and weewx-celestial 7.7, which ship the
same Spanish for their pages.

What's new

  • Spanish ships (Beta). lang/es.conf is a complete Spanish
    translation of the sample report — gauge headings after the Spanish
    labels of WeeWX's own Seasons skin (Punto de rocío, Barómetro,
    Lluvia, Radiación solar), the nine trend.barometer.desc
    descriptions in the tendency vocabulary of Spanish weather bulletins
    (en ascenso, estable, en descenso), and, for a loopdata
    instance whose target report is Spanish, the compass ordinates
    (N/E/S/O, SSO for SSW), moon phases, body and all 88 constellation
    names — the shared vocabulary in step with weewx-skyfield's and
    weewx-celestial's Spanish (the same cross-repo test that pins the
    German, French and Dutch). Select it with lang = es on the
    report's stanza. Beta pending native-speaker review — corrections
    welcome.

    The sample report in Spanish

Requirements

  • WeeWX 4 or 5 (translations need WeeWX 4.6 or later)
  • Python 3.7 or later
  • No third-party Python packages required

Installing/upgrading

Download weewx-loopdata.zip
and install it over your existing copy, then restart weewxd:

weectl extension install weewx-loopdata.zip

(or wee_extension --install weewx-loopdata.zip on WeeWX 4).

Release v6.6

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 30 Jul 20:13

weewx-loopdata 6.6

Almanac fields can now pin their units, attribute chains walk exactly
as Cheetah walks a report tag, the French translation is out of
Beta, and a complete Dutch translation ships (Beta). Drop-in upgrade —
install over 6.x; no configuration changes,
and every existing fields line produces the same values as before.
Released alongside weewx-celestial 7.5, whose migration utility now
emits the pinned spellings.

What's new

  • Unit segments on almanac fields. Almanac fields complete the
    grammar: like observation fields (day.outTemp.avg.degree_C) and
    station fields (station.altitude.meter.raw) before them, an almanac
    field can carry a unit segment: almanac.sunrise.unix_epoch.raw,
    almanac.sun.visible.second.raw,
    almanac.sun.visible.hour.round(2).raw (the unit sits before
    round(n) and the format spec). It pins the unit no matter what the
    target report's unit settings say. Without one, .raw follows the
    target report's converter — by design, that is report-tag parity — so
    a target report with [Units] [[Groups]] overrides (say
    group_deltatime = hour) turns almanac.sun.visible.raw from seconds
    into hours. Pin the unit on any .raw field your javascript consumes
    numerically. The manual's
    Almanac fields page
    has the full story.

  • Cheetah-exact attribute walking. Almanac and station field chains
    now auto-call exactly as Cheetah's NameMapper walks a tag: a segment
    that resolves to a method or function is called at every dot, not only
    at the end of the chain, and a callable instance is never auto-called
    (Cheetah leaves those alone). Concretely: under weewx-skyfield ≤ 1.14,
    almanac.moon.parallactic_angle.degrees worked as a report tag but
    failed as a loopdata field; now both behave identically.

  • French is out of Beta. lang/fr.conf has been native-speaker
    reviewed, in step with weewx-skyfield's and weewx-celestial's reviewed
    French (a test keeps the three extensions' shared vocabulary
    identical). Select it with lang = fr on the report's stanza.

  • Dutch ships (Beta). lang/nl.conf is a complete Dutch
    translation of the sample report — gauge headings after the Dutch
    labels of WeeWX's own Seasons skin, the nine trend.barometer.desc
    descriptions in the tendency vocabulary of Dutch weather reports
    (stijgend, gelijkblijvend, dalend), and, for a loopdata
    instance whose target report is Dutch, the compass ordinates, moon
    phases, body and all 88 constellation names — the shared vocabulary
    in step with weewx-skyfield's and weewx-celestial's Dutch (the same
    cross-repo test that pins the German and French). Select it with
    lang = nl. Beta pending native-speaker review — corrections
    welcome.

    The sample report in Dutch

Requirements

  • WeeWX 4 or 5 (translations need WeeWX 4.6 or later)
  • Python 3.7 or later
  • No third-party Python packages required

Installing/upgrading

Download weewx-loopdata.zip
and install it over your existing copy, then restart weewxd:

weectl extension install weewx-loopdata.zip

(or wee_extension --install weewx-loopdata.zip on WeeWX 4).

Release v6.5

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 29 Jul 18:45

weewx-loopdata 6.5

A translation release: a complete French translation of the sample
report ships (Beta, awaiting native-speaker review — corrections and
reviewers very welcome). Drop-in upgrade — install over 6.x; an English
or German report looks exactly as before, and there are no field or
configuration changes. Released alongside weewx-skyfield 1.14 and
weewx-celestial 7.4, which add French to their pages.

What's new

  • French ships (Beta). lang/fr.conf is a complete translation:
    the gauge headings follow the French labels of WeeWX's own Seasons
    skin (Point de Rosée, Pression Atmosphérique, Taux de
    Précipitations, …), the nine trend.barometer.desc descriptions use
    the tendency vocabulary of French weather bulletins (en hausse rapide, stationnaire, en baisse lente, …), and the value-side
    sections a French target report serves — compass ordinates, moon
    phases, body and all 88 constellation names — are copied verbatim
    from weewx-skyfield's and weewx-celestial's French (a test keeps the
    three extensions in step, as it does for the German). Select it with
    lang = fr on the report's stanza; as always, the page's labels
    follow the sample report's lang and the live values follow
    loopdata's target report — out of the box the same report, so one
    line switches both (the manual's
    Translations page
    has the full story). Beta until a native speaker has reviewed it;
    corrections are very welcome as issues or pull requests.

Requirements

  • WeeWX 4 or 5 (translations need WeeWX 4.6 or later)
  • Python 3.7 or later
  • No third-party Python packages required

Installing/upgrading

Download weewx-loopdata.zip
and install it over your existing copy, then restart weewxd:

weectl extension install weewx-loopdata.zip

(or wee_extension --install weewx-loopdata.zip on WeeWX 4).

Release v6.4

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 28 Jul 18:36

weewx-loopdata 6.4

A feature release: the sample report is translatable through WeeWX lang
files, and a complete German translation ships. Drop-in upgrade — install
over 6.x; an English report looks exactly as before. The one action
required: if you customized [[BarometerTrendDescriptions]], see below —
that section is removed.

What's new

  • The sample report speaks your language. Every string the page
    renders — gauge headings, the LIVE badge, the readout lines under the
    dials, the compass and windrose cardinal letters — is now a gettext-style
    [Texts] key, translated through WeeWX's own lang-file mechanism. The
    English string is the key, so a partial translation falls back to English
    one string at a time. skins/LoopData/lang/en.conf is the reference
    dictionary; strings the live javascript composes are translated at
    generation time and fed to the script, so a translation touches no code.
  • German ships. lang/de.conf is a complete translation whose shared
    vocabulary is copied verbatim from the native-speaker-reviewed German of
    weewx-skyfield and weewx-celestial (a test keeps the three extensions in
    step). Select it with lang = de on the report's stanza in weewx.conf.
  • The two-language coupling, documented. The page's labels follow the
    sample report's lang, but the live values in loop-data.txt
    (.ordinal_compass, moon_phase, almanac.<body>.label, …) follow the
    language of loopdata's [LoopData] target report. Out of the box the
    two are the same report, and the shipped lang files carry the value-side
    sections (compass ordinates, moon phases, body and all 88 constellation
    names), so lang = de on [[LoopDataReport]] switches both; with a
    different target report, [StdReport] [[Defaults]] lang = de sets every
    report at once. The manual's new
    Translations page
    has the full story.
  • trend.barometer.desc translates the same way — and
    [[BarometerTrendDescriptions]] is gone.
    The descriptions (Falling Slowly, Steady, …) are now gettext-style keys into the target
    report's [Texts], shipped in German in lang/de.conf, so they follow
    the target report's language like every other value.

Action required (only if you customized barometer trend descriptions)

The [LoopData] [[BarometerTrendDescriptions]] section in weewx.conf is
removed and now ignored — delete it. If you had custom wording, put it on
the target report's stanza instead:

[StdReport]
    [[LoopDataReport]]
        [[[Texts]]]
            "Steady" = "Holding steady"

If you never touched the section, there is nothing to do: the English
defaults are unchanged.

Requirements

  • WeeWX 4 or 5 (translations need WeeWX 4.6 or later)
  • Python 3.7 or later
  • No third-party Python packages required

Installing/upgrading

Download weewx-loopdata.zip
and install it over your existing copy, then restart weewxd:

weectl extension install weewx-loopdata.zip

(or wee_extension --install weewx-loopdata.zip on WeeWX 4).

Release v6.3

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 25 Jul 16:55

weewx-loopdata 6.3

A feature release: $station report tags can now be listed as fields, most
usefully a live WeeWX/server uptime that is correct within a packet or two
of a restart. Drop-in upgrade — install over 6.x, no config changes; new
station.* fields are opt-in via the fields line.

What's new

  • Station fields. Any $station report tag can be listed as a field
    with the $ removed: station.uptime.raw,
    station.uptime.long_form(), station.os_uptime.raw,
    station.version, station.location, station.altitude.meter.raw, and
    so on. Values are evaluated against the exact object behind the
    report's $station tag, with loopdata's usual round(n) and format
    specs, so they render as the report would render them.
  • Live, restart-correct uptime. uptime and os_uptime are
    recomputed on every loop packet. The report-cycle workaround — shipping
    $station.uptime.raw in a template and extrapolating in page
    javascript — shows the pre-restart uptime still climbing until the next
    report cycle; a station.uptime.raw loop field is correct within one
    packet. Every other $station attribute is constant for the life of
    the weewxd process and is computed once.
  • Tuple endpoints render as json arrays. A field whose endpoint is a
    tuple of scalars is now emitted as a json array instead of Python's
    str() of the tuple: station.latitude renders as
    ["37", "24.00", "N"] — the same (degrees, minutes, hemisphere) parts a
    template indexes — and an almanac field ending in, e.g., moon_phases
    gets the same treatment.

Requirements

  • WeeWX 4 or 5
  • Python 3.7 or later
  • No third-party Python packages required

Installing/upgrading

Download weewx-loopdata.zip
and install it over your existing copy, then restart weewxd:

weectl extension install weewx-loopdata.zip

(or wee_extension --install weewx-loopdata.zip on WeeWX 4).

Release v6.2

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 25 Jul 01:14

weewx-loopdata 6.2

A small quality release for the sample skin: when the instrument panel
cannot fetch its loop data, it now says so on the page instead of sitting
silently dead. Drop-in upgrade — install over 6.x, no config changes.
(The loopdata service itself is unchanged from 6.1.)

What's new

  • A failed loop-data fetch shows up in the LIVE indicator. When the
    poll for loop_data_file returns anything but the json — the classic
    case being the web server's 404 page, because loopdata writes outside
    HTML_ROOT (say /dev/shm) and nothing on the web server serves that
    path — the indicator now reads NO DATA (HTTP 404) — check loop_data_file (or BAD DATA — check loop_data_file for a response
    that isn't json). A network-level failure shows OFFLINE. Previously
    the only trace was a JSON.parse error in the browser console, and the
    panel just looked dead. A later successful poll rewrites the indicator
    to LIVE, as always. (weewx-celestial 7.1 ships the same change for its
    Geocentric page.)

Requirements

  • WeeWX 4 or 5
  • Python 3.7 or later
  • No third-party Python packages required

Installing/upgrading

Download weewx-loopdata.zip
and install it over your existing copy, then restart weewxd:

weectl extension install weewx-loopdata.zip

(or wee_extension --install weewx-loopdata.zip on WeeWX 4).

Release v6.1

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 25 Jul 00:36

weewx-loopdata 6.1

A bug-fix release: a dead or hanging rsync remote can no longer stall loop
processing. Drop-in upgrade — no config changes required, though users who
set ssh_options themselves get a real fix (see below).

What's new

  • A hanging rsync remote no longer stalls loop processing. The
    timeout = 1 setting only ever reached rsync's --timeout, which bounds
    rsync protocol I/O — not the phases ssh owns. A black-holed TCP connect,
    a stalled ssh handshake, or an authentication prompt could each block the
    loop processing thread for minutes per attempt; loop-data.txt kept being
    written, but minutes behind the packets inside it, so live pages (the
    sample panel, weewx-celestial's Geocentric dial) froze with a growing
    "Ns ago" badge. LoopData now folds ssh-side bounds into the rsync
    transport: ConnectTimeout=<timeout>, ServerAliveInterval=<timeout>,
    ServerAliveCountMax=2 and BatchMode=yes. Each is applied only if
    your own ssh_options doesn't already set that keyword, so anything you
    set wins. Setting timeout = 0 (rsync's "no timeout") omits the time
    bounds; BatchMode is still applied, because an interactive prompt can
    never be answered under weewxd.
  • Your ssh_options no longer silently discards the connect bound.
    Previously the 1-second ConnectTimeout lived in the default value of
    ssh_options, so setting ssh_options at all — a key file, a port —
    replaced it and left connects unbounded. Now the bounds are merged with
    whatever you set, and ConnectTimeout/ServerAliveInterval follow your
    timeout value instead of a hardcoded 1.

Requirements

  • WeeWX 4 or 5
  • Python 3.7 or later
  • No third-party Python packages required

Installing/upgrading

Download weewx-loopdata.zip
and install it over your existing copy, then restart weewxd:

weectl extension install weewx-loopdata.zip

(or wee_extension --install weewx-loopdata.zip on WeeWX 4).

Release v6.0

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 22 Jul 21:14

weewx-loopdata 6.0

A major release with three headline features: a live NOAA-style windrose,
full report-tag parity for the fields grammar (unit overrides, round(n),
and the format()/nolabel()/string()/long_form() call specs), and a new
sample skin
— a live instrument panel of canvas gauges. The loopdata
service itself is a drop-in upgrade, but three things need checking before
you restart: if you publish the sample report, you must update your
fields line
(the new panel replaces the old tables page and reads new
fields — see the first action-required section below); the experimental
windrun_<dir> fields are removed (replaced by windrose); and day/hour/week
time-of-event fields now format per period, as WeeWX report tags do (see the
check-your-pages section).

The new sample skin, live on real data:

The new sample skin: a live instrument panel

What's new

  • windrose — a first-class observation type for building a live windrose.
    Per period, loopdata accumulates 16 compass bins by N speed bands (time and
    distance per cell, plus a directionless calm total) and projects the matrix
    through four aggregates: .sum (16 distances, the classic windrun rose),
    .time (16 durations), .banded (the 16xN NOAA matrix) and .calm.
    Works with every period except current and trend — including week,
    month, year, rainyear and alltime, which windrun_<dir> never
    supported — and every period seeds fully from the archive at startup, with
    a single SQL aggregate per period. Band edges default to the classic
    WRPLOT/NOAA bands and are configurable via [LoopData] windrose_bands; a
    windrose.bands key is emitted automatically so page legends never
    hardcode them. The windrose is the centerpiece of the new sample skin
    (next bullet).
  • A new sample skin: a live instrument panel — a NOAA windrose plus
    eleven canvas gauges in three rows of four: temperature, dew point,
    feels-like and humidity dials wearing today's min–max as a band, a wind
    compass with a ghost needle at the 10-minute gust direction, a barometer
    with the 3-hour trend drawn as an arc, rain and rain-rate dials that
    rescale themselves on a big day, and UV, solar radiation and air quality
    (weewx-purple's pm2_5_aqi) that hide themselves on stations without
    the sensor. The gauges scale with the window width, fonts and all. A
    few hundred lines of dependency-free javascript to crib from, replacing
    the old tables page. .raw fields drive the geometry,
    report-formatted fields supply every readout, and unit.label fields
    pick the dial scales, so the panel follows the target report's units
    (metric or US) automatically.
  • Unit override in the fields grammar. A field may name a unit between
    the aggregation and the format spec —
    period.obstype[.agg_type][.unit][.format_spec] — exactly as WeeWX report
    tags allow ($current.outTemp.degree_C). Any unit WeeWX knows for the
    observation's unit group is accepted, whatever the report's configured
    units. Examples: current.windSpeed.beaufort, day.outTemp.avg.degree_C.raw,
    10m.windGust.max.knot.raw, trend.barometer.mbar.formatted. Gauges and
    widgets frequently want a fixed unit — a Beaufort wind dial, a hPa
    barometer — even when the surrounding report is in °F and inHg; now that's
    a per-field choice and the rest of the report is unaffected. Overrides
    work everywhere a value is produced — current, every rolling and span
    period, and trend. Trend endpoints are converted to the requested unit
    before the difference is taken, so a temperature trend in degree_C is a
    true 5° change for a 9°F change, not a mis-converted number. Value fields
    only, matching WeeWX: unit.label is obstype-only and has no override,
    and a unit incompatible with the observation's group
    (e.g. day.outTemp.avg.beaufort) simply omits the field.
  • Call-syntax format specs. The formatting methods a report tag can call
    are now format specs with the same names, arguments and output:
    day.outTemp.maxtime.format("%H:%M"), current.outTemp.format(add_label=False),
    day.windGust.max.nolabel("%.0f"), day.rain.sum.string(),
    day.sunshineDur.sum.long_form(). Time fields take a strftime format,
    numeric fields a %-format, positional arguments bind exactly as the report
    tag's do, and a bare name (day.rain.sum.string) is a zero-argument call,
    just as Cheetah renders it. The unit override composes
    (day.outTemp.avg.degree_C.nolabel("%.2f")), and the calls work on almanac
    fields too (almanac.sunrise.format("%H:%M")). One quoting rule: a call
    containing a comma must be quoted on the fields line, or ConfigObj splits
    the entry at the comma —
    fields = ..., 'day.rain.sum.format("%.2f", add_label=False)', ....
  • round(n) — round a value before rendering, exactly as report tags
    allow: day.outTemp.max.round(1).raw publishes 72.1 instead of
    72.09999847412109. It sits between the unit override and the format
    spec (day.barometer.max.mbar.round(1).raw), composes with every
    formatting call (round(2).format("%.3f") renders the rounded value), and
    works on almanac fields (almanac.sun.az.round(1).raw).
  • Always-present keys with string(). By default loopdata omits a field
    with no data (say a trend during the first minutes after startup).
    string(), or an explicit None_string argument to any formatting call,
    makes the field emit its None rendering instead (N/A, or your string) —
    handy for pages that want every element populated from the very first
    packet, e.g. trend.outTemp.string("n/a").
  • Time-of-event fields format per periodday.outTemp.maxtime now
    renders with the target report's [Units][TimeFormats] entry for day,
    exactly as $day.outTemp.maxtime does (12:00:00 instead of
    07/01/20 12:00:00 with the standard formats). See the check-your-pages
    section below for every period.
  • Fixes — hour/continuous windrun buckets no longer start empty after a
    weewxd restart (fixed via the windrose rework); the target report's
    options are now assembled with WeeWX's own build_skin_dict when present
    (a stale function name meant loopdata always used its own fallback), with
    ConfigObj interpolation disabled exactly as WeeWX does — without this,
    %(hour)d-style delta-time format strings misparse and long_form()
    cannot render.
  • A README that leads with the point — the introduction now opens with a
    complete four-step example: report tags, the same tags on the fields
    line, the loop-data.txt they produce, and the javascript that makes the
    page live.

Action required if you publish the sample report: update your fields line

Upgrading replaces the sample skin's page with the new instrument panel, but
keeps your existing [LoopData] fields line in weewx.conf (only fresh
installs get the new default). The panel reads fields the old default never
included — .raw fields for the needle and petal geometry, unit.label
fields for the dial scales, and day.windrose.* for the rose — so with an
old fields line the new page serves half-dead: the LIVE indicator and text
readouts work, but the dials have no needles or min–max bands and the
windrose stays blank.

To fix it, replace the fields line under [LoopData][[Include]] with
the one from the README's sample configuration — exactly the fields the
panel reads:

fields = current.dateTime.raw, current.outTemp, current.outTemp.raw, day.outTemp.min.raw, day.outTemp.max.raw, day.outTemp.min.formatted, day.outTemp.max.formatted, current.outHumidity, current.outHumidity.raw, day.outHumidity.min.raw, day.outHumidity.max.raw, current.windSpeed, current.windSpeed.raw, current.windDir.raw, current.windDir.ordinal_compass, 10m.windGust.max, 10m.wind.gustdir.raw, 10m.wind.gustdir.ordinal_compass, current.barometer, current.barometer.raw, trend.barometer.raw, trend.barometer.desc, current.rainRate, current.rainRate.raw, day.rain.sum, day.rain.sum.raw, day.rainRate.max, day.rainRate.max.raw, current.dewpoint, current.dewpoint.raw, day.dewpoint.min.raw, day.dewpoint.max.raw, day.dewpoint.min.formatted, day.dewpoint.max.formatted, current.appTemp, current.appTemp.raw, day.appTemp.min.raw, day.appTemp.max.raw, day.appTemp.min.formatted, day.appTemp.max.formatted, current.UV, current.UV.raw, day.UV.max, current.radiation, current.radiation.raw, day.radiation.max, current.pm2_5, current.pm2_5_aqi.raw, current.pm2_5_aqi.formatted, day.windrose.banded, day.windrose.calm, unit.label.outTemp, unit.label.barometer, unit.label.rain, unit.label.rainRate, unit.label.windSpeed

then restart weewxd. If other pages read your loop-data.txt too, keep their
fields by appending them to this list rather than dropping them. Gauges for
sensors your station does not report (appTemp, UV, radiation, pm2_5) hide
their cells automatically. And note that wind below the calm threshold
accumulates as calm time, not directional distance, so on a near-calm day
the rose is legitimately empty with calm near 100%.

Action required: windrun_ fields are removed

The experimental windrun_N ... windrun_NNW observation types are gone,
replaced by windrose. Fields naming them are now ignored. To migrate:
day.windrun_N.sum is element 0 of day.windrose.sum, day.windrun_NNE.sum
element 1, and so on clockwise through NNW (element 15).

Check your pages: day/hour/week event times render differently

Through 5.0, every time-of-event field (maxtime, mintime, firsttime,
lasttime) was formatted with the current time format (typically
%x %X07/01/2020 12:00:00), no matter the period. WeeWX report tags
instead format times with the **period as ...

Read more

Release v5.0

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 19 Jul 21:56

weewx-loopdata 5.0

A major release: loop-data.txt can now carry almanac values. Any WeeWX
report almanac tag can be listed in the fields line — written exactly as
it appears in a Cheetah template, minus the $ — and loopdata computes it
on every loop cycle with whatever almanac WeeWX has registered
(weewx-skyfield, PyEphem, or WeeWX's built-in fallback), converted and
formatted per the target report, exactly as the report tag would render.
This is a drop-in upgrade: no weewx.conf changes are required, existing
fields behave identically, and the new capability costs nothing until you
list an almanac.* field.

What's new

  • Almanac fields. almanac.sunrise, almanac.sunrise.raw,
    almanac.moon_phase, almanac.sun.az, almanac.sun.visible.raw
    (length of daylight), almanac.moon.rise.raw,
    almanac.next_solstice.raw, almanac.mars.earth_distance,
    almanac(horizon=-6).sun(use_center=1).rise.raw (civil dawn; -12
    nautical, -18 astronomical) — if it works as a report tag, it works
    here, including the .raw/.formatted/.ordinal_compass suffixes.
    Element ids can match the json keys as usual, so page javascript drops
    the values straight into HTML. See the new "Almanac fields" section of
    the README for the full tour.
  • almanac(days=±N). One loopdata extension to the report grammar:
    evaluate the almanac at the same wall-clock time N local calendar
    days away — almanac(days=1).sunrise.raw is tomorrow's sunrise,
    almanac(days=-1).sun.visible.raw is yesterday's length of day.
    (Reports express this with $almanac(almanac_time=$time_ts+86400),
    which needs Cheetah variables a config line doesn't have; days= is
    also DST-correct where ±86400 is not.)
  • Cost is managed automatically. Positions and distances recompute
    every loop packet; rise/set/transit/daylight once per local day;
    next_*/previous_* events are computed once and kept until the local
    day advances past the event, so a page can show today's event for the
    rest of its day. All almanac work runs on loopdata's processor thread,
    never the WeeWX engine thread.
  • weewx-celestial's loop fields are no longer needed. Every loop
    field that extension injects has an almanac equivalent (e.g.,
    current.sunrise.rawalmanac.sunrise.raw,
    current.daylightDur.rawalmanac.sun.visible.raw,
    current.tomorrowSunrise.rawalmanac(days=1).sunrise.raw,
    current.civilTwilightStart.raw
    almanac(horizon=-6).sun(use_center=1).rise.raw). The README has the
    migration mapping, and weewx-celestial 6.0 — released alongside — ships
    a utility that rewrites your fields line automatically. Two notes for
    migrating pages: distances arrive in AU (as reports show them) rather
    than miles/km, and waxing/waning is a one-line derivation (the moon is
    waxing when almanac.next_full_moon.raw < almanac.next_new_moon.raw).

Requirements

  • Python 3.7 or later
  • WeeWX 4 or 5
  • For almanac fields: whatever almanac you want serving them. With
    weewx-skyfield
    (WeeWX 5.2+) or PyEphem installed you get the full tag set; WeeWX's
    built-in fallback serves sunrise, sunset and moon phase only. No
    almanac fields listed, no requirement at all.

Installing/upgrading

Download weewx-loopdata.zip from this release, then:

weectl extension install weewx-loopdata.zip

Restart WeeWX. No weewx.conf changes are needed when upgrading; to use
the new capability, add almanac.* entries to
[LoopData] [[Include]] fields and restart.

Release v4.1

Choose a tag to compare

@chaunceygardiner chaunceygardiner released this 13 Jul 05:37

weewx-loopdata 4.1

WeeWX could fail to shut down if the stop signal arrived while LoopData
was starting up. Nothing else changes: no weewx.conf edits, no fields
changes, and loop-data.txt output is identical. This is a drop-in
upgrade.

What's new

  • Shutdown can no longer be swallowed at startup. WeeWX stops by
    raising an exception from its TERM signal handler, inside whatever code
    is running when the signal lands. If that was LoopData's startup —
    reading the target report configuration, or priming its accumulators
    from the database on the first loop cycle — the broad error handlers
    there swallowed the exception and weewx failed to stop. They now pass
    it through. (Steady-state operation was never affected: per-packet
    accumulation runs in LoopData's own worker thread, which the signal
    cannot reach.)

Requirements

  • Python 3.7 or later
  • WeeWX 4 or 5
  • No third-party Python packages

Installing/upgrading

Download weewx-loopdata.zip from this release, then:

weectl extension install weewx-loopdata.zip

(On WeeWX 4: sudo /home/weewx/bin/wee_extension --install weewx-loopdata.zip)

Restart WeeWX. No weewx.conf changes are needed when upgrading from 4.0.
Note that upgrading replaces the bundled skin (skins/LoopData/) — if you
customized index.html.tmpl or realtime_updater.inc, save a copy first.