АПК Синапс v1.0. ПО. Спецификации на разработку
Последнее изменение: 22.12.2025, 12:24 МСК
1. Назначение документа
Описать структуру базы данных (USM, Unit System Model) мобильного приложения.
2. Термины и определения
2.1. Рабочие данные — необходимые для организации работы освещения и в прошивке, и в приложении. В приложении находятся в таблицах SQLite, в прошивке в виде массивов структур C.
2.2. Интерфейсные данные — используемые только приложением для организации пользовательского интерфейса. Примеры: названия светильников, номера их иконок. В приложении находятся в таблицах SQLite, в прошивке в виде единого блока где-то в постоянной памяти.
3. Основные положения
3.1. База данных в приложении представлена в виде схемы в SQLite.
3.2. Задача: иметь в ней копию базы из прошивки контроллера, расширенную интерфейсными данными. В прошивке интерфейсные данные лежат в отдельной области. Здесь они должны быть разложены по дополнительным полям в таблицах.
3.3. В отличие от контроллера здесь полноценная таблица с контроллерами, т.к. телефон может с несколькими работать.
3.4. В целях подстроиться максимально под структуру БД контроллера таблицы здесь (кроме CONTROLLERS) имеют на постоянке столько записей, сколько элементов имеют соответствующие массивы в прошивке: в прошивке в массиве 64 элемента под светильники и тут 64 записи. Записи эти в таблицах не создаются и не удаляются, а просто заполняются данными из соответствующих массивов прошивки.
3.5. Значения в полях ID этой базы (кроме CONTROLLERS) соответствуют индексам соответствующих элементов в соответствующих массивах БД прошивки.
4. Таблицы
Рабочие данные помечены в таблицах ниже жирным.
Формат поля в таблицах: ИМЯ_ПОЛЯ (ТИП_ДАННЫХ / НАЧАЛЬНОЕ_ЗНАЧЕНИЕ).
4.1. CONTROLLERS
Таблица с информацией о контроллерах, к которым коннектились и которые не удалили. Чтобы видеть контроллеры, с которыми в данный момент не на связи, и чтобы не вводить пароли, если уже их правильно вводили.
- ID (INTEGER / PK)
- SCALE (INTEGER / 0) — масштаб сетки с иконками локаций на странице контроллера;
- NAME (TEXT / "") — название контроллера, показываемое в приложении и списке устройств Bluetooth;
- PASSWORD (TEXT / "") — пароль заводской или изменённый пользователем; 4 цифры; заводской на коробке (или наклейке на корпусе);
- IS_SCHEDULE (INTEGER / 0) — включена ли в контроллере работа по расписанию (1/0);
- IS_AUTO (INTEGER / 0) — главный выключатель автоматического режима для всего контроллера (1/0);
- ICO_NUM (INTEGER / 100) — номер иконки, которую будет иметь контроллер в приложении; 100 — дефолтная.
- STATUS (TEXT / "A") — текущее состояние контроллера: A (ACTIVE) — штатная работа, I (INIT) — инициализация линии DALI, F (FAILURE) — неполадка.
- SCENE_NUM (INTEGER / -1) — световая сцена, включённая для всего объекта (0,1,2,3,4)
- TIMESTAMP (INTEGER / 0) — текущие дата и время в формате Unix timestamp (количество секунд с 01.01.1970 00:00:00 UTC)
4.2. LOCATIONS
Локации.
- ID (INTEGER / PK, 0..15) — идентификатор в соответствующем массиве в прошивке;
- NAME (TEXT / "") — название локации;
- ICO_NUM (INTEGER / 200) — номер иконки, которую будет иметь локация в приложении; 200 — дефолтная;
- SCALE (INTEGER / 0) — масштаб сетки с иконками светильников на странице локации;
- POS_X (INTEGER / 0) — позиция слева направо по X в сетке локаций контроллера;
- POS_Y (INTEGER / 0) — позиция сверху вниз по Y в сетке локаций контроллера;
- EXIST (INTEGER / 0) - задействована ли запись в работе или это пустое место где может храниться запись (1/0)
- IS_AUTO (INTEGER / 0) — работает ли локация в автоматическом режиме по датчикам (1/0).
- SCENE_NUM (INTEGER / -1) - световая сцена, включенная в этой локации (0,1,2,3,4)
4.3. GROUPS
Группы светильников.
- ID (INTEGER / PK, 0..15) — идентификатор в соответствующем массиве в прошивке;
- NAME (TEXT / "") — название группы;
- EXIST (INTEGER / 0) - задействована ли запись в работе или это пустое место где может храниться запись (1/0)
- LOCATION_ID (INTEGER / -1) — локация, к которой привязана группа; -1 — группа без локации (в корне);
- SCENE_NUM (INTEGER / -1) - световая сцена, включенная в этой группе (0,1,2,3,4)
4.4. LUMINAIRES
Светильники.
- ID (INTEGER / PK, 0..63) — идентификатор в соответствующем массиве в прошивке;
- NAME (TEXT / "") — название светильника;
- ICO_NUM (INTEGER / 300) — номер иконки, которую будет иметь светильник в приложении; 300 — дефолтная;
- POS_X (INTEGER / 0) — позиция слева направо по X в сетке светильников локации;
- POS_Y (INTEGER / 0) — позиция сверху вниз по Y в сетке светильников локации;
- EXIST (INTEGER / 0) - задействована ли запись в работе или это пустое место где может храниться запись (1/0)
- DALI_ADDR (INTEGER / -1) — короткий адрес DALI;
- LOCATION_ID (INTEGER / -1) — локация, к которой привязан светильник; -1 — светильник без локации (в корне);
- GROUP_ID (INTEGER / -1) — группа, к которой привязан светильник; если светильник не в группе: -1;
- VAL_BRIGHT (INTEGER / -1) — значение яркости;
- VAL_TW (INTEGER / -1) — значение температуры белого света;
- VAL_R (INTEGER / -1) — значение красного канала (для RGB);
- VAL_G (INTEGER / -1) — значение зелёного канала (для RGB);
- VAL_B (INTEGER / -1) — значение синего канала (для RGB);
- VAL_W (INTEGER / -1) — значение белого канала (для RGBW).
- SCENE_NUM (INTEGER / -1) - световая сцена, включенная у этого светильника (0,1,2,3,4)
- MIN_LEVEL (INTEGER / -1) — минимальный уровень яркости светильника;
- MAX_LEVEL (INTEGER / -1) — максимальный уровень яркости светильника;
- FADE_TIME (INTEGER / -1) — время плавного перехода между уровнями яркости.
- STATUS (TEXT / "A") — текущее состояние устройства: A (ACTIVE) — штатная работа, C (CHANGE) — замена устройства, F (FAILURE) — неполадка.
4.5. SCENE_LUMINAIRES
Параметры светильников в сценах. При инициализации началньго значения SCENE_NUM перебирается от 0 до 4 и для каждого номера сцены создаются 64 записи с LUMINAIRE_ID = 0..63. В VAL_BRIGHT и VAL_W в зависимости от сцены записываются:
- 0 - 0
- 1 - 63
- 2 - 127
- 3 - 185
- 4 - 255
- ID (INTEGER / PK, 0..319) — идентификатор в соответствующем массиве в прошивке;
- SCENE_NUM (INTEGER / 0,1,2,3,4) - световая сцена (0,1,2,3,4)
- LUMINAIRE_ID (INTEGER / 0..63) — светильник;
- VAL_BRIGHT (INTEGER 0..255) — значение яркости;
- VAL_TW (INTEGER / 127) — значение температуры белого света;
- VAL_R (INTEGER / 255) — значение красного канала (для RGB);
- VAL_G (INTEGER / 0) — значение зелёного канала (для RGB);
- VAL_B (INTEGER / 0) — значение синего канала (для RGB);
- VAL_W (INTEGER / 0..255) — значение белого канала (для RGBW).
4.6. PRES_SENSORS
Датчики присутствия.
- ID (INTEGER / PK, 0..64) — идентификатор в соответствующем массиве в прошивке;
- NAME (TEXT / "") — название датчика;
- EXIST (INTEGER / 0) - задействована ли запись в работе или это пустое место где может храниться запись (1/0)
- DALI_ADDR (INTEGER / -1) — короткий адрес DALI датчика;
- DALI_INST (INTEGER / -1) — номер инстанса датчика движения в DALI;
- LOCATION_ID (INTEGER / -1) — локация, к которой привязан датчик; -1 — датчик без локации (в корне);
- ACTION_OCCUPANCY_ID (INTEGER / -1) — действие, повешенное на присутствие; -1 — не повешено действие;
- ACTION_VACANCY_ID (INTEGER / -1) — действие, повешенное на отсутствие; -1 — не повешено действие;
- HOLD_TIME (INTEGER / -1) — задержка перед срабатыванием действия на отсутствие.
- STATUS (TEXT / "A") — текущее состояние устройства: A (ACTIVE) — штатная работа, C (CHANGE) — замена устройства, F (FAILURE) — неполадка.
4.7. BRIGHT_SENSORS
Датчики освещённости.
- ID (INTEGER / PK, 0..64) — идентификатор в соответствующем массиве в прошивке;
- NAME (TEXT / "") — название датчика;
- EXIST (INTEGER / 0) - задействована ли запись в работе или это пустое место где может храниться запись (1/0)
- DALI_ADDR (INTEGER / -1) — короткий адрес DALI датчика;
- DALI_INST (INTEGER / -1) — номер инстанса датчика движения в DALI;
- LOCATION_ID (INTEGER / -1) — локация, к которой привязан датчик; -1 — датчик без локации (в корне);
- GROUP_ID (INTEGER / -1) — группа, к которой привязан датчик; -1 — группа не назначена.
- SCENE_BRIGHTNESS_0 (INTEGER / -1) — целевая освещённость для сцены 0;
- SCENE_BRIGHTNESS_1 (INTEGER / -1) — целевая освещённость для сцены 1;
- SCENE_BRIGHTNESS_2 (INTEGER / -1) — целевая освещённость для сцены 2;
- SCENE_BRIGHTNESS_3 (INTEGER / -1) — целевая освещённость для сцены 3;
- SCENE_BRIGHTNESS_4 (INTEGER / -1) — целевая освещённость для сцены 4;
- STATUS (TEXT / "A") — текущее состояние устройства: A (ACTIVE) — штатная работа, C (CHANGE) — замена устройства, F (FAILURE) — неполадка.
4.8. BUTTON_PANELS
Кнопочные панели.
- ID (INTEGER / PK, 0..64) — идентификатор в соответствующем массиве в прошивке;
- NAME (TEXT / "") — название панели;
- EXIST (INTEGER / 0) - задействована ли запись в работе или это пустое место где может храниться запись (1/0)
- DALI_ADDR (INTEGER / -1) — короткий адрес панели в DALI;
- LOCATION_ID (INTEGER / -1) — локация, к которой привязана панель; -1 — панель без локации (в корне);
- STATUS (TEXT / "A") — текущее состояние устройства: A (ACTIVE) — штатная работа, C (CHANGE) — замена устройства, F (FAILURE) — неполадка.
4.9. BUTTONS
Кнопки.
- ID (INTEGER / PK, 0..511) — идентификатор в соответствующем массиве в прошивке;
- NAME (TEXT / "") — название кнопки на панели;
- BUTTON_PANEL_ID (INTEGER / -1) — кнопочная панель, в которой кнопка расположена;
- DALI_INST (INTEGER / -1) — номер инстанса кнопки в DALI.
4.10. ACTIONS
Действия с устройствами.
- ID (INTEGER / PK, 0..511) — идентификатор в соответствующем массиве в прошивке;
- BUTTON_SHORT_ID (INTEGER / -1) — кнопка, на короткое нажатие которой навешено действие; -1 — действие не привязано к короткому нажатию кнопки (может быть привязано к датчику или событию расписания);
- BUTTON_LONG_ID (INTEGER / -1) — кнопка, на долгое нажатие которой навешено действие; -1 — действие не привязано к долгому нажатию кнопки (может быть привязано к датчику или событию расписания);
- POS (INTEGER / -1) — позиция действия в наборе (начиная с 1); для перебора нескольких действий одной кнопкой.
4.11. SUBACTIONS
Поддействия с устройствами (команды для пользователя).
- ID (INTEGER / PK, 0..511) — идентификатор в соответствующем массиве в прошивке;
- ACTION_ID (INTEGER / -1) — действие;
- OBJECT_TYPE (INTEGER / -1) — тип объекта изменений:
- 1 — весь объект;
- 2 — локация;
- 3 — группа;
- 4 — светильник;
- OBJECT_NUM (INTEGER / -1) — номер объекта изменений:
- 1 — сцена;
- 2 — температура TW;
- 3 — флаг АВТО.
- VALUE (INTEGER / -1) — значение в зависимости от объекта:
- сцена - 0..4;
- температура TW - 0..254;
- флаг АВТО - 0 / 1.
4.12. EVENTS
События расписания.
- ID (INTEGER / PK, 0..256) — идентификатор в соответствующем массиве в прошивке;
- EXIST (INTEGER / 0) — задействована ли запись в работе или это пустое место, где может храниться запись (1/0)
- DAYS (TEXT / "") — 'FFTFFFF' — событие по дням недели; если все T — ежедневное;
- TIME (TEXT / "") — время события с точностью до минуты в формате HHMM 24H;
- SMOOTH (INTEGER / 0) — плавное изменение параметров от предыдущих значений (яркость, температура света) (1/0);
- ACTION_ID (INTEGER / -1) — действие; -1 — не назначено.
5. Вопросы
5.1. Рабочие данные таки храним в Си или переносим в одну область с интерфейсными?
5.2. Как рабочие и интерфейсные данные будут попадать во флэш-память?
5.3. Не будет ли заморочным в смысле размера кода работать с бинарным блоком рабочих данных как с базой?
5.4. Как храним в БД значения для димм., РГБ и ТВ?