====== Variables ======
The variable class represents an Indigo variable.
==== Class Properties ====
^Property ^ Type ^Description ^
|//''id''//| integer |the unique id of the variable, assigned on creation by IndigoServer|
|//''folderId''//| integer |the unique id of the folder this variable is in (0 if it's not in a folder) - use //''moveToFolder()''// method to change|
|//''name''//| string |the name of the variable - no two variable can have the same name|
|//''readOnly''//| string |is the variable read only - currently only the //''isDaylight''// variable is read only|
|//''remoteDisplay''//| boolean |should this variable be displayed in remote clients (IWS, Indigo Touch, etc)|
|//''value''//| string |the unicode string value of the variable|
==== Class Method ====
The Variable class has a special method, ''**getValue(TYPE, default=VALUE)**'', that you can call which will retrieve the variable value as the specified Python class. There are a couple of advantages to using this method: first, it won't throw an exception but will always return a value; second, the Indigo server will do the conversion in the exact same way that it does type conversions when using variables in triggers and conditions. You can also optionally specify a default value if the value can't be successfully converted into the specified type. Here's a list of the valid types you can specify and what the default is if not specified:
^ Type Literal ^ Type Returned ^Default ^
| bool | Boolean |**''True''** will be returned if the value is one of these: "true", "on", "yes", and "1". ''**False**'' will be returned if the value is one of these: "false", "off", "no", and "0". If no default value is specified and the value can't be successfully converted, the method will return False. |
| int | Integer |An integer object will be returned if the value is an integer number or a float/decimal. In the latter case, the number will be rounded to the nearest integer. If no default value is specified and the value can't be converted, the method will return 0 |
| float | Float |A float object will be returned if the value is a float/decimal or an integer. If no default value is specified and the value can't be converted, the method will return 0.0 |
Remember that accessing the ''**value**'' property of a variable object (''//var.value//'') will return a unicode string object so you don't need a conversion for that.
=== Class Method Examples ===
# Get a variable
var = indigo.variables[123456]
# Getting the unicode string value (no conversion call necessary, just access the property)
unicodeValue = var.value
# Getting the boolean value
intValue = var.getValue(bool) # False if it can't be converted
intValue = var.getValue(int, default=True) # True if it can't be converted
# Getting the integer value
intValue = var.getValue(int) # 0 if it can't be converted
intValue = var.getValue(int, default=10) # 10 if it can't be converted
# Getting the float value
intValue = var.getValue(float) # 0 if it can't be converted
intValue = var.getValue(float, default=98.6) # 98.6 if it can't be converted
==== Commands (indigo.variable.*) ====
=== Create ===
Create a variable. This method returns a **copy** of the newly created variable.
^ Command Syntax Examples ^
|indigo.variable.create("VariableName", value="Var Value", folder=843920)
|
^ Parameters ^^^^
^ Parameter ^ Required ^ Type ^ Description ^
|//''folder''//| No | integer |id or instance of the folder in which to put the newly created device - defaults to 0 (no folder)|
|//''name''//| Yes | string |the name of the variable|
|//''value''//| No | string |the value of the variable|
=== Delete ===
Delete the specified folder.
^ Command Syntax Examples ^
|indigo.variable.delete(123)
|
^ Parameters ^^^^
^ Parameter ^ Required ^ Type ^ Description ^
|direct parameter| Yes | integer |id or instance of the variable to delete|
=== Duplicate ===
Duplicate the specified variable. This method returns a copy of the new variable.
^ Command Syntax Examples ^
|indigo.variable.duplicate(123, duplicateName="NewName")
|
^ Parameters ^^^^
^ Parameter ^ Required ^ Type ^ Description ^
|direct parameter| Yes | integer |id or instance of the variable to duplicate|
|//''duplicateName''//| No | string |name for the newly duplicated variable|
=== Get Dependencies ===
Return an indigo.Dict with all the dependencies on this variable.
^ Command Syntax Examples ^
|depDict = indigo.variable.getDependencies(123)
|
^ Parameters ^^^^
^ Parameter ^ Required ^ Type ^ Description ^
|direct parameter| Yes | integer |id or instance of the variable to get the dependencies for.|
The dictionary will look something like this:
>>> print indigo.variable.getDependencies(91776575)
Data : (dict)
actionGroups : (list)
controlPages : (list)
devices : (list)
schedules : (list)
Data : (dict)
ID : 552463741 (integer)
Name : Between condition test (string)
Data : (dict)
ID : 296710860 (integer)
Name : Greater than condition test (string)
triggers : (list)
variables : (list)
So, the dictionary will have 5 top-level keys: "actionGroups", "controlPages", "devices", "schedules", "triggers", and "variables". Each one of those keys will return a list object. Inside that list object will be multiple dicts, one for each dependency (or an empty list if there are none). Each dependency dictionary has two keys: "ID" which is the unique id and "Name" which is the name of the object.
=== Move To Folder ===
Use this command to move the variable to a different folder.
^ Command Syntax Examples ^
|indigo.variable.moveToFolder(123, value=987)
|
^ Parameters ^^^^
^ Parameter ^ Required ^ Type ^ Description ^
|direct parameter| Yes | integer |id or instance of the variable|
|//''value''//| Yes | integer |id or instance of the folder to move the variable to|
=== Set Remote Display ===
Use this command to set the remote display flag for the folder.
^ Command Syntax Examples ^
|indigo.variable.displayInRemoteUI(123, value=True)
|
^ Parameters ^^^^
^ Parameter ^ Required ^ Type ^ Description ^
|direct parameter| Yes | integer |id or instance of the variable|
|//''value''//| Yes | boolean |True to display the variable on remote user interfaces or False to hide it|
=== Update Value ===
Use this command to set the value of a variable without having to get a local copy first.
^ Command Syntax Examples ^
|indigo.variable.updateValue(123, value="New Value")
|
^ Parameters ^^^^
^ Parameter ^ Required ^ Type ^ Description ^
|direct parameter| Yes | integer |id or instance of the variable|
|//''value''//| Yes | string |the new value for the variable|
==== Examples ====
# Create a new variable
newVar = indigo.variable.create("fooName", "fooMonster")
# Updating value via command space function:
indigo.variable.updateValue(newVar, "asleep789")
newVar.refreshFromServer() # refresh needed to update local's .value
# changing name property
newVar.name = "goodName"
newVar.replaceOnServer()
newVar.name = "bad name" # should throw because of space character
# changing name and values properties:
newVar.name = "goodName2"
newVar.value = "searchingForWaldo"
newVar.replaceOnServer()
indigo.variable.delete(newVar)
# Getting a variable using it's ID
someVar = indigo.variables[123]
# Getting a variable using it's name
someVar = indigo.variables["MyVarName"]