Thank you.
I created a workaround that actually works. Pass the settings field name, and when it's a multiple: true, the device's index number which is available in a .each or .find loop.
When multiple : false
input "light", "capability.bulb", required: true, multiple: false
runIn (5,lightToggle,[data: [inputSetting: 'light', i: false]])
When multiple : true
input "lights", "capability.bulb", required: true, multiple: true
runIn (5,lightToggle,[data: [inputSetting: 'lights', i: 2]])
void lightToggle(data) { log.debug "lightToggle entered ${data} ${data.inputSetting} ${data.i}" def settingName=data.inputSetting def i=data.i if (i) { if (settings."${settingName}"[i].currentValue('switch') == 'on') settings."${settingName}"[i].off() else settings."${settingName}"[i].on() } else { if (settings."${settingName}".currentValue('switch') == 'on') settings."${settingName}".off() else settings."${settingName}".on() } }
Making the above generic
When multiple : false
input "light", "capability.bulb", required: true, multiple: false
runIn (5,delayCommand,[data: [inputSetting: 'light', i: false, command: 'off'], overwrite:false])
When multiple : true
input "lights", "capability.bulb", required: true, multiple: true
runIn (5,delayCommand,[data: [inputSetting: 'lights', i: 2, command: 'on' ], overwrite:false])
void delayCommand(data) { log.debug "delayCommand entered ${data} ${data.inputSetting} ${data.i} ${data.command}" if (data.i) settings."${data.inputSetting}"[data.i]."${data.command}"() else settings."${data.inputSetting}"."${data.command}"() }