KX_GameObject.worldLinearVelocity
On a Physics object the Z-axis of the coordinates would be negative.
As static objects do to move (via Physics engine) this attribute will remain (0,0,0). This will be the case on physics types Static, Occluder, Sensor, Navigation Mesh, Character. This is a bit strange as this types (except Static) have not really much to do with physics (it is more a purpose type). Changes in location (which is basically a teleportation), can only be tracked by recording the previous position and comparing it to the current one.
Here is an example:
import bge
PROPERTY_LAST_POSITION = "last.position"
gameObject = bge.logic.getCurrentController().owner
currentPosition = gameObject.worldPosition
lastPosition = gameObject.get(PROPERTY_LAST_POSITION, currentPosition)
gameObject[PROPERTY_LAST_POSITION] = currentPosition.copy()
positionDifference = currentPosition - lastPosition
isFalling = (positionDifference.z < 0)
controller = bge.logic.getCurrentController()
for actuator in controller.actuators:
if isFalling:
controller.activate(actuator)
else:
controller.deactivate(actuator)