Hi there!
For several reasons, an item may not always have a value. (E.g. a new value or not persisted)
In my first attempts I tried to get the value like this (defaulting to 3):
myValue = 3 if ir.getItem("itemName").getState().intValue() is None else ir.getItem("itemName").getState().intValue()
But it’s not as simple as that. First, intValue() is not a valid function name if the item has not been initialized. I ended up with doing a function:
def getItemValue(ir, itemName, defVal):
'''
Returns the items value if the item is initialized otherwise return the default value.
ir.getItem will return an object also for uninitialized items but it has less methods.
'''
itemValue = defVal
try:
if type(defVal) is int:
if 'intValue' in dir(ir.getItem(itemName).getState()):
itemValue = ir.getItem(itemName).getState().intValue()
elif type(defVal) is float:
if 'floatValue' in dir(ir.getItem(itemName).getState()):
itemValue = ir.getItem(itemName).getState().floatValue()
elif type(defVal) is str:
if 'toString' in dir(ir.getItem(itemName).getState()):
itemValue = ir.getItem(itemName).getState().toString()
else:
log.error('The type of the passed default value is not handled')
except:
log.error('Can not get item with name: ' + itemName)
raise
return itemValue
Usage example: cur_mood = getItem(ir, 'Sys_LightLevel', LIGHTING_MOOD['OFF'])
Is this overkill? I guess there must be an easier way… How do you do these things?
Cheers!