Пользователь
0,0
рейтинг
23 мая 2013 в 23:52

Администрирование → Мобильное приложения для управления умным домом на базе Z-Wave с помощью OpenRemote


Не так давно был представлен Z-Wave модуль для Raspberry Pi — RaZBerry, который превращает мини-компьютер в полноценный контроллер умного дома. Управление Z-Wave сетью осуществляется с помощью web-интерфейса, использующего HTTP/JavaScript API. Используя JavaScript можно создать набор функций для автоматизации (включение/выключение света, проверка температуры, опрос датчика движения и др.), которые затем можно выполнить, послав HTTP запрос.

Продукт компании OpenRemote с одноименным названием позволяет создавать мобильные приложения для умного дома без программирования, при этом в одном приложении могут использоваться разные технологии: Z-Wave, KNX, X10, ZigBee, управление компьютером по ssh и др.

OpenRemote это сервер выполняющий любые команды и конструктор интерфейсов в котором вы создаете кнопки, переключатели, надписи и др. и этим элементам уже назначаете команды, в нашем случае это HTTP запросы на выполнение JavaScript функций на сервере Z-Wave.

Далее я по пунктам расскажу как создать пульт управления умным домом для iPhone и Android! А вот так будет выглядеть наше приложения, когда мы закончим:


Под катом много картинок.


1. Создание сети Z-Wave c помощью контроллера Raspberry Pi + RaZberry
  • Установка ПО RaZberry на Raspberry Pi
  • Добавление Z-Wave устройств
  • Проверка работы устройства
  • О предоставленном API автоматизации
  • Создание JS скриптов для удаленного управления

2. Установка OpenRemote контроллера и мобильного приложения

3. Создание дизайна приложения и логики его работы
  • Разработка дизайна
  • Создание команд управления и сенсоров
  • Ассоциация кнопок с командами
  • Синхронизация с мобильным приложением

4. Резюме

5. Ссылки

Создание сети Z-Wave c помощью контроллера Raspberry+RaZberry


RaZberry — это плата подключаемая к Raspberry Pi через GPIO, позволяющая создавать и управлять Z-Wave сетью. Для лучшего понимая прочтите Faq. В комплекте с платой идет софт, который нужно установить.

Установка ПО RaZberry на Raspberry


Установщик поддерживает только Debian-based дистрибутивы (Raspbian, Xbian и др.) Однако ручками можно поставить ПО и на OpenElec и другие ОС.
Выполните команду для установки ПО Z-Way:
wget -q -O - http://razberry.z-wave.me/install | sudo bash

После установки, нужно обязательно перезагрузить Raspberry Pi, чтобы применить изменения для Serial порта.

Чтобы попасть в панель управления умным домом перейдите по адресу http://IP_OF_YOUR_RASPBERRY:8083. Интерфейс программы очень простой, разобраться в нем не составит труда, есть документация. Максимальную совместимость с интерфейсом имеют браузеры: Chrome, Safari, Firefox, другие браузеры: IE, Opera могут работать некорректно.

Добавление Z-Wave устройств


Определимся со списком используемого оборудования:
— Реле Fibaro Single Switch 3kW 2 шт.
— Датчик открытия двери/окна и температуры Fibaro Door/Window Sensor 1шт.

В нижнем меню выберите Режим эксперта. С помощью верхнего меню перейдите на вкладку Сеть → Управление сетью и нажмите Включить (заново) устройство, это запустит процесс ожидания включения устройства в сеть, теперь на устройстве три раза нажмите сервисную кнопку, чтобы контроллер его увидел и добавил.


Проверка работы устройства


Убедимся, что устройство работает. Перейдите на вкладку Настройка устройств, кликните на только, что добавленное устройство в левой колонке и проверьте Стадию интервью, должно быть Интервью прошло успешно и между плюсиков не должно быть точек и заков Ø.


Если интервью не пройдено (есть точки и знаки Ø), то можно его повторить, для этого в нижней части экрана нажмите Дополнительные действия → Принудительно повторить интервью (Режим эксперта должен быть включен, чтобы увидеть это меню).
После успешно пройденного интервью, на этой же вкладке Настройка устройств можно настроить некоторые параметры устройства (не забудьте применить настройки кнопкой Применить настройки к данному устройству внизу экрана, а также разбудить устройство, если оно работает на батарейках):


Для управления устройством перейдите на вкладку Управление устройствами → Выключатели


