function findFunction(id)
	for i, fun in ipairs(functions) do
		if fun.id == id then
			return functions[i]
		end
	end
end
function handleTrigger(topic, payload, retained)
	local data = json:decode(payload)
	
	if data.value == openState then
		
		local payload = json:encode({ value = onValue })
		mq:pub(controlTopic, payload, false, 0)
		
		timer:after(cfg.timeout, function()
			local payload = json:encode({ value = offValue })
			mq:pub(controlTopic, payload, false, 0)
		end)
	end
end
function onStart()
	
	local triggerFunction = findFunction(cfg.triggerFunction)
	triggerTopic = triggerFunction.meta.topic_read
	
	onFunctionsUpdated()
	mq:sub(triggerTopic, 0)
	mq:bind(triggerTopic, handleTrigger)
end
function onFunctionsUpdated()
	
	local triggerFunction = findFunction(cfg.triggerFunction)
	openState = tonumber(triggerFunction.meta.state_open)
	closedState = tonumber(triggerFunction.meta.state_closed)
	
	local controlFunction = findFunction(cfg.actuatorFunction)
	controlTopic = controlFunction.meta.topic_write
	onValue = tonumber(controlFunction.meta.state_on)
	offValue = tonumber(controlFunction.meta.state_off)
end