OpenHab — сервер-контроллер для умного дома

Одним из наиболее важных и сложных вопросов при запуске системы автоматизации (умного дома) является процесс первоначальной конфигурации системы и её отладки. Сложность заключается в том, что необходимо написать значительную часть в текстовом редакторе. При этом разработчик остаётся практически один на один с задачей, т.к. почти не существует средств автоматизации для данного этапа. В то же время система умного дома сложная и многоуровневая по своей структуре, что также усложняет процесс, т.к. необходимо учесть множество факторов одновременно. Отсутствие подобного инструментария стоит на пути массового внедрения систем умного дома у большинства пользователей, т.к. порог входа в данном случае достаточно высок. Решением в данном случае является специализированная среда разработки, которая позволяет упростить некоторые из типовых задач.
openHAB значительно отличается от большинства контроллеров умного дома, тем, что предоставляет собственную среду разработки, построенную на базе Eclipse. Первоначально IDE называлась openHAB Designer, она доступна на стандартной странице загрузки openHAB. Важно отметить, что она поддерживает конфигурацию только для openHAB первой версии. Для более новой второй версии (в настоящий момент в статусе беты) был разработан отдельный проект — Eclipse SmartHome Designer, которая также построена на базе Eclipse, но теперь поддерживается отдельным сообществом (частью самого Eclipse) и не совместима с openHAB v.1. Мы будем рассматривать версию 2, т.к. она более функциональна и в целом перспективна.

Процесс установки самого openHAB не вызывает вопросов. Достаточно скачать архивы с официальной страницы загрузки и распаковать их. Отмечу, что для Linux и MacOS систем можно произвести установку из репозитариев. Т.к. openHAB работает на Java, то требуется, чтобы он был установлен версии 1.8. В большинстве систем он также уже установлен, но при необходимости его, можно скачать.

Eclipse SmartHome Designer поддерживает такие полезные и привычные вещи, как подсветка и автодополнение кода, проверка кода на корректность. Плюс обладает такими специфичными функциями, как отображение структуры системы (объектов и их групп), а также встроенный web-браузер, который позволяет удобно работать с графическим интерфейсом конечного пользователя.

Установка достаточно подробна описана в официальной wiki. Единственное на что хотел бы обратить внимание — 4 пункт. Необходимо добиться, что в нижнем меню был выбран «SmartHome — Runtime and Designer», просто выбранного пункта в верхней части меню, как описано в инструкции, недостаточно. Забавно, но из-за этого недоразумения пришлось раза 3 переставить IDE 🙂

Рассмотрим на примере как создать простое правило, которое мы сможем тут же проверить на работоспособность без привлечения дополнительных внешних устройств, достаточно будет только системы с установленным openHAB. Обойдёмся всего 2 стандартными элементами — переключатель, как источника сигнала, и строковое поле, как вывод.

Конфигурация системы находится в папке conf расположенной в папке с установленным openHAB. Конфигурация включает следующие разделы:

  • Items — объекты, над которыми могут проводиться операции чтения/записи,
  • Rules — правила автоматизации,
  • Scripts — скрипты/сценарии,
  • Services — службы,
  • Sitemaps — описания обложек в браузере,
  • Things — устройства в системе, могут включать в себя несколько Items.
  • Transform — переводы.

Запустив Eclipse SmartHome Designer, необходимо указать папку в которой находится конфигурация, для этого необходимо кликнуть на значок папки слева вверху.

SmartHome Designer
Eclipse SmartHome Designer

На этом этапе необходимо добавить собственно сами элементы которые будут у нас в системе, добавить правила для автоматизации и описать структуру внешнего вида. В нашей системе мы покажем как группировать объекты в структуре и в графическом интерфейсе, а также сами напишем самое простое правило, которое будет обрабатывать положение переключателя и в зависимости от его состояния менять значение в  переменной, которая тут же будет выводиться на экран.
Содержимое конфигурационных файлов приведено ниже. По комментариям практически всё становится понятным. Как упоминалось выше структура системы и автодоподолнение и проверка кода значительно упрощают этот этап.

 tests.items  (объекты):

// тестовая группа элементов
Group
gTest
«Test Group» <TestArea>

// описание элементов входящих в группу
Contact
Test_Door «Test Door [MAP(en.map):%s]» (gTest, Windows)
Switch
Light_gT «Ceiling Light» (gTest, Lights)
Number
gT_Test «Temperature [%.1f °C]» <temperature> (gTest, Temperature)

