Но, как минимум недостаток: если клиент аварийно завершится, то устройство так и останется "занятым", т.к. флаг не сбросится
Интересная, и в тоже время сложная задача.
Если это не скады системы я бы пошёл в лоб - каждый клиент сам подтверждает свое присутсвие. Т.е в вашем случае каждый клиент посылает раз в минуту о своём присутствии. Если уж делать очень примитивно, то два поля в БД - бул и время. Бул по расписанию сбрасывается раз в 2 минуты, если время больше 1 минуты (поле время), так вы отловите отвалившихся клиентов.
ЗЫ: более подробное описание ответа выше