OpenRemote представляет из себя сервер, который получает команды от мобильного или веб приложения и дальше транслирует их другому контроллеру или серверу.
OpenRemote это:
1) Сервер умного дома, работает на десятке платформ, даже на NAS Synology и Windows.
2) Онлайн-cреда для разработки приложения.
3) Мобильное приложение, которое загружает данные для своей работы из среды для разработки.
Поддерживаемые технологии.
AMX, KNX, Lutron, Z-Wave, 1-Wire, EnOcean, xPL, Insteon, X10, Infrared, Russound, GlobalCache, IRTrans, XBMC, VLC, panStamps, Denon AVR, FreeBox, MythTV и другие.
У нас есть owfs с показаниями термометра. Давайте посмотрим как нам связать все это дело воедино.
Установка.
Сubietruck похож на Raspberry Pi, поэтому мы воспользуемся следующим мануалом.
Процессор в Cubietruck версии ARMv7, который поддерживает операции с плавающей точкой на аппаратном уровне (Hard-float). Наш Debian ( ARMv7 (EABI hard-float ABI, «armhf») ) также поддерживает.
Вообще пишут, что использование java машины с плавающей точкой на аппаратном уровне может иметь проблемы со стабильностью и совместимостью. Посмотрим, что у нас в дебиане. Перед тем как ставить java я немного изучил возможные проблемы и какую все таки версию ставить. Читаем комментарий ANDREAS DROLLINGER по ссылке - в нем написано:
OpenJDK (IcedTea6 Zero VM) is slower than Oracle Java, but it is available for hard float installation and the Drools rule engine 5.1.1 works.
В общем-то рекомендует нам использовать OpenJDK 6 с IcedTea6 (с поддержкой таки hard float), оно немного помедленней, ну и ладно, у нас нагрузка не высокая, будет критично - переустановим. Смотрим, что есть у нас в наличии.
root@debtruck:~# apt-cache search icedtea-6-jre icedtea-6-jre-cacao - Alternative JVM for OpenJDK, using Cacao icedtea-6-jre-jamvm - Alternative JVM for OpenJDK, using JamVM
Судя по довольно интересным статье сравнения JamVM немного получше, чем Cacao, поэтому буду пробовать его. Ставим:
# apt-get install icedtea-6-jre-jamvm root@debtruck:~# which java /usr/bin/java # java -version java version "1.6.0_27" OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1) root@debtruck:~# which java /usr/bin/java # java -jamvm -version java version "1.6.0_27" OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1) JamVM (build 1.6.0-devel, inline-threaded interpreter with stack-caching) # export JAVA_HOME=/usr
Редактируем /etc/java-6-openjdk-armhf/jvm-armhf.cfg перенеся -jamvm KNOWN в начало списка.
# java -version java version "1.6.0_27" OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1) JamVM (build 1.6.0-devel, inline-threaded interpreter with stack-caching)
Видим, что у нас JamVM используется по умолчанию.
Качаем контроллер.
# cd /usr/src/ # wget http://download.openremote.org/
У меня скачался OpenRemote-Controller-2.1.0_SNAPSHOT-2013-06-17.zip.
Настройка и использование OpenRemote
Теперь давайте создадим пользователя под которым будет запускаться контроллер. ( #adduser openremote , #su openremote ). Создадим под root директорию /srv/or/ дадим chown openremote на нее. Распакуем архив в нее.
$ cd /srv/or/bin $ chmod +x openremote.sh $ ./openremote.sh run .... INFO: Server startup in 19386 msРегистрируемся на сайте. Заходим в online редактор. Я обычно не доверяю таким онлайн штукам. Но да ладно, в принципе есть исходники - пишут, что можно и оффлайн устанавливать дизайнер, но пока я смысла в этом не вижу. Создаем новый Device.
Теперь создаем команду (тут можно не прописывать хост и порт каждый раз в версии 2.2, там есть config for controller onewire. В версии 2.1. пока его нет).
Теперь создаем сенсор.
Теперь перейдем во вкладку "Дизайн". Создадим новую панель Android (у меня только андроид :) ). Добавим в нее пару Label - один просто текст, во втором выберем наш сенсор. Ну вот вроде и готово. Перейдем по адресу http://openremoteserver:8080/controller/ и нажмем Sync with Online Designer, тем самым загрузим созданное приложение на контроллер OpenRemote (Что интересно, можно делать это и оффлайн, тем самым сохранив бекап с приложением - в онлайн редакторе есть возможность сохранить приложение как zip файл, а на контроллере импортировать). После синхронизации заходим на веб-консоль ( http://192.168.xx.xx:8080/webconsole/ ) и нажимаем найти контроллер, после этого вебконсоль находит наш локальный контроллер, нажимаем на него и видим наше созданное приложение. И опять не работает. :)
Проблема вот в чем, по умолчанию owserver отвечает только по адресу localhost:4304 , то есть контроллер по имени благополучно подключается, а вот по ip (127.0.0.1) нет. Поэтому пропишем так server: port = 127.0.0.1:4304 (для доступа из сети просто пишем server: port = 4304) в owfs.conf. Перезапускаем сервер owserver: #service owserver restart . Работает:
Для установки приложения на мобильный телефон, устанавливаем приложение для андроид и оно само находит контроллер в локальной сети - подключаемся, работает.
Добавляем строчку cd /srv/openremote/bin в openremote.sh, иначе при запуске из другого места могут вылезти косяки. Скрипт init.d для контроллера
#!/bin/sh ### BEGIN INIT INFO # Provides: openremote # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO #!/bin/sh User=openremote orpass=/srv/openremote/bin case "$1" in stop) echo "Stopping OpenRemote Controller..." su -l $User -c "$orpass/openremote.sh stop" > /dev/null 2>&1 & ;; start) # start OpenRemote in background mode su -l $User -c "$orpass/openremote.sh start" > /dev/null 2>&1 & echo "OpenRemote Controller started..." ;; restart) $0 stop sleep 5 $0 start ;; *) echo "usage: $0 { start | stop | restart}" >&2 exit 1 ;; esac
Ну и автозапуск update-rc.d.
ps. Вообще для доступа через интернет ip адрес контроллера должен быть внешним.
Комментариев нет:
Отправить комментарий