Cumulus Web Tags as a Data-Binding Vocabulary

Cumulus web tags bind temperature, wind, rain, extra sensors, and timestamps to template slots. How a tag maps to a field, and what to do when names change.

Back to Cumulus weather software guides

A Cumulus web tag is a named slot in a template that the station software replaces with a value when it processes the file. <#temp> is not a weather widget. It is a binding: this position in the output is the current outside temperature, formatted according to locale and any modifiers. The historical TNET URL /tnetwebtags.php is the place to treat that vocabulary as a data contract—families of observations, how a tag maps to a field, extra sensors, timestamps, and versioning when names change.

The TNET web-tags project is the extra-file / PHP-include pattern that consumed this vocabulary. This page is the language. Official behavior is defined by Cumulus documentation, not by TNET: the Cumulus Wiki Webtags page (last checked 13 August 2026) is the live reference.

Historical context

Cumulus sites were HTML (and later PHP, XML, JSON) files with markers of the form <#tag_name …> where a human otherwise would have typed a number. Processing copied static text and substituted tags. The same names appear as the “equivalent web tag” column in the realtime.txt field list, which is why a banner parser and a template can agree if both are version-aware.

/tnetwebtags.php on the Cumulus host was a reference-shaped URL: a place to look up tokens, not a generator and not a ZIP. TNET does not republish a scraped dump of every historical tag table. Tag inventories grow with the software. MX can write WebTags.txt for the running build (from 3.12.0). Use that list plus the wiki; do not freeze a 2009 forum paste as the language.

Grammar of a tag

The wiki’s general form is:

<#tag_name [optional input selection parameters] [optional output modification parameters]>

Facts that matter for binding:

  • Names are matched by the processor; treat them as case-sensitive in practice and type them as documented.
  • Some names take no parameters. Some require input parameters (for example certain history selections). Output modifiers change decimals, decimal-comma versus point, and date/time appearance.
  • MX documents rc=y as an output modifier to force a decimal point—relevant when PHP or GD must parse a number.
  • Processing is substitution at file-generation time. The output is a snapshot, not a live object. A page that is not reprocessed does not get new values.
  • Unknown tags in MX become visible error strings (and diagnostics), not empty fields. A consumer that paints error text as a temperature has ignored the contract.

GET-style local APIs in MX are a different binding path and do not take the same modifiers as file processing. This article stays on the template vocabulary that /tnetwebtags.php historically implied.

Mapping a tag to an observation field

A tag name is a claim about which quantity, which aggregation, and which clock.

Identity of the quantity. <#temp> is outside air temperature. <#intemp> is inside. <#dew> is dewpoint. Those are not interchangeable moisture or comfort stories. <#wspeed> is average wind; <#wlatest> is the latest sample; <#wgust> is a gust field (in the classic realtime layout, a 10-minute high gust). Labeling all three “wind” in a template is a binding error.

Unit as a sibling tag. Numeric tags do not always embed the unit. <#tempunitnodeg>, <#windunit>, <#pressunit>, <#rainunit>, and <#cloudbaseunit> exist so the output can stay honest across stations. A template that prints <#temp> without a unit is incomplete as a scientific record.

Derived versus observed. <#wchill>, <#heatindex>, <#humidex>, <#apptemp>, and MX <#feelslike> are software-derived indices from other observations (and from the program’s implementation). They are legitimate to publish if labeled. They are not extra thermometers. <#forecastnumber> is a Zambretti-style scenario index from the station program, not a National Weather Service product.

Time of the value versus time of the event. <#timehhmmss> is the current packet time. <#TtempTH> is the time of today’s high temperature, a different clock. Confusing T… event times with the packet time is a common template bug: the high is real, but it did not happen “now.”

Aggregation window. <#rfall> is rain today (reset at the station’s rollover). <#rhour> is rainfall last hour. <#rmonth> and <#ryear> are longer totals. <#rrate> is a rate, not a total. Extra-file authors who alias all of these to $rain destroy the window.

