Элементы (Items)
Eclipse SmartHome имеет строгое разделение между физическим миром («вещами», см. ниже) и приложением, которое построено вокруг понятия» предметы » (также называемого виртуальным слоем).
Элементы представляют функциональные возможности, используемые приложением (в основном пользовательские интерфейсы или логика автоматизации). Элементы имеют состояние и используются через события.
В настоящее время доступны следующие типы элементов (в алфавитном порядке):
Элемент | Описание | Типы команд |
---|---|---|
Color | Информация о цвете (RGB) | OnOff, Increase/Decrease, Percent, HSB |
Contact | Элемент, хранящий состояние, например, контактов двери/окна | OpenClosed |
DateTime | Дата и время | — |
Dimmer | Элемент содержащий значение регулятора уровня (dimmer) | OnOff, IncreaseDecrease, Percent |
Group | Элемент для размещения других элементов что бы собирать и отображать их как группы | — |
Image | Изображение в двоичном виде | — |
Location | GPS-координаты | Point |
Number | Сохраняет значения в числовом формате, принимает необязательный размер | Decimal |
Number:<dimension> | Подобно Number, но содержит дополнительную информацию о размерности величины | Quantity |
Player | Позволяет управлять воспроизведением, например, музыки | PlayPause, NextPrevious, RewindFastforward |
Rollershutter | Обычно используется для жалюзи | UpDown, StopMove, Percent |
String | Текст | String |
Switch | Обычно используется для освещения (ВКЛ/ВЫКЛ) | OnOff |
Групповые элементы (Group Items)
Элементы группы собирать другие предметы на группы. Элементы группы сами могут быть членами других элементов группы. Циклическое членство не запрещено, но настоятельно не рекомендуется. Пользовательский интерфейс может отображать элементы группы как отдельные записи и обеспечивать навигацию для ее компонентов.
Пример элемента группы как простой коллекции других элементов:
Group groundFloor
Switch kitchenLight (groundFloor)
Switch livingroomLight (groundFloor)
Производное состояние группы (Derive Group State from Member Items)
Элементы группы могут получать собственное состояние от других элементов входящих у группу. Для получения состояния элемент группы должен быть построен с использованием базового элемента и функции группы. При вычислении состояния функции группы рекурсивно пересекают члены группы, а также учитывают членов подгрупп. Однако, если подгруппа определяет состояние самостоятельно (с набором функций базового элемента и группы), обход останавливается, и используется именно это значение.
Доступные групповые функции:
Функция | Параметры | Базовый элемент | Описание |
---|---|---|---|
EQUALITY | — | <all> | Устанавливается в состояние компонентов, если все имеют равное состояние. В противном случае оно устанавливается UNDEF. В компоненте DSL равенство по умолчанию и может быть опущено. |
AND, OR, NAND, NOR | <activeState>, <passiveState> | <all> (must match active & passive state) | Устанавливает <activeState> если значение одного из элементов <activeState> принимает логическое значение true . Иначе устанавливается <passiveState>. |
SUM, AVG, MIN, MAX | — | Number | Задает состояние в соответствии с арифметической функцией для всех компонентов группы. |
COUNT | <regular expression> | Number | Число компонентов группы соответствующих данному регулярному выражению с их состояниями. |
LATEST, EARLIEST | — | DateTime | Устанавливает самое раннее или позднее значение из значение всех компонентов группы. |
Примеры производных состояний для компонентов группы при объявлении в DSL:
Group:Number:COUNT(".*")
счётчик числе компонентов группы удовлетворяющих шаблону, в данном случае любому набору символов (просто счётчик компонентов).Group:Number:AVG
вычисляет среднее значение всех компонентов группы, которое интерпретируется какDecimalTypes
.Group:Switch:OR(ON,OFF)
устанавливает состояние группы в значениеON
если любой их компонентов имеет состояниеON
,OFF
если все компоненты в состоянииOFF
.Group:Switch:AND(ON,OFF)
устанавливает состояние группы вON
если все компоненты группы находятся в состоянииON
,OFF
если любой компонент группы имеет состояние отличное отON
.Group:DateTime:LATEST
устанавливает состояние группы по последнему состоянию компонентов группы.
Форматирование состояний и команд (State and Command Type Formatting)
Строка (StringType)
Объекты типа StringType
сохраняются как простые строки в Java.
Дата-Время (DateTimeType)
- Объект
DateTimeType
разбирается Java методомSimpleDateFormat.parse()
с использованием первого совпадающего шаблону значения:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
yyyy-MM-dd'T'HH:mm:ss.SSSz
yyyy-MM-dd'T'HH:mm:ss.SSSX
yyyy-MM-dd'T'HH:mm:ssz
yyyy-MM-dd'T'HH:mm:ss
Символ | Значение | Пример |
z | Обычное описание часовой зоны | Pacific Standard Time; PST; GMT-08:00 |
Z | запись согласно RFC 822 | -8000 |
X | запись по ISO 8601 | -08; -0800; -08:00 |
Десятичные числа и проценты (DecimalType, PercentType)
Объекты типов DecimalType
и PercentType
используют конструктор Java BigDecimal
для преобразований. PercentType
имеет допустимые значения от 0 до 100.
Количество (QuantityType)
Числовой тип, который содержит в себе единицу измерения в дополнение к его значению. Платформа способна к автоматическому преобразованию между единицами в зависимости от настроек пользователей. Более подробную информацию см. В концепции единиц измерения.
Оттенок-Насыщенность-Яркость HSBType
Строка содержащая разделённые запятыми значения оттенка (hue) (0-360°), насыщенности (saturation) (0-100%) и яркости (0-100%), например, 240,100,100
— описание синего цвета.
Координаты (PointType)
Строки PointType
состоят из трех десятичных чисел, разделенных запятыми, указывающих широту и долготу в градусах и высоту в метрах соответственно.
Enum Types
Тип | Допустимые значения |
IncreaseDecreaseType | INCREASE , DECREASE |
NextPreviousType | NEXT , PREVIOUS |
OnOffType | ON , OFF |
OpenClosedType | OPEN , CLOSED |
PlayPauseType | PLAY , PAUSE |
RewindFastforwardType | REWIND , FASTFORWARD |
StopMoveType | STOP , MOVE |
UpDownType | UP , DOWN |
Примечание (A note on Items which accept multiple state data types)
Существует ряд элементов, которые принимают несколько типов данных состояния, например DimmerItem
, который принимает OnOffType
и PercentType
, RollershutterItem
, который принимает PercentType
и UpDownType
или ColorItem
, который принимает HSBType
, OnOffType
и PercentType
. Поскольку элемент имеет одно состояние, эти несколько типов данных можно считать различными представлениями для этого состояния. Тип данных, содержащий больше всего информации о состоянии, обычно используется для сохранения внутреннего состояния элемента, а другие типы данных преобразуются из этого основного типа данных. Этот основной тип данных обычно является первым элементом в списке, возвращаемом Item.getAcceptedDataTypes ()
.
Небольшая табличка с примерами:
Item Name | Main Data Type | Additional Data Types Conversions |
---|---|---|
Color | HSBType | • OnOffType — OFF if the brightness level in the HSBType equals 0, ON otherwise • PercentType — the value for the brightness level in the HSBType |
Dimmer | PercentType | OnOffType — OFF if the brightness level indicated by the percent type equals 0, ON otherwise |
Rollershutter | PercentType | UpDownType — UP if the shutter level indicated by the percent type equals 0, DOWN if it equals 100, and UnDefType.UNDEF for any other value |
Метаданные (Item Metadata)
Иногда требуется дополнительная информация, которая должна быть прикреплена к элементам для определенных случаев использования. Это может быть приложение, которое нуждается в некоторых подсказках, чтобы отобразить элементы в общем виде, или интеграция с помощниками голосового управления, или любые другие сервисы, которые получают доступ к элементам и должны понимать их «смысл».
Такие метаданные могут быть присоединены к элементам с помощью дизъюнктных пространств имен, чтобы они не конфликтовали друг с другом. Каждая запись метаданных имеет основное значение и необязательно дополнительные пары ключ / значение. К элементу могут быть присоединены метаданные для необходимого количества пространств имен, как в следующем примере:
Switch "My Fan" { homekit="Fan.v2", alexa="Fan" [ type="oscillating", speedSteps=3 ] }
Метаданные могут поддерживаться через выделенную конечную точку REST и включаться в ответы EnrichedItemDTO
.
Расширения, которые могут автоматически выводить некоторые метаданные, должны реализовать и зарегистрировать службу MetadataProvider
, чтобы сделать их доступными для системы. Они могут предоставлять их из любого источника, а также динамически удалять или добавлять данные. Они также не ограничены одним пространством имен.
MetadataRegistry
предоставляет доступ для всех расширений, которые должны считывать метаданные элемента программно. Это центральное место, где хранится дополнительная информация о Вещах (Items).