Custom Expressions
Custom Expressions
Expressions allow complex Tag-based logic to set a property. Expressions can be broken down into two phases: the math phase and the formatting phase. In the math phase, users can use tags to compute mathematical operations to get a single value. The formatting phase is intended for display purposes. Formatting options include specifying the number of decimals for a number date, time string format, etc.
Math
The math phase will always return a single numeric value. This phase is similar to a calculator where the only allowed inputs are tag values, constants, and operations on those values.
All constants are treated as doubles, including boolean values (1.0/0.0)
Format
The format phase will always return a single string value. This phase will convert the math value from the math phase into a string value.
Built-in Operators
Math Operators
Here are the Math operations in Tag Expressions.
Tag ( [] )
Constants ( pi , epsilon , inf )
Basic math operators ( + , - , * , / , % )
Functions ( min , max , avg , sum , abs , ceil, floor, round, exp, log, log10, log , pow, root, sqrt, clamp )
Trigonometry ( sin , cos , tan , acos , asin , atan , atan2 , cosh , cot , csc , sec , sinh , tanh )
Equalities ( == , != , < , <= , > , >= )
Control ( if, then, else )
Format Operators
| Item | Description |
|---|---|
| round(decimalPlaces) | Returns a number rounded to the nearest decimalPlaces decimal places. |
| base(base) | Returns a string equivalent of the input number according to the specified base. |
| numericFormat(format) | Returns a string formatted by the pattern described in the format. Invalid formats will return an empty string. |
| # | Denotes a basic decimal character. If used past a decimal point, it will specify the minimum number of decimal values to show. Not compatible with hexadecimal formats. |
| H | Denotes a hexadecimal character. This is not compatible with decimal formats. |
| 0 | Denotes a zero-fill character. The index of this character will be used as a minimum number of digits to display before a decimal point. There should be at most one. |
| . | Denotes a decimal point. There should only be one at most. Not compatible with hexadecimal format. |
| , | Denotes a group separator. The index of this character will be used as the number of digits to group up. There should be at most one, and it cannot be used past a decimal point. |
| datetimeFormat(format) | Returns the UNIX timestamp as a string in the form described in format. |
| h | An hour without a leading zero. It can be either 0 to 23 or 1 to 12. |
| hh | An hour with a leading zero. It can be either 00 to 23 or 01 to 12. |
| H | An hour without a leading zero. It can be either 0 to 23, even with AM/PM display. |
| HH | An hour with a leading zero. It can be either 0 to 23, even with AM/PM display. |
| m | A minute without a leading zero (0 to 59) |
| mm | Minute with a leading zero (00 to 59) |
| s | The whole second, without any leading zero (0 to 59) |
| ss | The entire second, with a leading zero where applicable (00 to 59) |
| z | The fractional part of the second, to go after a decimal point, without trailing zeros (0 to 999). |
| zzz | The fractional part of the second, to millisecond precision, including trailing zeros where applicable (000 to 999). |
| AP or A | Use AM/PM display. |
| ap or a | Use am/pm display. |
| t | The timezone. |
| d | The day as a number without a leading zero. |
| dd | The day with a leading zero. |
| ddd | The abbreviated localized day name. It uses the system to localize the name. |
| dddd | The long localized day name. It uses the system to localize the name. |
| M | The month as a number without a leading zero. |
| MM | The month as a number with a leading zero. |
| MMM | The abbreviated localized month name. It uses the system to localize the name. |
| MMMM | The long localized month name. It uses the system to localize the name. |
| yy | The year as a two-digit number. |
| yyyy | The year as a four-digit number. |
| map(format) | Returns the value that falls in the range provided in the format based on the input value. The following is the expected syntax of the format: - A list of range values separated by a comma. - A range value is defined as: - Starts with { - A pair of a range and a value. - A range is defined as: - Starts with [ or ( - A [ implies inclusive. - A ( implies exclusive. - A pair of numeric values separated by a comma - An empty numeric valuye implies either positive infinity or negative infinity depending on which side of the pair it is on - "inf," "+inf" resolves to infinity" - "-inf" resolves to negative infinity - Ends with ] or ) - A ] implies inclusive - A ) implies exclusive - Ends with } - A default value may be specified with a | character. |
| hasPermission(permission) | Returns whether or not the currently signed-in user has permission. This is the expression equivalent to the script with the same name. System.hasExpression. |
Examples
| Item | Description |
|---|---|
| Get Tag | {[TAG1]} |
| Add two tags together | {[TAG1] + [TAG2]} |
| Add two tags together, then return value as binary | {[TAG1] + [TAG2]|base(2)} |
| Conditional Value | {if ([TAG1] % 2) [TAG2]; else [TAG3];} |
| Convert C to F | {([CelsiusTag] * 9 / 5) + 32} |
| Embed values into a string | Temp: {[TAG1]} | Pressure: {[TAG2]} |
| Map values from a range | {[TAG1]|map("{,0),-1},{[0,10),0},{[10,20),1},{[20,30),2},|nan")} |