Архитектура 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 - в этом случае сообщения смотрим прямо в консоли.
Запускаем сервер и смотрим.
Скрипт управления и автозагрузки здесь (меняем пользователя и путь).
Продолжение следует!
Удачно наткнулся на статью! Сам пока пользуюсь только 1-wire, но планирую и другие технологии. Давно искал подобный "комбайн".
ОтветитьУдалитьПриветствую!
ОтветитьУдалитьУ меня на этапе открытия демо конфигурации выскакивает ошибка:
An error occurred while opening the configuration folder
Cannot create linked resource '/config/config'. The parent resource is not accessible.
Что это может быть?
Сложно сказать, попробуйте погуглить, вот первая ссылка из гугла
ОтветитьУдалитьhttps://groups.google.com/forum/#!msg/openhab/vQbnDFCXjLE/gVxovi8WaQQJ
пишут, надо удалить .workspace и перезапустить дизайнер.
Да удаление workspace помогло! СПС! )
ОтветитьУдалитьЕще мне не понятно немного с привязкой Z-wave...
ОтветитьУдалитьпо логу видно что все проинициализировалось и начинает слать в порт который я прописал.... но возникает вопрос как openhab может использовать порт который уже занят сервером z-wave?!
Один порт использовать нельзя (вы какой порт имеете ввиду?) , z-wave я не занимался.
Удалитьу меня комп BananaPI (китайский аналог RasberryPI) на него установлен модуль Z-wave RaZberry, который сконфигурирован как /dev/ttyS0. Сервер Z-wave установлен на банане и сервер openhab тоже тут же! так вот в настройках openhab нужно тоже указывать порт на котором сидит модуль Z-wave. от сюда и вопрос?! или может openhab может работать с Z-wave и без его родного сервера?!
Удалитьну судя по документации openhab умеет работать напрямую с устройством
Удалитьhttps://github.com/openhab/openhab/wiki/Z-Wave-Binding
The Razberry-Zwave-Daughterboard - это похоже на ваше устройство
The zwave:port value indicates the serial port on the host system to which the Z-Wave controller is connected, e.g. "COM1" on Windows, "/dev/ttyS0" or "/dev/ttyUSB0" on Linux or "/dev/tty.PL2303-0000103D" on Mac.
То есть , пишем zwave:port=/dev/ttyS0 и всё, если я правильно понял.
ps. тут порт имеются виду serial port , это не tcp\ip port.
УдалитьУ меня при запуске биндинга выходит вот такая ошибка:
ОтветитьУдалить09:55:56.569 INFO o.o.c.s.AbstractActiveService[:169]- OneWire Refresh Service has been started
09:56:01.687 ERROR o.o.c.s.AbstractActiveService[:175]- Error while executing background thread OneWire Refresh Service
java.lang.NullPointerException: null
at org.owfs.jowfsclient.internal.OwfsClientImpl.sendRequest(OwfsClientImpl.java:509)
at org.owfs.jowfsclient.internal.OwfsClientImpl.exists(OwfsClientImpl.java:385)
at org.openhab.binding.onewire.internal.OneWireBinding.execute(OneWireBinding.java:140)
at org.openhab.core.binding.AbstractActiveBinding$BindingActiveService.execute(AbstractActiveBinding.java:156)
at org.openhab.core.service.AbstractActiveService$RefreshThread.run(AbstractActiveService.java:173)
И данных с датчиков в openhab нету!!! ((((
В чем может быть проблема?
а в файловой системе owfs или owhttpd данные есть? и покажите строку item
УдалитьПри старте owfs в папке /mnt/1-wire/ появляются все датчики температуры подключенные к шине.... в файле w1_slave данные температуры есть и меняются при нагреве....
ОтветитьУдалитьвот мой итем:
Number Temp "Температура_1 [%.1f C]" { onewire="28-00043d8b95ff#temperature"}
По-моему, в названии датчика, должна быть точка вместо дефиса, и после точки все заглавные (скопируйте название с названия директории датчика) - в линуксе почте все чувствительно к регистру. Должно быть, примерно как у меня:
Удалить28.1A821E040000
Да я посмотрел и действительно в папке /sys/bus/w1/devices/ у меня создается файл с дефисом, а в /mnt/1-wire/ с точкой и все в верхнем регистре!!! поправил, но ничего не поменялось. Сразу вопрос: запускать нужно только owfs или еще что то?
ОтветитьУдалитьпонятно, верхее это что-то системное.
УдалитьВ тексте есть ссылка на статью про owfs. owfs - это название пакета с несколькими утилитами, в том числе owfs (то самый /mnt/1-wire/ ) (one wire file system) и owserver - tcp сервер к которому и подключается openhab. то есть он должен работать.
Плюс в конфиге надо прописать его ip (если на той же машине onewire:ip=127.0.0.1 )
https://github.com/openhab/openhab/wiki/One-Wire-Binding
Ну в конфиге openhab именно так и прописано! )
УдалитьА по мимо owserver и owfs еще нужно что то запускать? может есть где нибудь скриптик, который запускает все что нужно?!
К сожалению, у меня хост с 1wire сейчас не работает. Кажется, я ставил из репозитория дебиана и там в комплекте идет скрипт запуска в init.d.
Удалитьпосмотрите в owfs.conf, там должны быть строчки типа:
####################### OWSERVER ########################
server: port = localhost:4304
после запуска попробуйте
#telnet localhost:4304
Вот здесь есть скрипт запуска
Удалитьhttp://www.gaggl.com/2013/01/accessing-1-wire-devices-on-raspberry-pi-using-owfs/
Дело в том что я так понял что у меня 1-wire (w1) уже предустановлен в ядре линукса... просто глянул на банане пи там нет папки w1 в директории /sys/bus/ а вот на банане про есть.... я вот думаю, а они не могут друг другу мешать? ну в смысле то что в ядре и то что я пытаюсь запускать сам?
ОтветитьУдалитьне думаю, в ядре могуть быть только драйвера, а owfs это и драйвера и софт. Если работают датчики в файловой системе в /mnt, то и в owserver должны. Но тут есть одна тонкость, надо запускать сначала owserver (tcp сервер), а потом owfs (файловая система) или там owhttd (веб север), потому что owfs и owhttpd могут работать и сами, но если они видят, что есть tcp сервер, то подключаются к нему. Я просто не уверен, что owserver будет корректно работать , если его запустить после owfs или owhttd. Но проверить не могу - это то что я припоминаю :)
УдалитьЯ запускаю сначала owserver с параметром --w1 а потом запускаю owfs --w1 с тем же параметром... может не надо параметры указывать? в сети информации об этом нет! хотя да, действительно я где то видел, что сначала запускается сервер а потом "шина"!
ОтветитьУдалитьowfs --w1 что это за параметр?
Удалитьвот скрипт готовый для debian like систем, использующий /etc/owfs.conf для запуска
http://www.gaggl.com/2013/01/accessing-1-wire-devices-on-raspberry-pi-using-owfs/
телнетом все-таки проверьте работу вашего owserver
телнет молчит((( говорит нет сервиса....
ОтветитьУдалитьхотя в htop вижу что owserver запущен и owfs запущен
ОтветитьУдалитьowfs не нужен , его можно вырубить .
Удалитья ошибся , там без двоеточния надо
#telnet localhost 4304
так там используется USB адаптер а у меня подключено на gpio=4 а вы делали на адаптере или к gpio подключали шину?!
ОтветитьУдалитьUSB адаптер у меня.
Удалитьтелнет не цепляется!
ОтветитьУдалитьЗначит у вас не работает правильно tcp сервер, который и использует OpenHAB
УдалитьА если посмотреть какой порт использует
#netstat -ap | grep owserver
А в логах есть что по поводу owserver
tcp 0 0 *:4304 *:* listen 29663/owserver
ОтветитьУдалитьunix 2 [ ] dgram 215832 29663/owserver
я не нашел логи... их наверное нужно включать где то! я запускаю с debug и все события полностью в консоли
ОтветитьУдалитьну вроде все правильно на первый взгляд , и что телнет не подключается?
Удалитьлоги в консоли это тоже самое, что и лог (в syslog по-моему он пишет).
Странно. Слушайте, по-моему был косяк с локалхостом.
Попробуйте прописать
####################### OWSERVER ########################
server: port = 127.0.01:4304
и телнетом
telnet 127.0.0.1 4303 после запуска...
Что-то припоминаю такое...
точку пропустил
Удалить####################### OWSERVER ########################
server: port = 127.0.0.1:4304
Дело в том, что у меня нет /etc/owfs.conf он лежит в другом месте и там нет таких параметров!!! я сейчас установил по вашей ссылке на другой плате, там этот файл есть и по локалхосту телнет прицепился! вот только там нет настроек для w1... а usb адаптера у меня нет... да и дорогой он... я думал что раз в kernel есть 1-wire нафига еще адаптер за 1500 рубля! Ж-)
ОтветитьУдалитьпри чем тут адаптер? если у вас owfs отрабатывает и датчики в mnt/1wire появляются то и сервер должен работать. Не важно, где лежит конфиг. можно запускать с конфигом без всяких скриптов:
Удалить#owserver -c owfs.conf
главное, чтобы в конфиге было прописано
server: port = 127.0.0.1:4304
и раз у вас не usb, то нечто вроде этого:
https://gist.github.com/kmpm/4445289
server: i2c = ALL:ALL
Вот кстати ссылка на драйвер для ядра линуха )))))
ОтветитьУдалитьhttp://owfs.org/index.php?page=w1-project
жаль что я не программист и не могу понять где косяк с подключением по этой схеме!?(((
Аа, ну так есть поддержка и параметр теперь я понял какой.
Удалитьтогда в конфиге
server: w1
server: port = 127.0.0.1:4304
и запуск #owserver -c owfs.conf
может так сработает?
Все заработало! у меня проблема с доступом по локалхосту... вылечилось командой ifconfig lo 127.0.0.1 команды для запуска 1-wire:
Удалить./owserver --w1 -p4304
./owfs --w1 -s4304 -m /mnt/1-wire
и в openhab все появилось! )))))