Full list of Webtags and CumulusUtils: Difference between pages

From Cumulus Wiki
(Difference between pages)
Jump to navigationJump to search
 
 
Line 2: Line 2:
|__TOC__
|__TOC__
|}
|}
This page has been updated until CMX version 4.2.1


== Introduction ==
This list only contains the tag names. Tag names are the basic entity when asking a value. Check the [[Webtags#Using_Webtags|Usage of webtags]] and don't forget tag names are only part of the [[Webtags#General Format for Web Tags|general format for Webtags]]. It does not indicate what parameters they can take, nor does it include the brackets the tag name is surrounded by when you quote it in a template file for Cumulus to process.
This is the first page of the CumulusUtils Wiki. From here you should be able to find everything you need to know for this tool.


If needed you can always go to the CumulusUtils Category page (see bottom of this page).
Here follow tables that group the tag names by the basic purpose of the tags listed. There has been confusion in the past of tags appearing in more than one group. If you find such occurrence you may notify or modify.


== Prerequisites ==
= Current Conditions =
This paragraph describes what is required to use CumuluUtils (To be modified/extended by user experience).
#A working CumulusMX environment on Windows, Linux (RPi) or MacOS
##On Linux (and probably MacOS too) the user must verify whether [[SysInfo#Introduction|the application ''lshw'' has been installed]].
##NOTE: no experience by the author on MacOS exists so be prepared to communicate
#<s>At least 32 days of data</s> This requirement has been dropped.
#For the ''[[Charts_-_Misc_charts|Miscellaneous Charts]]'' more data - a year starting on jan 1 - is required
#For the logfiles:
##<s>A consistent date format, mixed date formats in logfiles are not accepted by CumulusUtils</s> From CMX v4 onwards this is enforced by CMX
##<s>Consistent data and separator use</s> See above
##<s>If a legal date format in a logfile is used which is not implemented, just request it</s> See above
#For longer data series check your locale creates consistent logfile entries and it will be useful to run the [[Software#Create_Missing|CMX supporting application ''CreateMissing.exe'']] beforehand.


== Goals ==
We start with tags that relate to the latest values, as these are the ones that people most often choose to use. The current condition data is also available, for processes external to Cumulus, by using the inbuilt facility to generate [[Realtime.txt|a file]] with such data. CumulusMX makes current values available for a standard range of sensors where the same web tags apply across a range of weather station models. Current values from some [[#Extra Sensors|extra]] temperature and relative humidity sensors (see [[Extra temperatures]]) from particular weather station models are offered as well.
The goal of ''CumulusUtils'' (abbr: ''Cutils'' or ''CUtils'') is to facilitate website creation for users of CumulusMX without exposure to coding in e.g. PHP or javascript. Having a meteo-website should not be privileged to users with great IT-skills. Making charts should not be demanding for programming skills in SQL or making it otherwise impossible to create charts without diving deep into the technique involved in CumulusMX (which actually is also the case with SQL). Note that this does not mean you can't use IT skills: the user configurable menu offers an opening to expand as far as you wish.


''CumulusUtils'' positions itself as a configurable application for which the understanding of how to run it and how to configure it is the most important thing to know. For configuration ''CumulusUtils'' uses [[Cumulusutils.ini|''cumulusutils.ini'']] file which resides in the CumulusMX directory. If that file does not exist, it will be created. All other files related to ''CumulusUtils'' are in the utils directory.
==Standard sensors==
The tags in this first list are grouped for historical reasons and remain grouped.


The charts are created using [https://www.highcharts.com/ HighCharts] using their [https://shop.highsoft.com/highsoft/form/noncommercialform non-commercial license]. If you want to use the charts or the [[Website Generator]] of ''CumulusUtils'', please make yourself acquainted with this license.
{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:600px" | Function
|-
|colspan="2" style="background:lightgray;"|Temperature
|-
|<#temp>
|The outside (air) temperature
|-
|<#intemp>
|The inside temperature
|-
|<#TempChangeLastHour>
|The change in outside temperature over the last hour
|-
|<#temptrend>
|The average rate of change in temperature over the last three hours. Trend = (temp now - temp 3hrs ago) / 3 (the calculation selected for this trend matches the standard-based calculation for <#presstrendval> despite the naming inconsistency)
|-
|<#temptrendsigned>
|signed string value of temperature trend
|-
|<#temptrendtext>
|Temperature change over the last three hours - Rising/Falling/Steady (values can be set in strings.ini)
|-
|<#temptrendenglish>
|Temperature change over the last three hours - Rising/Falling/Steady (for use by [[Webtags_as_boolean_operators_in_HTML|HTML]], [[Editing_content_of_a_webpage_using_either_HTML_or_Script|javascript]] etc, values can't be changed).
|-
|<#heatindex>
|Current [[heat index]].
|-
|<#humidex>
|Current [http://en.wikipedia.org/wiki/Humidex Humidex]
|-
|<#apptemp>
|The [[Apparent_temperature|apparent]] temperature. The referenced page in weather terminology section of this Wiki explains it. The formula used is that defined by BOM. Although at temperatures above 20°C (68°F) Feels like reports an "apparent temperature" it uses a different formula.
|-
|<#wchill>
|The current [[wind chill]] temperature. The referenced page in weather terminology section of this Wiki explains it. For temperatures below 10°C (50°F) Feels like reports the same value.
|-
|<#feelslike>
|Available for version 3.6.10 and up. See [[Feels Like]]
|-
|<#IsFreezing>
|If outside temperature is at or below 0°C/32°F. 0=Above freezing, 1=Below freezing
|-
|<#chillhours>
|The number of [[Heat/cold_degree_days_and_Chill_hours#Chill_Hours_and.2For_Air_Frost|'chill hours']] so far this season (threshold temperature and start date are configurable).
|-
|colspan="2" style="background:lightgray;"|Humidity
|-
|<#hum>
|The outside [http://en.wikipedia.org/wiki/Humidity humidity]
|-
|<#inhum>
|The inside humidity
|-
|<#dew>
|The current dew point (See [[Temperature_(and_humidity)_measurement#Cumulus_Calculated_Parameters|wiki]])
|-
|<#wetbulb>
|Estimated [http://en.wikipedia.org/wiki/Wet_bulb wet bulb] temperature
|-
|colspan="2" style="background:lightgray;"|Rainfall
|-
|<#rfall>
|The total rainfall so far today (reports rain counter now minus rain counter at start of day), start of day counter can be edited using "edit rain today".
|-
|<#rrate>
|The current [[Rain_measurement#Rain_Rate|rainfall rate]]
|-
|<#rhour>
|The rainfall in the last hour
|-
|<#r24hourH>
|All time high total rainfall in a 24-hour period
|-
|<#Tr24hourH>
|Time of the rainfall in the last 24 hours
|-
|<#rmidnight>
|The total rainfall since midnight. Useful if you don't use midnight as your start of day
|-
|<#r24hour>
| Reading recent history records, takes rain counter for latest minute, and substracts rain counter from as close as possible to same time yesterday (if Cumulus was not running at that time yesterday, but historical catch-up has been enabled, then it is from nearest time available yesterday, so for a logging interval of every 30 minutes might be 24 hours and 16 minutes ago)
|-
|<#LastRainTipISO>
|Fixed ISO format output giving date and time of last rain gauge tip (e.g 2010-09-06 06:09) The format is always as shown (cannot use output format modifiers)
|-
|<#LastRainTip>
| (available from release 3.6.1) Date/time of last rain gauge tip
|-
|<#MinutesSinceLastRainTip>
|The number of minutes since the last rain gauge tip, in whole numbers, rounded down
|-
|<#IsRaining>
|For [[Rain_measurement#Optical_Rain_Gauge| Hydreon RG-11 devices]], shows the current rain state. 0=No rain, 1=It's raining
|-
|<#rweek>
|The total rainfall so far this week
|-
|<#rmonth>
|The total rainfall so far this month
|-
|<#MonthRainfall>
|Returns the rainfall total for the current month by default (see also #rmonth) but may take optional parameters `y=YYYY` and `m=MM` (both must be specified) to return the total rainfall for specified month in the specified year eg. `<#MonthRainfall y=2018 m=10>`
|-
|<#ryear>
|Annual rainfall total for rainfall season year (i.e. starting month as set on Configuration menu, station screen, Annual rainfall frame)
|-
|<#AnnualRainfall>
|Annual rainfall, defaults to the current year (i.e. = <#ryear>), but also takes an optional parameter "y=nnnn" which allows you to specify any year in the Cumulus history
|-
|<#ConsecutiveRainDays>
|The number of days up to (but not including) today where it has rained every day. The threshold amount of rain required to determine a rain day is configurable via the RainDayThreshold setting in cumulus.ini, the units for the threshold are the same as your rain units, meteorologists exclude dew (and other times when single tip of recorder).
|-
|<#ConsecutiveDryDays>
|The number of days up to (but not including) today since it last rained. The threshold amount of rain required to determine a rain day is configurable via the RainDayThreshold setting in cumulus.ini the units for the threshold are the same as your rain units
|-
|colspan="2" style="background:lightgray;"|Pressure
|-
|<#press>
|The [http://en.wikipedia.org/wiki/Sea_level_pressure sea level pressure]
|-
|<#presstrendval>
|The average rate of pressure change over the last three hours. Trend = (pressure now - pressure 3hrs ago) / 3
|-
|<#presstrendsigned>
|signed string value of pressure trends
|-
|<#presstrend>
|The pressure trend in words - values can be set in the 'strings.ini' file
|-
|<#presstrendenglish>
| a single word description for the pressure trend - Rising/Falling/Steady (for use by [[Webtags_as_boolean_operators_in_HTML|HTML]], [[Editing_content_of_a_webpage_using_either_HTML_or_Script|javascript]] etc, values can't be changed). From version 1.8.8 1st December 2009
|-
| <#PressChangeLast3Hours>
|Available from version 3.11.1; Total Pressure Change since 3 hours ago
|-
|<#altimeterpressure>
|Altimeter pressure. Pressure corrected to sea level using the station's altitude only. Same as sea-level pressure for non-Davis stations.
|-
|<#stationpressure>
|station pressure (the absolute pressure reading)
|-
|colspan="2" style="background:lightgray;"|Wind
|-
|<#wlatest>
|Current wind speed reading from console. Corresponds to 'latest' on the Cumulus main screen.
|-
|<#bearing>
|Current wind bearing in degrees
|-
|<#currentwdir>
|Current wind bearing as a compass point - e.g. ESE
|-
|<#wspeed>
|The 10-minute average, if you have Cumulus set to calculate a 10-minute average. Otherwise, it's the latest 'wind' value from the console (i.e. the current speed as determined by the station). Corresponds to 'average' on the Cumulus main screen.
|-
|<#avgbearing>
|Average wind bearing in degrees over last configured interval minutes. Range 1-360, 0=Calm


== Assumptions ==
This is calculated by taking the wind direction and speed for the last 10 minutes (or other interval as configured), calculates the sums of the North/South and East/West vector components, divides the E/W component sum by the N/S component sum, and takes the arctan.
The user is assumed to have basic computer skills and knowledge about the Operating System and directory structure. The user must also be aware of the directory infrastructure of CumulusMX and needs to be aware of the meaning of the terms ''webroot'' and ''FTProot'' and ''Working Directory''. The user should be able to understand and edit the ini files (both from ''CumulusMX'' and ''CumulusUtils''). The user should understand the basic functioning of ''CumulusMX'' which means the correct availability of ''CumulusMX'' is a precondition for using ''CumulusUtils''.
|-
|<#wdir>
|Average wind bearing over last 10 minutes as a [http://en.wikipedia.org/wiki/Compass compass] point - e.g. ESE
|-
|<#wgust>
|The highest wind reading in the last 10 minutes. Corresponds to 'gust' on the Cumulus main screen.
|-
|<#WindSampleCount>
|The number of wind samples making up the wind rose (etc) data (up to 3600)
|-
|<#wdirdata>
|Comma separated list of recent wind bearing readings (every x seconds, up to 3600 entries). This is a circular buffer; to find the most recent value use <#nextwindindex>. Reading interval x varies by station type:
* Oregon: x=12 seconds (see https://cumulus.hosiene.co.uk/viewtopic.php?p=37#p37) so 12 hours worth in full array
* Davis: x=2 or 3 seconds (see https://cumulus.hosiene.co.uk/viewtopic.php?p=37#p37) so 2.5 hours worth in full array
* Fine Offset: Cumulus 1 reads the wind data every minute (although station transmits wind data every 40 seconds), so 60 hours worth in full array
* Davis WLL: x=2.5 seconds (see https://cumulus.hosiene.co.uk/viewtopic.php?p=160900#p160900) so 2.5 hours worth in full array


Some output files can be used with ''Cumulus 1'' but the charting possibilities rely on the availability of the JSON datafiles of ''CumulusMX''. Therefore the use of ''CumulusUtils'' in combination with ''Cumulus 1'' is limited. The [[Website Generator|website generator]] in combination with ''Cumulus 1'' is not advised.
|-
|<#wspddata>
|Comma separated list of recent individual (non-averaged) wind speed (correspond to 'latest' on the Cumulus main screen) readings (every x seconds, up to 3600 entries). This is a circular buffer; to find the most recent value use '''nextwindindex''' tag. Reading interval x varies by station type (see above).
|-
|<#nextwindindex>
|The index of the entries in <#wdirdata> and <#wspddata> that Cumulus ''is going to use next'' - i.e. the latest entry used is one less than this; but don't forget to allow for the wrap around!
|-
|<#WindRoseData>
|A comma-separated list of the wind 'totals' used to draw the wind rose (8 or 16 values)
|-
|<#WindRosePoints>
|The number of items in <#WindRoseData> (i.e. 8 or 16)
|-
|<#beaufort>
|The current wind speed on the [http://en.wikipedia.org/wiki/Beaufort_scale Beaufort scale] (e.g. F8)
|-
|<#beaufortnumber>
|The current wind speed on the Beaufort scale, without a leading "F", e.g. "6"
|-
|<#beaudesc>
|The current wind speed Beaufort description (e.g. "Gale")
|-
|<#BearingRangeFrom>
|The 'lowest' clockwise bearing in the last 10 minutes
|-
|<#BearingRangeTo>
|The 'highest' clockwise bearing in the last 10 minutes
|-
|<#BearingRangeFrom10>
|The 'lowest' clockwise bearing in the last 10 minutes, rounded down to nearest 10 degrees
|-
|<#BearingRangeTo10>
|The 'highest' clockwise bearing in the last 10 minutes, rounded down to nearest 10 degrees
|-
|colspan="2" style="background:lightgray;"|Miscellaneous
|-
|<#cloudbase>
|Calculated [http://en.wikipedia.org/wiki/Cloud_base cloud base]
|-
|<#cloudbasevalue>
|Current calculated cloud base without units
|-
|<#UV>
|Current [http://en.wikipedia.org/wiki/Uv_index UV index]. Requires your station to have a UV sensor.
|-
|<#SolarRad>
|Current [http://en.wikipedia.org/wiki/Solar_radiation solar radiation]. Requires your station to have a solar sensor.
|-
|-
|<#Light>
|Current Current light level in Lux. Requires your station to have a solar sensor. Only applies to Fine Offset stations.
|-
|[[Forecast_webtag|<#forecast>]]
|The current forecast
|-
|<#forecastenc>
|The same as <#forecast> but with all reserved HTML characters, and those above character code 159, encoded as HTML entities
|-
| <#forecastJsEnc>
|Available from version 3.11.0; The current forecast encoded for JavaScript
|-
|<#forecastnumber>
|The number relating to the current forecast entry in the [[strings.ini]] file. If your station is not providing it's own forecast and Cumulus is not calculating one then 0 (zero) is returned. Note: two negative numbers can be returned by [[Forecast_webtag|Cumulus]]: -1 (neg 1) = Exceptional Fine, -26 (neg 26) = Exceptional Bad
|-
|<#cumulusforecast>
|Always gives Cumulus (Zambretti) [[Forecast_webtag|forecast]], even if the <#forecast> tag provides a station forecast
|-
|<#cumulusforecastenc>
|The same as <#cumulusforecast> but with all reserved HTML characters, and those above character code 159, encoded as HTML entities
|-
|<#cumulusforecastJsEnc>
|Available from version 3.11.0; The current Cumulus (Zambretti) forecast encoded for JavaScript
|-
|<#wsforecast>
|Always gives station forecast (if available)
|-
|<#wsforecastenc>
|The same as <#wsforecast> but with all reserved HTML characters, and those above character code 159, encoded as HTML entities
|-
|<#wsforecastJsEnc>
|Available from version 3.11.0; The current station forecast encoded for JavaScript
|-
|<#currcond>
|Represents the value entered on the screen within Cumulus for the Current Weather condition, or the value as held in the [[currentconditions.txt]] file. Any reserved HTML characters are encoded as HTML entities
|-
|<#currcondenc>
|The same as <#currcond> but also has all characters above (decimal base) code 159 encoded as HTML entities for example this would encode any use of symbol for degree.
|-
|<#currcondJsEnc>
|Available from version 3.11.0; The current conditions encoded for JavaScript
|}


==Extra Sensors==
== Output ==
The output of ''CumulusUtils'' consists of mainly of text files (extension: .txt) which are generated on demand. In Cutils idiom [[modules|''modules'']]. These text files can be incorporated in a website the user has or is making. Ultimately when using the [[Website Generator|website generator]] feature, ''CumulusUtils'' generates a complete website, uploaded to the user domain and extendable through a [[User Defined Menu|user defined menu]]. When using the [[ChartsCompiler|''ChartsCompiler'']], the user can define his own charts and place the output where he wants just like other ''modules''.


All output of CumulusUtils is written [[Encoding_in_CumulusUtils|as UTF8 encoded text files]].
The extra sensors functionality in Cumulus only supports processing for current spot values as read from the sensors. Periodically spot extra sensor values are logged, see the [[Extra_Sensor_Files|Extra Sensor Files]] page for information about log files from where you can extract the past spot values. The logging can be compared to the Standard Logfiles.


== Installation ==
===Extra Sensors: Davis models and Oregon Scientific WMR928, WR100/200 ===


# ''CumulusUtils'' is available in a distribution which can be downloaded from the [https://cumulus.hosiene.co.uk/viewtopic.php?f=44&t=17998 forum]. In the CumulusMX directory the user must create a directory utils (case dependent) and must copy the files of the distribution (including the subdirectories) to that directory.
These web tags hold current values for additional sensors supported by CumulusMX. For Oregon Scientific model like WMR-200 with USB connection, please refer to [[#Web tags mentioning (outside) temperature]] because any of the extra temperature tags below can be redirected to '''<#temp>''', and consequently also have web tags reporting daily extremes and longer period extreme records.
# Then, on the domain for the website, the user needs to make two directories in the webroot: 'lib' and 'css'. In addition the distribution directory CUicons must be copied as a whole - with contents - to the webroot.
# Updating ''CumulusUtils'' is done by completely overwriting the contents of the installation directory utils as if it were an installation. If you want to save the old installation, make a copy of the utils directory.
# NOTE a seemingly important issue: the datafiles (the naming and the contents) are dependent for their format on the locale / country setting of your machine. If you install and run from scratch and do not bother CMX will take the country setting from the settings of the computer. You may also give the country setting on the commandline when starting CMX. However, it is important to know that CumulusUtils does not handle datafiles with mixed languages and produces lots of errors. When starting with a new install this is not a big deal. But if you have years of old data which you wish to analyse as well you must consider carefully which country setting of CMX is required. Note that the language setting of CumulusUtils is for display/language handling only and does not affect the reading of the data in any way apart for the monthly log file name. If you use a different locale than the one you use for CMX, the please fill in the parameter ''MonthsOfMiracleAndWonder'' (section [General]) with the abbreviated filenames of the locale you use for CMX.


When installed you are ready to run. The first run after an install or an update MUST be without [[Thrifty - Cutils Command Qualifier|Thrifty]].
{| class="wikitable" border="1"
|-
!style="width:150px"|Webtag name
!style="width:600px"|The related description can be changed in 'strings.ini', but below are default descriptions that will be shown in viewer/editor
|-
|<#ExtraTemp1 - 10>
|Extra temperature channel 1 - 10
|-
|<#ExtraDP1 - 10>
|Extra dew point channel 1 - 10
|-
|<#ExtraHum1 - 10>
|Extra humidity channel 1 - 10
|-
|<#SoilTemp1 - 16>
|Soil temperature 1 - 16
|-
|<#SoilMoisture1 - 16>
|Soil moisture 1 - 16
|-
|<#LeafWetness1 - 8>
|Leaf wetness 1 - 8
|}


So after installing you have:
===Extra Sensors: Davis AirLink ===
Available from version 3.9.0. You can configure two Airlink devices which have fixed identification as Indoor and Outdoor. There are a similar set of tags for each device.


The directory structure for utils on the CumulusMX machine is:
{| class="wikitable" border="1"
utils (contents in the distribution)
|-
|--- bin (in the distribution (from 4.7.0 and up))
!style="width:150px" |Webtag name
|--- utilslog (Created by CumulusUtils)
!style="width:600px" |Function
|-
|colspan="2" style="background:lightgray;"|Particulate Matter
|-
|<#AirLinkPm1[InǀOut]>
|Current particulate matter of 1 μm, or less count
|-
|<#AirLinkPm2p5[InǀOut]>
|Currentparticulate matter of 2.5 μm, or less, count
|-
|<#AirLinkPm2p5_1hr[InǀOut]>
|Last hour average particulate matter of 2.5 μm, or less, count
|-
|<#AirLinkPm2p5_3hr[InǀOut]>
|Last 3 hours average particulate matter of 2.5 μm, or less, count
|-
|<#AirLinkPm2p5_24hr[InǀOut]>
|Last 24 hours average particulate matter of 2.5 μm, or less, count
|-
|<#AirLinkPm2p5_Nowcast[InǀOut]>
|The 24 hour [https://en.wikipedia.org/wiki/NowCast_%28air_quality_index%29 nowcast] weighted average particulate matter of 2.5 μm, or less, count
|-
|<#AirLinkPm10[InǀOut]>
|Current particulate matter of 10 μm, or less, count
|-
|<#AirLinkPm10_1hr[InǀOut]>
|Last hour average particulate matter of 10 μm, or less, count
|-
|<#AirLinkPm10_3hr[InǀOut]>
|Last 3 hours average particulate matter of 10 μm, or less, count
|-
|<#AirLinkPm10_24hr[InǀOut]>
|Last 24 hours average particulate matter of 10 μm, or less, count
|-
|<#AirLinkPm10_Nowcast[InǀOut]>
|The 24 hour [https://en.wikipedia.org/wiki/NowCast_%28air_quality_index%29 nowcast] weighted average particulate matter of 10 μm, or less, count
|-
|colspan="2" style="background:lightgray;"|Air Quality Index Values (allows use of the "dp=n" and "tc=y" parameters)
|-
|<#AirLinkAqiPm2p5[InǀOut]>
|Current particulate matter of 2.5 μm, or less AQI
|-
|<#AirLinkAqiPm2p5_1hr[InǀOut]>
|Last hour average particulate matter of 2.5 μm, or less, AQI
|-
|<#AirLinkAqiPm2p5_3hr[InǀOut]>
|Last 3 hour average particulate matter of 2.5 μm, or less, AQI
|-
|<#AirLinkAqiPm2p5_24hr[InǀOut]>
|Last 24 hour average particulate matter of 2.5 μm, or less, AQI
|-
|<#AirLinkAqiPm2p5_Nowcast[InǀOut]>
|Last 12 hour [https://en.wikipedia.org/wiki/NowCast_%28air_quality_index%29 nowcast] weighted average particulate matter of 2.5 μm, or less, AQI
|-
|<#AirLinkAqiPm10[InǀOut]>
|Current particulate matter of 10 μm, or less
|-
|<#AirLinkAqiPm10_1hr[InǀOut]>
|Last hour average particulate matter of 10 μm, or less, AQI
|-
|<#AirLinkAqiPm10_3hr[InǀOut]>
|Last 3 hour average particulate matter of 10 μm, or less AQI
|-
|<#AirLinkAqiPm10_24hr[InǀOut]>
|Last 24 hour average particulate matter of 10 μm, or less AQI
|-
|<#AirLinkAqiPm10_Nowcast[InǀOut]>
|Last 12 hour [https://en.wikipedia.org/wiki/NowCast_%28air_quality_index%29 nowcast] weighted average particulate matter of 10 μm, or less AQI
|-
|colspan="2" style="background:lightgray;"|Stats Values
|-
|<#AirLinkPct_1hr[InǀOut]>
|Percentage of filling of the 1 hr averages buffer
|-
|<#AirLinkPct_3hr[InǀOut]>
|Percentage of filling of the 3 hr averages buffer
|-
|<#AirLinkPct_24hr[InǀOut]>
|Percentage of filling of the 24 hr averages buffer
|-
|<#AirLinkPct_Nowcast[InǀOut]>
|Percentage of filling of the [https://en.wikipedia.org/wiki/NowCast_%28air_quality_index%29 nowcast] 12 hr averages buffer (2 hrs are required to get a nowcast value)
|-
|colspan="2" style="background:lightgray;"|Sensor Info
|-
|<#AirLinkFirmwareVersion[InǀOut]>
|Shows the AirLink firmware version as a date string.
NOTE: This web tag requires a WeatherLink Pro subscription to work
|-
|<#AirLinkTemp[InǀOut]>
|The sensors internal air temperature value
|-
|<#AirLinkHum[InǀOut]>
|The sensors internal air humidity value
|-
|<#AirLinkWifiRssi[InǀOut]>
|The sensors WiFi signal strength in dB - anything below -90 is considered very poor.
NOTE: This web tag requires a WeatherLink Pro subscription to work
|}


The directory structure for utils on the Website is:
=== Extra Sensors: Ecowitt ===


WebRoot (Content uploaded by CumulusUtils)
Ecowitt stations are sold under other names depending on nation, e.g. Ambient in USA, Froggit in central Europe, so Ecowitt is used as a generic name in this Wiki. See also [https://www.wxforum.net/index.php?board=111.0 WXForum.net].
|--- lib (JavaScript libraries, uploaded by CumulusUtils during a run)
|--- css (css files, uploaded by CumulusUtils during a run)
|--- CUicons (required to be manually copied once)


==== WH45 CO₂ sensor ====
=== Updating CumulusUtils ===
Updating CumulusUtils is done by completely overwriting the contents of the installation directory utils as if it were an installation. If you want to save the old installation, make a copy of the utils directory. The first run after an install or an update MUST be without [[Thrifty - Cutils Command Qualifier|Thrifty]].


=== Informational files ===
Available from release 3.9.5. From 3.27.0 the webtags as below are valid. The previous webtags with the minus sign i.s.o. underscores are deprecated.
In the distribution there are some files which are examples or defaults. When used, rename them (and possibly copy manually to the webroot).
No automatic copying of these files is done by CumulusUtils.


Beside the libraries the distribution contains:
{| class="wikitable" border="1"
#CUserAbout-example.txt : as an example of the user about file - when used rename to ''CUserAbout.txt''
|-
#CutilsMenu-example-for-use.def : as an example of the menu structure - when used rename to ''CutilsMenu.def''
!style="width:150px" |Webtag name
#CutilsCharts-default-for-use.def : when used rename to ''CutilsCharts.def''
!style="width:600px" |Function
#CutilsCharts-examples.def : not intended for direct use, contains some more elaborate examples of the [[ChartsCompiler]] possibilities
|-
| <#CO2>
| The actual CO<sub>2</sub> concentration in ppm
|-
| <#CO2_24h>
| The CO<sub>2</sub> concentration in ppm as a moving average over 24 hours
|-
| <#CO2_pm1>
| Air Quality expressed in terms of particulate matter of 1 μm/m<sup>3</sup>
|-
| <#CO2_pm1_24h>
| Air Quality expressed in terms of particulate matter of 1 μm/m<sup>3</sup>, 24 hours moving average
|-
| <#CO2_pm2p5>
| Air Quality expressed in terms of particulate matter of 2.5 μm/m<sup>3</sup> or less
|-
| <#CO2_pm2p5_24h>
| Air Quality expressed in terms of particulate matter of 2.5 μm/m<sup>3</sup>, or less, 24 hours moving average
|-
|<#CO2_pm2p5_aqi>
|The air quality index calculated from the CO2 sensors current pm 2.5 value
|-
|<#CO2_pm2p5_24h_aqi>
|The air quality index calculated from the CO2 sensors pm 2.5 24 hour average value
|-
| <#CO2_pm4>
| Air Quality expressed in terms of particulate matter of 4 μm/m<sup>3</sup> or less
| NOTE: probably - but uncertain - a derivative by Ecowitt (interpolation between 2.5 and 10?)
|-
| <#CO2_pm4_24h>
| Air Quality expressed in terms of particulate matter of 4 μm/m<sup>3</sup>, or less, 24 hours moving average
|-
| <#CO2_pm10>
| Air Quality expressed in terms of particulate matter of 10 μm/m<sup>3</sup>, or less (includes the 2.5 figure)
|-
| <#CO2_pm10_24h>
| Air Quality expressed in terms of particulate matter of 10 μm/m<sup>3</sup>, or less, 24 hours moving average
|-
|<#CO2_pm10_aqi>
|The air quality index calculated from the CO2 sensors current pm 10 value
|-
|<#CO2_pm10_24h_aqi>
|The air quality index calculated from the CO2 sensors pm 10 24 hour average value
|-
| <#CO2_temp><sup>See note</sup>
| Temperature as reported by Air Quality monitor.
|-
| <#CO2_hum>
| Relative Humidity as reported by Air Quality monitor
|}


To avoid confusion it is left to the user to edit and maintain the files for use either on the website or on the CumulusMX machine.
'''Note''': This temperature reflects the temperature of the sensor and would be used in combination with the sensors measured humidity (see next) for correction of the measured PM (particulate matter) value. This correction is responsibility of the user and is subject to a lot of discussion. Determination of how to correct the PM value is highly dependent on the conditions and placement of the sensor. See the specification sheet for the sensor or create some multivariate regression line based on calibration measurements. This is also valid for PM sensors like the AirLink. The normal amateur usage of PM sensors is that the uncorrected values are published.


When creating website the file ''CutilsHead.def'' may have importance to you. See [[Website Generator|Website]]
==== WN34 soil and water sensor ====


=== Manually installing without FTP ===
Cumulus MX can support the Ecowitt WN34 (other model types exist and are reported here as if WN34) soil and water temperature sensors. They are reported as "User Temperature 1" to "User Temperature 8".
NOTE: Not using the automatic upload system is disadvised. Because CumulusUtils is datadriven it requires the JSON files and the realtime.txt and realtimegauges.txt from CMX. Besides those, if you are using the UserAskedData feature of CumulusUtils there will be additional JSON files required for the server and without the upload module your will need a way to get them there. There is no copy feature like CMX has as CumulusUtils is designed as a website tool and an upload method is implicitely assumed present. However, manual handling can be done but is not advised.


All required installation and generated files are present in the utils directory and copied with ''FTP'' or ''PHP upload'' to the server during a run of CumulusUtils.
{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:600px" | Function
|-
|<#UserTemp1 - 8>
|The temperature of the sensor
|}


If you don't use ''FTP'' or ''PHP upload'' you will have to copy manually.
==== Extra Sensors ====
Below are described the tags resulting from ''Ecowitt Air quality (WH41,WH43,WH45)'', Ecowitt leak sensor (WH55), lighting detector (WH57), and extra temperature sensors (WN34)


=== Files involved ===
This sub-section applies only to those using Ecowitt GW1000 and possibly other devices (also Froggit DS1500, and other equivalents, see [[Supported Devices]]) an interface unit that picks up various external sensors and sends the data via an application programming interface to CumulusMX which then generates the following web tags:
The list of installation files required and their destination is below. The generated Javascript files are included in the table:


{| class="wikitable" border="1"
{| class="wikitable"
|-
|-
! Distribution File !! Destination !! Remark
!style="width:150px" |Webtag name
!style="width:600px" |Function
|-
|-
| index.html || <webroot>
|<#GW1000FirmwareVersion>
|GW1000 firmware version string
|-
|-
| CUgauges.js || <webroot>/lib || Despite the same name this file is very different from the one in CMX
|<#EcowittFirmwareVersion>
|Ecowitt firmware version string
|-
|-
| CUlanguage.js || <webroot>/lib
|<#EcowittReception>
|Reception signal strength for the Ecowitt devices in use
|-
|-
| HighchartsDefaults.js || <webroot>/lib
|<#EcowittCameraUrl>
|The URL for the HTTPS GET command to get the camera picture
|-
|-
| suncalc.js || <webroot>/lib
|<#EcowittVideoUrl>
|The URL for the HTTPS GET command to get the camera timelapse for yesterday (no older timelapses can be viewed through CMX)
|-
|-
| CUtween.min.js || <webroot>/lib
|}


{| class="wikitable" border="1"
|-
|-
| CUsteelseries.min.js || <webroot>/lib
!style="width:150px"|Webtag name
!style="width:600px"|The related description can be changed in 'strings.ini', but below are default descriptions that will be shown in the viewer/editor
|-
|-
| CURGraph.rose.js || <webroot>/lib
|<#AirQuality1 - 4>
| Air quality in μm/m<sup>3</sup>
|-
|-
| CURGraph.common.core.js || <webroot>/lib
|<#AirQualityAvg1 - 4>
| 24 hr moving average Air quality in μm/m<sup>3</sup>
|-
|-
| CUgauges-ss.css || <webroot>/css
|<#AirQualityIdx1 - 4>
|The calculated air quality index for sensors 1 to 4
|-
|-
! Generated File !! Destination !! Remark
|<#AirQualityAvgIdx1 - 4>
|The calculated 24 hour average air quality index for sensors 1 to 4
|-
|-
| cumulusutils.js || <webroot>/lib
|<#LeakSensor1 - 4>
|
|-
|-
| HighchartsLanguage.js || <webroot>/lib
|<#LightningDistance>
|Distance to last strike
Same units as wind run - miles/km/nm. Returns 0.0 if you don't have a sensor, GW1000 api returns max value you can put in a byte - 0xFF which translates to 158.4 miles = 255 km if have sensor but no strike detected yet, so CMX translates that to '----'.
|-
|-
| *.txt || <webroot>
|<#LightningTime>
|Date and Time of last strike.
Default without output parameters is locale's short time format e.g. 18:02 or 6:02 pm, without date, but tag accepts both date and time output parameters.
Returns '----' if you don't have sensor or there has not been a strike since the sensor was installed.
|-
|-
| airlinkdataIn2p5.json || <webroot>
|<#LightningStrikesToday>
|Number of lighting strikes today
|-
|-
| airlinkdataIn10.json || <webroot>
|<#UserTemp1 - 8>
|User Temperature 1 - 8
|}

The WH32 produces Temperature, Humidity and Dewpoint tags as the Davis above, WH51 soilmoisture produces similar tags.

{| class="wikitable" border="1"
|-
|-
| airlinkdataOut2p5.json || <webroot>
!style="width:150px"|Webtag name
!style="width:600px"|The related description can be changed in 'strings.ini', but below are default descriptions that will be shown in the viewer/editor
|-
|-
| airlinkdataOut10.json || <webroot>
|<#ExtraTemp1 - 8>
|Extra temperature Sensor 1 - 8
|-
|-
| extrasensorsdata.json || <webroot>
|<#ExtraDP1 - 8>
|Extra dew point Sensor 1 - 8
|-
|-
| customlogsRecentdata.json || <webroot>
|<#ExtraHum1 - 8>
|Extra humidity Sensor 1 - 8
|-
|-
| customlogsDailydata.json || <webroot>
|colspan="2" style="background:lightgray;"| WH51 soilmoisture sensor
|-
|-
| CUserdataRECENT.json || <webroot>
|<#SoilMoisture1 - 8>
|Soil moisture 1 - 8
|-
|-
| CUserdataDAILY.json || <webroot>
|}

=Recent History=

Please refer to the [[Recent history]] page for full information about using the tags in the following two tables.

All tags in the tables below have:
#Mandatory input parameters as in this [[Webtags/Parameters#Input_modification_Parameters|description]]
#Optional output parameters to modify the time format as in this [[Webtags/Parameters#Multiple_Output_Format_Modifier_parameters_for_times_and_dates|description]]

== Timestamp tag ==
Although as [[Recent history]] page explains, the history is intended to cover every minute in last 7 days, some entries may be at less frequent intervals, and when clocks change some entries will be missing altogether.
{| class="wikitable" border="1"
|-
|-
| CUserdataALL.json || <webroot>
!style="width:150px" | Webtag name
!style="width:300px" | Function
!style="width:500px" | Parameters example
|-
|-
! Realtime Files !! Destination !! Remark
|colspan="3" style="background:lightgray;"|Time-stamp tag
|-
|-
| realtime.txt || <webroot> || Served by CMX [1]
|<#RecentTS>
|Gives the timestamp of the data that will be returned for any other recent history tag that uses same '''d, h, and m''' parameters
|<#RecentTS h=3 m=1 format="HH:mm">
|}

== All Recent History Tags ==

{| class="wikitable" border="1"
|-
|-
| realtimegauges.txt || <webroot> || Served by CMX [1]
!style="width:150px" | Webtag name
!style="width:300px" | Function
!style="width:500px" | Input Modification Parameters example
|-
|-
| airlinkrealtime.txt || <webroot> || When the AirLink device is configured [2]
|colspan="3" style="background:lightgray;"|Temperature & Humidity tags
|-
|-
| extrasensorsrealtime.txt || <webroot> || When Extra Sensor devices are configured [2]
|<#RecentOutsideTemp>
|Outside Temperature
| <#RecentOutsideTemp h=3 m=1>&nbsp;<#tempunit> will display the temperature at the start of the period for which <#temptrend> is calculated
|-
|-
| customlogsrealtime.txt || <webroot> || When Extra Sensor devices are configured [2]
|<#RecentWindChill>
|Wind Chill
| <#RecentWindChill d=48 m=1> reports the wind chill temperature 2 days ago
|-
|-
| meteocamrealtime.txt || <webroot> || When Extra Sensor devices are configured [2]
|<#RecentDewPoint>
|Dew Point
| <#RecentDewPoint h=25> reports the dew point temperature just over a day ago
|-
|<#RecentApparent>
|Apparent
| <#RecentApparent m30> reports the dew point temperature half an hour ago
|-
|<#RecentHeatIndex>
|Heat Index
| <#RecentHeatIndex m=121> reports the heat index about 2 hours ago
|-
|<#RecentHumidity>
|Relative Humidity
| d=n (where n runs 0 to 6) days ago; h=n (where n is any number of hours ago); m=n (where n is any number of minutes ago)
|-
|colspan="3" style="background:lightgray;"|Wind <br>(Note: Wind 'Speed', 'Gust' and 'Latest' have the usual Cumulus meanings see [[Wind measurement]])
|-
|<#RecentWindSpeed>
|Wind Speed
| <#RecentWindSpeed m=10> will display the average wind speed 10 minutes ago
|-
|<#RecentWindGust>
|Wind Gust

(reports maximum gust from build 1088 of version 1.9.4)
| <#RecentWindGust d=1 m=1> will report the wind gust at approximately the same time yesterday
|-
|<#RecentWindLatest>
|Wind Latest.
| d=n (where n runs 0 to 6) days ago; h=n (where n is any number of hours ago); m=n (where n is any number of minutes ago)
|-
|<#RecentWindDir>
|Wind Direction (instantaneous)
| <#RecentWindDir m=10> will tell you which direction the wind was blowing from 10 minutes ago
|-
|<#RecentWindAvgDir>
|Wind Direction (average)
|<#RecentWindAvgDir d=6> will say what the calculated average wind direction was at this time at the start of the week
|-
|colspan="3" style="background:lightgray;"|Pressure
|-
|<#RecentPressure>
|Sea-level Pressure
| <#RecentPressure h=3 m=1> gives the sea level pressure when <#presstrendval> started tracking the pressure
|-
|colspan="3" style="background:lightgray;"|Rainfall
|-
|<#RecentRainToday>
|Daily rain total from last roll-over to specified time
| d=n (where n runs 0 to 6) days ago; h=n (where n is any number of hours ago); m=n (where n is any number of minutes ago)
|-
|colspan="3" style="background:lightgray;"|Solar & UV
|-
|<#RecentSolarRad>
|Solar Radiation
| d=n (where n runs 0 to 6) days ago; h=n (where n is any number of hours ago); m=n (where n is any number of minutes ago)
|-
|<#RecentUV>
|UV Index
| d=n (where n runs 0 to 6) days ago; h=n (where n is any number of hours ago); m=n (where n is any number of minutes ago)
|-
|colspan="3" style="background:lightgray;"|Indoor Temperature & Humidity tags
|-
|<#RecentIndoorTemp>
|Indoor Temperature
| Parameters as with other Recent webtags
|-
|<#RecentIndoorHumidity>
|Indoor Temperature
| Parameters as with other Recent webtags
|-
|colspan="3" style="background:lightgray;"|Outdoor Temperature & Humidity tags
|-
|<#RecentWindChill>
|Wind Chill (if temperature is below 10°C or 50 °F, then the new Feels Like now available in MX (next item) will report this same value).
| <#RecentWindChill d=48 m=1> reports the wind chill temperature 2 days ago
|-
|<#RecentFeelsLike>
| Feels Like Temperature
| <#RecentFeelsLike h=12 m=1> reports the feel like temperature 12 hours ago
|-
|<#RecentHumidex>
| Canadian Humidity Index (humidex) Dimensionless - no units
| <#RecentHumidex h=3> reports humidex 3 hours ago
|-
|colspan="3" style="background:lightgray;"|Air Quality tags
|}
|}
[1] : These files may be served by CMX in another directory (just like the CMX JSON data files). In that case the relative location is specified in the inifile parameter ''CumulusRealTimeLocation''.<br/>
[2] : these files are generated in the utils directory and need to be configured as Extra Webfiles in CMX with the ticks: Realtime, Process and FTP. Note that the generated file has the webtags and remains local, the processed files contains the values and must be send to the <webroot>.


== Running CumulusUtils ==
=Today=

Cumulus allows some control over the time that "Today" begins:
# You can define the log rollovertime. Choose between 9am or midnight.
# For the weather diary feature '''SnowDepthHour''' The default SnowDepthHour is 0

Readings from your weather station are assigned to the "Today" based on 3 options for [[Meteorological day]]
# starting at 9:00 am, based on winter time, so switching to 10:00 during Daylight Saving (summer) time, or
# starting at 9:00 am, all year round, or
# aligned with calendar days, so today starts at midnight

The independence of the start time for weather diary and weather station related web tags needs to be remembered when labelling web tags from the two tables below. It was assumed that you would use 9 a.m. as start time for both, but not care when snow fell, as it often has in the UK, after Summer Time has begun, so weather station tags were by default reporting from 10 a.m. local time and snow as at 9 a.m.

In MX, if you choose 9 a.m. (optionally 10 a.m. in summer) for rollover, so all the standard derivative are assigned to the date the meteorological day starts as Today, but the sunshine hours recorded against today will be from midnight on the said date.

==Weather Diary==

This first table lists all the web tags available for reporting what is recorded in the weather diary. Just to be clear, the web tags shown below, will report data for previous day if the current time is before the snow depth hour setting, and report data for the current day if the current time matches the snow depth hour or is later.
{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:650px" | Function
|-
|<#snowDepth>
|Meteorologists report snow depth in cm, so this is default unit for Cumulus. Snowdepth should include the snow24h amount so automatic measurement (by laser) always is the correct amount!

If there is no entry in Weather Diary for the day explained above, reports zero. Input is to 2 decimal places to accommodate inches as unit (see ''station settings=> unit settings'' in CMX).
|-
|<#snow24h>
|Fresh snow which fell the past 24 hrs. If this amount is substracted from snowdepth you find the melt/compression of the previous snow.
|-
|<#snowlying>
| '''deprecated''' - If there is no entry in Weather Diary for the day explained above, this web tag returns null. Otherwise reports 1 if tick in diary, 0 is unticked.
|-
|<#snowfalling>
| '''deprecated''' - If there is no entry in Weather Diary for the day explained above, this web tag returns null. Otherwise reports 1 if tick in diary, 0 is unticked.
|}

==Today.ini==

These tag names relate to the current [[Meteorological day]] and they are populated from information held in [[today.ini]]; Where a tag name reports a value specific to a past time in today-so-far, there will also be a tag name that can give the time of day, shown in same row of table below. For those that cover whole day so far, the final column contains "n/a".

There is some inconsistency in naming with "T" not included in all tag names, "T" is used in conjunction with "H" or "L" as a suffix for extreme values/time-stamps, but a prefix "T" can identify today's value, or prefix "T" can signify a time-stamp.

{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:650px" | Function
!style="width:150px" | Time Webtag name
|-
|colspan="3" style="background:lightgray;"|Temperature & Humidity
|-
|<#tempTH>
|Today's highest temperature
|<#TtempTH>
|-
|<#tempTL>
|Today's lowest temperature
|<#TtempTL>
|-
|<#avgtemp>
|The [[Average_temperature|average]] temperature so far today (calculated from all temperature readings processed by Cumulus, [[Today.ini|today.ini]] stores a cumulative aggregate and counts the number of values processed, so a division gives this output)
|n/a
|-
|<#temprange>
|The temperature range (<#tempTH> - <#tempTL>) so far today (Cumulus calculates all these tags using Celsius values, but outputs them in your chosen units)
|n/a
|-
|<#tempMidnightTH>
|Today's highest temperature since midnight
|<#TtempMidnightTH>
|-
|<#tempMidnightTL>
|Today's lowest temperature since midnight
|<#TtempMidnightTL>
|-
|<#tempMidnightRangeT>
|The temperature range (max - min) so far today from midnight (Cumulus calculates all these tags using Celsius values, but outputs them in your chosen units)
|n/a
|-
|<#temp9amTH>
|Today's highest temperature since 9am (rollover)
|<#Ttemp9amTH>
|-
|<#temp9amTL>
|Today's lowest temperature since 9am (rollover)
|<#Ttemp9amTL>
|-
|<#temp9amRangeT>
|The temperature range (max - min) so far today from 9am (Cumulus calculates all these tags using Celsius values, but outputs them in your chosen units)
|n/a
|-
|<#apptempTH>
|Today's high apparent temperature
|<#TapptempTH>
|-
|<#apptempTL>
|Today's low apparent temperature
|<#TapptempTL>
|-
|<#feelslikeTH>
|Today's high feels like temperature
|<#TfeelslikeTH>
|-
|<#feelslikeTL>
|Today's low feels like temperature
|<#TfeelslikeTL>
|-
|<#humidexTH>
|Today's high Canadian Humidity Index
|<#ThumidexTH>
|-
|<#heatindexTH>
|Today's high heat index
|<#TheatindexTH>
|-
|<#wchillTL>
|Today's greatest wind chill
|<#TwchillTL>
|-
|<#dewpointTH>
|Today's highest dew point
|<#TdewpointTH>
|-
|<#dewpointTL>
|Today's lowest dew point
|<#TdewpointTL>
|-
|<#humTH>
|Today's highest humidity
|<#ThumTH>
|-
|<#humTL>
|Today's lowest humidity
|<#ThumTL>
|-
|colspan="3" style="background:lightgray;"|Precipitation
|-
|<#rrateTM>
|Today's maximum rain rate
|<#TrrateTM>
|-
|<#hourlyrainTH>
|Today's highest hourly rain
|<#ThourlyrainTH>
|-
|<#rain24hourTH>
|Today's highest rain for 24 hours
|<#Train24hourTH>
|-
|<#RG11RainToday>
|If you have an RG-11 rain sensor configured in "Tipping Bucket" mode, this gives today's rain total so far according to the sensor
| n/a
|-
|colspan="3" style="background:lightgray;"|Pressure
|-
|<#pressTH>
|Today's highest pressure reading
|<#TpressTH>
|-
|<#pressTL>
|Today's lowest pressure reading
|<#TpressTL>
|-
|colspan="3" style="background:lightgray;"|Wind
|-
|<#windTM>
|Today's maximum (average) wind speed
|<#TwindTM>
|-
|<#wgustTM>
|Today's maximum wind gust
|<#TwgustTM>
|-
|<#bearingTM>
|The wind bearing at the time of today's high gust (<#wgustTM>) in degrees
|<#TwgustTM>
|-
|<#directionTM>
|The wind bearing at the time of today's high gust (<#wgustTM>) in as a compass point (e.g. "NNE")
|<#TwgustTM>
|-
|<#Tbeaufort>
|Today's highest wind speed, expressed in the Beaufort scale
|<#TwindTM>
|-
|<#Tbeaufortnumber>
|Today's high wind speed on the Beaufort scale, without a leading "F", e.g. "6"
|<#TwindTM>
|-
|<#windrun>
|The total wind run so far today
|N/A
|-
| <#windAvg>
|The wind run divided by time passed since rollover to express it as an average wind speed
| n/a
|-
|<#domwindbearing>
|Today's dominant wind direction in degrees
|n/a
|-
|<#domwinddir>
|Today's dominant wind direction as compass point
|n/a
|-
|<#Tbeaudesc>
|Beaufort 'description' for today's high wind speed
|n/a
|-
|colspan="3" style="background:lightgray;"|Miscellaneous
|-
|<#ET>
|Today's [http://en.wikipedia.org/wiki/Evapotranspiration evapotranspiration], if not on the station can be calculated by CMX.
|N/A
|-
|<#heatdegdays>
|Today's [[Heat/cold_degree_days_and_Chill_hours|heating degree days]]
|n/a
|-
|<#cooldegdays>
|Today's [[Heat/cold_degree_days_and_Chill_hours|cooling degree days]]
|n/a
|-
|<#solarTH>
|Today's high solar radiation value (Solar sensor needed)
|<#TsolarTH>
|-
|<#UVTH>
|Today's high UV Index (UV sensor needed)
|<#TUVTH>
|-
|<#SunshineHours>
|Today's hours of sunshine so far.
|n/a
|-
|<#LightningStrikesToday>
|Number of strikes since midnight, default 0

(other lightning tags can be found in [[#Current_Conditions|Current Conditions table]])
|-
| <#chillhoursToday>
| The incremental chill hours figure since start of today (Compare with Cumulative seasonal Chill Hours at end of today <#chillhours> found in [[#Current_Conditions|Current Conditions table]])
|}

= No Commas; RC Webtags =

The conversion of comma decimal separator to a point is described on the [[Webtags/Parameters#Changing_the_decimal_separator|parameter page]]. However, there is a set of legacy webtags which produce that value without a comma without parameter. Those webtags have a prefix of RC and are listed separately. Those webtags still exist and are listed here without further comment.

== Current conditions ==

<#RCtemp>, <#RCdew>, <#RCheatindex>, <#RChum>, <#RCinhum>, <#RCintemp>, <#RCpress>, <#RCrfall>, <#RCrrate>, <#RCwchill>, <#RCwgust>, <#RCwspeed>, <#RCwlatest>

== Today ==

<#RCpressTH>, <#RCpressTL>, <#RCrrateTM>, <#RCtempTH>, <#RCtempTL>, <#RCwgustTM>, <#RCdewpointTH>, <#RCdewpointTL>, <#RCwchillTL>, <#RCheatindexTH>, <#RCapptempTH>, <#RCapptempTL>

== Recent History ==

<#RCRecentOutsideTemp>, <#RCRecentWindSpeed>, <#RCRecentWindGust>, <#RCRecentWindLatest>, <#RCRecentWindChill>, <#RCRecentDewPoint>, <#RCRecentHeatIndex>, <#RCRecentPressure>, <#RCRecentRainToday>, <#RCRecentUV>

=Yesterday=

Note that the Y indicating yesterday is sometimes a prefix, sometimes a suffix (with H for High, L for Low), web tags are not named consistently!

For web tags that refer to a particular time of day, there is a corresponding web tag that can give that time of day.

{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:550px" | Function
!style="width:150px" | Time Webtag name
|-
|colspan="3" style="background:lightgray;"|Temperature & Humidity
|-
|<#tempYH>
|Yesterday's highest temperature
|<#TtempYH>
|-
|<#tempYL>
|Yesterday's lowest temperature
|<#TtempYL>
|-
|<#temprangeY>
|The temperature range (max - min) yesterday
|n/a
|-
|<#tempMidnightYH>
|Yesterday's highest temperature from midnight
|<#TtempMidnightYH>
|-
|<#tempMidnightYL>
|Yesterday's lowest temperature from midnight
|<#TtempMidnightYL>
|-
|<#tempMidnightRangeY>
|The temperature range (max - min) yesterday from midnight
|n/a
|-
|<#temp9amYH>
|Yesterdays's highest temperature 9am (rollover)
|<#Ttemp9amTH>
|-
|<#temp9amYL>
|Yesterdays's lowest temperature 9am (rollover)
|<#Ttemp9amTL>
|-
|<#temp9amRangeY>
|The temperature range (max - min) yesterday from 9aam (Cumulus calculates all these tags using Celsius values, but outputs them in your chosen units)
|n/a
|-
|<#avgtempY>
|Yesterday's average temperature
|n/a
|-
|<#apptempYH>
|Yesterday's high apparent temperature
|<#TapptempYH>
|-
|<#apptempYL>
|Yesterday's low apparent temperature
|<#TapptempYL>
|-
| <#Ychillhours>
| The Cumulative [[Heat/cold_degree_days_and_Chill_hours#Chill_Hours_and.2For_Air_Frost|Chill Hours]] as recorded at rollover (the end of meteorological yesterday)
| n/a
|-
| <#chillhoursYest>
| The incremental [[Heat/cold_degree_days_and_Chill_hours#Chill_Hours_and.2For_Air_Frost|Chill Hours]] yesterday

(compare with <#chillhoursToday> described in [[#Today.ini]] table)
| n/a
|-
|<#feelslikeYH>
|Yesterday's high feels like temperature
|<#TfeelslikeYH>
|-
|<#feelslikeYL>
|Yesterday's low feels like temperature
|<#TfeelslikeYL>
|-
|<#humidexYH>
|Yesterday's high Canadian Humidity Index
|<#ThumidexYH>
|-
|<#heatindexYH>
|Yesterday's high heat index
|<#TheatindexYH>
|-
|<#wchillYL>
|Yesterday's greatest wind chill (i.e. lowest temperature)
|<#TwchillYL>
|-
|<#dewpointYL>
|Yesterday's lowest dew point
|<#TdewpointYL>
|-
|<#dewpointYH>
|Yesterday's highest dew point
|<#TdewpointYH>
|-
|<#humYH>
|High humidity yesterday
|<#ThumYH>
|-
|<#humYL>
|Low humidity yesterday
|<#ThumYL>
|-
|colspan="3" style="background:lightgray;"|Rainfall
|-
|<#rfallY>
|The total rainfall for yesterday according to the connected weather station
|n/a
|-
|<#RG11RainYest>
|The total rainfall for yesterday according to an RG-11 rain sensor configured in "Tipping Bucket" mode
|n/a
|-
|<#rrateYM>
|Yesterday's maximum rain rate
|<#TrrateYM>
|-
|<#hourlyrainYH>
|Yesterday's highest hourly rain
|<#ThourlyrainYH>
|-
|<#rain24hourYH>
|Yesterday's highest hourly rain over 24 hours
|<#Train24hourYH>
|-
|colspan="3" style="background:lightgray;"|Pressure
|-
|<#pressYH>
|Yesterday's highest pressure reading
|<#TpressYH>
|-
|<#pressYL>
|Yesterday's lowest pressure reading
|<#TpressYL>
|-
|colspan="3" style="background:lightgray;"|Wind
|-
|<#windYM>
|Yesterday's maximum (average) wind speed
|<#TwindYM>
|-
|<#wgustYM>
|Yesterday's maximum wind gust
|<#TwgustYM>
|-
|<#bearingYM>
|The wind bearing at the time of yesterday's high gust
|<#TwgustYM>
|-
|<#directionYM>
|The wind direction at the time of yesterday's high gust as a compass point (e.g. "NNW")
|<#TwgustYM>
|-
|<#Ybeaufort>
|Yesterday's highest wind speed, expressed in the Beaufort scale
|<#TwindYM>
|-
|<#Ybeaufortnumber>
|Yesterday's high wind speed on the Beaufort scale, without a leading "F", e.g. "6"
|<#TwindYM>
|-
|<#Ybeaudesc>
|Beaufort 'description' for yesterday's high wind speed
|n/a
|-
|<#domwindbearingY>
|Yesterday's dominant wind direction in degrees
|n/a
|-
|<#domwinddirY>
|Yesterday's dominant wind direction as compass point
|n/a
|-
|<#windrunY>
|The total wind run for yesterday
|n/a
|-
| <#windAvgY>
| The wind run yesterday divided by 24 hours to express it as an average wind speed
| n/a
|-
|colspan="3" style="background:lightgray;"|Miscellaneous
|-
|<#heatdegdaysY>
|Yesterday's [[Heat/cold_degree_days_and_Chill_hours|heating degree days]]
|n/a
|-
|<#cooldegdaysY>
|Yesterday's [[Heat/cold_degree_days_and_Chill_hours|cooling degree days]]
|n/a
|-
|<#YSunshineHours>
|Yesterday's hours of sunshine so far.
|n/a
|-
|<#solarYH>
|Yesterday's high solar radiation value (Solar sensor needed)
|<#TsolarYH>
|-
|<#UVYH>
|Yesterday's high UV Index (UV sensor needed)
|<#TUVYH>
|}

=Averages=
{| class="wikitable" border="1"
|-
!style="width:300px"|Webtag name
!style="width:700px"|Function
|-
|colspan="2" style="background:lightgray;"|Monthly
|-
|<#ByMonthTempAvg mon=[1-12]>
|Mean for requested month over the entire history. Omit the mon parameter for the current month
|-
|<#MonthTempAvg m=[1-12] y=[YYYY]>
|Mean for the requested specific month. Omit the parameters for the current month
|-
|colspan="2" style="background:lightgray;"|Yearly
|-
|<#YearTempAvg y=[YYYY]>
|Mean for the requested year. Omit the y parameter for the current year
|}


=Records=
==Yearly==

{| class="wikitable" border="1"
|-
!style="width:150px"|Webtag name
!style="width:300px"|Function
!style="width:350px"|Time Webtag
!style="width:150px"|Date Webtag
|-
|colspan="4" style="background:lightgray;"|Temperature & Humidity
|-
|<#YearTempH>
|This year's highest temperature
|<#YearTempHT>
|<#YearTempHD>
|-
|<#YearTempL>
|This year's lowest temperature
|<#YearTempLT>
|<#YearTempLD>
|-
|<#YearHighDailyTempRange>
|This year's highest Daily Temp Range
|n/a
|<#YearHighDailyTempRangeD>
|-
|<#YearLowDailyTempRange>
|This year's lowest Daily Temp Range
|n/a
|<#YearLowDailyTempRangeD>
|-
|<#YearHeatIndexH>
|This year's highest USA heat index
|<#YearHeatIndexHT>
|<#YearHeatIndexHD>
|-
|<#YearWChillL>
|This year's greatest wind chill (i.e. lowest temperature)
|<#YearWChillLT>
|<#YearWChillLD>
|-
|<#YearAppTempH>
|This year's highest apparent temperature
|<#YearAppTempHT>
|<#YearAppTempHD>
|-
|<#YearAppTempL>
|This year's lowest apparent temperature
|<#YearAppTempLT>
|<#YearAppTempLD>
|-
|<#YearFeelsLikeH>
|This year's highest feels like temperature
|<#YearFeelsLikeHT>
|<#YearFeelsLikeHD>
|-
|<#YearFeelsLikeL>
|This year's lowest feels like temperature
|<#YearFeelsLikeLT>
|<#YearFeelsLikeLD>
|-
|<#YearHumidexH>
|This year's highest Canadian Humidity Index
|<#YearHumidexHT>
|<#YearHumidexHD>
|-
|<#YearDewPointH>
|This year's highest dew point
|<#YearDewPointHT>
|<#YearDewPointHD>
|-
|<#YearDewPointL>
|This year's lowest dew point
|<#YearDewPointLT>
|<#YearDewPointLD>
|-
|<#YearMinTempH>
|This year's highest daily minimum temperature
|n/a
|<#YearMinTempHD>
|-
|<#YearMaxTempL>
|This year's lowest daily maximum temperature
|n/a
|<#YearMaxTempLD>
|-
|<#YearHumH>
|This year's high humidity
|<#YearHumHT>
|<#YearHumHD>
|-
|<#YearHumL>
|This year's low humidity
|<#YearHumLT>
|<#YearHumLD>
|-
|colspan="4" style="background:lightgray;"|Pressure
|-
|<#YearPressH>
|This year's high pressure
|<#YearPressHT>
|<#YearPressHD>
|-
|<#YearPressL>
|This year's low pressure
|<#YearPressLT>
|<#YearPressLD>
|-
|colspan="4" style="background:lightgray;"|Wind
|-
|<#YearGustH>
|This year's high wind gust
|<#YearGustHT>
|<#YearGustHD>
|-
|<#YearWindH>
|This year's high wind speed
|<#YearWindHT>
|<#YearWindHD>
|-
|<#YearWindRunH>
| This year's highest Daily Wind Run
|n/a
|<#YearWindRunHD>
|-
|colspan="4" style="background:lightgray;"|Rainfall
|-
|<#YearRainRateH>
|This year's highest rainfall rate
|<#YearRainRateHT>
|<#YearRainRateHD>
|-
|<#YearHourlyRainH>
|This year's highest hourly rain
|<#YearHourlyRainHT>
|<#YearHourlyRainHD>
|-
|<#YearDailyRainH>
|This year's high daily rain
|n/a
|<#YearDailyRainHD>
|-
|<#YearRain24HourH>
|This year's high 24hr rain
|<#YearRain24HourHT>
|<#YearRain24HourHD>
|-
|<#YearMonthlyRainH>
|This year's high monthly rain
|n/a
|<#YearMonthlyRainHD>
|-
|<#YearLongestDryPeriod>
|Longest period without rain ending this year (days)
|n/a
|<#YearLongestDryPeriodD>
|-
|<#YearLongestWetPeriod>
|Longest period of rain every day ending this year (days)
|n/a
|<#YearLongestWetPeriodD>
|-
|colspan="4" style="background:lightgray;"|Solar
|-
|<#AnnualET>
|Year's total [http://en.wikipedia.org/wiki/Evapotranspiration evapotranspiration], if not on the station can be calculated by CMX.
|n/a
|n/a
|-
| <#SunshineHoursYear>
| the total sunshine hours in year-to-date
| n/a
| n/a
|}

==All Time==

The default formats are:
*The default format for an extreme month is to show the month name in full i.e. format 'MMMM' followed by the year in full.
*For an extreme day it shows the day of the month and the month name in full i.e. format "dd MMMM" (same for Cumulus 1 and Cumulus MX), prefixed with the word 'on' again ending with the year.
*For the highest/lowest within a day in the year it shows both time and date adding the word "at" before the time, and the word 'on' before the date (i.e. on the standard web page the time comes first, not as seen in admin interface).

You can change the default output on either the standard web template, or in your own file, by using the [[#Time.2FDate_.27format.27_Parameter|formats]], please check the [[Webtags/Parameters#Multiple_Output_Format_Modifier_parameters_for_times_and_dates|Parameter page]].

Note that unlike the this month and this year web tags, the time and the date are both included in the default format of the standard time-stamp web tags for the 'highest minimum' and 'lowest maximum' temperatures, yet another inconsistency!

{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:400px" | Function
!style="width:150px" | Date/Time Webtag name
|-
|colspan="3" style="background:lightgray;"|Temperature & Humidity
|-
|<#tempH>
|All time high temperature
|<#TtempH>
|-
|<#tempL>
|All time low temperature
|<#TtempL>
|-
|<#mintempH>
|All time high minimum temperature
|<#TmintempH>
|-
|<#maxtempL>
|All time low maximum temperature
|<#TmaxtempL>
|-
|<#LowDailyTempRange>
|All time low daily temperature range
|<#TLowDailyTempRange>
|-
|<#HighDailyTempRange>
|All time high daily temperature range
|<#THighDailyTempRange>
|-
|<#apptempH>
|All time high apparent temperature
|<#TapptempH>
|-
|<#apptempL>
|All time low apparent temperature
|<#TapptempL>
|-
|<#feelslikeH>
|All time high feels like temperature
|<#TfeelslikeH>
|-
|<#feelslikeL>
|All time low feels like temperature
|<#TfeelslikeL>
|-
|<#humidexH>
|All time high Canadian Humidity Index
|<#ThumidexH>
|-
|<#heatindexH>
|All time high USA heat index
|<#TheatindexH>
|-
|<#dewpointH>
|All time high dew point
|<#TdewpointH>
|-
|<#dewpointL>
|All time low dew point
|<#TdewpointL>
|-
|<#humH>
|All time high humidity
|<#ThumH>
|-
|<#humL>
|All time low humidity
|<#ThumL>
|-
|<#wchillL>
|All time greatest wind chill (i.e. lowest temperature, but highest wind speed)
|<#TwchillL>
|NOTE: These were misnamed ''wchillH'' which names have been deprecated.
|-
|colspan="3" style="background:lightgray;"|Rainfall
|-
|<#rrateM>
|All time high rain rate
|<#TrrateM>
|-
|<#rfallH>
|All time high daily rain
|<#TrfallH>
|-
|<#rfallhH>
|All time high hourly rain
|<#TrfallhH>
|-
|<#rfallmH>
|All time high monthly rain
|<#TrfallmH>
|-
|<#LongestDryPeriod>
|All time longest dry period (days)
|<#TLongestDryPeriod>
|-
|<#LongestWetPeriod>
|All time longest wet period (days)
|<#TLongestWetPeriod>
|-
|colspan="3" style="background:lightgray;"|Pressure
|-
|<#pressH>
|All time high pressure
|<#TpressH>
|-
|<#pressL>
|All time low pressure
|<#TpressL>
|-
|colspan="3" style="background:lightgray;"|Wind
|-
|<#gustM>
|All time high wind gust
|<#TgustM>
|-
|<#wspeedH>
|All time high average wind speed
|<#TwspeedH>
|-
|<#windrunH>
|All time high daily wind run
|<#TwindrunH>
|}

==Monthly==

The web tags in the date column default output dates in the format "dd MMMM". For web tags that represent daily values, there are (obviously) no corresponding time web tags, but for high and low spot values the default 'h:mm' format of the time output can be changed.

{| class="wikitable" border="1"
|-
!style="width:150px"|Webtag name
!style="width:300px"|Function
!style="width:150px"|Time Webtag name
!style="width:150px"|Date Webtag name
|-
|colspan="4" style="background:lightgray;"|Temperature & Humidity
|-
|<#MonthTempH>
|This months high temperature
|<#MonthTempHT>
|<#MonthTempHD>
|-
|<#MonthTempL>
|This months low temperature
|<#MonthTempLT>
|<#MonthTempLD>
|-
|<#MonthMinTempH>
|This months highest daily minimum temperature
|n/a
|<#MonthMinTempHD>
|-
|<#MonthMaxTempL>
|This months lowest daily maximum temperature
|n/a
|<#MonthMaxTempLD>
|-
|<#MonthHighDailyTempRange>
|High Daily Temp Range
|n/a
|<#MonthHighDailyTempRangeD>
|-
|<#MonthLowDailyTempRange>
|Low Daily Temp Range
|n/a
|<#MonthLowDailyTempRangeD>
|-
|<#MonthHeatIndexH>
|This months high USA heat index
|<#MonthHeatIndexHT>
|<#MonthHeatIndexHD>
|-
|<#MonthWChillL>
|This months greatest wind chill (i.e. lowest temperature)
|<#MonthWChillLT>
|<#MonthWChillLD>
|-
|<#MonthAppTempH>
|This month's high apparent temperature
|<#MonthAppTempHT>
|<#MonthAppTempHD>
|-
|<#MonthAppTempL>
|This month's low apparent temperature
|<#MonthAppTempLT>
|<#MonthAppTempLD>
|-
|<#MonthFeelsLikeH>
|This month's highest feels like temperature
|<#MonthFeelsLikeHT>
|<#MonthFeelsLikeHD>
|-
|<#MonthFeelsLikeL>
|This months lowest feels like temperature
|<#MonthFeelsLikeLT>
|<#MonthFeelsLikeLD>
|-
|<#MonthHumidexH>
|This month's highest Canadian Humidity Index
|<#MonthHumidexHT>
|<#MonthHumidexHD>
|-
|<#MonthDewPointH>
|This month's high dew point
|<#MonthDewPointHT>
|<#MonthDewPointHD>
|-
|<#MonthDewPointL>
|This month's low dew point
|<#MonthDewPointLT>
|<#MonthDewPointLD>
|-
|<#MonthHumH>
|This month's highest humidity
|<#MonthHumHT>
|<#MonthHumHD>
|-
|<#MonthHumL>
|This month's lowest humidity
|<#MonthHumLT>
|<#MonthHumLD>
|-
|colspan="4" style="background:lightgray;"|Pressure
|-
|<#MonthPressH>
|This month's highest pressure
|<#MonthPressHT>
|<#MonthPressHD>
|-
|<#MonthPressL>
|This month's lowest pressure
|<#MonthPressLT>
|<#MonthPressLD>
|-
|colspan="4" style="background:lightgray;"|Wind
|-
|<#MonthGustH>
|This month's highest wind gust
|<#MonthGustHT>
|<#MonthGustHD>
|-
|<#MonthWindH>
|This month's highest wind speed
|<#MonthWindHT>
|<#MonthWindHD>
|-
|<#MonthWindRunH>
|This month's high Daily Wind Run
|n/a
|<#MonthWindRunHD>
|-
|<#windrunmonth>
|This month's Wind Run so far
|n/a
|n/a
|-
|colspan="4" style="background:lightgray;"|Rainfall
|-
|<#MonthRainRateH>
|This month's highest rainfall rate
|<#MonthRainRateHT>
|<#MonthRainRateHD>
|-
|<#MonthHourlyRainH>
|This month's highest hourly rain
|<#MonthHourlyRainHT>
|<#MonthHourlyRainHD>
|-
|<#MonthRain24HourH>
|This month's highest 24hr rain
|<#MonthRain24HourHT>
|<#MonthRain24HourHD>
|-
|<#MonthDailyRainH>
|This month's wettest day (greatest daily rain)
|n/a
|<#MonthDailyRainHD>
|-
|<#MonthLongestDryPeriod>
|Longest dry period ending this month (days)
|n/a
|<#MonthLongestDryPeriodD>
|-
|<#MonthLongestWetPeriod>
|Longest period of rain every day, ending this month (days)
|n/a
|<#MonthLongestWetPeriodD>
|-
|colspan="4" style="background:lightgray;"|Solar
|-
| <#SunshineHoursMonth>
| the total sunshine hours in month-to-date
| n/a
| n/a
|}

==Monthly All Time Records==

'''These tag names represent extreme record values (and corresponding time-stamps) for any particular month (1 =January, and so on, to 12 =December) in all years''' (HAR To place somewhere)

This table includes webtags that show the values in [[Monthlyalltime.ini]] log file.

These are a set of tags for monthly all-time highs and lows, in other words the highest and lowest values for a particular month of the year.
# The tag names listed here require a [[Webtags/Parameters#Input_modification_Parameters|input modification parameter]].
# The tag names here can optionally take any [[Webtags/Parameters#Output_modification_parameters|output modification parameters]].
# To supply both optional input modification, and optional output modification parameters, separate them with spaces, e.g. <#ByMonthTempHT mon=7 format=hh:nn>. In that example, the time (not date) of highest ever temperature in July is returned after processing by Cumulus.

{| class="wikitable" border="1"
|-
!style="width:150px"|Webtag name
!style="width:400px"|Function
!style="width:150px"|Date/Time Webtag name
|-
|colspan="3" style="background:lightgray;"|Temperature & Humidity
|-
|<#ByMonthTempH>
|High Temperature
|<#ByMonthTempHT>
|-
|<#ByMonthTempL>
|Low Temperature
|<#ByMonthTempLT>
|-
|<#ByMonthHeatIndexH>
|High Heat Index
|<#ByMonthHeatIndexHT>
|-
|<#ByMonthWChillL>
|Greatest wind chill (i.e. lowest temperature and highest wind speed)
|<#ByMonthWChillLT>
|-
|<#ByMonthAppTempH>
|High Apparent Temperature
|<#ByMonthAppTempHT>
|-
|<#ByMonthAppTempL>
|Low Apparent Temperature
|<#ByMonthAppTempLT>
|-
|<#ByMonthFeelsLikeH>
|High Feels Like Temperature
|<#ByMonthFeelsLikeHT>
|-
|<#ByMonthFeelsLikeL>
|Low Feels Like Temperature
|<#ByMonthFeelsLikeLT>
|-
|<#ByMonthHumidexH>
|High Canadian Humidity Index (Humidex)
|<#ByMonthHumidexHT>
|-
|<#ByMonthDewPointH>
|High Dew Point
|<#ByMonthDewPointHT>
|-
|<#ByMonthDewPointL>
|Low Dew Point
|<#ByMonthDewPointLT>
|-
|<#ByMonthMinTempH>
|Highest Daily Minimum Temperature
|<#ByMonthMinTempHT>
|-
|<#ByMonthMaxTempL>
|Lowest Daily Maximum Temperature
|<#ByMonthMaxTempLT>
|-
|<#ByMonthHighDailyTempRange>
|High Daily Temp Range
|<#ByMonthHighDailyTempRangeT>
|-
|<#ByMonthLowDailyTempRange>
|Low Daily Temp Range
|<#ByMonthLowDailyTempRangeT>
|-
|<#ByMonthHumH>
|High Humidity
|<#ByMonthHumHT>
|-
|<#ByMonthHumL>
|Low Humidity
|<#ByMonthHumLT>
|-
|colspan="4" style="background:lightgray;"|Pressure
|-
|<#ByMonthPressH>
|High Pressure
|<#ByMonthPressHT>
|-
|<#ByMonthPressL>
|Low Pressure
|<#ByMonthPressLT>
|-
|colspan="4" style="background:lightgray;"|Wind
|-
|<#ByMonthGustH>
|High Wind Gust
|<#ByMonthGustHT>
|-
|<#ByMonthWindH>
|High Wind Speed
|<#ByMonthWindHT>
|-
|<#ByMonthWindRunH>
|High Daily Wind Run
|<#ByMonthWindRunHT>
|-
|colspan="4" style="background:lightgray;"|Rainfall
|-
|<#ByMonthRainRateH>
|High Rain Rate
|<#ByMonthRainRateHT>
|-
|<#ByMonthMonthlyRainH>
|High Monthly Rainfall
|<#ByMonthMonthlyRainHT>
|-
|<#ByMonthHourlyRainH>
|High Hourly Rain
|<#ByMonthHourlyRainHT>
|-
|<#ByMonthRain24HourH>
|High 24hr Rain
|<#ByMonthRain24HourHT>
|-
|<#ByMonthDailyRainH>
|High Daily Rain
|<#ByMonthDailyRainHT>
|-
|<#ByMonthLongestDryPeriod>
|Longest Dry Period
|<#ByMonthLongestDryPeriodT>
|-
|<#ByMonthLongestWetPeriod>
|Longest Wet Period
|<#ByMonthLongestWetPeriodT>
|}

=Statistics=
This section is quite small but may enlarge so it has become a separate chapter.

{| class="wikitable" border="1"
|-
!style="width:300px" | Webtag name
!style="width:750px" | Function
|-
|<#TempAvg24Hrs>
|Mean for the last 24 hrs. It does not take parameters.
|-
|<#ByMonthTempAvg mon=[1-12]>
|Mean for requested month over the entire history. Omit the month parameter for the current month
|-
|<#MonthTempAvg m=[1-12] y=[YYYY]>
|Mean for the requested specific month. Omit the parameters for the current month
|-
|<#YearTempAvg y=[YYYY]>
|Mean for the requested year. Omit the year parameter for the current year
|}

=Day/Night/Sun/Moon=

These values are calculated hourly.

{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:900px" | Function
|-
|<#sunrise>
|Last sunrise time at the station - This sunrise time is calculated by a third party library each hour Cumulus converts it to local time to ensure shown correctly before and after any clock change.
|-
|<#sunset>
|Next sunset time at the station - The sunset/sunrise times are calculated each hour Cumulus converts it to local time to ensure shown correctly before and after any clock change.
|-
|<#daylength>
|Length of day in hours and minutes (sunrise to sunset).
|-
|<#IsSunUp>
|A flag to indicate if the Sun is above the horizon or not, based on the sunrise and sunset times.

Possible values are 0 or 1, where 1 is when the Sun is above the horizon for the station location.
|-
|<#dawn>
|Start of last Civil Twilight at the station as at last midnight UTC
|-
|<#dusk>
|End of next Civil Twilight at the station as at last midnight UTC
|-
|<#daylightlength>
| Approximate length of daylight in hours and minutes (dawn to dusk)
|-
|<#isdaylight>
|A flag to indicate if the location for the station is in civil daylight or not, based on the dawn and dusk times.

Possible values are 0 or 1, where 1 notes that it is currently within the hours of daylight.
|-
|<#tomorrowdaylength>
|A string giving an approximate predicted difference between the length of daylight (dawn to dusk) yesterday and length of daylight tomorrow.
|-
|<#moonphase>
|Current [[Lunar phase|phase of the moon]] in words, eg "New Moon" etc. The names used can be altered in [[Strings.ini#Moon_Phases|strings.ini]].
|-
|<#MoonAge>
|Current '''approximate''' age of the Moon in days (0-29.53)
|-
|<#moonrise>
|Current moonrise time at the station (if moon rises on current calendar day)
|-
|<#moonset>
|Current moonset time at the station (if moon sets on current calendar day)
|-
|<#MoonPercent>
|Current percentage of moon visible (negative value indicates 'waning')
|-
|<#MoonPercentAbs>
|Current percentage of moon visible (always positive)
|-
|<#SunshineHours>
| see [[#Today.ini]] Miscellaneous
|-
|<#YSunshineHours>
|see [[#Yesterday]] Miscellaneous
|-
|<#CurrentSolarMax>
|[[FAQ#What_is_this_.22Solar_Max.22_value_which_Cumulus_is_displaying.3F | Current theoretical maximum solar radiation]]
|-
|<#IsSunny>
|Returns 1 if the sun is shining, otherwise 0 (Solar sensor needed)
|}


= System =

Special tags returning information about the device hosting CumulusMX

{| class="wikitable" border="1"
|-
!style="width:150px" |Webtag name
!style="width:450px" |Applicability
|-
|<#OsVersion>
|OS version, e.g. "Windows 7 x64 build 7600"
|-
|<#OsLanguage>
|OS language, e.g. "English"
|-
|<#SystemUpTime>
|How long the system has been up, e.g. "8 hours 21 minutes"
|-
|<#ProgramUpTime>
|How long Cumulus has been running, e.g. "7 hours 55 minutes"
|-
|<#ProgramUpTimeMs>
|How long Cumulus has been running in milliseconds
|-
|<#CpuName>
|Name of the processors or n/a
|-
|<#CpuCount>
|Number of processors, e.g. "4"
|-
|<#CPUTemp>
|Temperature of the CPU in C, only works on Linux, updates once a minute, returns '-999.0' on Windows
|-
|<#AllocatedMemory>
|Amount of memory allocated to Cumulus, e.g. "60.69 MB"
|-
|<#MemoryStatus>
|Memory status or n/a
|-
|<#DisplayMode>
|Display mode or n/a
|-
|<#DiskSize>
|The size of the disk CumulusMX resides on or n/a
|-
|<#DiskFree>
|The free space on the disk CumulusMX resides on or n/a
|-
|}

=Units=

No optional input nor output parameters.
{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:600px" | Function
|-
|<#tempunit>
|Unit of temperature being used (Set in Cumulus as [http://en.wikipedia.org/wiki/Centigrade Celsius] or [http://en.wikipedia.org/wiki/Fahrenheit Fahrenheit]) values "&amp;deg;C" or "&amp;deg;F"
|-
| <#tempunitnoenc>
|JavaScript encoded of previous web tag that is HTML encoded (i.e. without '''&amp;''' and without '''&deg;''')
|-
|<#tempunitnodeg>
|The temperature units being used, without a degree symbol, i.e. "F" or "C"
|-
|<#pressunit>
|Unit of measure for pressure. Possible values: "mb", "hPa", "in", "kPa"
|-
|<#rainunit>
|Unit of measure for rain fall. Possible values: "mm" or "inches"
|-
|<#windunit>
|Unit of measure for wind speed. Possible values: "m/s", "mph", "km/h", "kts"
|-
|<#windrununit>
|Unit of measure for wind run (distance). Possible values: "km", "miles", "km", "nm" (for wind speeds in m/s, mph, km/h, kts)
|-
|<#cloudbaseunit>
|The units used for cloudbase value. Possible values: "ft" or "m"
|}

=Date & Time=
The default format depends on the locale you use to run Cumulus.

When format is fixed it is noted.

{| class="wikitable" border="1"
|-
!style="width:150px" |Webtag name
!style="width:600px" | Function
|-
|<#date>
|The current date.
|-
|<#metdate>
|The current meteorological date.
*If you use midnight rollover, this returns same date as <#date> (above), but with a different default format.
*If using a 9am/10am rollover:
**After rollover time on current calendar date, this is same as <#date>, but with a different default format.
**Between midnight and 9am/10am the <#metdate> will return the date associated with previous calendar day, but will still return current time
|-
|<#timeUTC>
|The current UTC date/time rather than local date/time. Example result: 18:30 on 30 December 2009. If you want the local date and time, use next tag (below).
|-
|<#time>
|The current time and date. Example result: 18:30 on 30 December 2009. If you simply wish the time, use next tag (below).
|-
|<#timehhmmss>
|The current time (without date). Example format: 18:30:27. You can use output format specifiers to change the way the time is output, but any date specifiers are ignored.
|-
|<#minute>
|The current time, just the minutes. Fixed format: 07 (cannot use output format modifiers)
|-
|<#hour>
|The current time, just the hour. Fixed format: 07 (cannot use output format modifiers)
|-
|<#day>
| The current day as a 2-digit number. Fixed format: 07 (cannot use output format modifiers)
|-
|<#dayname>
| The current day as a word. For example, Monday
|-
|<#shortdayname>
| The current day as a shortened word. Example format: Mon
|-
|<#month>
|The current month as a 2-digit number. Fixed format: 07 (cannot use output format modifiers)
|-
|<#monthname>
|The current month as a word. Example format: July
|-
|<#shortmonthname>
|The current month as a shortened word. Example format: Jul
|-
|<#year>
|The current year as a 4-digit number. Example format: 2009 (cannot use output format modifiers)
|-
|<#shortyear>
|The current year as a 2-digit number. Example format: 09 (cannot use output format modifiers)
|-
|<#rollovertime>
|The time that the logs rollover to the next day: 'Midnight', '9 am' or '10 am'
|-
|<#metdateyesterday>
|The previous meteorological date. The default format depends on the locale you use to run Cumulus
*If you use midnight rollover, this returns same date as <#date>, but with a different default format.
*If using a 9am/10am rollover:
**After rollover time on current calendar date, this is same as <#yesterday> (below), but with a different default format.
**Between midnight and 9am/10am the date output by <#metdateyesterday> will be the calendar day before that returned by <#yesterday>, but the time returned is actual local time.
|-
|<#yesterday>
|Yesterday's date.
|-
|<#update>
|The date and time of the last web site update.
|-
|<#timeJavaScript>
| The JavaScript '''Date''' object contains the number of milliseconds since 00:00:00.000 UTC on 1st January 1970, that date and time is known as the UNIX Epoch. In JavaScript, you can use <code>Math.floor(new Date().getTime()/1000.0)</code> This getTime method returns the time in milliseconds. The web tag returns an integer (currently with 13 digits) representing the number of milliseconds since the UNIX epoch when the web tag was processed. It can be used in a script where you wish to re-express other times output by Cumulus MX into UTC (Coordinated Universal Time). Mac OS X uses 00:00:00.000 UTC on 1st January 2001 as the starting time and date for its millisecond count, so that is considerably lower.

Note that UTC is calculated using 9192631770 times a particular transition time for Caesium 133 as a basis for 1 second. GMT (Greenwich Mean Time) is calculated on the basis that 1 second is 1/86400 of the time taken for a whole (day) rotation of the Earth. UT1 (or solar time) is calculated from various space measurements. Periodically, leap seconds are added to UTC to realign it with UT1, but these leap seconds are not added to the count of milliseconds represented by this web tag.

Do be aware that some devices will use a 32 bit signed integer to represent this number, and that will stop working on 19 January 2038, the year 2038 problem for computing world.
|-
|<#timeUnix>
| Unix tracks the number of seconds since the UNIX epoch. So this web tag can be used when you do not want the millisecond accuracy of the previous web tag. Like previous web tag this relates to UTC, so see details for that tag to find out more.
|-
|<#LastDataReadT>
|The date/time data was last read from the station.
|-
|<#DaysSince30Dec1899>
|Day count (gives whole and fractional part) Example: 41250.6523310301
|-
|<#recordsbegandate>
|Date when records began.
|-
|<#DaysSinceRecordsBegan>
|Day count since Cumulus records started
|}

=Alarms=

There are web tags for each alarm condition, they give a value of '1' if the alarm condition is enabled and is still currently met; otherwise '0'.

{| class="wikitable" border="1"
|-
!style="width:150px" |Webtag name
!style="width:600px" |Function
|-
|<#LowTempAlarm>
|Low temperature alarm
|-
|<#HighTempAlarm>
|High temperature alarm
|-
|<#TempChangeUpAlarm>
|Temperature increase alarm
|-
|<#TempChangeDownAlarm>
|Temperature decrease alarm
|-
|<#LowPressAlarm>
|Low pressure alarm
|-
|<#HighPressAlarm>
|High pressure alarm
|-
|<#PressChangeUpAlarm>
|Pressure increase alarm
|-
|<#PressChangeDownAlarm>
|Pressure decrease alarm
|-
|<#IsRainingAlarm>
|"It's Raining" alarm triggered either via a Hydreon RG-11 device, or rain rate > 0
|-
|<#HighRainTodayAlarm>
|High rain today alarm
|-
|<#HighRainRateAlarm>
|High rainfall rate alarm
|-
|<#HighWindGustAlarm>
|High wind gust alarm
|-
|<#HighWindSpeedAlarm>
|High wind speed alarm
|-
|<#DataStopped>
|1 if the station has apparently stopped sending data to Cumulus, otherwise 0
|-
|<#BatteryLowAlarm>
|Alarm for WLL (Console [if you have an API key] & Tx), VP2 (Console & Tx), GW1000 (Tx)
|-
|<#DataSpikeAlarm>
|Alarm raised if a data spike is detected, or a data limit exceeded
|-
| <#HttpUploadAlarm>
|Alarm raised if a HTTP upload alarm has been triggered
|-
| <#MySqlUploadAlarm>
|Alarm raised if a MySQL upload alarm has been triggered
|-
| <#UpgradeAlarm>
| Alarm raised if MX upgrade (a newer release) is available
|-
| <#FirmwareAlarm>
| Ecowitt only. Firmware update check on start-up and once a day at 13:00
|-
| <#NewRecordAlarm>
| NewRecordAlarm somewhat replicates the existing #newrecord web tag, but is also controlled by the alarm being enable/disabled
|-
| <#NewRecordAlarmMessage>
| Displays the last new record alarm text message
|}

= Extreme Records =

There are a set of tags for the Cumulus record states. They give a value of '1' if the record has been exceeded; otherwise '0'.

These web tags will be set from the time of the record until a timeout value is met (by default each record remains set for 24 hours).

You can change the default timeout through the parameter ''Station Settings=>Common Options=>Advanced Options''.

== Table of web tags available for extreme records ==

{| class="wikitable" border="1"
|-
!style="width:150px" |Webtag name
!style="width:600px" |Function
|-
|<#recordsbegandate>
|The date that Cumulus began tracking all time records<br/> (does not prevent earlier record dates being set manually)
|-
|<#newrecord>
|Indicates when any tracked extreme is changed (sets the LED on the interface flashing).
|-
|<#TempRecordSet>
|1 if any temperature-based extreme has been updated, 0 if not
|-
|<#HighTempRecordSet>
|1 if the all-time highest temperature extreme has been updated, 0 if not
|-
|<#LowTempRecordSet>
|1 if the all-time lowest temperature extreme has been updated, 0 if not
|-
|<#HighTempRangeRecordSet>
|1 if the all-time high daily temperature range extreme has been updated, 0 if not
|-
|<#LowTempRangeRecordSet>
|1 if the all-time low daily temperature range extreme has been updated, 0 if not
|-
|<#HighAppTempRecordSet>
|1 if the all-time high apparent temperature extreme has been updated, 0 if not
|-
|<#LowAppTempRecordSet>
|1 if the all-time low apparent temperature extreme has been updated, 0 if not
|-
|<#HighHeatIndexRecordSet>
|1 if the all-time high USA heat index extreme has been updated, 0 if not
|-
|<#HighHumidexRecordSet>
|1 if the all-time high Canadian Humidity index extreme has been updated, 0 if not
|-
|<#LowWindChillRecordSet>
|1 if the all-time greatest wind chill extreme has been updated, 0 if not
|-
|<#HighFeelsLikeRecordSet>
|1 if the all-time high feels like temperature extreme has been updated, 0 if not
|-
|<#LowFeelsLikeRecordSet>
|1 if the all-time low feels like temperature extreme has been updated, 0 if not
|-
|<#HighDewPointRecordSet>
|1 if the all-time high dew point extreme has been updated, 0 if not
|-
|<#LowDewPointRecordSet>
|1 if the all-time low dew point extreme has been updated, 0 if not
|-
|<#HighMinTempRecordSet>
|1 if the all-time high minimum temperature extreme has been updated, 0 if not
|-
|<#LowMaxTempRecordSet>
|1 if the all-time low maximum temperature extreme has been updated, 0 if not
|-
|<#HighWindGustRecordSet>
|1 if the all-time high wind gust extreme has been updated, 0 if not
|-
|<#HighWindSpeedRecordSet>
|1 if the all-time high wind speed extreme has been updated, 0 if not
|-
|<#RainRecordSet>
|1 if any rainfall based extreme has been updated, 0 if not
|-
|<#HighRainRateRecordSet>
|1 if the all-time high rain rate extreme has been updated, 0 if not
|-
|<#HighHourlyRainRecordSet>
|1 if the all-time high hourly rain extreme has been updated, 0 if not
|-
|<#HighRain24HourRecordSet>
|1 if the all-time high 24hr rain extreme has been updated, 0 if not
|-
|<#HighDailyRainRecordSet>
|1 if the all-time high daily rain extreme has been updated, 0 if not
|-
|<#HighMonthlyRainRecordSet>
|1 if the all-time high monthly rain extreme has been updated, 0 if not
|-
|<#LongestDryPeriodRecordSet>
|1 if the all-time longest dry period extreme has been updated, 0 if not
|-
|<#LongestWetPeriodRecordSet>
|1 if the all-time longest wet period extreme has been updated, 0 if not
|-
|<#HumidityRecordSet>
|1 if either the highest or lowest humidity extreme has been updated, 0 if not
|-
|<#HighHumidityRecordSet>
|1 if the all-time high humidity light extreme has been updated, 0 if not
|-
|<#LowHumidityRecordSet>
|1 if the all-time low humidity extreme has been updated, 0 if not
|-
|<#PressureRecordSet>
|1 if either the highest or lowest pressure extreme has been updated, 0 if not
|-
|<#HighPressureRecordSet>
|1 if the all-time high pressure extreme has been updated, 0 if not
|-
|<#LowPressureRecordSet>
|1 if the all-time low pressure extreme has been updated, 0 if not
|-
|<#WindRecordSet>
|1 if any wind speed based extreme has been updated, 0 if not
|-
|<#HighWindrunRecordSet>
|1 if the all-time high wind run extreme has been updated, 0 if not
|}

= Miscellaneous =

All tags are available in all flavours, as far as I know, although ''their output might vary'', and which input/output parameters they permit might vary between Cumulus 1 and MX.

{| class="wikitable" border="1"
|-
!style="width:150px" |Webtag name
!style="width:900px" | Function
|-
|<#LatestError>
| This tag and the next 5 are in CumulusMX containing the latest error information.
|-
|-
|<#LatestErrorEnc>
| See previous tag for use in PHP scripts.
|-
|-
|<#LatestErrorJsEnc>
| See previous tag for use in javascript.
|-
|<#LatestErrorDate>
|See previous tags
|-
|<#LatestErrorTime>
|See previous tags
|-
|<#ErrorLight>
|1 if the 'error' light is flashing, 0 if not
|-
|<#version>
|The version of Cumulus in use
|-
|<#build>
|The build of Cumulus in use
|-
|<#NewBuildAvailable>
|This gets the value 0 or 1 and is checked on start-up and once a day thereafter at a random time
|-
|<#NewBuildNumber>
|It is checked on start-up and once a day thereafter at a random time. Displays the latest public release build number - eg. b3089
|-
|<#realtimeinterval>
|The real time update interval in seconds (integer)
|-
|<#interval>
|The web site update interval in minutes (integer)
|-
|<#rollovertime>
|The time that the logs rollover to the next day: will always return one of these: 'Midnight', '9 am' or '10 am'

This is the end of the meteorological day, so if during Daylight Saving Time rolover is at "10 am", then on the day DST ends it will return to "9 am" ensuring every meteorological day is exactly 24 hours long. If the time is "Midnight" (or during DST it is "9 am"), then days will be 23 or 25 hours long just on day clocks change, 24 hours otherwise.
|-
|<#update>
|The date and time of the last web site update.
|-
|<#LastDataReadT>
|The date/time data was last read from the station.
|-
|<#stationId>
|The weather station internal ID corresponding to the stationType (see next web tag).
|-
|<#stationtype> stationId
|The weather station [https://cumuluswiki.org/a/Cumulus.ini#Section:_Station model] description.
|-
|<#stationtypeJsEnc>
|JavaScript encoded of previous web tag that is HTML encoded
|-
|<#latitude>
|The station [http://en.wikipedia.org/wiki/Latitude latitude] (as you entered during setup).
Supports an optional 'dp' parameter, if supplied, instead of the usual web-encoded text format with degrees/minutes/seconds, the result is in decimal degrees to the specified number of decimal places. E.g<br />
<#latitude> gives "N&nbsp;59& deg;&amp;nbsp;14&amp;#39;&amp;nbsp;33&amp;quot;" for N 59 14 33<br />
<#latitude dp=5> gives "59.24250"

If the "dp" parameter is supplied, then supplying "rc=y" in addition will cause any decimal comma to be converted to a decimal point.
|-
| <#latitudeJsEnc>
|JavaScript encoded of previous web tag that is HTML encoded
|-
|<#longitude>
|The station [http://en.wikipedia.org/wiki/Longitude longitude] (as you entered during setup). Supports an optional 'dp' and 'rc' parameters as per the latitude tag.
|-
| <#longitudeJsEnc>
|JavaScript encoded of previous web tag that is HTML encoded
|-
|<#altitude>
|The station [http://en.wikipedia.org/wiki/Altitude altitude] value (web tag outputs web encoded format containing figure, '&amp;nbsp;' and units) in either feet or metres just as you entered during setup e.g. '123&amp;nbsp;m'
|-
| <#altitudenoenc>
|JavaScript encoded of previous web tag that is HTML encoded
|-
|<#location>
|The station location (as you entered during setup)
|-
| <#locationJsEnc>
|JavaScript encoded of previous web tag that is plain text
|-
| <#locationenc>
|HTML encoded version of previous web tag that is JavaScript encoded
|-
|<#longlocation>
|Longer description of the station location (as you entered during setup)
|-
| <#longlocationJsEnc>
|JavaScript encoded of previous web tag that is plain text
|-
| <#longlocationenc>
|HTML encoded version of previous web tag that is JavaScript encoded
|-
|<#forum>
|URL of the forum (as you entered during setup) encoded into a web page menu item by adding colons
|-
| <#forumurl>
|Same as previous, but just URL, without any additional colons
|-
|<#webcam>
|URL of the webcam (as you entered during setup) encoded into a web page menu item by adding colons. Default is blank. Can be used to link to any other web page that you host (Cumulus does not verify that it is a web cam, that is just a label, and the label can be changed on each standard web page individually)
|-
| <#webcamurl>
|Same as previous, but just URL, without any additional colons
|-
|<#graphperiod>
|The number of hours displayed by the graphs, as set using '''Configuration''' menu, ''Display'' settings screen 'Detailed Chart Period'
|-
|<#dailygraphperiod>
|The number of days displayed by the graphs, as set using '''Configuration''' menu, ''Display'' settings screen 'Daily Chart Period'
|-
|<#LatestNOAAMonthlyReport>
|Gives file name of latest auto-saved NOAA monthly report
|-
|<#LatestNOAAYearlyReport>
|Gives file name of latest auto-saved NOAA yearly report
|-
|<#MySqlRealtimeTime>
|time of last real-time table insert
|-
|<#MySqlIntervalTime>
|time of last interval data table insert
|-
| <#Option_useApparent>
| Whether user prefers to see Apparent Temperature or Feels Like Temperature
|-
| <#Option_showSolar>
| Whether user wants to show Solar data or does not not have a solar sensor
|-
| <#Option_showUV>
| Whether user wants to show Ultra Violet data or does not not have a UV sensor
|}

=Special tags=

==Davis==

At present this table has not yet been updated for latest MX version.'''

All (see note for THSWindex) of the following web tags for the Davis PWS are available

The values of the reception tags are updated every 15 minutes.

{| class="wikitable" border="1"
|-
!style="width:150px" |Webtag name
!style="width:600px" |Function
|-
|<#DavisTotalPacketsReceived>
|Total number of data packets received. This stat is not supplied by the Davis WLL station.
|-
|<#DavisTotalPacketsMissed>
|Number of missed data packets. Optionally add "tx=n" parameter, where n=1-8 and equals the desired transmitter id. The default is n=0 and will return the VP2 stats.
|-
|<#DavisMaxInARow>
|Longest streak of consecutive packets received. Optionally add "tx=n" parameter, where n=1-8 and equals the desired transmitter id. The default is n=0 and will return the VP2 stats.
|-
|<#DavisNumCRCerrors>
|Number of packets received with CRC errors. Optionally add "tx=n" parameter, where n=1-8 and equals the desired transmitter id. The default is n=0 and will return the VP2 stats.
|-
|<#DavisNumberOfResynchs>
|Number of times the console resynchronised with the transmitter. Optionally add "tx=n" parameter, where n=1-8 and equals the desired transmitter id. The default is n=0 and will return the VP2 stats
|-
|<#DavisFirmwareVersion>
|The console/WLL firmware version
|-
|<#THWindex>
|A derived temperature using Temperature/Humidity/Wind values

The THW Index uses humidity and temperature (like Heat Index), but includes the cooling effects of wind (like wind chill).
|-
|<#THSWindex>
|A heat stress indicator using Temperature/Humidity/Solar/Wind values.
*The THSW Index uses humidity and temperature (like the Heat Index), but also includes the heating effects of sunshine, and the cooling effects of wind.
*Therefore requires Davis station with solar sensor.
See [http://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1223&context=animalscinbcr Approx calculation].
|-
|<#battery>
|The console battery condition in volts. eg "4.82v"
|-
|<#txbattery>
<#txbattery channel=1>
|The transmitter battery condition, by default it returns the status of all transmitters.
|-
|<#StormRain>
|The console 'storm rain' current amount.
|-
|<#StormRainStart>
|The console reported date of the start of the 'storm' (see previous webtag).
|-
|<#StationFreeMemory>
|Shows the station free memory for Davis WLC, Ecowitt GW1100/20000 (using HTTP also using Ecowitt API)
|-
|<#StationRuntime>
| Shows the station uptime in seconds for Davis WLL/WLC, Ecowitt GW1100/20000 (using HTTP)
|}

'''Note:''' that the console does not report start time, so the webtag cannot report time. It appears a minimum of 2 tips within 3 hours will trigger a storm start, so using <#LastRainTip> might help

==Davis WLL ==

You need a purchased license to use these webtags.

{| class="wikitable" border="1"
|-
!style="width:150px" |Webtag name
!style="width:600px" |Function
|-
|<#ConsoleSupplyV>
|The WLL external supply voltage
|-
|<#DavisReceptionPercent tx=1>
|WLL transmitter reception percentage (replace 1 by any other transmitter number up to 8)
|-
|<#DavisTxRssi tx=0>
|WLL RSSI of the WiFi connection
|-
|<#DavisTxRssi tx=1>
|WLL RSSI of Transmitter #1 (replace 1 by any other transmitter number up to 8)
|-
|<#MulticastBadCnt>
|Count of multicast packets missed or have bad a CRC
|-
|<#MulticastGoodCnt>
|Count of good multicast packets received
|-
|<#MulticastGoodPct>
|Percentage of good multicast packets received
|}
'''Note''': See also the '''Davis''' table for <#StationFreeMemory> and <#StationRuntime>

==Ecowitt && Fine Offset==

The following tags are specific to the Ecowitt and Fine Offset series

{| class="wikitable" border="1"
|-
!style="width:150px" | Webtag name
!style="width:600px" | Function
|-
|<#Light>
|Current Lux value "Fine Offset only"
|-
|<#SensorContactLost>
|1 if the station has lost contact with its remote sensors "Fine Offset only"
0 if contact has been established
|-
|<#ExtraStationFreeMemory>
|to avoid clashes with the main station and a Ecowitt HTTP station used for extra sensors
|-
|<#LowBatteryList>
|In case sensors have a low battery, this tag lists them comma separated with ''LOW, 0 or 1'' depending on what is received
|}
'''Note''': See also the '''Davis''' table for <#StationFreeMemory> and <#StationRuntime>

=QueryDayFile=

This web tag deviates from the regular webtags in that is gives the possibility to actually query the whole dayfile on a per row and per column basis. The arguments which govern this query are different from the regular parameters which also play a role. For that reason ''QueryDayFile'' is classified as a ''chapter on its own''. It even may evolve to an even complexer query system for the dayfile (e.g. find a record for a specific date). This entry is based on the ''QueryDayFileWebTag.md''-file which you can find in the ''MXutils directory'' in the distribution.

The general form of the use of this web tag is:
<#QueryDayFile value=MinTemp function=min [where=>10] dateFrom=2023-01-01 [dateTo=2024-01-01] [resfunc=max] [showDate=y] [format="date_format"] [dp=N] [tc=y] [rc=y]>

The arguments are described below.

'''''NOTE:''' If there is an existing web tag for the value you require, please use that specific tag rather than this general query. The specific tag is likely be *much* more efficient.''

==The value parameter==
The value parameter is required and specifies which value from the dayfile you want (the column). It can take any of the following values (only one at a time):
'' HighGust, WindRun, HighAvgWind, LowTemp, HighTemp, AvgTemp, HighHeatIndex, HighAppTemp, LowAppTemp, LowWindChill, HighDewPoint, LowDewPoint, HighFeelsLike, LowFeelsLike, HighHumidex, LowPress, HighPress, HighRainRate, TotalRain, HighHourlyRain, HighRain24h, LowHumidity, HighHumidity, SunShineHours, HighSolar, HighUv, ET, HeatingDegreeDays, CoolingDegreeDays, ChillHours''

==The function parameter==
Not used for the date selector ''ThisDay''.

Required for all other date selectors. The name of the function to apply to the value within each period.

The possible functionstrings are:
''min, max, avg, sum, count''.

==The where clause==
Required if function = count.

Criteria applied to the count. This is a comparison value, so for example you want to count days where the minimum temperature was below zero °C you would use `where="<0"`.

You can use the following comparison strings:

>, <, >=, <=, =

==The dateFrom field==
Required. The start date of the query.

It can be any date string that can be parsed by the "yyyy-MM-dd" format.<br>
OR<br>
It can be one of the following special values:
''ThisDay, ThisMonth, ThisYear, Day-[N], Month-[N], Year-[N], Month[N] Day[MMDD], Yearly''

#''ThisDay'', ''ThisMonth'', and ''ThisYear'' are hopefully self explanatory.
#''Day-N'', ''Month-N'' and ''Year-N'' are used to specify the relative day, month or year. For example ''Month-1'' = the previous month to current, ''Day-1'' = yesterday.
#''DayMMDD'' is used to specify a month and day to return an "on this day" value. MM = 1 to 12, DD = 1 to 31. For example ''Day0421'' shows results for the 4th April every year
#''MonthN'' is used to find values for any year for the specified month. N = 1 to 12.
#''Yearly'' groups the results by year

The value is found for dates >= dateFrom.

==The dateTo field==
Optional if dateFrom has one of the special values.

Required if dateFrom is a date string - format "yyyy-MM-dd"

The value is found for dates <= dateTo


CumulusUtils is - up to v6.x.y - a [https://www.mono-project.com/ ''mono''] executable.
==The result function field==
From v7.0.0 and up it runs under [https://dotnet.microsoft.com/en-us/ ''dotnet (.NET 8)''].
Result function.


Both environments are very different and not interchangeable. However running CumulusUtils is pretty similar on both environment and mono and dotnet can co-exist on the same machine. See the CMX installation on how to install either mono or dotnet. CumulusUtils assumes the correct installation of either environment.
Mandatory for grouped results, ie those using the date options: ''ThisDay, Day[MMDD], Month-[N], Year-[N], Month[N], Yearly''


Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.
Controls if the largest or smallest value for the grouped period is returned.
''CumulusUtils'' runs on any operating system CumulusMX runs on and it '''MUST''' run in the CumulusMX directory (as ''working directory'').
Running ''CumulusUtils'' is done from the commandline in a command window (under any OS).


''CumulusUtils'' takes one or more commandline parameters (in short: commands) and must be like (see NOTE 1 below; square brackets means ''optional'' so DON'T TYPE THEM):
Must be one of the following:


''utils/bin/cumulusutils.exe [command]'' (the ''mono'' syntax - this assumes mono is already active)
''min, max''


''dotnet utils/bin/cumulusutils.dll [command]'' (the ''.NET'' syntax - ''dotnet'' is obligatory on the commandline. Note the '''dll''')
==The showDate field==
Optional.


Below is described for ''mono'', when using .NET, please change the command as above. Note you will have to carry this on in scripts as well. Using the dotnet command in crontab requires using the explicit path to the dotnet command or defining the PATH environment variable in the crontab script which does not know the environment (a bit awkward).
If omitted, then the web tag returns only the numeric value.


If no commands are given the application responds with:
If present, the the web tag returns a pair of strings, the value itself, and the date-time it occurred in the format: [''"value","datetime_string"'']


''CumulusUtils : No Arguments nothing to do. Exiting. See Manual.
The parameter showdate should not be used if the function is one of ''"avg", "sum", or "count"''. If specified for these functions it returns a datetime_string of "-".
CumulusUtils Usage : utils/bin/cumulusutils.exe [args] (args case independent):
utils/bin/cumulusutils.exe
[ [[SysInfo]] ] [ [[Forecast]] ] [ [[StationMap]] ] [ [[UserReports]] ] [ [[MeteoCam]] ]
[ [[pwsFWI]] ][ [[Records - Top10|Top10]] ][ [[Graphs]] ][ [[Yadr]] ][ [[Records]] ]
[ [[NOAA]] ][ [[Records - DayRecords|DayRecords]] ][ [[AirLink]] ][ [[UserAskedData]] ]
[ [[ChartsCompiler|CompileOnly]] ] [ [[Extra Sensors|ExtraSensors]] ] [ [[Custom Logs|CustomLogs]] ]
[ [[Diary|Diary ]] ] [[CumulusUtils Runtime Library|CUlib]] ]
| [ [[Thrifty - Cutils Command Qualifier|Thrifty]] ]


OR (in case you use the website generator):
==The format field==
utils/bin/cumulusutils.exe [ [[Thrifty - Cutils Command Qualifier|Thrifty]] ] [[Website Generator|Website]]
Optional. The standard date formatting string used by all date-time web tags.


All ''modules'' mentioned in the command will be described in their own pages here on the wiki and when available will be linked from here.
==The dp, tc and rc arguments==
''[dp=N] [tc=y] [rc=y]'' are regular parameters described in [[Webtags/Parameters|their proper page]].


The commands represent the ''modules'' the user is asking for to be generated. The output is generated to the utils directory in the ''CumulusMX'' directory. When asking for the generation of the website, the user not only gets all ''modules'' available but also an ''index.html'' file accompanied with some javascript infrastructure. Everything together then is the website which, when copied to the webroot, is ready for use.
==Examples==
1 - The maximum sun hours in a day this year and the date on which it occurred:


Commands to CumulusUtils - the module names - are case independent but the author prefers [https://en.wikipedia.org/wiki/Camel_case Upper Camel Case] (or Pascal Case).
`<#QueryDayFile value=SunShineHours function=max from=ThisYear showDate=y dp=2 format="dd-MM-yyyy">`


Copying to the webroot can also be done automatically through the FTP account of the user, much like ''CumulusMX'' itself copies e.g. the realtime.txt or the datafiles to the webroot. The FTP account and domain used are the same as present in the [[Cumulus.ini]] configuration. The PHP upload as exists in CMX can also be used with CUtils and it works exactly the same.
returns: `["12.32","26-07-2024"]`


=== Considerations with CMX configuration ===
2 - The total sun hours last year:
Please note that CumulusUtils requires live data from CumulusMX to display what you expect. To accomplish that you need to configure CMX as follows:


The things it is looking for are realtime.txt and realtimegauges.txt. Those are sent by CMX to the directory you configure in ''Settings=>Web/Upload Site''.
<#QueryDayFile value=SunShineHours function=sum from=Year-1 dp=2>


In ''Settings=>Internet Settings=>Interval Configuration=>Normal Interval Settings'': Tick both options and set the interval time to enable interval Upload
returns: 1287.22
In ''Settings=>Internet Settings=>Interval Configuration=>Standard File settings'': Disable both options (for CumulusUtils, if you have websites which use those, leave it enabled)
In ''Settings=>Internet Settings=>Interval Configuration=>Graph File Settings'': Enable all (only ''Upload'', use ''Create Local'' only when needed) except the following:
''availabledata.json'', ''dailyrain.json'', ''dailytemp.json'', ''sunhours.json'', ''airquality.json'', ''extra*.json'', ''soil*.json'', ''user*.json'',''co2*.json'' and ''leaf*.json''


In ''Settings=>Internet Settings=>Interval Configuration=>Daily Graph File Settings'': Enable all except ''alldailydegdaydata.json'', ''alltempsumdata.json'' and ''allchillhrsdata.json''
3 - Highest sun hours in any year, and the year it occurred:


In ''Settings=>Internet Settings=>Interval Configuration=>Real time Interval Settings'': Tick both and set interval time to enable realtime Upload
<#QueryDayFile value=SunShineHours function=sum from=Yearly resFunc=max dp=2 showDate=y format=yyyy>
In ''Settings=>Internet Settings=>Interval Configuration=>Real time Interval Settings'': Tick both ''realtime.txt'' and ''realtimegauges.txt'' for Upload, use ''Create Local'' only when needed.


In ''Settings=>Web/Upload Site=>General Settings'': Tick ''UTF-8 encoding''
returns: ["1405.9","2018"]


And if you use the ''[[ChartsCompiler]]'' (or plan to use, you may be more selective later when understanding what and how):
4 - The total evapotranspiration last month:


After selecting the required tables you need to select the variables they may contain:
<#QueryDayFile value=ET> function=sum from=Month-1 dp=2>


In Settings=>Station Settings=>Graphs=>Data Series Visibility: Tick all
returns: 23.56


'''NOTE: You may disable some fields later when you are more acquainted with the system. Disabling tables and field can be especially useful when you are worried about size of transfer and provider limits.'''
5 - The average maximum UV-I in April & May 2024:


If you start using the ''[[ChartsCompiler]]'', you may need the ''[[UserAskedData]]'' command to CumulusUtils. See the [[ChartsCompiler]].
<#QueryDayFile value=HighUv function=avg from=2024-04-01 to=2024-06-01>


You may want to read about and understand the [[Website_Generator#CumulusRealTimeLocation|''CumulusRealTimeLocation'']]
returns: 4.5


=== When and why to run ===
6 - The lowest minimum temperature that has occurred in any December (*NOTE: in reality there is standard web tag for this <#ByMonthTempL>*):
Running CumulusUtils results in output which represents a static view of the data in a table or graphic format for display on your website (it may even create a complete website). The fact that the output is a static view requires the output to be regenerated when new data is available. Rerunning CumulusUtils is also required when you change anything in the configuration and can't wait to see that change reflected on the site. In general: changes in data and configuration require a rerun.


Reruns for changes of data are typically once per day, just after rollover time. In that sense it is like running a new query.
<#QueryDayFile value=LowTemp function=min from=Month12 resFunc=min showDate=y>


There are some exceptions to the daily rule: Sysinfo and [[UserAskedData]]
returns: ["-12.5","20/12/2010 07:17"]
#Sysinfo: a rerun with Sysinfo is required when you wish to update the system information which can be a requirement from every 10 minutes to once per day
#[[UserAskedData]]: provides data for charts which are otherwise not available. Again this is at a user desired frequency which is recommended to be the FTP frequency defined in Cumulus.ini (parameter ''UpdateInterval'' in section [FTP site])


==== RPi: Using crontab ====
7 - The highest minimum temperature that has occurred in any December (*NOTE: in reality there is standard web tag for this <#ByMonthMinTempH>*):
Automating the run of CumulusUtils on the Raspberry Pi is typically done through [https://man7.org/linux/man-pages/man5/crontab.5.html ''crontab'']. Below is the crontab of the author of CumulusUtils to be used as an '''example'''!


===== For dotnet =====
<#QueryDayFile value=LowTemp function=max from=Month12 resFunc=max showDate=y>
05 1 * * * cd /home/CumulusMX; /usr/share/dotnet/dotnet utils/bin/cumulusutils.dll thrifty website
1-51/10 * * * * cd /home/CumulusMX; /usr/share/dotnet/dotnet utils/bin/cumulusutils.dll sysinfo UserAskedData UserReports


===== For mono =====
returns: ["12.1","19/12/2015 00:36"]
15 1 * * * cd /home/CumulusMX; utils/bin/cumulusutils.exe thrifty website
1-51/10 * * * * cd /home/CumulusMX; utils/bin/cumulusutils.exe sysinfo UserAskedData UserReport


==== Windows: Using the scheduler ====
8 - The lowest minimum temperature that has occurred on this day
===== How to create a scheduled task =====
Prior to doing this we need to also create the script that the task will use.
Open notepad or your favourite text editor (preferred use: Notepad++).


You can copy paste the below and save as cumulusutils.bat
<#QueryDayFile value=LowTemp resFunc=min from=ThisDay showDate=y>
(It can be a filename of choice but must have extension of .bat, if using windows notepad, underneath the File name: option, will need to set Save as type: option to All Files (*.*). This way when the File name: is set as cumulusutils.bat it will save it as that and not cumulusutils.bat.txt)
====== Batch file code of cumulusutils.bat ======
'''''For v6 and below (running under mono):'''''<br/><br/>
REM This batch file script checks for the process CumulusMX.exe is running, if yes, then runs the "cumulusutils.exe", otherwise exit</br>
REM Set the current working session to the folder C:\CumulusMX</br>
cd\</br>
cd C:\CumulusMX</br>
REM Check for CumulusMX.exe is running, if yes goto :runutils, otherwise goto :end</br>
tasklist /FI "IMAGENAME eq CumulusMX.exe" 2>NUL | find /I /N "CumulusMX.exe">NUL</br>
if "%ERRORLEVEL%"=="0" GOTO runutils</br>
GOTO end</br>
REM Set as working directory C:\CumulusMX and run cumulusutils.exe in folder C:\CumulusMX\utils\bin, with the desired command or commands as per the wiki</br>
:runutils</br>
START /D C:\CumulusMX C:\CumulusMX\utils\bin\cumulusutils.exe Website</br>
:end</br>
exit</br>


NOTE: The command shown here is ''Website''. The user can put any command he likes in here (with or without ''Thrifty'') depending on what he wants to achieve. Possibly he has to create multiple tasks (e.g. UserAskedData specifically runs on a higher frequency than website). These commands then require their own batch files.
returns: ["5.2","05/10/2014 00:21"]


'''''For v7 and up (running under dotnet):'''''<br/><br/>
9 - The lowest minimum temperature that has occurred on this day (yesterdays date)
REM This batch file script checks for the process CumulusMX.exe is running, if yes, then runs the "cumulusutils.exe", otherwise exit<br/>
REM Set the current working session to the folder C:\CumulusMX<br/>
cd\<br/>
cd C:\CumulusMX<br/>
REM Check for CumulusMX.exe is running, if yes goto :runutils, otherwise goto :end<br/>
tasklist /FI "IMAGENAME eq CumulusMX.exe" 2>NUL | find /I /N "CumulusMX.exe">NUL<br/>
if "%ERRORLEVEL%"=="0" GOTO runutils<br/>
GOTO end<br/>
REM Set as working directory C:\CumulusMX and run cumulusutils.exe in folder C:\CumulusMX\utils\bin, with the desired command or commands as per the wiki<br/>
:runutils<br/>
START /D C:\CumulusMX dotnet C:\CumulusMX\utils\bin\cumulusutils.dll Website<br/>
:end<br/>
exit<br/>


===== Task creation process =====
<#QueryDayFile value=LowTemp resFunc=min from=Day-1 showDate=y>
Within the Task Scheduler Library
#Create “New Task…” (actions pane), or right click middle pane and choose “Create New Task” (not Create Basic Task).
##On the General tab of the new task (General information about the task).
##Set desired name for the Task (Example name CumulusUtils, can also set description if desired).
##Click “Change User or Group…”.
##Type in here the word system (click on “Check Names” if desired, to confirm it is correct and it should then display as SYSTEM in capitals).
##Click OK to use this user account.
##Note in Security options part of the new task creation process it should now state under. When running the task, use the following user account: NT AUTHORITY\SYSTEM <br/>(Convenient reason for this is that when the task runs, it runs is running as system account and so is not seen popping up on screen when it is running.)
##“Configure for:” not required to be changed, can be changed to version of operating system.
#On the Triggers tab of the new task (Setting when and how often the task runs).
##Click on “New”, to create a new launch time and frequency of the task.
##Begin the task: option should default to “On a schedule”, this is the desired option.
##Under the settings section choose “Daily” option.
##Start: date can be left as is, set the desired start time of the task. Set to “12:00:15 am”.</br>(Reason for this setting with 15 second delay is trying not to compete with CumulusMX upload tasks).
##In the advanced part, enable Repeat task every: and choose desired interval.</br>With the option for a duration of: default setting of “1 day” is used.
##Set Stop task if it runs longer than: to “30 minutes” (if the task runs longer than the time set, it is stopped. This applies to the individually triggered task, and not the overall routine of this scheduled task, with it’s repeating trigger times).
##Confirm that the Enabled options is ticked to make active this trigger routine.
#On the Actions tab (Setting what the task is to do).
##Click on “New…” to create a new action.
##Action: should default to “Start a program” this is correct.
##In the Program/Script: part, type the path to the program to run, or click “Browse” to navigate and select the program to run. (example C:\CumulusMX\batch_files\cumulusutils.bat).
#On the Conditions tab (setting other conditions).
##Under Power, untick Start the task only if the computer us on AC power</br>(This then enables the task to start and run even if on battery. It will automatically untick Stop if the computers switches to batter power.)
#On the Settings tab (additional other settings for the task).
##Confirm ticked for Allow task to be run on demand.
##By default Stop the task if it runs longer than: is already ticket and set as 3 days.Change to 1 hour (the behaviour here is the same as instruction 3.f.)
##Confirm ticked for If the running ask does not end when requested, for it to stop.
##Default setting of “Do not start a new instance” Is OK.
#Click on OK down the bottom to complete and commit the creation of this new task.


===== Customisation =====
returns: ["4.5","04/10/2010 08:07"]
One can also customise/fine tune the task further by exporting it, default export format is XML. Then can edit in favourite text editor and reimport when done. May be useful in particular for fine tuning the repetition times of the task.


== Additional remarks ==
10 - The lowest minimum temperature that has occurred on this specified day


#(on NOT Windows) When mono is already active (as daemon or from command line in another process) you can start any mono executable without having it prepended by the mono command. As normally (if you did not uninstall it) xsp4 is running as a daemon, mono is always available so you can run mono executables as normal linux executables. You won't notice the difference. However if you don't have the x bit set, you get access refused when trying to execute. Without the x bit set you have to prepend mono as in: ''mono utils/bin/cumulusutils.exe''. Then it executes without the x bit set because then it is an argument to the mono command.
<#QueryDayFile value=LowTemp resFunc=min from=Day0421 showDate=y>
#CumulusUtils is written in C#, HTML and javascript. All HTML and javascript is embedded in the C# code and generated on execution of ''CumulusUtils''. The cumuluscharts.txt charts library was based on the cumuluscharts.js originally distributed with ''CumulusMX'', probably the version a bit before April 2020 and has been modified since. With the appearance of the [[ChartsCompiler]] the name cumuluscharts.txt has been preserved but the technique of creating the charts has been changed.
#As CumulusUtils itself runs in the Cumulus directory, the data directory (data) is one level below. CumulusUtils currently uses - a copy of - dayfile.txt, the monthly logfiles and incidentally the alltime.ini file. It also takes information from Cumulus.ini. All output is written to the utils/ subdirectory. All logs are created in the utils/utilslog/ subdirectory. It also uses the AirLink.log and the ExtraLog files in a similar way when the user has such devices.
#The output of CumulusUtils consists of UTF8 encoded text files. They can be brought to your website manually through some ftp tool (e.g. WinSCP) or by using the Extra Web Files functionality in the setting of Cumulus (deprecated) or by using the [[FTP facility]].
#CumulusUtils can output for many languages. See the specific page on [[Language in CumulusUtils|language in CumulusUtils]].
#Development of CumulusUtils started in 9<sup>th</sup> of August 2019 with an initial commit of the Top10 written in C. Development changed rapidly to C# with an initial commit of Top10 on November 19 2019 of version 0.7.0. The rest of the history can be read in the [[Release Notes|release notes]].
#Users can present themselves on the CumulusUtils [[Map - Users of CumulusUtils|usermap]]. Although optional for modules users, the author sees it as payment for the usage of the tool, so please put yourself on the map. For website users it is automatic and obligatory.
#In case of problems there exists [[Errorlogging]].
#''CumulusUtils'' is &copy; Hans Rottier and can be used under the [https://creativecommons.org/licenses/by/4.0/ Creative Commons Attribution License]. At some point the code will be in the public domain under a different license.


'''NOTE''': comments to this series of articles is welcome either by using the Talk feature of the Wiki for that page, direct edit of the article (request an account) or by contacting the author of CumulusUtils [https://cumulus.hosiene.co.uk/memberlist.php?mode=viewprofile&u=9016 HansR] on the [https://cumulus.hosiene.co.uk/viewtopic.php?f=44 forum] or through PM.
returns: ["-1.8","21/04/2010 05:47"]


[[Category:WebTools]][[Category:User Contributions]][[Category:CumulusUtils]]
[[Category:Cumulus_MX]]

Revision as of 13:11, 9 September 2025

Introduction

This is the first page of the CumulusUtils Wiki. From here you should be able to find everything you need to know for this tool.

If needed you can always go to the CumulusUtils Category page (see bottom of this page).

Prerequisites

This paragraph describes what is required to use CumuluUtils (To be modified/extended by user experience).

  1. A working CumulusMX environment on Windows, Linux (RPi) or MacOS
    1. On Linux (and probably MacOS too) the user must verify whether the application lshw has been installed.
    2. NOTE: no experience by the author on MacOS exists so be prepared to communicate
  2. At least 32 days of data This requirement has been dropped.
  3. For the Miscellaneous Charts more data - a year starting on jan 1 - is required
  4. For the logfiles:
    1. A consistent date format, mixed date formats in logfiles are not accepted by CumulusUtils From CMX v4 onwards this is enforced by CMX
    2. Consistent data and separator use See above
    3. If a legal date format in a logfile is used which is not implemented, just request it See above
  5. For longer data series check your locale creates consistent logfile entries and it will be useful to run the CMX supporting application CreateMissing.exe beforehand.

Goals

The goal of CumulusUtils (abbr: Cutils or CUtils) is to facilitate website creation for users of CumulusMX without exposure to coding in e.g. PHP or javascript. Having a meteo-website should not be privileged to users with great IT-skills. Making charts should not be demanding for programming skills in SQL or making it otherwise impossible to create charts without diving deep into the technique involved in CumulusMX (which actually is also the case with SQL). Note that this does not mean you can't use IT skills: the user configurable menu offers an opening to expand as far as you wish.

CumulusUtils positions itself as a configurable application for which the understanding of how to run it and how to configure it is the most important thing to know. For configuration CumulusUtils uses cumulusutils.ini file which resides in the CumulusMX directory. If that file does not exist, it will be created. All other files related to CumulusUtils are in the utils directory.

The charts are created using HighCharts using their non-commercial license. If you want to use the charts or the Website Generator of CumulusUtils, please make yourself acquainted with this license.

Assumptions

The user is assumed to have basic computer skills and knowledge about the Operating System and directory structure. The user must also be aware of the directory infrastructure of CumulusMX and needs to be aware of the meaning of the terms webroot and FTProot and Working Directory. The user should be able to understand and edit the ini files (both from CumulusMX and CumulusUtils). The user should understand the basic functioning of CumulusMX which means the correct availability of CumulusMX is a precondition for using CumulusUtils.

Some output files can be used with Cumulus 1 but the charting possibilities rely on the availability of the JSON datafiles of CumulusMX. Therefore the use of CumulusUtils in combination with Cumulus 1 is limited. The website generator in combination with Cumulus 1 is not advised.

Output

The output of CumulusUtils consists of mainly of text files (extension: .txt) which are generated on demand. In Cutils idiom modules. These text files can be incorporated in a website the user has or is making. Ultimately when using the website generator feature, CumulusUtils generates a complete website, uploaded to the user domain and extendable through a user defined menu. When using the ChartsCompiler, the user can define his own charts and place the output where he wants just like other modules.

All output of CumulusUtils is written as UTF8 encoded text files.

Installation

  1. CumulusUtils is available in a distribution which can be downloaded from the forum. In the CumulusMX directory the user must create a directory utils (case dependent) and must copy the files of the distribution (including the subdirectories) to that directory.
  2. Then, on the domain for the website, the user needs to make two directories in the webroot: 'lib' and 'css'. In addition the distribution directory CUicons must be copied as a whole - with contents - to the webroot.
  3. Updating CumulusUtils is done by completely overwriting the contents of the installation directory utils as if it were an installation. If you want to save the old installation, make a copy of the utils directory.
  4. NOTE a seemingly important issue: the datafiles (the naming and the contents) are dependent for their format on the locale / country setting of your machine. If you install and run from scratch and do not bother CMX will take the country setting from the settings of the computer. You may also give the country setting on the commandline when starting CMX. However, it is important to know that CumulusUtils does not handle datafiles with mixed languages and produces lots of errors. When starting with a new install this is not a big deal. But if you have years of old data which you wish to analyse as well you must consider carefully which country setting of CMX is required. Note that the language setting of CumulusUtils is for display/language handling only and does not affect the reading of the data in any way apart for the monthly log file name. If you use a different locale than the one you use for CMX, the please fill in the parameter MonthsOfMiracleAndWonder (section [General]) with the abbreviated filenames of the locale you use for CMX.

When installed you are ready to run. The first run after an install or an update MUST be without Thrifty.

So after installing you have:

The directory structure for utils on the CumulusMX machine is:

 utils			(contents in the distribution)
   |--- bin		(in the distribution (from 4.7.0 and up))
   |--- utilslog	(Created by CumulusUtils)

The directory structure for utils on the Website is:

 WebRoot		(Content uploaded by CumulusUtils)
   |--- lib		(JavaScript libraries, uploaded by CumulusUtils during a run)
   |--- css		(css files, uploaded by CumulusUtils during a run)
   |--- CUicons        (required to be manually copied once)

Updating CumulusUtils

Updating CumulusUtils is done by completely overwriting the contents of the installation directory utils as if it were an installation. If you want to save the old installation, make a copy of the utils directory. The first run after an install or an update MUST be without Thrifty.

Informational files

In the distribution there are some files which are examples or defaults. When used, rename them (and possibly copy manually to the webroot). No automatic copying of these files is done by CumulusUtils.

Beside the libraries the distribution contains:

  1. CUserAbout-example.txt : as an example of the user about file - when used rename to CUserAbout.txt
  2. CutilsMenu-example-for-use.def : as an example of the menu structure - when used rename to CutilsMenu.def
  3. CutilsCharts-default-for-use.def : when used rename to CutilsCharts.def
  4. CutilsCharts-examples.def : not intended for direct use, contains some more elaborate examples of the ChartsCompiler possibilities

To avoid confusion it is left to the user to edit and maintain the files for use either on the website or on the CumulusMX machine.

When creating website the file CutilsHead.def may have importance to you. See Website

Manually installing without FTP

NOTE: Not using the automatic upload system is disadvised. Because CumulusUtils is datadriven it requires the JSON files and the realtime.txt and realtimegauges.txt from CMX. Besides those, if you are using the UserAskedData feature of CumulusUtils there will be additional JSON files required for the server and without the upload module your will need a way to get them there. There is no copy feature like CMX has as CumulusUtils is designed as a website tool and an upload method is implicitely assumed present. However, manual handling can be done but is not advised.

All required installation and generated files are present in the utils directory and copied with FTP or PHP upload to the server during a run of CumulusUtils.

If you don't use FTP or PHP upload you will have to copy manually.

Files involved

The list of installation files required and their destination is below. The generated Javascript files are included in the table:

Distribution File Destination Remark
index.html <webroot>
CUgauges.js <webroot>/lib Despite the same name this file is very different from the one in CMX
CUlanguage.js <webroot>/lib
HighchartsDefaults.js <webroot>/lib
suncalc.js <webroot>/lib
CUtween.min.js <webroot>/lib
CUsteelseries.min.js <webroot>/lib
CURGraph.rose.js <webroot>/lib
CURGraph.common.core.js <webroot>/lib
CUgauges-ss.css <webroot>/css
Generated File Destination Remark
cumulusutils.js <webroot>/lib
HighchartsLanguage.js <webroot>/lib
*.txt <webroot>
airlinkdataIn2p5.json <webroot>
airlinkdataIn10.json <webroot>
airlinkdataOut2p5.json <webroot>
airlinkdataOut10.json <webroot>
extrasensorsdata.json <webroot>
customlogsRecentdata.json <webroot>
customlogsDailydata.json <webroot>
CUserdataRECENT.json <webroot>
CUserdataDAILY.json <webroot>
CUserdataALL.json <webroot>
Realtime Files Destination Remark
realtime.txt <webroot> Served by CMX [1]
realtimegauges.txt <webroot> Served by CMX [1]
airlinkrealtime.txt <webroot> When the AirLink device is configured [2]
extrasensorsrealtime.txt <webroot> When Extra Sensor devices are configured [2]
customlogsrealtime.txt <webroot> When Extra Sensor devices are configured [2]
meteocamrealtime.txt <webroot> When Extra Sensor devices are configured [2]

[1] : These files may be served by CMX in another directory (just like the CMX JSON data files). In that case the relative location is specified in the inifile parameter CumulusRealTimeLocation.
[2] : these files are generated in the utils directory and need to be configured as Extra Webfiles in CMX with the ticks: Realtime, Process and FTP. Note that the generated file has the webtags and remains local, the processed files contains the values and must be send to the <webroot>.

Running CumulusUtils

CumulusUtils is - up to v6.x.y - a mono executable. From v7.0.0 and up it runs under dotnet (.NET 8).

Both environments are very different and not interchangeable. However running CumulusUtils is pretty similar on both environment and mono and dotnet can co-exist on the same machine. See the CMX installation on how to install either mono or dotnet. CumulusUtils assumes the correct installation of either environment.

Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime. CumulusUtils runs on any operating system CumulusMX runs on and it MUST run in the CumulusMX directory (as working directory). Running CumulusUtils is done from the commandline in a command window (under any OS).

CumulusUtils takes one or more commandline parameters (in short: commands) and must be like (see NOTE 1 below; square brackets means optional so DON'T TYPE THEM):

               utils/bin/cumulusutils.exe [command]  (the mono syntax - this assumes mono is already active)
               dotnet utils/bin/cumulusutils.dll [command]  (the .NET syntax - dotnet is obligatory on the commandline. Note the dll)

Below is described for mono, when using .NET, please change the command as above. Note you will have to carry this on in scripts as well. Using the dotnet command in crontab requires using the explicit path to the dotnet command or defining the PATH environment variable in the crontab script which does not know the environment (a bit awkward).

If no commands are given the application responds with:

               CumulusUtils : No Arguments nothing to do. Exiting. See Manual.
               CumulusUtils Usage : utils/bin/cumulusutils.exe [args] (args case independent):
                 utils/bin/cumulusutils.exe
                     [ SysInfo ] [ Forecast ] [ StationMap ] [ UserReports ] [ MeteoCam ]
                     [ pwsFWI ][ Top10 ][ Graphs ][ Yadr ][ Records ]
                     [ NOAA ][ DayRecords ][ AirLink ][ UserAskedData ]
                     [ CompileOnly ] [ ExtraSensors ] [ CustomLogs ] 
                     [ Diary  ] CUlib ]
                     | [ Thrifty ] 
               OR (in case you use the website generator):
                  utils/bin/cumulusutils.exe [ Thrifty ] Website

All modules mentioned in the command will be described in their own pages here on the wiki and when available will be linked from here.

The commands represent the modules the user is asking for to be generated. The output is generated to the utils directory in the CumulusMX directory. When asking for the generation of the website, the user not only gets all modules available but also an index.html file accompanied with some javascript infrastructure. Everything together then is the website which, when copied to the webroot, is ready for use.

Commands to CumulusUtils - the module names - are case independent but the author prefers Upper Camel Case (or Pascal Case).

Copying to the webroot can also be done automatically through the FTP account of the user, much like CumulusMX itself copies e.g. the realtime.txt or the datafiles to the webroot. The FTP account and domain used are the same as present in the Cumulus.ini configuration. The PHP upload as exists in CMX can also be used with CUtils and it works exactly the same.

Considerations with CMX configuration

Please note that CumulusUtils requires live data from CumulusMX to display what you expect. To accomplish that you need to configure CMX as follows:

The things it is looking for are realtime.txt and realtimegauges.txt. Those are sent by CMX to the directory you configure in Settings=>Web/Upload Site.

In Settings=>Internet Settings=>Interval Configuration=>Normal Interval Settings: Tick both options and set the interval time to enable interval Upload
In Settings=>Internet Settings=>Interval Configuration=>Standard File settings: Disable both options (for CumulusUtils, if you have websites which use those, leave it enabled)
In Settings=>Internet Settings=>Interval Configuration=>Graph File Settings: Enable all (only Upload, use Create Local only when needed) except the following:
  availabledata.json, dailyrain.json, dailytemp.json, sunhours.json, airquality.json, extra*.json, soil*.json, user*.json,co2*.json and leaf*.json
In Settings=>Internet Settings=>Interval Configuration=>Daily Graph File Settings: Enable all except alldailydegdaydata.json, alltempsumdata.json and allchillhrsdata.json
In Settings=>Internet Settings=>Interval Configuration=>Real time Interval Settings: Tick both and set interval time to enable realtime Upload
In Settings=>Internet Settings=>Interval Configuration=>Real time Interval Settings: Tick both realtime.txt and realtimegauges.txt for Upload, use Create Local only when needed.
In Settings=>Web/Upload Site=>General Settings: Tick UTF-8 encoding

And if you use the ChartsCompiler (or plan to use, you may be more selective later when understanding what and how):

After selecting the required tables you need to select the variables they may contain:

In Settings=>Station Settings=>Graphs=>Data Series Visibility: Tick all

NOTE: You may disable some fields later when you are more acquainted with the system. Disabling tables and field can be especially useful when you are worried about size of transfer and provider limits.

If you start using the ChartsCompiler, you may need the UserAskedData command to CumulusUtils. See the ChartsCompiler.

You may want to read about and understand the CumulusRealTimeLocation

When and why to run

Running CumulusUtils results in output which represents a static view of the data in a table or graphic format for display on your website (it may even create a complete website). The fact that the output is a static view requires the output to be regenerated when new data is available. Rerunning CumulusUtils is also required when you change anything in the configuration and can't wait to see that change reflected on the site. In general: changes in data and configuration require a rerun.

Reruns for changes of data are typically once per day, just after rollover time. In that sense it is like running a new query.

There are some exceptions to the daily rule: Sysinfo and UserAskedData

  1. Sysinfo: a rerun with Sysinfo is required when you wish to update the system information which can be a requirement from every 10 minutes to once per day
  2. UserAskedData: provides data for charts which are otherwise not available. Again this is at a user desired frequency which is recommended to be the FTP frequency defined in Cumulus.ini (parameter UpdateInterval in section [FTP site])

RPi: Using crontab

Automating the run of CumulusUtils on the Raspberry Pi is typically done through crontab. Below is the crontab of the author of CumulusUtils to be used as an example!

For dotnet
 05 1 * * *  cd /home/CumulusMX; /usr/share/dotnet/dotnet utils/bin/cumulusutils.dll thrifty website
 1-51/10 * * * *  cd /home/CumulusMX; /usr/share/dotnet/dotnet utils/bin/cumulusutils.dll sysinfo UserAskedData UserReports
For mono
 15 1 * * *  cd /home/CumulusMX; utils/bin/cumulusutils.exe thrifty website
 1-51/10 * * * *  cd /home/CumulusMX; utils/bin/cumulusutils.exe sysinfo UserAskedData UserReport

Windows: Using the scheduler

How to create a scheduled task

Prior to doing this we need to also create the script that the task will use. Open notepad or your favourite text editor (preferred use: Notepad++).

You can copy paste the below and save as cumulusutils.bat (It can be a filename of choice but must have extension of .bat, if using windows notepad, underneath the File name: option, will need to set Save as type: option to All Files (*.*). This way when the File name: is set as cumulusutils.bat it will save it as that and not cumulusutils.bat.txt)

Batch file code of cumulusutils.bat

For v6 and below (running under mono):

REM This batch file script checks for the process CumulusMX.exe is running, if yes, then runs the "cumulusutils.exe", otherwise exit
REM Set the current working session to the folder C:\CumulusMX
cd\
cd C:\CumulusMX
REM Check for CumulusMX.exe is running, if yes goto :runutils, otherwise goto :end
tasklist /FI "IMAGENAME eq CumulusMX.exe" 2>NUL | find /I /N "CumulusMX.exe">NUL
if "%ERRORLEVEL%"=="0" GOTO runutils
GOTO end
REM Set as working directory C:\CumulusMX and run cumulusutils.exe in folder C:\CumulusMX\utils\bin, with the desired command or commands as per the wiki
:runutils
START /D C:\CumulusMX C:\CumulusMX\utils\bin\cumulusutils.exe Website
:end
exit

NOTE: The command shown here is Website. The user can put any command he likes in here (with or without Thrifty) depending on what he wants to achieve. Possibly he has to create multiple tasks (e.g. UserAskedData specifically runs on a higher frequency than website). These commands then require their own batch files.

For v7 and up (running under dotnet):

REM This batch file script checks for the process CumulusMX.exe is running, if yes, then runs the "cumulusutils.exe", otherwise exit
REM Set the current working session to the folder C:\CumulusMX
cd\
cd C:\CumulusMX
REM Check for CumulusMX.exe is running, if yes goto :runutils, otherwise goto :end
tasklist /FI "IMAGENAME eq CumulusMX.exe" 2>NUL | find /I /N "CumulusMX.exe">NUL
if "%ERRORLEVEL%"=="0" GOTO runutils
GOTO end
REM Set as working directory C:\CumulusMX and run cumulusutils.exe in folder C:\CumulusMX\utils\bin, with the desired command or commands as per the wiki
:runutils
START /D C:\CumulusMX dotnet C:\CumulusMX\utils\bin\cumulusutils.dll Website
:end
exit
Task creation process

Within the Task Scheduler Library

  1. Create “New Task…” (actions pane), or right click middle pane and choose “Create New Task” (not Create Basic Task).
    1. On the General tab of the new task (General information about the task).
    2. Set desired name for the Task (Example name CumulusUtils, can also set description if desired).
    3. Click “Change User or Group…”.
    4. Type in here the word system (click on “Check Names” if desired, to confirm it is correct and it should then display as SYSTEM in capitals).
    5. Click OK to use this user account.
    6. Note in Security options part of the new task creation process it should now state under. When running the task, use the following user account: NT AUTHORITY\SYSTEM
      (Convenient reason for this is that when the task runs, it runs is running as system account and so is not seen popping up on screen when it is running.)
    7. “Configure for:” not required to be changed, can be changed to version of operating system.
  2. On the Triggers tab of the new task (Setting when and how often the task runs).
    1. Click on “New”, to create a new launch time and frequency of the task.
    2. Begin the task: option should default to “On a schedule”, this is the desired option.
    3. Under the settings section choose “Daily” option.
    4. Start: date can be left as is, set the desired start time of the task. Set to “12:00:15 am”.
      (Reason for this setting with 15 second delay is trying not to compete with CumulusMX upload tasks).
    5. In the advanced part, enable Repeat task every: and choose desired interval.
      With the option for a duration of: default setting of “1 day” is used.
    6. Set Stop task if it runs longer than: to “30 minutes” (if the task runs longer than the time set, it is stopped. This applies to the individually triggered task, and not the overall routine of this scheduled task, with it’s repeating trigger times).
    7. Confirm that the Enabled options is ticked to make active this trigger routine.
  3. On the Actions tab (Setting what the task is to do).
    1. Click on “New…” to create a new action.
    2. Action: should default to “Start a program” this is correct.
    3. In the Program/Script: part, type the path to the program to run, or click “Browse” to navigate and select the program to run. (example C:\CumulusMX\batch_files\cumulusutils.bat).
  4. On the Conditions tab (setting other conditions).
    1. Under Power, untick Start the task only if the computer us on AC power
      (This then enables the task to start and run even if on battery. It will automatically untick Stop if the computers switches to batter power.)
  5. On the Settings tab (additional other settings for the task).
    1. Confirm ticked for Allow task to be run on demand.
    2. By default Stop the task if it runs longer than: is already ticket and set as 3 days.Change to 1 hour (the behaviour here is the same as instruction 3.f.)
    3. Confirm ticked for If the running ask does not end when requested, for it to stop.
    4. Default setting of “Do not start a new instance” Is OK.
  6. Click on OK down the bottom to complete and commit the creation of this new task.
Customisation

One can also customise/fine tune the task further by exporting it, default export format is XML. Then can edit in favourite text editor and reimport when done. May be useful in particular for fine tuning the repetition times of the task.

Additional remarks

  1. (on NOT Windows) When mono is already active (as daemon or from command line in another process) you can start any mono executable without having it prepended by the mono command. As normally (if you did not uninstall it) xsp4 is running as a daemon, mono is always available so you can run mono executables as normal linux executables. You won't notice the difference. However if you don't have the x bit set, you get access refused when trying to execute. Without the x bit set you have to prepend mono as in: mono utils/bin/cumulusutils.exe. Then it executes without the x bit set because then it is an argument to the mono command.
  2. CumulusUtils is written in C#, HTML and javascript. All HTML and javascript is embedded in the C# code and generated on execution of CumulusUtils. The cumuluscharts.txt charts library was based on the cumuluscharts.js originally distributed with CumulusMX, probably the version a bit before April 2020 and has been modified since. With the appearance of the ChartsCompiler the name cumuluscharts.txt has been preserved but the technique of creating the charts has been changed.
  3. As CumulusUtils itself runs in the Cumulus directory, the data directory (data) is one level below. CumulusUtils currently uses - a copy of - dayfile.txt, the monthly logfiles and incidentally the alltime.ini file. It also takes information from Cumulus.ini. All output is written to the utils/ subdirectory. All logs are created in the utils/utilslog/ subdirectory. It also uses the AirLink.log and the ExtraLog files in a similar way when the user has such devices.
  4. The output of CumulusUtils consists of UTF8 encoded text files. They can be brought to your website manually through some ftp tool (e.g. WinSCP) or by using the Extra Web Files functionality in the setting of Cumulus (deprecated) or by using the FTP facility.
  5. CumulusUtils can output for many languages. See the specific page on language in CumulusUtils.
  6. Development of CumulusUtils started in 9th of August 2019 with an initial commit of the Top10 written in C. Development changed rapidly to C# with an initial commit of Top10 on November 19 2019 of version 0.7.0. The rest of the history can be read in the release notes.
  7. Users can present themselves on the CumulusUtils usermap. Although optional for modules users, the author sees it as payment for the usage of the tool, so please put yourself on the map. For website users it is automatic and obligatory.
  8. In case of problems there exists Errorlogging.
  9. CumulusUtils is © Hans Rottier and can be used under the Creative Commons Attribution License. At some point the code will be in the public domain under a different license.

NOTE: comments to this series of articles is welcome either by using the Talk feature of the Wiki for that page, direct edit of the article (request an account) or by contacting the author of CumulusUtils HansR on the forum or through PM.