Meeting Room Little Helper

    Сегодня я расскажу вам о приложении, которое создавалось в «Аркадии» для удобства бронирования переговорных комнат.



    Есть два основных сценария использования этого приложения:

    1. Поиск свободной комнаты
    Ежедневно в компании проходит множество митингов, переговорки бронируют менеджеры, разработчики и сотрудники HR-отдела. Поиск комнаты для митинга может быть довольно долгим и рутинным занятием. Чтобы понять, какая из комнат свободна в данный момент, необходимо зайти в календарь Outlook (или открыть дверь, отвлекая внимание участников проходящего совещания), просмотреть полное расписание по комнатам, найти свободный слот времени и создать appointment. За это время кто-то из сотрудников может забронировать комнату, и тогда необходимо начинать поиск заново. Гораздо удобнее сделать бронирование нажатием одной кнопки при помощи приложения, заранее получив подсказки о статусе комнат.

    2. Ad hoc бронирование
    Довольно часто возникает ситуация, когда нужно собраться минут на 15, чтобы коротко обсудить текущие задачи по проекту. В этом случае нет смысла занимать комнату на целый час, да может и не быть свободных слотов на выбранное время. Но если остаётся хотя бы 10 минут до следующего митинга, приложение позволит забронировать комнату, и для короткого митинга этого может быть вполне достаточно. Также иногда возникает ситуация, когда комната была забронирована на долгий срок, например, 2 часа, но митинг завершился раньше. В этом случае по завершении митинга можно нажать на кнопку отмены и освободить комнату.

    Выбор платформы для решения


    В качестве операционной системы был изначально выбран Android, так как он поддерживает кастомизацию (в том числе включение-отключение по расписанию, автозапуск приложений), и в продаже имеется большое количество моделей устройств.

    Было рассмотрено несколько вариантов. В качестве информационного табло нет необходимости выбирать топовую модель планшета: на каждую комнату требуется отдельный девайс, и с ростом цены одного планшета стоимость конечного решения значительно вырастает. Но в то же время, нельзя брать самые дешёвые устройства — у них слабая, «мутная» IPS матрица, низкое разрешение, устаревшая версия ОС, и такое решение выглядело бы весьма непрезентабельно. В итоге мы сделали выбор в пользу Alcatel OneTouch Pixi 3 (10) 3G — планшета с довольно средними характеристиками: 1280x800 TFT IPS, Android 5.1, ОЗУ 1 Гб, процессор MediaTek MT8321 1300 МГц, в котором 3G модуль идёт в придачу за довольно разумную цену — около 8 тысяч рублей (на текущий момент стоимость устройства ниже).

    Для блокировки аппаратных клавиш и системных элементов экрана мы заказали корпус из чёрного оргстекла. Корпус выполняет роль защитного чехла и крепления устройства на стену и имеет отверстия для установки. На данный момент установлено 5 планшетов у входа в каждую из переговорных комнат. У нас переговорки названы в честь классических языков программирования: Cobol, Prolog, Fortran, Ada, Pascal, каждая имеет собственную иконку, которая отображаются на экране рядом с номером комнаты.



    Приложение позволяет забронировать комнату (создать appointment) на заданный промежуток времени: 15, 30, 45 мин, а также 1, 1.5, 2 часа. Если пользователь решил выбрать интервал 2 часа, а комната свободна лишь часть этого времени, то будет предложено бронирование с учётом ограничений. Нижняя панель приложения отображает текущие статусы других переговорных комнат: красный — комната занята, зелёный — свободна, и серый, если возникли проблемы при получении статуса (например, произошёл сбой при запросе статуса).

    Ключевой функциональностью приложения и вау-фактором является распознавание лиц с помощью Microsoft Face API. При каждом бронировании с помощью фронтальной камеры создаётся снимок пользователя, который используется для сопоставления с предварительно обработанным списком фотографий сотрудников из Exchange. Если пользователь был успешно распознан, в названии бронирования указывается его имя, т.е. не требуется вручную вводить автора митинга, что весьма экономит время. На распознавание влияет освещённость помещения, и главное — исходная фотография пользователя, загруженная в качестве аватара.

    Разработка и планирование


    На этапе планирования разработки возник вопрос, какое из существующих решений для доступа использовать для бронирования комнат и получения статусов — Office 365 Android SDK или EWS API. Как оказалось, функциональность адаптированной под Android версии EWS Java API (официальная версия EWS Java API) более универсальна и позволяет подключаться как к облачной версии, так и к локальному Exchange.

    Изначально в компании был настроен on-premises Exchange, но наши айтишники как раз планировали миграцию на Office 365 Exchange Online, поэтому была поставлена задача использовать наиболее универсальное решение, чтобы в дальнейшем переход не привёл к значительному изменению кода. Миграция на облачное API потребовала изменения учётных записей в приложении и смены URL (метод setUrl класса ExchangeService): для On-premises Exchange требуется базовый URL https://mail.DOMAIN/EWS/Exchange.asmx, где DOMAIN – доменное имя компании, а для Office 365 Exchange Online — https://outlook.office365.com/EWS/Exchange.asmx. (ручная настройка необходима, если не работает Autodiscover)

    Особенности интеграции


    При интеграции EWS API возникли трудности в связи с тем, что библиотека написана в первую очередь для Java SE и тянет за собой устаревший Apache Http Client и DNS клиент (в отличие от Office 365 SDK, который построен на более современной архитектуре).
    Проблему с Apache Http Client удалось решить с помощью добавления строчки в defaultConfig build.gradle модуля приложения:

    useLibrary 'org.apache.http.legacy'
    

    Поддержка клиента была удалена начиная с Android SDK 23 (6.0), поэтому в данный момент для всех legacy библиотек, использующих apache client, требуется эта настройка. В качестве DNS клиента идеально подошёл минималистичный MiniDNS (minidns-core).

    Вызовы к API удобнее всего оборачивать с использованием RxJava, т.к. они обрабатываются синхронно и блокируют UI поток. Например (RxJava 1):

    Observable.create(new Observable.OnSubscribe<Boolean>() {
                @Override
                public void call(Subscriber<? super Boolean> subscriber) {
    		// вызовы Exchange API
    }
    })
    .subscribeOn(Schedulers.io());
    

    Если комната была забронирована с помощью приложения, можно отменить бронирование либо продлить его. В случае продления пользователю будет предложено максимально доступное время. Для отмены бронирований, сделанных под личным аккаунтом пользователя, предполагается использование десктопной или мобильной версии Outlook.



    Если у пользователя, создавшего текущий митинг, установлен аватар, он будет отображён при нажатии по иконке комнаты. Фотографии хранятся по адресу (для Office 365 Exchange Online):
    https://outlook.office365.com/EWS/Exchange.asmx/s/GetUserPhoto?email=EMAIL&size=SIZE

    Где EMAIL – email адрес пользователя, а SIZE – размер фотографии, например, HR96x96. Более подробную информацию можно найти на странице MSDN.

    При настройке аккаунтов для комнат есть одна важная особенность. Должно быть два типа аккаунтов — один для получения информации о статусах всех комнат (с полными правами) и второй для бронирования. Если осуществлять бронирование с использованием админского аккаунта, appointment может создаться поверх уже существующих, об этом необходимо помнить, чтобы не было путаницы.

    Чтобы упростить установку будущих обновлений, устройства настроены на получение Firebase Push Notifications. При создании push-сообщения можно указать конкретное устройство (номер комнаты) или все устройства для одновременного обновления. Как только уведомление поступает, начинается скачивание пакета установки (APK) с внутреннего FTPS сервера компании. Ограничения системы безопасности Android требуют ручного подтверждения установки, но обычно этот процесс не занимает более пары минут.

    Возможно, вы обратили внимание на QR-код рядом с иконкой комнаты. Сделан он для получения feedback'а, ссылку можно открыть на мобильном устройстве и оставить отзыв о работе приложения, если при использовании возникли какие-либо проблемы.



    Проблемы и их решение


    Как оказалось, довольно сложно договориться с бизнес-центром о подключении электричества к установленным планшетам (на стенах и под потолком нет розеток), поэтому было решено сделать питание на основе компактных литиевых батарей на 18 Ah (power bank). Для экономии энергии планшеты настроены на выключение в 20:00 и включение ежедневно в 8:00 по будням, что позволяет реже менять батареи.

    Наши сисадмины настроили отдельную Wi-Fi сеть для устройств и включили фильтрацию по IP-адресам (в ПО от Cisco отсутствует возможность фильтрации по URL) для безопасности. К сожалению, это не позволило использовать привычные инструменты, такие как Crashlytics от Fabric, для трекинга ошибок, т.к. IP-адреса периодически менялись, но удалось без проблем открыть доступ к Firebase (что позволяет использовать push-уведомления и хранить логи в базе данных) и Azure Cloud (Microsoft Face API).

    На данный момент наше решение для бронирования комнат активно используется, планшеты синхронизируются ежедневно в течение полутора лет. После первоначальной отладки и тестирования приложения не было обнаружено проблем, кроме одного бага с обновлением данных на экране, который решился очисткой кэша приложения. Заказчики, посещающие наш офис, проявляют интерес к продукту и оценили его удобство. В дальнейшем планируется добавить дополнительное логирование в Firebase, а также возможность уведомлений по почте для информирования о статусе заряда (необходимость сменить Powerbank).
    Аркадия 46,74
    Заказная разработка, IT-консалтинг
    Поделиться публикацией
    Похожие публикации
    Комментарии 12
    • 0
      Для отмены бронирований, сделанных под личным аккаунтом пользователя, предполагается использование десктопной или мобильной версии Outlook.


      Если используется Outlook, почему бы не использовать решение по бронировании комнат из того же Outlook?
      • 0
        Отмену бронирования, сделанного под личным аккаунтом, проще сделать заранее и оповестить участников, нет причины для этого идти к комнате. А вот для быстрого бронирования комнат Outlook пользоваться довольно неудобно
        • 0
          Так в аутлуке есть Scheduler Assistant, который позволяет и время выбрать, чтобы у участников не было конфликтов и показывает свободные комнаты на выбранное время. У Вас же, как я понял, надо по комнатам бегать, чтобы найти свободную (без мобильной/десктпной версии вашего ассистента).

          Поправьте, если не упустил что.
          • 0
            Не, бегать не надо. Если комната занята, то внизу указано, какие доступны, и достаточно подойти к свободной, чтобы забронировать. В первую очередь, решение используется для быстрых бронирований, когда появилась необходимость провести срочное совещание, и нет желания проходить рутинный процесс создания митинга и поиска свободной комнаты. В этом случае, как мне кажется, использование Scheduler Assistant излишне
      • 0
        вещь мега полезная. я вот только не понял, зачем его на стены вешать? не проще ли иметь мобильную(с одной двумя кнопками) или десктопную версию?
        • 0
          Возможно, в дальнейшем имеет смысл сделать также персональную версию (с возможностью входа в собственный аккаунт и отмены личных бронирований). Но стационарное решение также требуется, т.к. не каждый захочет ставить ещё одно приложение на мобильное устройство, скорее всего пользователю будет проще заглянуть за дверь, чем разблокировать экран и открыть приложение
        • 0
          Для экономии энергии планшеты настроены на выключение в 20:00 и включение ежедневно в 8:00 по будням

          А как это сделано? Если питание у всего планшета выключить, то его же не включить уже программным способом, разве нет? Или там только экран выключается?
          • 0
            Это особенность заводской прошивки этой модели планшета, в настройках имеется раздел, где можно настроить время включения и выключения устройства.
          • 0
            Несколько раз видел подобные решения, в итоге они были ничуть не более удобны (и гораздо менее энергоэффективны!) чем просто бумажный листочек на стене со списком броней. Видимо это профессиональная деформация у программистов — даже там где можно сделать просто — делать очередное приложение =)
            • +2
              КДПВ настолько супер, что все остальное значения уже не имеет :-)
              • 0
                Тоже пытался сделать заход (да и сейчас пытаюсь) на тему такого решения, к счастью писать сам софт не нужно, готовых решений за разумные деньги куча, самая большая проблема это в самих устройствах. Красивых и удобных девайсов с хорошими креплениями на стену/стекло в России попросту нет, все вот такие самоделки из обычных планшетов как на ваших фото с лапшой торчащей откуда попало попросту не устроит бизнес дядек, я молчу про крепление на стекло. Как вариант ввезти в Россию из за границы, но никто не хочет легально это делать, так как надо сертифицировать устройства. Как по итогу зависший проект…

                Может кто встречал годные Андроид устройства в продаже настенного крепления у нас, а не на алибабе и европе?
                • 0
                  помоему проще сделать апп для мобилы и всё, как например, в WeWork

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое