5 января 2014 г.

Платформа умного дома OpenRemote. Знакомство. Подключаем 1-wire через owfs.

Пока я жду DS2406P+ и DS2408S+ занялся серверной и клиентской стороной умного дома.

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), оно немного помедленней, ну и ладно, у нас нагрузка не высокая, будет критично - переустановим. Смотрим, что есть у нас в наличии.

  1. root@debtruck:~# apt-cache search icedtea-6-jre  
  2. icedtea-6-jre-cacao - Alternative JVM for OpenJDK, using Cacao  
  3. icedtea-6-jre-jamvm - Alternative JVM for OpenJDK, using JamVM  


Судя по довольно интересным статье сравнения JamVM немного получше, чем Cacao, поэтому буду пробовать его. Ставим:

  1. # apt-get install icedtea-6-jre-jamvm  
  2. root@debtruck:~# which java  
  3. /usr/bin/java  
  4. # java -version  
  5. java version "1.6.0_27"  
  6. OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1)  
  7. root@debtruck:~# which java  
  8. /usr/bin/java  
  9. # java -jamvm -version  
  10. java version "1.6.0_27"  
  11. OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1)  
  12. JamVM (build 1.6.0-devel, inline-threaded interpreter with stack-caching)  
  13. # export JAVA_HOME=/usr  

Редактируем /etc/java-6-openjdk-armhf/jvm-armhf.cfg перенеся -jamvm KNOWN в начало списка.

  1. # java -version  
  2. java version "1.6.0_27"  
  3. OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1~deb7u1)  
  4. JamVM (build 1.6.0-devel, inline-threaded interpreter with stack-caching)  

Видим, что у нас JamVM используется по умолчанию.

Качаем контроллер.
  1. # cd /usr/src/  
  2. # 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 на нее. Распакуем архив в нее.
  1. $ cd /srv/or/bin  
  2. $ chmod +x openremote.sh  
  3. $ ./openremote.sh run  
  4. ....  
  5. 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 для контроллера

  1. #!/bin/sh  
  2. ### BEGIN INIT INFO  
  3. # Provides:          openremote  
  4. # Required-Start:    $remote_fs $syslog  
  5. # Required-Stop:     $remote_fs $syslog  
  6. # Default-Start:     2 3 4 5  
  7. # Default-Stop:      0 1 6  
  8. # Short-Description: Start daemon at boot time  
  9. # Description:       Enable service provided by daemon.  
  10. ### END INIT INFO  
  11.   
  12. #!/bin/sh  
  13.   
  14. User=openremote  
  15. orpass=/srv/openremote/bin  
  16.   
  17. case "$1" in  
  18.   
  19. stop)  
  20.         echo "Stopping OpenRemote Controller..."  
  21.         su -l $User -c "$orpass/openremote.sh stop" > /dev/null 2>&1 &  
  22.         ;;  
  23.   
  24. start)  
  25.         # start OpenRemote in background mode  
  26.         su -l $User -c "$orpass/openremote.sh start" > /dev/null 2>&1 &  
  27.         echo "OpenRemote Controller started..."  
  28.         ;;  
  29.   
  30. restart)  
  31.         $0 stop  
  32.         sleep 5  
  33.         $0 start  
  34.         ;;  
  35. *)  
  36.         echo "usage: $0 { start | stop | restart}" >&2  
  37.         exit 1  
  38.         ;;  
  39.   
  40. esac  

Ну и автозапуск update-rc.d.

ps. Вообще для доступа через интернет ip адрес контроллера должен быть внешним.

Комментариев нет:

Отправить комментарий