Вещи (Things)
Вещи (Things) — это сущности, которые физически могут быть добавлены в систему и которые потенциально могут обеспечить множество функций в одной вещи. Важно отметить, что вещи не обязательно должны быть устройствами, но они также могут представлять собой веб-службу или любой другой управляемый источник информации и функциональности. С точки зрения пользователя они актуальны для процесса установки и конфигурирования, но не для управления системой.
Вещи могут иметь свойства конфигурации, которые могут быть необязательными или обязательными. Такие свойства могут быть базовой информацией, такой как IP-адрес, ключ (token) доступа для веб-службы или конфигурация устройства, изменяющая его поведение.
Каналы (Channels)
Вещи обеспечивают «Каналы», которые представляют различные функции вещи. Там, где Вещь является физической сущностью или источником информации, канал является конкретной функцией от этой вещи. Физическая лампочка может иметь канал цветовой температуры и цветовой канал, обеспечивая функциональность одной лампочки в системе. Для источников информации это может быть местная погода с информацией из веб-сервиса с различными каналами, такими как температура, давление и влажность.
Каналы связаны с элементами, где такие связи являются клеем между виртуальным и физическим слоем. Как только такая ссылка установлена, вещь реагирует на события, отправленные для элемента, связанного с одним из его каналов. Кроме того, он активно отправляет события для элементов, связанных с его каналами.
Мосты (Bridges)
Особый тип вещей — «мост». Мосты — это вещи, которые необходимо добавить в систему, чтобы получить доступ к другим вещам. Типичным примером моста является IP-шлюз для какой-либо системы домашней автоматизации на основе не IP-протокола (KNX, RS-485, ModBus, Z-Wave и т.п.) или конфигурации веб-службы с информацией проверки подлинности, которая может понадобиться каждой вещи из этой веб-службы.
Обнаружение (Discovery)
Поскольку многие вещи могут быть автоматически обнаружены, существуют специальные механизмы, которые занимаются обработкой автоматически обнаруженных вещей. Однако, далеко не все.
Состояние вещей (Thing Status)
Каждая вещь имеет статус объекта, который помогает выявить возможные проблемы с устройством или сервисом. В следующей таблице представлен обзор различных статусов:
Состояние | Описание |
UNINITIALIZED | Это начальный статус вещи, когда она добавляется или запускается система. Этот статус также присваивается, если процесс инициализации завершился неудачно или привязка недоступна. Команды, которые отправляются на каналы, обрабатываться не будут. |
INITIALIZING | Это состояние назначается, когда привязка инициализирует вещь. Это зависит от привязки, сколько времени занимает процесс инициализации. Команды, которые отправляются на каналы, обрабатываться не будут. |
UNKNOWN | Обработчик полностью инициализирован, но из-за характера представленного устройства/службы он еще не может сказать, находится ли вещь в сети или в автономном режиме. Поэтому вещь потенциально может работать правильно уже и может или не может обрабатывать команды. Но система позволяет отправлять команды, потому что некоторые устройства на основе радио могут выходить в интернет, если команда отправляется им. Обработчик должен позаботиться о том, чтобы переключить вещь в онлайн или офлайн как можно скорее. |
ONLINE | Предполагается, что устройство/служба, представленная вещью, работает правильно и может обрабатывать команды. |
OFFLINE | Предполагается, что устройство/служба, представленная вещью, работает неправильно и не может обрабатывать команды. Но система позволяет отправлять команды, потому что некоторые устройства на основе радио могут вернуться в онлайн, если команда отправляется им. |
REMOVING | Устройство / служба, представленная вещью, должна быть удалена, но привязка еще не подтвердила удаление. Некоторые привязки должны взаимодействовать с устройством, чтобы отключить его от системы. Устройство наверняка не работает, и команды не могут быть обработаны. |
REMOVED | Этот статус указывает, что устройство/служба, представленная вещью, была удалена из внешней системы после удаления, инициированного платформой. Обычно этот статус является промежуточным, так как вещь удаляется из базы данных после назначения этого статуса. |
Переходы между состояниями (Status Transitions)
Начальное состояние вещи UNINITIALIZED. От UNINITIALIZED вещь переходит к инициализации (INITIALIZING). Если инициализация не удается, вещь возвращается к UNINITIALIZED. Если инициализация прошла успешно, привязка устанавливает состояние объекта в UNKNOWN, ONLINE или OFFLINE, что означает, что обработчик объекта полностью инициализирован. Из одного из этих состояний вещь может вернуться в UNINITIALIZED, REMOVING или REMOVED. Состояния REMOVING и REMOVED также может быть достигнуто из любого другого состояния.
Подробное состояние (Status Details)
Состояние подробно описано далее с объектом Status detail. В следующей таблице перечислены различные сведения о состоянии для каждого статуса:
UNINITIALIZED | NONE | Никаких дополнительных сведений о статусе. |
HANDLER_MISSING_ERROR | Не удается инициализировать обработчик, так как ответственная привязка недоступна или запущена. | |
HANDLER_REGISTERING_ERROR | Сбой обработчика на этапе регистрации службы. | |
HANDLER_CONFIGURATION_PENDING | Обработчик зарегистрирован, но не может быть инициализирован из-за отсутствия параметров конфигурации. | |
HANDLER_INITIALIZING_ERROR | The handler failed in the initialization phase. | |
BRIDGE_UNINITIALIZED | Мост, связанный с этой вещью, не инициализирован.. | |
DISABLED | Вещь отключена. | |
INITIALIZING | NONE | Никаких дополнительных сведений о статусе. |
UNKNOWN | NONE | Никаких дополнительных сведений о статусе. |
ONLINE | NONE | Никаких дополнительных сведений о статусе. |
CONFIGURATION_PENDING | Вещь ждет, чтобы передать информацию о конфигурации на устройство. Некоторые привязки должны взаимодействовать с устройством, чтобы убедиться, что конфигурация принята. | |
OFFLINE | NONE | Никаких дополнительных сведений о статусе. |
COMMUNICATION_ERROR | Ошибка связи с устройством. Эта ошибка может быть временной. | |
CONFIGURATION_ERROR | Проблема с конфигурацией вещи препятствует общению с представленным устройством или сервисом. Эта проблема может быть решена путем перенастройки Вещи. | |
BRIDGE_OFFLINE | Из-за отключенного моста считается, что и Вещь отключена. | |
FIRMWARE_UPDATING | В настоящее время происходит обновление прошивки. | |
DUTY_CYCLE | В настоящее время Вещь находится в состоянии DUTY_CYCLE, использование заблокировано. | |
GONE | The Thing has been removed from the bridge or the network to which it belongs and is no longer available for use. The user can now remove the Thing from the system. | |
REMOVING | NONE | Никаких дополнительных сведений о статусе. |
REMOVED | NONE | Никаких дополнительных сведений о статусе. |
Описание состояния (Status Description)
Для получения дополнительной информации о текущем состоянии. Описание состояния должно быть задано привязкой. Это описание может использоваться в целях отладки и не должно показываться пользователю, поскольку оно может содержать нечитаемую техническую информацию (например, код состояния HTTP или любую другую информацию, специфичную для протокола, которая помогает идентифицировать текущую проблему).
Интерфейс получения состояния (Thing Status API)
При помощи метода getStatusInfo () можно получать текущее состояние Вещи. В следующем коде показано, как распечатать состояние каждой вещи в консоли:
Collection<Thing> things = thingRegistry.getAll();
for (Thing thing : things) {
ThingStatusInfo statusInfo = thing.getStatusInfo();
switch (statusInfo.getStatus()) {
case ONLINE:
System.out.println("Вещь доступна.");
break;
case OFFLINE:
System.out.println("Вещь недоступна.");
break;
default:
System.out.println("Вещь в состоянии " + statusInfo.getStatus());
break;
}
System.out.println("Подробности состояния Вещи: " + statusInfo.getStatusDetail());
System.out.println("Описание состояния Вещи: " + statusInfo.getDescription());
}