Templates
Meteobridge provides a very flexible mechanism to smuggle sensor data of different kinds into strings to be used by Meteobrdge push services like Twitter, HTTP GET uploads or MSQL database insert requests.
Simply type in the text you want to upload and represent the pieces of sensor data by so called variables. When data gets uploaded, these variables will be replaced by current sensor data and so a string filled with the data you intended will be uploaded.
Each variable starts with an opening square bracket "[" and is terminated by a closing square bracket "]". The structure of the variable name between these brackets is as follows:sensor-selector=converter.decimals:replacement
"converter", "decimals" and "replacement" can be omitted, "sensor" and "type" are mandatory. While "sensor" tells what sensor and what piece of information of the sensor to use, "selector" decides data from what time period should be taken into account and "converter" does convert data into measurement units the user likes most. "Decimals" decides about precision the result should be shown in and "replacement" gives the string to be returned when there is no data for defined sensor available.
Sensors
These sensors are defined in Meteobridge.
- th0temp: outdoor temperature in degrees Celsius
- th0hum: relative outdoor humidity as percentage
- th0dew: outdoor dew point in degrees Celsius
- th0heatindex: outdoor heat index in degrees Celsius
- thb0temp: indoor temperature in degrees Celsius
- thb0hum: indoor humidity as percentage
- thb0dew: indoor dewpoint in degrees Celsius
- thb0press: station pressure in hPa
- thb0seapress: normalized pressure (computed to sea level) in hPa
- wind0wind: wind speed in m/s
- wind0avgwind: average windspeed in m/s (time used for average depends on station)
- wind0dir: wind direction in degress (0° is North)
- wind0chill: wind chill temperature in degrees Celsius
- rain0rate: rain rate in mm/h
- rain0total: rain fall in mm
- uv0index: uv index
- sol0rad: solar radiation in W/m^2
- sol0evo: evapotranspiration in mm (only supported on Davis Vantage stations)
If a sensor is not there or data of sensor has passed the "tolerated data age" interval, Meteobridge will not provide data for it and will present the value defined as "replacement". If no replacement is given, variable will not be converted into data but will stay as is. As some weather stations do also report low battery status, there are also sensors thb0lowbat, th0lowbat, etc available. These sensors provide current low bat status (0 = no low battery, 1 = low battery) for each of the base sensors.
Some stations do support additional temp/hum sensors. These will be enumerated as "th1temp", "th1hum", "th1dew", and so on. "Live Data" tab will illustrate what sensor number matches what current data. When you have a fully equiped Davis Vantage you might also have soil and leaf sensors. These are also reported as temp/hum sensors, but there is no dewpoint data computed for these types of sensors. soil sensors are enumerated as "th10temp", "th10hum", ..., "th13temp", "th13hum" and leaf sensors are listed as "th15temp", "th15hum", ..., "th18temp", "th18hum". "hum" values do not represent relative humidity in that case but data in units "cbar" and "wet". However, Meteobridge does not invent new unit selectors for it, so you have to use "hum" as a generic selector to get "cbar" and wetness data from the soil/leaf sensors.
Selectors
Sensors are followed by a selector (syntactically separated by a dash) that specifies what period in time should be used for evaluation. Valid selectors are:
- act: most recent data
- hmin: minimum value of this hour
- hmax: maximum value of this hour
- dmin: minimum value of today
- dmax: maximum value of today
- ydmin: minimum value of yesterday
- ydmax: maximum value of yesterday
- mmin: minimum value of this month
- mmax: maximum value of this month
- ymin: minimum value of this year
- ymax: maximum value of this year
- amin: minimum value of all time
- amax: maximum value of all time
Sensors that deliver cumulated data like "rain0total" and "sol0evo" should be used with the following selectors only:
- hoursum, daysum or sumday, monthsum, yearsum, allsum, ydaysum: selects summerized delta values from today, this month, this year, all time or yesterday. Example: "rain0total-sumday" is todays rain fall.
When you are interested in timestamps of min/max values, you can make use of these selectors:
- hmintime: timestamp of minimum value of this hour
- hmaxtime: timestamp of maximum value of this hour
- dmintime: timestamp of minimum value of today
- dmaxtime: timestamp of maximum value of today
- ydmintime: timestamp of minimum value of yesterday
- ydmaxtime: timestamp of maximum value of yesterday
- mmintime: timestamp of minimum value of this month
- mmaxtime: timestamp of maximum value of this month
- ymintime: timestamp of minimum value of this year
- ymaxtime: timestamp of maximum value of this year
- amintime: timestamp of minimum value of all time
- amaxtime: timestamp of maximum value of all time
- starttime: timestamp of first recorded value
Timestamps are strings of format "YYYYMMDDhhmmss". Year "YYYY" is reported in 4 digits, all other values (month "MM", day "DD", hour "hh", minute "mm", second "ss") come with 2 digits, leading zeros are not supressed.
- age: reports seconds elapsed since last reception of data for that particular sensor.
- hold: reports seconds elapsed since last reception of data for that particular sensor, but returns invalid value when age is beyond data hold period of 300 seconds. This allows to return invalid status instead large number of seconds for sensors having dropped off long time ago.
Apart from selectors that use absolute, predefined time slots there are also selectors that look for a certain amount of time into the past.
- val1, val1, val3, ..., val60: selects the value the sensor has shown one to 60 minutes ago (This is only available for sensors with ID 0 and 1, like "th0temp" or "th1temp", unless you have a Meteobridge PRO).
- max1, max2, max3, ..., max60: selects the maximum value from the last one to 60 minutes
- min1, min2, min3, ..., min60: selects the minimum value from the last one to 60 minutes
- avg1, avg2, avg3, ..., avg60: selects average value from the last one to 60 minutes
For sensors delivering cumulated values like "rain0total" and "sol0evo" the following selectors are defined:
- sum1, sum2, sum3, ..., sum60, sum1h, sum2h, sum3h, ..., sum24h: selects summarized delta values from the last one to 60 minutes or one to 24 hours. This is useful to get amount of total rain in a certain time frame: "rain0total-sum60" is rainfall in mm of last 60 minutes.
- delta1, delta2, delta3, ..., delta60, delta1h, delta2h, delta3h, ..., delta24h: selects difference between current value and value from one to 60 minutes or one to 24 hours ago. A positive number shows that value has increased, a negative number indicates the value has decreased. This is useful to do trend analysis over various time spans.
Meteobridge PRO Additions
Selectors val, min, max, avg, sum can be combined with a "@YYYYMMDDhhmm" specifier, that determines at which exact point in time the data should be taken from. This specifier also defines if data on a per minute, per hour, per day, per month or per year base should be used. To get data from a per minute representation the specifier needs to define the point in time down to the minute. Example: "min@201512190900" selects minimum data from December 19, 2015 at 09:00 (on a per minute base), while "min@2015121909" selects minimum data from December 19, 2015 09:00 until 9:59 (on a per hour base). val will give same results as average and only makes sense on a per minute base, where data of that minute is reported. It can also be averaged, when more than one sensor reading has occurred during that minute, but that should not be a problem I guess. This is how the specifier works:
- @YYYY selects data for the specified year. Example: Using "[th0temp-min@2015]" in a template will report minimum outdoor temperature of 2015.
- @YYYYMM selects data for the specified month. Example: Using "[wind0wind-max@201509]" in a template will report maximum wind speed (gust) of September 2015.
- @YYYYMMDD selects data for the specified day. Example: Using "[rain0total-sum@20151031]" in a template will report total rainfall on October 31, 2015.
- @YYYYMMDDhh selects data for the specified hour. Example: Using "[uv0index-avg@2015110316]" in a template will report average UV index on November 3, 2015 between 16:00 and 16:59.
- @YYYYMMDDhhmm selects data for the specified minute. Example: Using "[thb0seapress-val@201512251200]" in a template will report sealevel pressure on Christmas noon, 2015 at 12:00.
Converters
Sensor data is reported in ISO units (°C, hPa, mm, m/s) by default, but can be converted into non-ISO units (imperial) by adding a conversion token. Defined tokens are:
- F converts temperature from Celsius to Fahrenheit.
- psi converts pressure from hPa (equivalent to mbar) to psi.
- mmHg converts pressure from hPa to millimeters of mercury.
- inHg converts pressure from hPa to inches of mercury.
- kmh converts wind speed from meters per second to kilometers per hour.
- mph converts wind speed from meters per second to miles per hour.
- kn converts wind speed from meters per second to knots.
- bft converts wind speed from meters per second to Beaufort scale.
- in converts millimeters to inches.
- ft converts meters to feet.
- endir converts a wind direction into one of 16 English direction texts.
- nldir converts a wind direction into one of 16 Dutch direction texts.
- dedir converts a wind direction into one of 16 German direction texts.
- barotrend converts a delta measurement (selector delta) into a barometer trend analysis pattern (1 hPa is about 0.03 inHg):
- -2: delta <= -2 hPa
- -1: -2 hPa < delta <= -1 hPa
- 0: -1 hPa < delta < +1 hPa
- +1: +1 hPa <= delta < +2 hPa
- +2: +2 hPa <= delta
- enbarotrend reports trend as strings FF, FS, ST, RS, RF
When variable returns a timestamp, then this converter can be applied:
- utc reports timestamp in UTC instead of localtime, which is default.
Forecast Variables
When you are using a Davis Vantage station, it provides a couple of forecast rules, which Meteobridge can report via template variables. All forcast variables start with sensor name "forecast" followed by one of these selectors:
- rule: reports Vantage rule number. When no rule present (or not a Vantage this will be a negative number).
- text: reports forecast text in English
- textde: reports in German (UTF-8 coded)
- textdeiso: reports in German (ISO-8859 coded)
- textdehtml: reports in German (HTML coded)
- textit: reports in Italien
- textnl: reports in Dutch
- textest: reports in Estonian
- texthr: reports in Hungarian
- textcz: reports in Czech
System Variables
Meteobridge provides some additional variables that tell details not directly related to weather conditions. Sensor name is "mbsystem", defined selectors are:
- mac: Meteobridge MAC hardware address (example: "40:01:FE:23:12:A8")
- swversion: Meteobridge version string (example: "1.1")
- buildnum: build number as integer (example: 1673)
- platform: string that specifies hw platform (example: "TL-MR3020")
- station: string that specifies selected weather station (expample: "WMR-200")
- stationnum: integer that specifies selected weather station (expample: 49)
- language: language used on Meteobridge's web interface (example: "English")
- timezone: defined timezone (example: "Europe/Berlin")
- latitude: latitude as float (example: 53.875120)
- longitude: longitude as float (example: 9.885357)
- uptime: uptime of Meteobridge in seconds
- cpuload1m, cpuload5m, cpuload15m shows average cpu load during last 1, 5, 15 minutes
- ip: IP address
- lanip: IP address on the LAN port (if connected)
- wlanip: IP address of the WLAN (if connected)
- lastdata: seconds passed since last piece of data received from weather station, returns -1 if no data received. Does not distinguish between useful and useless garbage data
- lastgooddata: seconds passed since last piece of meaningfull sensor data recorded, returns -1 if no sensor data recorded so far
- lunarage: days passes since new moon as integer (example: 28)
- lunarpercent: lunarphase given as percentage from 0% (new moon) to 100% (full moon)
- lunarsegment: lunarphase segment as integer (0 = new moon, 1-3 = growing moon: quarter, half, three quarters, 4 = full moon, 5-7 = shrinking moon: three quarter, half, quarter)
- daylength: length of day (example: "11:28")
- civildaylength: alternative method for daylength computation (example: "12:38")
- nauticaldaylength: alternative method for daylength computation (example: "14:00")
- sunrise: time of sunrise in local time. Can be converterd to UTC by applying "=utc" to the variable (example: "06:47", resp. "05:47")
- sunset. time of sunset in local time. Can be converterd to UTC by applying "=utc" to the variable (example: "18:15", resp. "17:15")
- civilsunrise, civilsunset, nauticalsunrise, nauticalsunset: alternative computations for sunset and sunrise.
- daynightflag: returns "D" when there is daylight, otherwise "N".
- isday: returns "1" when there is daylight, otherwise "0".
- isnight: returns "0" when there is daylight, otherwise "1".
- moonrise: time of moonrise in local time. Can be converterd to UTC by applying "=utc" to the variable. Please notice that not every day has a moonrise time, therefore, variable can be non-existent on certain days (example: "05:46", resp. "04:46")
- moonset: time of moonset in local time. Can be converterd to UTC by applying "=utc" to the variable. Please notice that not every day has a moonset time, therefore, variable can be non-existent on certain days (example: "17:00", resp. "16:00")
- graphA: returns URL of the user's Meteoplug chart "*instruments-black"
- graphB: returns URL of the user's Meteoplug chart "*instruments-black-imp"
- graphC: returns URL of the user's Meteoplug chart "*iphone-black"
- graphD: returns URL of the user's Meteoplug chart "*iphone-black-imp"
- graphE: returns URL of the user's Meteoplug chart "*iphone-tw-2d"
- graphF: returns URL of the user's Meteoplug chart "*iphone-tw-2d-imp"
- graphG: returns URL of the user's Meteoplug chart "*iphone-pr-2d"
- graphH: returns URL of the user's Meteoplug chart "*iphone-pr-2d-imp"
Time/Date Variables
Variables representing current date/time don't come as "sensor-selector=converter" chains but have a distinct meaning by themselves.
Date und time variables are defined as follows:
- YYYY: year as four digit number
- YY: year as two digit number
- MM: month as two digit number, if only one digit neede a zero will be used as first digit
- M: month as one or two digit number, no leading zeros
- DD: day of month as two digit number, if only one digit neede a zero will be used as first digit
- D: day of month as one or two digit number, no leading zeros
- hh: hour in 24h notation as two digit number, if only one digit neede a zero will be used as first digit
- h: hour in 24h notation as one or two digit number, no leading zeros
- HH: hour in 12h notation as two digit number, if only one digit neede a zero will be used as first digit
- H: hour in 12h notation as one or two digit number, no leading zeros
- apm: returns "am" or "pm" to be added to 12h time notations
- APM: returns "AM" or "PM" to be added to 12h time notations
- mm: minute as two digit number, if only one digit neede a zero will be used as first digit
- m: minute as one or two digit number, no leading zeros
- ss: seconds as two digit number, if only one digit neede a zero will be used as first digit
- s: seconds as one or two digit number, no leading zeros
When a capital "U" preceeds a date/time variable name, UTC is used instead of local time ("[Uhh]:[Umm]:[Uss] UTC" is evaluated to a string like "16:03:33 UTC")
Decimals
Unless otherwise defined numbers are reported with one decimal. By specifying a value for "decimals" you can determine resolution of presented values.
When variable returns a string instead of a number (in case of a timestamp for example), "decimal" specification does have a different format and meaning, which allows to select a substring. Specification of the substring consists of two lower-case letters. The first one specifies start point of the substring, second leter the position of last character of the string to be reported. For example, when string is timestamp "20130303121055" a specification of ".ad" selects a substring from first character (position code "a") until fourth character (position code "d"). When you want to grab the time for lowest outdoor temperature of today the template for that will be [th0temp-dmintime.ij:--]:[th0temp-dmintime.kl:--]. "ij" selects the hour part at position 9-10 and "kl" selects minute part at position 11-12 of the timestamp.
Replacement
When a variable is not defined or there is no data for a specified sensor, information specified as "replacement" string will be represented instead.
Numerical Expressions
A numerical expression that Meteobridge should evaluate needs to be enclosed by {* and *}. The enclosed expression can also include template variables. This allows to do various computations with numerical data. Resulting value is returned with two decimals. You can define how many digits the return value should have by stating the number of decimals betwenn the * and } when closing the numerical expression. For example, *0} does set number of decimals to 0, which will return a rounded integer value. When you are looking for a non-rounded, truncated integer then *t} will do the job.
The following operators can be used within numerical expressions:
Operator / Function | Description |
---|---|
&&, ||, &, | | logical "and", "or" operators working on value range: 1=true, 0=false |
==, =, !=, <>, >, >=, <, <= | comparison operations working on value range: 1=true, 0=false |
+, - | arithmetic operators "plus" and "minus" |
*, /, % | arithmetic operators "multiply", "divide" and "modulus" (which rounds the operands to integers first) |
^ | arithmetic operator "power" |
sqrt(), log(), exp(), sin(), asin(), cos(), acos(), tan(), atan(), atan2(), abs(), fabs(), floor(), ceil(), round() | arithmetic functions: square root, logarithm, logarithmic exponent, sinus, arcus sinus, cosinus, arcus cosinus, tangens, arcus tangens, arcus tangens2, absolute, floting point absolut, lower integer, upper integer, rounded integer |
Conditional Expressions
Templates can work with simple conditional expressions. These expressions are not allowed to be used recursive and they must be used on top-level, i.e. not inside numerical expressions. Expressions must be built in a strict #if# ... #then# ... #else# ... #fi# manner.
- #if# indicates start of the expression.
- Between #if# and #then# a number is expected. Blanks will be ignored. If number is greater than 0.0 the expression is recognized as true otherwise as false.
- In case of true expression, characters between #then# and #else# token will be used to replace the whole conditional expression in the template.
- In case of false expression, characters between #else# and #fi# token will be used to replace the whole conditional expression in the template.
As conditional expressions will be evaluated at the very end, any template replacement operations or numerical computations will be done before.
Examples
Having a look at examples usually helps to understand how easy that is.
- Template Outdoor temperature is [th0temp-act=F.1:--]°F will be converted into Outdoor temperature is 3.4°F when there is outdoor temp data and into Outdoor temperature is --°F if outdoor temp sensor does not provide recent data.
- Template Local time is [hh]:[mm] will be converted into Local time is 09:27.
- Template Max gust in last 10 minutes was: [wind0wind-max10.1:--]m/s, [wind0wind-max10=mph.1:--]mph, [wind0wind-max10=kn.0:--]kn will be converted into Max gust in last 10 minutes was: 10.5m/s, 23.5mph, 20kn.
- Template Max gust in last 10 minutes was: [wind0wind-max10.1:0]m/s, {*[wind0wind-max10.1:0] * 3.6 *1}kph will be converted into Max gust in last 10 minutes was: 10.5m/s, 37.8kph.
- Template Max gust in last 10 minutes was: #if#{*[wind0wind-age:999]>600*}#then#--#else#[wind0wind-max10.1:0]m/s, {*[wind0wind-max10.1:0] * 3.6 *1}kph#fi# will be converted into Max gust in last 10 minutes was: 10.5m/s, 37.8kph when last wind data is less than 10 minutes old (600 seconds) and will be Max gust in last 10 minutes was: -- otherwise.