the laspe plugin can devalidate a cache every 30 minutes just fine. just provide a custom key as well as the objects to be tracked.
$key30Minutes = date('YmdH') . ( (date('i') > 30 ) ? '30' : '00' ) ;
$data = Lapse::io(
[$key30Minutes, $page, $collection], // will create key from array of objects
function () use ($page, $collection) {
// ... generate data based on current time... 3pm, 4pm whatever
}
);