Command Delay simulation

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}"()
	}