О предоставленном API автоматизации


Удостоверившись, что все устройства работают правильно, попробуем теперь управлять ими удаленно. Есть несколько способов:

1. С помощью HTTP/JSON API
2. C помощью JavaScript API

HTTP/JSON API использует простой синтаксис для управления устройствами.
Включить свет можно из браузера:
http://192.168.1.113:8083/ZWaveAPI/Run/devices[6].instances[0].SwitchBinary.Set(255)

Или запросить температуру:
http://192.168.1.113:8083/ZWaveAPI/Run/devices[8].instances[2].commandClasses[49].data[1].val.value

JavaScript API позволяет писать различные скрипты автоматизации, например: включить/выключить свет, опросить датчик, получить температуру, выключить свет через 2 минуты после включения. Эти скрипты могут работать как самостоятельно (например: ночью свет включается только на 15%, чтобы не слепить глаза), так и могут быть вызваны удаленно с помощью HTTP/JSON API.

Скрипт включения света:
SwitchOn = function(N,I) {
  zway.devices[N].instances[I].SwitchBinary.Set(255);
  }

Вызов скрипта включения света:
http://192.168.1.113:8083/JS/Run/SwitchOn(6,0)

К сожалению прямое обращение к устройствам с помощью HTTP/JSON API из OpenRemote проблематично по нескольким причинам:

1. Символы [] должны быть перекодированы в UTF-8 в Констукторе OpenRemote
2. При опросе датчиков OpenRemote ожидает «on» или «off», а Z-Wave датчики могут прислать 255 или 0.
3. Для каждого устройства придётся писать свой запрос, а с помощью JS можно использовать только одну функцию для включения различных устройств, изменяя в запросе только параметр функции — номер устройства.

При использовать JavaScript API все эти проблемы исчезают — несколько функций «хэлперов» помогут преобразовать термины Z-Wave в удобные для OpenRemote понятия.
Более подробно о синтаксисе HTTP/JSON API и JavaScript API можно почитать в недавней статье о RaZberry на хабре.

Создание JS скриптов для удаленного управления


JS скрипты находятся в /opt/z-way-server/automation/, создадим файл в котором будут храниться наши функции автоматизации openremote.js, чтобы он автоматически загружался при включении Z-Way, в конец главного файла автоматизации main.js добавьте:
// ======================================================  
executeFile(automationRoot + "/" + "tags.js");  
executeFile(automationRoot + "/" + "openremote.js");  
startAutomation();

/opt/z-way-server/automation/openremote.js
// Включение устройства
SwitchOn = function(N,I) {
  zway.devices[N].instances[I].SwitchBinary.Set(255);
  }

// Выключение устройства
SwitchOff = function(N,I) {
  zway.devices[N].instances[I].SwitchBinary.Set(0);
  }

// Запрос на статус датчика (сработал/не сработал)
SensorStatus = function(N,I) {
  return zway.devices[N].instances[I].SensorBinary.data.level.value;
  }

// Запрос на состояние устройство (включено/выключено)
SwitchStatus = function(N,I) {
  return zway.devices[N].instances[I].SwitchBinary.data.level.value;
  }

// Запрос температуры с округлением до целого
Temperature = function(N,I) {
  return Math.round(zway.devices[N].instances[I].commandClasses[49].data[1].val.value);
  } 


Параметр N — номер устройства в сети.
Параметр I — внутри одного устройства может быть физически несколько устройств (каналов), например 2 реле или датчик температуры, датчик движения, датчик освещенности. Параметр I это номер канала внутри устройств. Если устройство содержит только одно физическое устройство, то это параметр равен 0.

После создания файла нужно либо перезапустить Z-Way командой:
/etc/init.d/Z-Way restart

либо подгрузить скрипт вручную, послав запрос из браузера:
http://192.168.1.113:8083/JS/Run/executeFile("automation/openremote.js")

Проверить работоспособность функций можно из браузера.
Включить свет:
http://192.168.1.113:8083/JS/Run/SwitchOn(6,0)

Запросить температуру:
http://192.168.1.113:8083/JS/Run/Temperature(8,2)

В отладке очень хорошо помогает лог Z-Way сервера:
tail -f /var/log/z-way-server.log

Если все работает, переходим к следующему пункту!

Установка OpenRemote контроллера


Контроллер OpenRemote представляет из себя сервер, который получает команды от мобильного или веб приложения и дальше транслирует их другому контроллеру или серверу. В нашем случае это Z-Way сервер.


На сайте OpenRemote есть очень подробная инструкция по установке, которой и предлагаю воспользоваться:
Официальная инструкция по установке OpenRemote на английском языке

Замечу лишь, что OpenRemote написан на Java и нам нужна версия виртуальной машины с аппаратной поддержкой плавающей запятой:
JAVA для ARM процессоров в поддержкой плавающей запятой

Установите мобильное приложение для вашего телефона:
Мобильное приложение OpenRemote

Перед тем как приступить к разработке приложения, для лучшего понимая посмотрите как оно будет работать:


Создание дизайна приложения и логики его работы


Все предыдущие шаги были лишь подготовкой к главному — созданию мобильного приложения!
Откройте облачный Конструктор http://designer.openremote.org. Разобраться в нем не составит труда!

Разработка дизайна


Сразу перейдем к разработке дизайна.

1. Перейдите на вкладку UI Designer и создайте новую панель, назвав ее например, iPhone4.


2. Перетяните из правой панели кнопки и изображения на экран iPhone.


3. В свойствах изображения (правая панель) загрузите ваши картинки и с помощью полей Left, Right, Width, Height расположите их на экране как вам нужно. Я загрузил изображения квадрата и лампочки, также добавил надпись.


Создание команд управления и сенсоров


Теперь нужно на кнопки назначить команды, а картинка лампочки должна изменяться в зависимости от состояния света (включен/выключен).

1. Перейдите на вкладку и создайте новый девайс, назвав его например, Raspberry.


2. Выберите только что созданный девайс Raspberry и создайте новую команду для него New → New command. Выбираем протокол HTTP, вводим URL JS-команды и метод устанавливаем POST.
Эта команда включает устройство №6. Аналогично создаем команды включения других устройств и команды выключения.
http://192.168.1.113:8083/JS/Run/SwitchOn(6,0)



3. Теперь нужно создать команду для опроса состояния света. Это команда будет вызываться каждые 2 секунды, поэтому если вы вручную выключите свет, то в нашем приложении это сразу станет заметно. Как обычно New → New command, но дополнительно нужно указать с какой периодичность проводить опрос Polling, устанавливаем 2s, буква s обязательна.


4. Создадим Sensor, который будет обрабатывать полученные значения от этой команды и передавать их изображению или надписи. New → New Sensor, выбираем команду, которую будет выполнять сенсор, устанавливаем тип custom, добавляем два состояния on и off, ассоциируем их с возвращаемыми значениями Z-Wave.


Ассоциация кнопок с командами


1. Последний этап разработки приложения, ассоциация кнопок с командами. Вернитесь к дизайнеру приложения UI Designer , выберите вашу кнопку и в её свойствах установить команду, которую она должна выполнять.


2. Ассоциируйте изображение с сенсором, чтобы при изменении состояния устройства изменялась и картинка в приложении. Выберите изображение и в его свойствах установите сенсор.


3. В свойствах изображения выберите какая картинка будет показана если сенсор прислал on и какая, если сенсор прислал off.


Синхронизация с мобильным приложением


1. Наше приложение готово, осталось его только залить в телефон. Перейдите по адресу контроллера OpenRemote http://OpenRemoteServer:8080/controller/, и нажмите Sync with Online Designer, тем самым вы загрузите созданное приложение на контроллер OpenRemote.


2. По адресу http://OpenRemoteServer:8080/webconsole/ можно увидеть наше готовое приложение.


3. Откройте приложение OpenRemote на мобильном, задайте адрес сервера OpenRemote, выберите панель iPhone4, которую мы создали в UI Designer.


4. Теперь можно протестировать приложение на мобильном, я продолжил разработку дальше, добавил датчик температуры, датчик открытия окна, и сделал панель для управления медиаплеером XBMC.


Резюме


На изучение OpenRemote и разработку приложения я затратил один день! Этот инструмент очень прост в освоении, что экономит время. OpenRemote дает безграничные возможности по автоматизации дома, объединяя различные протоколы под одним крылом, а RaZberry оказалось очень удачным решением для управления оборудованием Z-Wave из OpenRemote.

Ссылки


