В
прошлой заметке я решил сменить платформу для управления умным домом.
Архитектура
OpenHAB:
OpenHAB состоит из двух частей райнтайма (аналог контроллера в openremote, ну или просто сервер) и дизайнера. В принципе, дизайнером некоторые не пользуются - правят конфигурацию вручную.
Удаляем скрипт OpenRemote из автозагрузки.
# update-rc.d openremote remove
Java у нас уже стоит.
Runtime
Качаем
runtime (проверьте версию, у меня на данный момент 1.3.1).
# wget http://openhab.googlecode.com/files/openhab-runtime-1.3.1.zip
# wget https://openhab.googlecode.com/files/openhab-addons-1.3.1.zip
# unzip openhab-runtime-1.3.1.zip -d /srv/openHAB
# unzip openhab-addons-1.3.1.zip -d oh-addons
Копируем необходимые addons в одноименную /srv/openHAB/addons. Я скопировал пока такие:
# ls -l
-rw-rw-r-- 1 root root 38725 Sep 19 00:25 org.openhab.action.mail-1.3.1.jar
-rw-rw-r-- 1 root root 1246014 Sep 19 00:26 org.openhab.action.xmpp-1.3.1.jar
-rw-rw-r-- 1 root root 31270 Sep 19 00:29 org.openhab.binding.http-1.3.1.jar
-rw-rw-r-- 1 root root 23164 Sep 19 00:31 org.openhab.binding.ntp-1.3.1.jar
-rw-rw-r-- 1 root root 29468 Sep 19 00:36 org.openhab.binding.onewire-1.3.1.jar
-rw-rw-r-- 1 root root 18734 Sep 19 00:46 org.openhab.persistence.exec-1.3.1.jar
-rw-rw-r-- 1 root root 19373 Sep 19 00:46 org.openhab.persistence.logging-1.3.1.jar
-rw-rw-r-- 1 root root 630764 Sep 19 00:46 org.openhab.persistence.rrd4j-1.3.1.jar
-rw-rw-r-- 1 root root 126 Aug 31 03:03 README
Обратите внимание, org.openhab.binding.owserver-1.3.1.jar используется для железки под названием EDS OWServer . Нам же нужен org.openhab.binding.onewire-1.3.1.jar .
Не забудьте,
у нас уже установлен owfs с его owserver.
Копируем файл configurations/openhab_default.cfg в configurations/openhab.cfg и правим.
Из чего состоит openHAB Runtime?
1. Асинхронная шина событий.
Все узлы, которые не сохраняют свое состояние, должны информировать другие узлы о событиях, а также обновляться другими узлами реакцией на внешние события.
Существуют преимущественно два типа событий:
- Команды, которые вызывают действие или изменение состояния некоторого элемента/устройства.
- Обновления статусов, которые информируют об изменении статуса некоторых элементов/устройств (часто в ответ на команду).
2. Что такое элементы шины? Это items. Кто может запускать события? Это sitemap и rules.
Items - это представление наших устройств, их значения можно менять с помощью правил или через Sitemap. Sitemap - графическое представление и структура. Rules, соответственно правила.
Вот еще одна красивая картинка шины событий openHAB:
Дизайнер
Так как у нас сервер без иксов и графики, то дизайнер мы будем использовать на машине с windows.
Качаем дизайнер, запускаем и получаю ошибку Failed to load the JNI shared library "c:\soft\jdk1.7\\bin\..\jre\bin\server\jvm.dll". Это потому, что Дизайнер (основанный на eclipse) работает в 32 битной среде. Качаем
32 (x86) битную яву и ставим.
Меняем конфиг (openHAB-Designer.ini) дизайнера.
-vm C:/soft/jdk1.7_32/bin/javaw.exe
И запускаем. Также скачаем папку configuration с сервера (напомню, я использую
winscp). Укажем ее, как папку конфигурации (например c:\temp\openhab-demo-configuration-1.3.1\configurations\). Теперь скачем
демо конфигурацию с сайта на рабочую машину, чтобы было на что ориентироваться.
Поковырявшись немного в дизайнере, кроме всплывающих подсказок (Ctrl+Space), ничего не нашел. Поэтому для начала им воспользуемся, а потом в принципе нужно будет прикрутить
подсветку синтаксиса для mc.
Начнем. Создаем файл sitemap, например home.sitemap . Честно говоря, в дизайнере даже этого нет. :) Но создать можно нажав ctrl+N (там проблема с директориями - они не отображаются - но разобраться можно). Пишем в файле "sitem" и нажимаем Ctrl+Space. Выбираем шаблон sitemap. И у нас появляется нечто вроде этого:
sitemap name label="label" {
}
Читаем
документацию по sitemap, чтобы понять, что же нам делать дальше. Удобно сравнивать, что у нас в demo.sitemap и в
онлайн демо. Быстро понимаешь, что к чему.
Разобьем по комнатам (у меня, к сожалению, этажей нет).
sitemap name label="Дом" {
Frame {
Group item=Hall label="Зал" icon="office"
}
Frame label="Дата" {
Text item=Date
}
}
Иконки хранятся тут openHAB/webapps/images. Скачать дополнительные можно
тут.
Создадим новый файл: Items/home.items, прочитав
документацию по Items. Так как у нас 1-wire, читаем документацию по связи с openHAB
тут, и правим файл конфигурации в секции OneWire Binding (собственно говоря я только прописал ip - onewire:ip=127.0.0.1). Формат записи item:
itemtype itemname ["labeltext"] [<iconname>] [(group1, group2, ...)] [{bindingconfig}]
Group All
Group Hall (All)
/* Indoor Temperatures */
Number Temperature_Hall "Температура [%.1f °C]" <temperature> (Hall) { onewire="28.1A821E040000#temperature" }
/* NTP binding demo item */
DateTime Date "Дата [%1$tA, %1$td.%1$tm.%1$tY]" <calendar> { ntp="Europe/Moscow:ru_RU" }
Копируем созданные файлы, исправленный openhab.cfg на сервер.
Меняем владельца папки с сервером на обычного пользователя и запускаем:
$/srv/openHAB$ ./start.sh
UnknownHostException:
И получаем ошибку. Ну я получил. :) Прописать надо имя хоста в /etc/hosts на 127.0.0.1.
Запускаем еще раз.
$ ./start.sh
Launching the openHAB runtime...
osgi> 23:20:46.100 INFO o.o.c.internal.CoreActivator[:92] - openHAB runtime has been started (v1.3.1).
.........
23:21:17.223 INFO o.o.u.w.i.s.WebAppServlet[:99] - Started Classic UI at /openhab.app
23:21:29.349 INFO o.o.c.s.AbstractActiveService[:189] - NTP Refresh Service has been started
23:21:29.655 INFO o.o.c.s.AbstractActiveService[:189] - HTTP Refresh Service has been started
Довольно долгий запуск таки. Заходим http://openhab-srv:8080/openhab.app?sitemap=home .
Дата на английском. Смотрим локали:
# locale -a
C
C.UTF-8
en_US.utf8
POSIX
Запускаем, выбираем там ru_RU.UTF-8 UTF-8 и перезапускаем сервер.:
$ sudo dpkg-reconfigure locales
$ export LANG=ru_RU.UTF-8
или
$ sudo echo "LANG=en_US.UTF-8" > /etc/default/locale
Ну вот немного обрусевший вид.
Если что-то не работает, можно посмотреть более детальные логи, прописав в logback.xml <logger level="INFO" name="org.openhab"> на <logger level="DEBUG" name="org.openhab"> и <logger level="DEBUG" name="org.openhab.binding.onewire"> (для примера смотрите logback_debug.xml). Или просто запустив start_debug.sh - в этом случае сообщения смотрим прямо в консоли.
Запускаем сервер и смотрим.
Скрипт управления и автозагрузки
здесь (меняем пользователя и путь).
Продолжение следует!