0. У свободного котроллера по запросу GET /status в теле ответа содержится .csv State,TimeToEnd,InputTime idle,-1,-1 1. Пользователь идентифицирован, запросить у пользователя желаемое время сеанса POST /command Command,Password,User_ID,BalanceTime,BalanceMoney user_req_time,7601,12345,100,-1 Если команда успешна, пользователю показывается экран, мигает курсор для ввода: "Доступно 100 мин." " _______ " Если присылается баланс денег на карте, то контроллер рассчитывает доступное время исходя из сохраненной в контроллере стоимости минуты. Command,Password,User_ID,BalanceTime,BalanceMoney user_req_time,7601,12345,-1,1000 После успешного выполнения команды на http запрос возвращается код 200, далее в GET /status информация State,TimeToEnd,InputTime waiting_input,90,-1 здесь 90 - обратный отсчет времени до возврата контроллера в состояние "свободен" State сменится на "waiting_ack", InputTime "-1" сменится на значение > 0, когда пользователь завершит ввод. State,TimeToEnd,InputTime waiting_ack,30,25 2. В состоянии "waiting_ack" возможно подтвердить или отменить запуск командами Command,Password,User_ID start,7601,12345 Command,Password,User_ID cansel,7601,12345 После cansel контроллер показывает отказ на экране и переходит в режим idle. После start контроллер запускает сеанс, GET /status показывает State,TimeToEnd,InputTime sunburn,10,25 TimeToEnd в секундах InputTime в минутах После окончания загара контроллер может перевести солярий в режим вентиляции, в таком случае GET /status показывает State,TimeToEnd,InputTime ventilation,31,-1 После окончания сеанса и вентиляции контроллер переходит в режим idle. Если команда некорректна в текущем состоянии контроллера, запрос POST возвращает код, отличный от 200.