When a tag also appears in realtime.txt, the wiki’s field table is the crosswalk: field number, example, description, equivalent tag. Parsers should use that crosswalk and the build number (classic fields 39–40), not a Weather Display ClientRaw map.

Families you actually bind

Group tags the way you would group columns in a logger export.

Temperature and humidity. Outside temperature, humidity, dewpoint, indoor pair, trends (<#temptrend> is documented as a three-hour average rate of change). Today’s high/low and their event times.

Wind. Average, latest, gust, bearing in degrees, compass point, Beaufort number, 10-minute average bearing, wind run, units. Direction without speed is incomplete; speed without saying which speed is incomplete.

Pressure. Sea-level pressure (<#press>), unit, three-hour tendency value, today’s high/low and times.

Rain. Rate, today, hour, month, year, yesterday (<#rfallY>), unit. MX later added weekly rain (<#rweek> in recent realtime layouts). Reset rules live in Cumulus configuration, not in the tag name.

Solar and UV. Radiation, theoretical max, sunshine hours, sunny flag, UV—only when the hardware exists. Empty solar is not midnight if the station has no sensor.

Extra sensors. Cumulus documents extra-sensor logs and tags for stations that have them (soil, leaf, additional temperature channels, air-quality families in later MX). Bind extra sensors with identity: which channel, which unit, which height. An unnamed <#ExtraTemp1> on a public page is an unidentified instrument.

Almanac and daylight. <#isdaylight> is a location-based flag, not a pyranometer. Do not use it as a temperature.

Software identity. Version and build tags exist so a consumer can version-gate the rest of the vocabulary.

Versioning when names change

The language is not stable across the entire Cumulus history, and the wiki is explicit about that.

  • Early Cumulus 1 had fewer tags than 1.9.4. MX at first lagged some Cumulus 1 tags and later surpassed them.
  • Naming is historically inconsistent: “Y” for yesterday appears as prefix or suffix (rfallY versus YSunshineHours); “T” for time of an extreme is not applied uniformly (tempTH versus TtempTH).
  • Realtime field counts grew: feels-like as field 59 from MX 3.7.0; weekly rain later. A positional parser that ignores this will assign <#pressunit> to the wrong column.
  • Input/output parameters were added over time. A template written for MX modifiers can fail or mis-format on Cumulus 1.

Versioning rules that keep bindings scientific:

  1. Record flavour (Cumulus 1 or MX) and build next to any public include.
  2. Prefer names from WebTags.txt generated by the instance you run, then confirm meaning on the wiki.
  3. When a name is added, do not reuse an old slot for a new quantity.
  4. When a meaning changes, keep the old name only if the old meaning is preserved; otherwise introduce a new name and retire the old one in documented stages.
  5. Never infer a missing tag as zero. MX error strings and absent Cumulus 1 tags are different faults; both are not 0.0.

TNET is not the registrar of Cumulus names and does not maintain a fork of the tag list.

Using the vocabulary without turning it into a dump

A complete observation on a public page still needs units and a time, even if you only bind three tags. A WAP deck, a GD banner, and a climate HTML page should share the same meanings for <#temp> and <#rfall> even when they share few other tokens. That is the point of a vocabulary.

Do not paste hundreds of tags into a realtime file because they exist. Cadence belongs in the extra-token project. This page’s job is to keep the names honest.

For warnings and official forecasts, use NWS or the national service with authority at the site. A Cumulus forecast tag is not that service.

Modern relevance

MX still uses web tags in extra files, SQL, and HTTP POST bindings. JSON packs for the default site are another serialization of overlapping fields. The vocabulary idea—stable names, sibling units, explicit clocks—is unchanged. Scraping a rendered HTML table because tags seemed hard is the wrong direction.

Field mapping, schema drift, and freshness are data-source problems. TNET’s public account is data sources and methodology. Grouping temperature, wind, rain, and related atmosphere as evidence families is evidence families. The Cumulus hub indexes historical consumers, including phpggbanner and wap.php.

Sources