This action allows you to set the value of a specific MacroDroid variable.

As explained in the Variables section, variables are divided into 2 categories and 4 types. Whatever category or type, their value/content is never reset and remains, even after device reboot. They are identified by a name given at creation time (see below)


Naming:

Every variable is identified by its name. This name can be made of any set of character. To facilitate maintainability, the name should relate the content or purpose of the named variable.


Category:

Every variable can be either local or global.

  • A local variable belongs to the macro it has been created into. It can only be used inside this macro. Its name must be unique inside the macro it belongs to
  • A global variable can be accessed and used from any macro. Its name must be unique among all the 'global' variables


Type:

A variable belongs to 1 of the 4 following types: Boolean, Integer, Decimal or String.

  • Boolean type allows 2 states: True or False
  • Integer type is to store positive or negative numbers without decimal part, in order to make any kind of mathematical calculations or comparison
  • Decimal type is to store any positive or negative numeric value, with or without decimal digits, in order to make any kind of mathematical calculations or comparison
  • String type contains any kind of character (alphanumeric ones or any special ones, such as line feed/carriage return/new line or emojis). HINT: an individual string variable can hold up to 500,000 characters, however it is advisable to avoid very long strings where possible. If you should use strings of great length it is recommended to clear them when finished with.

"Set variable" action allows to store a specific value to a given variable. This variable has to be selected among all the available variables or created by selecting the first item of the list called [New Variable]. In this case, you'll be asked what category, name and type have to be assigned to this new variable (see above).

According to its type (see above), you can choose a value or method to be assigned to among a list of methods:


For Boolean variables:

  • False or True value
  • invert current value
  • prompt at execution time
  • another boolean variable value


For Numeric variables (Integer or Decimal):

  • fixed value
  • random value
  • prompt at execution time
  • mathematical expression that can include any existing numeric or boolean variable as well as any available numeric Magic text and some mathematical functions (list and syntax included)
  • in addition, Integer type variables have 2 other kinds of settings: adding or subtracting 1 to current value (same as mathematical expression 'my_integer_variable +/- 1' but more convenient when incrementing/decrementing an index by step of 1)

In expressions, booleans have value 1 if true, 0 if false and beyond usual arithmetic operators (+ - * /) you can use

- % for modulo
- ^ for power
- logical operators (&& for "and", || for "or") where the operands can be booleans or numbers (0 is false, any non-zero is true) and the boolean result is converted to number (there is no "not" operator but there is a not() function shown in the list of available functions)
- comparisons between numbers (< = != >) where again the boolean result is converted to number


For String variables:

  • fixed value (including concatenated string variables contents as well as any available Magic text or empty string to clear the variable content)
  • prompt at execution time