Use Expressions and Functions in Simulation Models
Use expressions and functions to customize the attributes, alerts, actions, and events for your simulation model.
The IoT digital twin simulator supports the Expression Language 3.0 syntax without curly braces around expressions. You can use all static functions from the JDK 8 java.lang.Math class. You can also make use of the additional simulation functions that are provided.
               
The following are some examples of simulation model fields where you can use expressions and functions:
- 
                     In Attributes: Use expressions and functions to specify the Initial Value Expression and Value Expression for attributes. For example: - 
                           You can use the now()function to initialize thestartTimeattribute.
- 
                           You can use $tempto initialize the value ofmintempwith the value of thetempattribute.
- 
                           You can use the numeric value 37.391838to initialize thelatitudeattribute.
- 
                           You can use Math.max($maxTemp, $temp)to calculate the value for themaxTempattribute. Here,maxis a function of theMathclass, and$maxTempand$tempare attributes.
 
- 
                           
- 
                     In Alerts: Use a boolean expression to define the Condition Expression used for triggering the alert. For example: $temp >= $maxThreshold.
- 
                     In Actions: Use expressions to set attribute and event values for actions. For example, you can set the startTimeattribute to the following expression:$action.power ? now() : $startTime.Here,poweris an action.
- 
                     In Events: Use expressions to set the Attribute Expression when the event is on. For example: Set the $tempattribute tosinInRange(60, 80).
- 
                     In Functions: Create your own functions using expressions and existing functions. Use the lambda syntax to define the body of a function. For example, you can define a user function called absDiffas(param1, param2) -> Math.abs(param2 - param1).You can now use the function anywhere expressions are allowed. For example: $attr0 > 50 ? absDiff($attr1, $attr2) : absDiff($attr3, $attr4).
Note:
You can refer to device model attributes using the $ prefix. 
                  
When using a single device model, you may use names such as $temperature, where temperature is the name of a device model attribute. If you have several device models, then outside a device model, such as in an events attributes expression, use fully qualified attribute names. For example: $urn:com:oracle:iot:device:temperature_sensor.temperature. If you do not qualify the attribute name, then the first device model is assumed, by default.
                  
Additional Simulation Functions
Oracle IoT Digital Twin Simulator provides the following functions in addition to the static functions available in the JDK 8 java.lang.Math class:
                  
- 
                        public static double linearToTarget(double currentValue, double targetValue, double increment)Returns values that follow a linear pattern from currentValuetotargetValuewith the suppliedincrement.
- 
                        static double logToTarget(double currentValue, double targetValue)Returns values that follow a logarithmic pattern from currentValuetotargetValue.
- 
                        static long now()Generates the current time in milliseconds. 
- 
                        static double randomInRange(double lowerValue, double upperValue)Generates random float values in the range defined by the arguments. 
- 
                        static double sinInRange(double lowerValue, double upperValue)Generates values that follow the sin(x)function pattern in the range defined by the arguments.
- 
                        static double spikesInRange(double lowerValue, double upperValue, double currentValue)Generates one of two values, passed as lowerValueandupperValue, different from the current value, which is passed as thecurrentValueargument.