Документация по Z-Way
RaZberry — умный дом на базе Z-Wave и Raspberry Pi
How To Install OpenRemote Controller on Raspberry Pi
OpenRemote Configure Z-Wave for Razberry
Виталий @aivs
карма
23,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (40)

  • 0
    Отличное решение для Android — у RaZberry для Android пока не было приложений. Для iPad я пока довольствовался родным приложением Z-Way для iOS, но там нельзя менять расположение виджетов и кастомизировать.

    А есть ли возможность делать «вкладки»? например, чтоб разбить всё по комнатам или по типам устройств?

    И как я понял, каждое новое устройство надо руками прописывать. Т.е. автоматом оно не появится в интерфейсе. Как-то не так удобно… Вот визард бы сделать!
    • +2
      Вкладки можно делать с помощью Tab bar. Создаем несколько экранов и назначаем их каждой кнопке на Tab Bar.
      • +1
        Курто! Тогда вся моя квартира влезет на 4 таба.
  • +1
    Статья как раз вовремя — через пару месяцев буду покупать контроллер и остальные сенсоры (пока только жалюзи Fibaro управляются с пульта Duwi). Стоит выбор между Vera Lite, RaZberry и Almond+ (он только в сентябре выйдет, но обещает поддержку Z-wave и ZigBee одновременно, что позволит делать свои zigbee андроид-поделки).
  • 0
    Спасибо, действительно можно очень быстро собрать прототип, а то я уже прикидывал, что подобное делать руками займет от недели до месяца.

    И еще у вас там на скринах фигурирует, открыть\закрыть окно на балконе, расскажите как это реализовано?
    • +1
      Определимся со списком используемого оборудования:
      — Реле Fibaro Single Switch 3kW 2 шт.
      — Датчик открытия двери/окна и температуры Fibaro Door/Window Sensor 1шт.


      Судя по этому только опрашивается датчик, на предмет открыто или закрыто окно.
      • 0
        Верно, датчик открытия/закрытия опрашивается так же как и включен/выключен свет
    • 0
      Обычные двери не закрыть, можно лишь установить внешние жалюзи — там привод управляет мотором шторы.
  • 0
    Спасибо, очень хорошая и доступная статья. А что будет если вдруг openremote.org перестанет функционировать? Останется ли работоспособным приложение на распберри? Можно ли будет его как-то вручную менять\расширять?
    • 0
      На raspberry крутится сервер openremote локально и он не связан с openremote.org, проверял, отключал инет и все работало.
      А вот дизайнер приложения работает в облаке, локальной версии не видел.
      • 0
        Из дизайнера можно скачать архив с вашим приложением и загрузить его в оффлайн режиме на телефон.
        Внутри архива картинки и два xml файла, один описывает расположение элементов, другой описывает какие команды выполняют кнопки, это все можно легкой вручную править.
    • 0
      Как я понял из описания, в бесплатной версии дизайнер интерфейса в облаке. У них есть ещё какая-то платная версия, которая позволяет всё делать без интернета и имеет какие-то доп. фичи. Но и бесплатная будет работать автономно после настройки.
  • 0
    Спасибо за отличный мануал!
    Интересно было бы еще почитать обзор подключаемого оборудования.
    • 0
      Что вас интересует по оборудованию? все работает, все доступно для покупки в России.
      • 0
        Какие модули есть в наличии? Какие цены? Как это вообще работает… Лучше на реальном примере.
        У меня есть мечта: однажды мой дом станет умным. Но это пока что очень дорого…
        • +1
          У меня дома установлено 3 выключателя света, 2 датчика движения и 2 брелока для управления.
          Средняя цена на устройство 2500р, мне кажется это не дорого, с каждой зарплаты покупаете по одному устройству, и через год у вас квартира полностью оборудована.
          На российской частоте сейчас торгуют только здесь: rus.z-wave.me/
          Вот реальный пример, моя квартира:
          • 0
            Как на меня все равно дороговато. Жаль нет свободных решений, типа Мастер-Кит.
            На aliexpress и bay есть модули за 50$.
          • +1
            Сделали бы обзор по текущим устройствам которые у вас есть, впечатление итд…
        • 0
          Оборудованием можно посмотреть здесь. Есть несколько статей на Хабре про теорию и практику с Z-Wave. Есть и про Vera Lite, и про RaZberry.
          • 0
            Подскажите, в этом Openremote можно совместить Zigbee (Xbee) и Z-wave устройства? В статье что-то вскользь сказано, но как именно он их будет совмещать?
            • 0
              Конечно! OpenRemote ничего не знает ни об устройствах, ни о технологиях. Вы просто привязываете действия и значения переменных к объектам на экране. В случае RaZberry интеграция оказалась простой, т.к. возможности сервера Z-Way позволяют легко перейти к терминами удобными для взаимодействия с OpenRemote.
  • 0
    я так понял OpenRemote это сервер и мобильное приложения для создания пульта. Причем сервер можно и под Windows запустить?
    • 0
      OpenRemote это:
      1) Сервер умного дома, работает на десятке платформ, даже на NAS Synology и даже на виндовс
      2) Среда для разработки приложения
      3) Мобильное приложение, которое загружает данные для своей работы из среды для разработки
  • 0
    А есть какая-то возможность прикрутить к этому события и сцены? Типа «при срабатывании датчика движения — включить свет»?
    И второй вопрос — Polling — это единственная схема получения событий? Т.е. так чтобы контроллер мгновенно что-то делал по наступления события (например, дёргал какой-то сервис в интернете) — возможно?
    • –1
      Polling в данном случае это нужно для приложения openremote, чтобы обратиться к серверу, понять есть ли изменения и если есть поменять картинку.
      А события и сцены делаются на raspberry с помощью JS (здесь openremote не нужен), пишем скриптик, который в цикле проверяет например состояние датчика движения, и если он сработал, то выполняет функцию включения света. Собственно это главная фишка RaZBerry, что можно на JS писать любые алгоритмы автоматизации.
      • 0
        Я смотрел на всё это дело и вот главное, что мне когда-то не понравилось, это «в цикле проверяем состояния датчика». Не эстетично это. В итоге поставил agoControl, который юзает библиотеку openzwave и даёт возможность получать именно события (колбеками) о срабатывании датчиков. Чёрт его знает, конечно, как там эта библиотека работает внутри, но для меня событие выглядит именно как коллбек, а не как проверка в цикле состояния.
        • +1
          Тут тоже события. aivs неверно описал процесс… делается так:
          devices[N].SwitchBinary.data.level.bind(function() { debugPrint("new value is" + this.value); })
      • +1
        Никакого цикла с проверкой состояния датчика не нужно! В RaZberry есть подписка на изменения конкретных значений устройств. Достаточно за-bind-ить изменение значения в дереве данных с callback функцией, и она исполнится при получении нового значения. См. статью про RaZberry.
  • +1
    Я конечно понимаю, своими руками и всё такое. Когда это можно будет купить без гемора и по адекватным ценам…
    • +1
      эти парни стараются сделать умный дом доступным — ninjablocks.com/
      • +1
        Вообще не понял по какому оно стандарту работает. Свой велосипед? Тогда сразу за борт — чуть что с компанией случится — и имеем кучу бесполезного барахла.
      • +1
        Судя по длине антенны, это 433 МГц, т.е. свой самопальный протокол. Цены конечно впечатляют, но это только для фана — умный дом не сделать. Нет ни одного устройства в подрозетник, мало датчиков, всё придётся делать самому, т.к. готовых (мобильных) приложений фактически нет, а их поддерживать никто не собирается пока. Ну и как уже было сказано, нет защиты инвестиций — с ними никто не совместим — ещё один кризис, и их сдует.
        • 0
          надо им на кикстартер, чтобы выпустить модули в розетки и тп, и открыть протоколы, тогда даже если их сдует, имеющееся оборудование не пропадет.
          • +1
            они там уже были ;) см. описание их проекта. Всё пропадёт потому, что бизнес модель с продажами по таким ценам не очень рентабельна. А железо — не софт, даже если всё открыто, скопировать сложно — не все умеют пластик отливать дёшево. Уверен, при производстве в России это будет стоить раза в два дороже!
        • 0
          похоже что они не выпускают оборудование сами, а только добавляют поддержку разной китайщины в свою прошивку
          сенсоры, очень похожие на то что они предлагают, я видел не раз на aliexpress и ebay
  • 0
    А монетка лишняя на фотке =)
    • 0
      Она иллюстрирует не только размер платы, но и чиповость решения ;)
  • 0
    Интересное решение, но… цена и ассортимент конечного оборудования как-то не радуют…
  • 0
    Виталь, отлично! Так держать!
    • 0
      Спасибо Юр! Как ваши роботы? Давай их сюда!

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.