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
Теперь создаем команду (тут можно не прописывать хост и порт каждый раз в версии 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 адрес контроллера должен быть внешним.
Комментариев нет:
Отправить комментарий