// дата/время
DateTime
CurrentDate «Date [%1$tA, %1$td.%1$tm.%1$tY]» <calendar> { channel=«ntp:ntp:demo:dateTime» }

// ещё группа элементов для отображения комплексной обработки
Group
:Number
:AVG Temperature «Avg. Room Temperature [%.1f °C]» <temperature> (Status)
Number
Temperature_GF_Corridor «Temperature [%.1f °C]» <temperature> (Temperature, GF_Corridor)
Number
Temperature_GF_Toilet «Temperature [%.1f °C]» <temperature> (Temperature, GF_Toilet)

// положение солнца в зависимости от времени суток и географического положения
Group
Weather_Chart
Number
Sun_Elevation «Sun Elevation» <sun> (Weather) { channel=«astro:sun:home:position#elevation» }

// прогноз погоды от Yahoo! в заданном городе
Number
Weather_Temperature «Outside Temperature [%.1f °C]» <temperature> (Weather, Weather_Chart) { channel=«yahooweather:weather:saint-petersburg-federal-city:temperature» }
Location
DemoLocation «St. Petersburg«

test.sitemap  (внешний вид):

sitemap test label=«Main Menu»
{
// группа без имени из 3 элементов
Frame
{
    Group
item=gTest label=«Test Area» icon=«firstfloor»
    Switch
item=Light_gT label=«Test Switch»
    Text
item=gT_Test
  }

// группа именованная
 
Frame
label=«Weather»
  {
    Text
item=CurrentDate
    Text
item=Sun_Elevation
    Text
item=Weather_Temperature
    Text
item=Temperature_GF_Corridor
    Text
item=Temperature_GF_Toilet
  }
}

test.rules   (правила):

var Timer timer = null

// при изменении состояния переключателя изменяем значение в строке и записываем её в переменную с температурой
rule
«Set temperature by switch»
  when
    Item
Light_gT changed
  then
    var
String string = »
    if
(Light_gT.state.equals(ON))
      {
        string =
‘100’;
      }
    else
      {
        string =
’50’;
      }
    gT_Test
.postUpdate(string);
end

// при запуске системы и периодически изменяем значения температур для членов группы температуры
rule
«Set random room temperatures»
  when
    System
started or
    Time
cron «0 0/5 * * * ?»
  then
    Temperature
?.members.forEach(temperature|
    postUpdate
(temperature, 20.0 + (25.0 — (Math::random * 50.0).intValue) / 10.0)
    )
end

Отредактировав файлы и расположив их в соответствующих поддиректориях основной конфигурационной дирректории остаётся только запустить систему openHAB.
Запуск системы осуществляется из основной директории пакетным файлом start или start_debug.  Последнее может быть полезно, если что-то пойдёт не так. Стоит сразу отметить папку, где расположены логи — openhab\userdata\logs. Ещё одной очень полезной функцией в консоли openHAB будет log:tail, которая будет выводить в консоль в режиме реального времени происходящее — события, действия, ошибки и оповещения. Под Windows рекомендуется использовать пакетный bat, даже, если установлен интерпретатор bash, т.к. в этом случае получите подсветку сообщений в зависимости от их типа, что значительно повышает наглядность.

openHAB CLI

Доступ к интерфейсу по умолчанию осуществляется на порту 8080 через web-браузер — http://host_ip:8080.

OpenHab Start

 Как мы видим на рисунке, во второй версии openHAB доступно 4 интерфейса. Наиболее простым и минималистичным является Basic UI, его мы и будем рассматривать в дальнейшем. Classic UI — дизайн в стиле старого iOS, доставшийся от первой версии openHAB. Paper UI и Rest API нужны для упрощения конфигурации системы. Достаточно кликнуть по тому или иному интерфейсу для запуска. Конфигурация системы не привязывается к какому-то отдельному интерфейсу. В дальнейшем можно напрямую использовать следующую ссылку http://host_ip:8080/basicui/app.

В итоге получаем следующее окно. Если растянуть окно вширь, то колонок станет больше, чтобы эффективно использовать пространство.

Bacic UI Main menu

Продемонстрируем работу наглядно, изменяя положение переключателя.

OH switch on
Включено
OH switch off
Выключено

В данной статье мы показали основные моменты по установке openHAB и среды разработки для него, настройке первого проекта в ней и написании пары простых правил.

OpenHab — сервер-контроллер для умного дома: Один комментарий

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s