A very handy callback is parameterMap.onChange.
The first line in the function is enough to reach what you want.
function parameterMap.onChange(valueObjects, origin, value)
if origin == MIDI then return end
for i, valueObject in ipairs(valueObjects) do -- -- onChange manually or via LUA
local parameterNumber = valueObject:getMessage ():getParameterNumber ()
local parameterType = valueObject:getMessage ():getType ()
if parameterType ~= PT_VIRTUAL then return end
-- from now on only virtual parameters, manually changed
.....