MeetMeUp
Программное обеспечение MeetMeUp реализует календарный график букирования переговорными.
Модуль meetmeup-gate обеспечивает:
Примечание
К сожалению, создать расписание можно только через программки на устройствах. WEB приложение не существует.
Функциональность
При наступлении времени X, которое привязано к расписанию переговорных, передаются данные о переговорном помещении. Данные могут использоваться для обработки, например Правила задают работу инженерных систем и оборудования комнат.
Правила
Пример
За 15 минут до начала старта в переговорной XXX включить: ТВ, свет, вентиляцию, .....
Установка модуля
Для регистрации в качестве systemd демона следует создать файл сервиса /etc/systemd/system/meetmeup-gate.service следующего содержания:
[Unit]
Description=meetmeup-gate
After=syslog.target
[Service]
User=sem
Group=sem
ExecStart=/opt/meetmeup-gate/meetmeup-gate.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Автоматический запуск модуля (если требуется)
Если нужно добавить в автозапуск при рестарте:
systemctl enable meetmeup-gate
Описание устройства Переговорная MeetMeUp
Устройство Переговорная MeetMeUp (топик устройства room
):
Атрибут | Топик | Тип параметра | Коммент |
---|---|---|---|
ORGANIZER | organizer | string | организатор мероприятия |
ROOMNAME | roomname | string | название переговорной комнаты |
BUSYSTATUS | status | signal | статус занятости переговорной комнаты |
SUMMARY | summury | string | тема события |
DESCRIPTION | description | string | описание события |
EVENTREF | eventref | string | указатель события |
EVENTAG | eventtag | string | тег события |
DTSTART | dtstart | string | время начала события |
DTEND | dtend | string | время окончания события |
TIMETOFREE | timetofree | string | время, с которого переговорная комната освободится, формат ГГГММДДТЧЧММСС |
TIMETOBUSY | timetobusy | string | время, с которого переговорная комната будет занята, формат ГГГММДДТЧЧММСС |
actionflag | actionflag | сигнал | флаг для инициализации правил |
period | period | мгновенный | время в минутах, для взведения actionflag |
Настройка модуля
Настройки хранятся в файле application.yml.
Настройки позволяют выбрать профиль логирования (console - вывод в консоль, file - вывод в файл).
spring:
profiles:
# console - вывод в консоль, file - вывод в файлы logs/logN с ротацией по размеру
active: console
Следует задать настройки подключения к рест-сервисам inspark
# подключение к рест-сервисам inspark (должен заканчиваться слэшем)
rest:
url: http://localhost:8080/sem-restservices/
user: user
password: password
extSystemId: MEET_ME_UP1
Следует задать настройки подключения к брокеру сообщений inspark (используется artemis), url, user, password. Остальные настройки трогать не рекомендуется.
# параметры подключения к артемис inspark
artemis:
url: tcp://localhost:61616
user: artemis
password: artemis
# количество потоков в пуле для отправки JMS-сообщений
senderThreads: 8
# настройки очередей (см. имена свойств и дефолты в lib-gate)
queue:
measure:
destination: jms.queue.Measure
event:
destination: jms.queue.Event
paramchange:
destination: jms.topic.ParamChange
eventexport:
destination: jms.topic.EventExport
Следует задать настройки подключения к http-эндпоинту MeetMeUp
meetmeup:
url: http://10.3.2.152/meetmeup/external.php
login: user1
password: password1
hash: c0b778c08f44edf951d8ce9338cbdda38b62d163
# настройки шедулеров
job:
# период опроса бронирования помещений MeetMeUp в миллисекундах (крайне рекомендуется не чаще 5 минут)
requestSchedulePeriodMs: 300000
Настройка в платформе
- Создать Провайдера (например ID = MEET_ME_UP1).
- Запрашиваются с MeetMeUp идентификаторы помещений.
- В Секции Устройства внешней системы зарегистрировать ID устройств, для MeetmeUp это ID помещений (roomID).
- Связать каждый
roomID
с экземпляром устройства платформы. - Запустить meetmeup-gate в режиме интеграции
Алгоритм работы модуля интеграции
- Логин в MeetMeUp, получаем токен
POST http://10.3.2.152/meetmeup/external.php
Body
form-data
action gettoken
login user1
password 123456
keyscale lower
hash c0b778c08f44edf951d8ce9338cbdda38b62d163
- Вычитываем все устройства из Inspark Провайдера MEET_ME_UP1.
- Запрашиваем все текущие мероприятия, строим карту календарного плана для каждой roomX
POST http://10.3.2.152/meetmeup/external.php?action
Body
form-data
action getevents
token 941a3c7c9d161565b646a71c2c4348faa2867fed
type today
room roomX
запрашиваем по каждой roomX из списка п.2.
Отправляем данные в Inspark Platform первую запись из расписания переговорной, для которой,
curtime <= DTEND
. Записи, по которым curtime > DTEND
отбрасываем.
- пункт 3 выполняем периодически, проверяем условия для триггера подготовки переговорки.
Если время curtime >= (DTSTART - period)
, отправляем значение actionflag = true
, в противном случае actionflag = false
. Отсылается только изменения значения actionflag
, если actionflag
не менялся - параметр не отсылаем.
Настройка Правил в Inspark Platform
Для контроля и реализации правил можно использовать текущее время и сравнивать его со значениями dtstart, dtend. Пример выражения правила, срабатывающего за 15 минут до начала использования помещения может быть таким (схематично):
(Date.now() > (dtstart - 15 * 60 * 1000)) && (Date.now() < dtend)
Функция Date.now() возвращает текущий момент времени в миллисекундах юникс.
В качестве dtstart и dtend разумеется нужно подставить значения типовых параметров, т.е. примерно так:
(Date.now() > (D458202 - 15 * 60 * 1000)) && (Date.now() < D458203)
Так же можно сделать вычисляемый параметр, и опираться в правиле на него. Например, вычисляемый параметр с формулой указанной выше будет возвращать число 1 в случае если помещение используется или будет использоваться в ближайшие 15 минут, и число 0 в остальных случаях.
Поскольку при завершении текущего события шлюз пришлет новые значения резервации помещения, в том числе новые dtstart, dtend, нужно как-то иметь это в виду, то что dtstart придет раньше dtend шлюз не гарантирует. Как и то что описание нового бронирования помещения придет позже чем времена этого бронирования. Но в целом это не должно особо влиять.
Еще разработчики MeetMeUp писали что данные возвращаются из некоего кэша, и что для обновления этого кэша нужно чтобы был подключен хотя бы один планшет. Следует видимо иметь в виду.