MeetingRoom — занятость переговорной: факт против брони
Проект на стыке архитектуры и инженерии: измерить, как помещение используется на самом деле, и сравнить с тем, как оно забронировано.
Датчик присутствия уже пишет факт занятости. Календарь говорит, когда переговорку планировали занять. Разница между этими двумя рядами — и есть результат проекта.
Вопрос, на который отвечаем
Сколько часов переговорка простаивала, будучи забронированной?
Это не учебная задача. Это то, за что платят: неиспользуемая арендованная площадь — прямые деньги. Архитектор, который умеет измерить фактическую утилизацию помещения и обосновать её данными, работает на другом уровне, чем исполнитель планировок.
Что уже есть (не строим заново)
| Компонент | Состояние |
|---|---|
| ESP32 + датчик присутствия (HMMD-радар) | ✅ работает |
| MQTT → Node-RED → TimescaleDB | ✅ работает |
Таблица bookings (составной PK под RRULE) | ✅ схема готова, пуста |
occupancy_hourly — доля занятости по часам | ✅ работает |
| Grafana | ✅ работает |
Синк календаря → bookings | ❌ это и есть проект |
Схема bookings спроектирована заранее и уже учитывает главную сложность
календарей: составной первичный ключ (booking_uid, starts_at) — потому что у
повторяющейся встречи (RRULE) один UID на всю серию, и ключ по одному UID
перетирал бы экземпляры друг другом.
Порядок чтения
| Документ | О чём |
|---|---|
| Источник ICS | откуда взять календарь: три пути и что делать, если доступа не дадут |
| Синк и метрика | парсер, upsert, SQL метрики, дашборд |
| Результат в портфолио | что показывать и как рассказывать |
| План наставника | для наставника, не для ученика: как вести проект и где отпускать |
Принцип проекта
Источник данных отделён от обработки. Вся инженерная ценность — в парсере и метрике; они работают одинаково, читаете вы ICS по ссылке, из файла или из генератора. Если корпоративный доступ не дадут — проект не блокируется, меняется одна строка конфигурации.
Это тот же приём, что в основном стеке: единый источник правды, потребители не знают, откуда пришло значение.
Объём
Несколько вечеров, не месяцы. Задача сознательно ограничена: довести до одного измеримого вывода, а не построить систему управления бронированием.