Программист
0,0
рейтинг
11 августа 2014 в 22:43

Разработка → OpenHAB — стань программистом собственного жилища из песочницы

image
Дом — это машина для жилья
Ле Корбюзье

В этом посте я расскажу об opensource проекте домашней автоматизации openHAB.
openHAB переводится как "Open Home Automation Bus". Это значит, что он нацелен на создание универсальной платформы для объединения всей домашней «умной» техники в единую систему управления.

Что же это дает на практике? Под катом я расскажу о том, как с помощью этого решения можно создать настоящий интернет вещей в своем доме.



Что такое «единая платформа домашней автоматизации»?


Направление умных домов развивается уже давно. За это время появилось множество различных поставщиков «умного» оборудования (освещение, RGB подсветки, термостаты, приводы для штор/жалюзи, разнообразные датчики и т.п.) Все они работают на разных протоколах (проводных и беспроводных).
В результате, пользователь, желающий автоматизировать свое жилище, должен выбирать между продуктами от различных производителей. В конечном итоге ему приходится пользоваться разными системами (пульты, приложения) для контроля разных устройств. Вдобавок, задача создания полноценного интернета вещей (когда устройства могут быть связаны в единую цепь и управляться все вместе в результате каких-либо условий и событий) становится очень сложной.

Простейший пример
Например, я хочу, чтобы при включении верхнего света в комнате, когда за окном уже темно, шторы автоматически закрывались. И наоборот — при открытии штор (когда они уже наполовину открыты) выключался верхний свет и включалась подсветка.
При условии, что привод штор — это ZWave, верхний свет — KNX, а подсветка — несколько цветных лампочек Phillips Hue, надо как-то научить их «разговаривать» между собой. Не забывайте также про условие относительно темного времени суток…


Чем поможет openHAB

openHAB реализует единую шину, т.е. позволяет объединить все устройства с разными протоколами в единую сеть, абстрагируя пользователя от каждого конкретного протокола. Таким образом, можно пользоваться единственным средством управления (скажем, приложением на смартфоне) и реализовать сколь угодно сложную логику взаимосвязи между устройствами.

Что отличает проект openHAB от аналогов?


Во-первых, он развивается уже довольно давно и уже сейчас готов к полноценному использованию. По своему личному опыту (впервые я начал работать с этой системой около года назад) могу сказать, что его освоение занимает совсем немного времени. И после этого он работает действительно так, как заявлено в описании.
Сейчас разработчики трудятся уже над вторым поколением платформы, основанной на специализированном фреймворке Eclipse SmartHome.

Во-вторых, это проект с открытым исходным кодом. А это значит, что весь код создается программистами со всего мира, которые заинтересованы в теме интернета вещей и создания единой системы умного дома. Этот код доступен в репозитории GitHub.

В-третьих, в результате открытости уже сейчас openHAB поддерживает около 50 (пятидесяти!) различных протоколов «умных» устройств. Среди них ZWave, KNX, EnOcean, системы мультимедиа типа Sonos, кинотеатр XBMC, Samsung SmartTV и многие-многие другие. Это, в свою очередь, дает возможность пользователю выбирать устройства для своего дома по самым разнообразным параметрам, практически не ограничиваясь возможностями всей платформы.

Как это работает?


openHAB — это специальный сервер, который может работать на любом компьютере под управлением любой ОС (вы даже можете использовать RaspberryPi). Вся установка заключается в распаковывании дистрибутива сервера и установке Java машины. Далее начинается процесс настройки и созидания.

openHAB — это очень гибкий конструктор. Основанный на технологии OSGi, он позволяет конфигурировать каждый отдельный плагин (Binding) «налету», не перезагружая весь сервер.

image
Плагин (биндинг) в openHAB — это то самое связующее звено между конкретным протоколом устройства и единой системой openHAB. Пользователь может добавить в свою инсталяцию openHAB только те плагины, которые нужны именно ему. Например, если у вас есть только ZWave и Phillips Hue, то вам понадобятся только два биндинга.
После настройки связи между каждым устройством и соответствующим биндингом система сможет общаться с ним посредством простых команд, абстрагированных от конкретного протокола. Скажем, для включения/выключения есть команды ON/OFF, для открытия/закрытия UP/DOWN и т.д.
В дальнейшем, используя только такие абстрактные команды, можно будет создавать очень сложные сценарии и, что называется, программировать собственный дом.

Настройка item-ов и binding-ов


Каждое «умное» устройство в доме должно быть сконфигурировано в openHAB как один или несколько item-ов. Они описываются в специальном файле в директории configuration/items. Вот пример одного такого item-а

Dimmer Light_GF_Living_Table "Table" (GF_Living, Lights)

Здесь описан один item с именем Light_GF_Living_Table и типом Dimmer. Т.е. это некое устройство, которое может быть диммировано (включено, выключено или изменить свое значение в диапазоне от 0 до 100). Как правило, диммерами являются различные световые приборы, но также это может быть диммируемая розетка, или что-либо еще.

Важно понимать, что item в конфигурации не обязан быть отдельным устройством. Скажем, я мог бы сконфигурировать диммер для управления только одной функцией какого-либо более сложного устройства, например, громкости домашнего кинотеатра или мощностью работы конвекторов. Вот пример использования диммера для управления громкостью:

Dimmer Volume "Volume [%.1f %%]"

Как видите, openHAB дает возможность использовать разные item-ы как элементы управления для всего, что подходит под какие-либо критерии (в данном случае, что-то должно уметь включаться, выключаться и принимать значение от 0 до 100).

Имя item-а дает возможность привязывать к нему элементы UI в конфигурации пользовательского интерфейса (sitemap) и обращаться к нему в коде ваших скриптов и правил (об этом чуть дальше).
В общем случае, синтаксис описания item-а таков

itemtype itemname ["labeltext"] [] [(group1, group2, ...)] [{bindingconfig}]

Как видите, сперва идет тип (Switch, Dimmer, Color, String, Number, Rollershutter, DateTime, Contact, Group), затем уникальное в рамках файла имя, опциональные label (то, что будет отображено в UI), иконка (из набора openHAB), одна или несколько групп (для объединения устройств по смыслу или расположению) и собственно конфигурация самого биндинга - в фигурных скобках;

Demo конфигурация
На сайте openHAB можно скачать demo конфигурацию, в которой можно увидеть, как описываются группы, item-ы и все остальное на примере довольно интересного варианта умного дома с использованием как простых устройств (выключателей, светильников), так и мультимедии.

Подробное описание каждого типа и список возможных команд представлен на странице Explanation-of-Items

Binding - или как связать item с устройством


Биндинг связывает item с каким-то конкретным устройством (или его функцией). Это нужно для того, чтобы openHAB преобразовывал абстрактные команды типа On/Off в конкретные сообщения нужного протокола, а также правильно интерпретировал сообщения от устройства. Вот пример KNX биндинга для простого переключателя:

Switch Light_GF_Living_Table "Table" (GF_Living, Lights) { knx="1/0/15+0/0/15" }


У каждого биндинга свой синтаксис конфигурации. В openHAB это одна строчка в фигурных скобках, в которой необходимо указать все что нужно для связи с устройством по конкретному протоколу. Здесь указан протокол KNX и его конфигурация в виде двух адресов - 1/0/15 для управления и 0/0/15 для получения статуса от устройства.

Какие биндинги уже есть
Как я уже сказал ранее, openHAB уже сейчас содержит в своем репозитории около 50-ти биндингов для самых разнообразных устройств и систем. Любой программист может реализовать свой собственных биндинг для какого-то устройства, для которого еще нет биндинга. Весь список можно найти на странице Bindings
Среди вполне конкретных плагинов есть и абстрактные, как например Bluetooth биндинг, позволяющий управлять любым bluetooth устройством.


Также не забывайте, что у каждого биндинга есть набор глобальных настроек, которые нужно указать в файле configuratnios/openhab.cfg. Например, для KNX - это IP адрес knx шлюза, который связывает knx-шину с IP сетью.

Пользовательский интерфейс


Здесь openHAB предлагает довольно интересный способ построения UI "на лету" с помощью файлов описания sitemap. В директории configuratnios/sitemaps лежат файлы, в которых нужно описать то, как должен выглядеть пользовательский интерфейс (а точнее, его layout) для управления теми устройствами, которые мы описали в items. Вот простейший пример

sitemap demo label="Main Menu"
{
Frame label="Percent-based Widgets" {
  Slider item=DimmedLight switchSupport
  Colorpicker item=RGBLight icon="slider"
  Switch item=DemoShutter
  Slider item=DemoBlinds
 }
}


Здесь UI состоит только из одного "фрейма" (не путать с фреймами в терминах HTML), в котором есть 4 элемента (два слайдера для управления диммерами, выбор цвета для подсветки, простой переключатель). Список всех возможных элементов интеофейса можно найти на странице Sitemaps.

Почему UI нужно описывать именно так? Почему бы просто не использовать тот же HTML?
Дело в том, что sitemap - это абстрактное описание того, как должен выглядеть интерфейс. Любая программа (например, для смартфона) или javascript клиент в браузере может отрендерить интерфейс по такому описанию по-своему. Таким образом, openHAB абстрагирует описание интерфейса от конкретной реализации.
К слову, кроме веб-интерфейса openHAB предоставляет клиентов под Android и iOS (не учитывая того, что любой программист может написать своего собственного клиента под любую платформу). И что также важно - любое изменение sitemap приводит к измнению UI на клиенте без перезагрузки сервера.

image

Как клиент взаимодействует с openHAB
С помощью REST API. openHAB сервер предоставляет такой API не только для посылки команд каждому item-у, но и для получения клиентом данных от устройств в режиме реального времени. Этот же REST API предоставляет информацию о sitemap для рендеринга UI.


Программируем "умный дом"


И вот наконец мы подобрались к самой интересной части - программированию поведения умного дома!
Все что было кратко описано до этого позволяет настроить связь item-ов с биндингами и правильно отобразить элементы управления в UI. Но openHAB еще предоставляет очень мощный инструмент программирования логики - скрипты и правила. С помощью них можно описать действительно умное поведение устройств в зависимости от разных условий.

Скрипты и правила описываются в файлах директорий scripts и rules соответсвенно на языке Xtend, разработанном Eclipse.
Если скрипт - это кусок кода, который может быть запущен в какой-то момент, то правила - это основной механизм автоматизации. На нем и остановимся подробнее.

И сразу пример простого правила:

/**
 * This rules controls the volume on the local host
 */
rule "Volume control"
	when
		Item Volume received command
	then
		if(receivedCommand instanceof PercentType) {
			setMasterVolume(receivedCommand as PercentType)
		} else {
			if(receivedCommand==INCREASE) increaseMasterVolume(20)
			if(receivedCommand==DECREASE) decreaseMasterVolume(20)	
		}
		postUpdate(Volume, masterVolume * 100)
end


При поступлении команд increase/decrease с диммера Volume срабатывает простое правило Volume control, которое увеличивает или уменьшает громкость системы, на которой работает opеnHAB сервер.
Вот еще один пример:

/**
 * The following rules help initializing the demo items with some helpful states.
 */
rule "Initialize light states"
	when
		System started
	then
		Lights?.members.forEach(light|
			postUpdate(light, if(Math::random > 0.7) ON else OFF)
		)
end


Здесь при включении системы каждое устройство в группе Lights включается в 30 процентах случаев.

Более жизненный пример
Однажды у меня была проблема в том, как управлять KNX подсветкой RGB. Мне нужно было преобразовать данные от единственного элемента UI Colorpicker в 3 сообщения (каждое для своего порта в RGB подсветке).

Конфигурация item-ов
Dimmer LedR     "LED Red"     <dimmer>        { knx = "11/0/0+11/0/1,   11/0/2,  11/0/3+11/0/4" }
Dimmer LedG     "LED Green" <dimmer>        { knx = "11/0/5+11/0/6,   11/0/7,  11/0/8+11/0/9" }
Dimmer LedB     "LED Blue"     <dimmer>       { knx = "11/0/10+11/0/11, 11/0/12, 11/0/13+11/0/14" }
Color  RGB      "RGB Light"        <slider>

При этом в sitemap отображается только один элемент Colorpicker
{
 Frame label="RGB" {
  Colorpicker item=RGB
 }
}

В итоге правило, преобразующее данные от Colorpicker в команды на каждый из диммеров выглядит вот так
var HSBType hsbValue
var String  redValue
var String  greenValue
var String  blueValue

rule "Set RGB value"
when
        Item RGB changed
then
        hsbValue = RGB.state as HSBType

        redValue   = hsbValue.red.intValue.toString
        greenValue = hsbValue.green.intValue.toString
        blueValue  = hsbValue.blue.intValue.toString

        sendCommand( LedR, redValue )
        sendCommand( LedG, greenValue )
        sendCommand( LedB, blueValue )
end


Как видите, правила - это не только инструмент автоматизации, но и способ обойти некоторые ограничения или реализовать особенности конкретного устройства.


Да, изменение в исходнике правила также приведет к его автоматической перезагрузке без перезапуска. Подробности о возможностях правил и скриптов, а также множество примеров можно найти на странице Rules

Триггеры

Каждое правило начинает выполняться только при срабатывании одного из триггеров, описанного между when и then. Триггер - это некоторое событие:
  • поступление команды от item-а (например, при включении Switch через UI)
  • изменение состояния item-а (например, в момент открытия штор от привода последовательно приходят значения от 0 до 100)
  • изменение текущего времени на сервере openHAB (например, Time is midnight)
  • старт или остановка сервера opnaHAB

Как видите, типов триггеров вполне достаточно, чтобы реализовать любую логику автоматизации, основанную на различных событиях.
В теле правила к любому item-у или группе можно обращаться непосредственно по его уникальному имени, указанному вами в настройках. Таким образом, любое правило может связать любые устройства, сконфигурированные в системе, воедино так, чтобы реализовать нужное поведение.

IDE для написания правил и скриптов
openHAB также предоставляет IDE для того, чтобы можно было легче писать скрипты. IDE называется openHAB Designer и распространяется для кажой отдельной ОС.
В итоге вы получаете средство автокомплита и подсветки синтаксиса, что несколько упрощает написание кода на Xtend. Часто пользователи воспринимают название Designer как некое средство визуализации. Это не так - никакой визуализации там нет :)


Освоить Xtend в рамках описания логики умного дома несложно. Главное понимать цель, которую хочется достичь в результате работы правила или скрипта и возможности самих устройств.

В итоге


openHAB дает действительно интересную возможность своими силами запрограммировать "умный дом", не ограничивая себя в выборе устройств и тех протоколов, на которых они работают.
Здесь я постарался очень кратко рассказать о самом основном, что несет нам весь проект. По моему личному опыту могу сказать, что автоматизация с openHAB, конечно же, не лишена недостатков, но все же превращается в очень увлекательное занятие.

Если у вас возникнут вопросы или пожелания по теме следующей статьи, с удовольствием готов более полно раскрыть какую-либо сторону использования openHAB.
Дмитрий Че @morfeusys
карма
57,0
рейтинг 0,0
Программист
Реклама помогает поддерживать и развивать наши сервисы

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

Самое читаемое Разработка

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

  • +9
    Начинается неделя умного дома на хабре? Очень интересно!
  • 0
    Любопытно, попробуем. Если сложится, можно будет добавить поддержку noolite устройств :)
    • 0
      для какого устройства? у меня есть небольшой опыт подключения RF устройств к openHAB, могу поделиться
      • 0
        Тут недавно была пара статей на тему реверс-инжиниринга их протокола, так что выключатель+датчик температуры/влажности можно было бы попробовать сделать.
        Я вот планирую пока что установить и посмотреть, что за зверь такой, а потом можно скоординировать усилия :)
        • 0
          т.е. свой приемник (arduino/raspberry pi)? не тот который noolite предоставляет?
          в таком случае, думаю, нет необходимости делать привязку именно к openhab
          лучше сделать общение по стандартному протоколу (serial/mqtt), а openhab уже умеет с ними работать
          • 0
            Мм, то есть я делаю некоторый адаптер, который транслирует протокол noolite в mqtt и все после этого будет работать автоматически? Не могли бы вы рассказать подробнее?
            • +1
              для mqtt смотрите документацию на github.com/openhab/openhab/wiki/MQTT-Binding
              например адаптер посылает температуру по топику "/noolite/bedroom/temperature", а в openHAB описываете элемент как
              Number temperature {mqtt="<[mybroker:/noolite/bedroom/temperature:state:default]"}
            • +1
              Вообще, конечно, самый правильный способ прицепить к openHAB какую либо новую систему, это написать под неё binding. Если есть опыт Java это не составляет особого труда. В проекте есть maven archetype для стандартного binding который автоматом генерирует всю необходимую обёртку и дальше остаётся только реализовать новый протокол и прицепить его к стандартным компонентам openHAB. Если будет интересно я могу более подробно рассказать как binding стыкуются с системой, там реально ничего сложного нет. В Z-Wave например, который я начинал писать в своё время, 99% дела был сам Z-Wave, который пришлось частично реверс инженерить. Так что если есть понимание протокола этого noolight то всё делается очень легко.
            • +1
              Насколько я понял из их сайта и документации, получается нужно два адаптера в компьютер втыкать — один для передачи команд, второй для их приёма. Протокол там тривиальный. Можно посмотреть как работает Z-Wave, Zigbee binding в openHAB, с помощью библиотеки RXTX, и реализовать это в своём binding.
              • 0
                Это правда. Но вот у этих ребят передатчик есть (утверждается, что это обычный 433 МГц). Такой образец я себе и взял, думаю, что попробую завести систему на нем и написать binding.
                • 0
                  Есть подозрение что в этой машинке слишком памяти для запуска таких систем. По этой причине заказал себе Cubieboard (еще жду)
                • 0
                  Подскажите, у Вас что-то получилось? Может какая ссылочка «почитать» есть?
  • +1
    На самом деле OpenHAB — это единственное качественное и практически законченное решение для DIY-умного дома.

    Я в конце-концов от него отказался только потому, что все мои задачи (специфичные) функционал OpenHAB не покрывает, но для подавляющего числа пользователей это будет отличное решение.
    Ещё хотелось бы UI полностью свой сделать, но у меня что-то не получилось.

    P.S. Для ковыряния конфигов лично мне Eclipse не понравился, я использовал обычные редакторы.
    P.P.S При установке на Debian Linux (на других не проверял) есть косяк: для OpenHAB нужно ставить не «Open Java» (openjdk), а «Oracle Java». Как я понимаю, косяк идёт от модуля работы TTS («говорящий умный дом»). Сейчас у меня под рукой моих записей нет, потому copy-paste текст для корректной установки не подскажу. Суть такая: удаляете Open Java и ставите самую последнюю версию от Oracle.
    • 0
      Да, я Eclipse и не предлагаю в качестве IDE. Их дизайнер мне тоже пока не нравится. Да и с Xtend в качестве скриптового решения можно поспорить. Но свои задачи решает.
      На самом деле уже как полгода назад я написал свой биндинг для интерпретации Groovy и Javascript вместо Xtend — может скоро опубликую.
    • 0
      А какие требования по железу у этой штуки? На такую штуку можно было бы попробовать поставить: habrahabr.ru/company/contactless/blog/197522/?
      • 0
        Собственно вся инфа здесь — Hardware-FAQ
        Как я и указал в статье — можно поставить на Raspberry Pi без проблем — JVM 6 на ней бежит отлично
    • +1
      А не подскажете, для чего вам не хватило системы?
      • 0
        У меня есть самописные программные решения, ввод/вывод данных из которых делается через web и отображается на морде моего умного дома. Связать всё это с OpenHAB у меня не получилось.
        Так же я не смог связать OpenHAB c Google Calendar, чтобы отслеживать события и праздники.

        Всё остальное, что смог сделать OpenHAB в моем умном доме, мне проще реализовать самостоятельно.
        • 0
          Так сейчас вроде как openHAB работает с календарем Google нормально…
          Относительно решаемых вами задач — хотелось бы подробностей. В смысле как ваши задачи соотносятся с задачей создания «интернета вещей», когда требуется полная автоматизация в зависимости от различных внешних факторов плюс в условиях различных протоколов.
          А не просто управление через веб-морду. Потому как в последнем случае можно вообще поставить себе Vera и не париться.
          • 0
            Если честно, я видел только управление OpenHAB`ом через Google Calendar, но возможно уже что-то обновилось/добавилось.

            Если оценивать OpenHAB как центр домашнего «интернета вещей», то он со своей задачей справляется, я это не оспариваю.

            Просто я придерживаюсь такой концепции «умного дома»: Единое программно-аппаратное ядро для всей системы «Умный дом». Vera в эту концепцию не вписывается, т.к. по существу является контроллером. Я не размазывают весь функционал по разным устройствам/сервисам, а концентрирую в одном.

            В OpenHAB я не смог реализовать, например, личный дневник наблюдений за аквариумными рыбками, потому что его UI рассчитана на то, что юзер ткнёт в батон и увидит результат этого нажатия, а не начнёт вбивать текст в textarea.
            • 0
              Хм… UI в openHAB по-моему вообще ни для чего не рассчитана особо )) Он рассчитан именно на то, что указано в sitemap.
              Вы кстати не смотрели в demo? Там в UI есть отображение статистики температуры воздуха, которую openHAB собирает с yahoo сервиса. Вроде похожая задача. И там в UI все данные отображаются нормально. Но там тоже нет никаких textarea.
              • 0
                Абсолютно так. UI openHAB расчитан на то чтобы отражать абсолютно идентично то, что написано в sitemap на разных платформах. Поэтому он такой жёсткий, с одной стороны, зато предсказуемые результаты на разных платформах — Android, iOS, WM, Web.
                • 0
                  Предсказуемые, потому что sitemap по сути — разметка, которую можно рендерить как хочется
                  • 0
                    Ну в принципе да. Но HTML знаете ли тоже разметка. Мы просто стараемся блюсти consistency пользовательского опыта на разных платформах. Смотришь в iOS, смотришь в Android, всё соответствует целевым дизайнам этих платформ, но при этом у человека не возникает ощущения что это два разных приложения. У многих например в доме есть устройства разных производителей — у человека Android, у жены iPhone, а сайтмап рисуется один раз. Ну и потом многие секции sitemap ведь могут генерироваться автоматически из групп, иначе офигеешь всё вручную отрисовывать. Мне например решения где надо сидеть и часами расставлять на экранах выключатели и т.п. не нравятся.
  • +1
    Можно голос прикрутить (как пример Ассистент Дуся) и мы в будущем!
    • 0
      Голос там работает по-умолчанию, не нужно ничего прикручивать
      • 0
        Голос не в openHAB, а в виде отдельного сервиса TTS на машине, где крутится openHAB. Он в свою очередь предоставляет возможность вызова сервиса TTS с конкретной строкой для зачитывания. По сути можно поставить какой-угодно TTS с любыми голосами.
        • 0
          Ну да. Там всё реализовано в виде модулей, но TTS и ещё ряд других (не помню каких) уже включены.
          Если установить OpenHAB с demo.sitemap и запустить, то сервер голосом Вас поприветствует и будет считать (и озвучивать) минуты, прошедшие с запуска системы.
          • 0
            Это только при условии, что в вашей ОС уже есть TTS сервис (например в MacOS уже работает TTS с русским голосом Милена)
            • 0
              На самом деле, если у вашего TTS есть CLI или HTTP интерфейс, ничто не мешает прицепить его через command или http binding. Вот просто совсем ничего не мешает. У меня например TTS на 8 зон вещает через сетевые плееры Sonos Connect Amp. В sonos binding есть команда playUrl. Я беру Url API из Google Translate который на туче языков умеет говорить, с нужным текстом, и скармливаю его Sonos'ам. И они у меня разговаривают. Можно элементарно то же самое на mpd сделать — есть mpd binding, там тоже можно дать команду проигрывать любой URL, и любой компьютер с mpd заговорит.
    • 0
      Да, Ассистент Дуся могла бы управлять openHAB без проблем кстати
      • 0
        С Дусей не знаком, наверное могла бы. Есть примеры массы немецких товарищей, которые всякие автоматоры на Android интегрируют с нашим приложением через intent.
        • 0
          Дуся — это вот такая вот штука которая умеет управляться с девайсами еще и вот так
          Думаю прикрутить ее к openHAB
          • 0
            Тут есть 2 пути. Путь первый — напрямую через REST. Путь второй — посылать intent'ы android приложению openHAB.
            • 0
              Нет, там конечно будет путь через rest (кстати зачем там этот жуткий atmosphere я так и не понял). Проблема только в том, как идентифицировать устройства, но на первом этапе я просто воспользуюсь лейблами для item-ов и групп. Это в ояень примитивном варианте. Гораздо более продвинутое решение должно включать в себя кое-какие вещи на стороне сервера.
  • –4
    Перестал читать после слов Java-машина.
    • 0
      У Вас когда-нибудь был мобильный телефон типа Nokia 3310? Там Java-машина работала нормально. А какой проц и память были на том телефоне?
      • 0
        Начнем с того, что Java машина на мобильном устройстве и на сервере — это штуки совсем разные… На том и закончим ))
        • 0
          Закончим, пожалуй, на том, что OpenHAB строится по модульной структуре OSGI, а OSGI изначально и разрабатывался для встраиваемых систем, в т.ч. и для систем «Умный дом».

          Пример:
          www.prosyst.com/fileadmin/ProSyst_Uploads/pdf_dateien/World__s_smallest_OSGi_solution_-_Technical_Paper.pdf
          OSGI контейнер развернут и эффективно работает на железке с CPU ARM9, работающем на частоте 156 MHz и доступными 8 MB ОЗУ для приложений (включая сам контейнер OSGI). Общий объем ОЗУ — 32 MB. Запускается всё за 3-4 секунды.
          • 0
            Да, именно поэтому Eclipse, как разработчик одной из самых популярных реалихаций OSGi, сейчас и занимается проектом SmartHome, самым успешным контрибутором которого и является openHAB.
  • +1
    1-wire почти не поддерживается, жаль.
    • +1
      Вот тут автор вроде подружил 1-wire с OpenHAB: vermus.blogspot.ru/2014/01/openhab.html
      • +1
        Там используется тот биндинг, что идет в комплекте, он умеет только читать датчики температуры. У меня просто дисплей на ds2408 + hd44780, его owfs вполне себе поддерживает, а в OpenHAB 1-wire только для чтения.
        • 0
          Вообще система выглядит законченной и полноценной, надо будет поискать, как с наименьшими затратами денег и времени перевести дисплеи на какой-нибудь другой протокол (сам по себе 1-wire мне все равно не нравится).
          • 0
            Ну можно например на простой serial перевести — в openHAB есть Serial binding, который позволяет общаться в принципе с чем угодно.
        • 0
          Можно использовать HTTP Binding и owhttpd. Кажется, проблема решена. Надо будет как-нибудь попробовать.
  • 0
    openHAB отличный развитый проект — некоторые идеи и из него в том числе перекочевали в MajorDoMo, но, конечно, последнему ещё довольно далеко до первого в таких вещах, как широта набора поддерживаемого оборудования и активности сообщества. Будем работать над этим, я за разнообразие вариантов :)
    • 0
      Конкуренция это всегда хорошо! Она бодрит! :-)
  • +2
    Отличная статья, спасибо за обзор трудов наших!
    Позволю себе ряд комментариев.
    Во первых в openHAB поддерживается уже больше 90 различных протоколов :-)
    Во вторых про Eclipse SmarHome и openHAB — ESH это по сути ядро openHAB, которое начиная с версии 2.0 мы вынесли в отдельный проект. Сделано это было для того, чтобы во первых сделать правила добавления кода в ядро более жесткими и повысить его стабильность, во вторых, чтобы защитить его от возможных проблем с © — в этом нам помогает Eclipse Foundation, в третьих для того, чтобы этим ядром могли пользоваться другие проекты. А openHAB 2.0 перебазировали на ядро ESH.
    В третьих — любой пессимизм на тему использования Java в embedded системах это напрасный трёп. Если не пользоваться open source JVM'ами а использовать специально предназначенные для этого решения, в том числе такие как ProSyst, то никаких проблем нет. Oracle JVM отлично работает на Raspberry PI и на нём бегает openHAB у не одной сотни пользователей.
    В четвертых — любой пессимизм на тему использования Java в IoT, SmartHome и тому подобных решениях это тоже пустой трёп людей, как правило никогда этого не делавших. Она ничуть не хуже для этого черм Python, Node.js и тонна других платформ.
    Ну и еще попромоучу немножно бесплатный сервис который работает сейчас в тестовом режиме для openHAB — my.openhab.org/ — позволяет подключаться через Интернет удалённо к своей системе без пробивания дырок в домашнем рутере/fw и поддерживает push notifications для наших Android и iOS приложений.

    С уважением,
    Виктор Белов
    openHAB UG
    • 0
      Отличный коммент, спасибо!
      Заодно, раз уж вы здесь, скажите, почему Xtend? Только потому что Eclipse? Мы одно время на своем проекте написали некислую обертку вокруг openHAB с тем, чтобы обойти проблемы с Xtend и переиспользованием скриптов и внедрили Groovy.
      • 0
        Ну видимо так исторически сложилось. Кай выбрал в своё время Xtend потому что посчитал что лучше ничего нет. Видимо, на тот момент, это так и было. Xtend ведь выбирался не только для правил, но и для работы со всем синтаксисом openHAB — items, sitemaps. У нас давно витают мысли что надо туда вообще какой нибудь JS прикрутить для правил :-) А какие проблемы с Xtend то у вас что вы такую нехилую работу проделали? :-) И что за проект, если не секрет?
        • 0
          JS — это то что надо. Мы его и прикрутили в итоге. Отфоркались от вашей репки и заделали.
          Проблем с Xtend сразу несколько — нет нормальной IDE, сам язык довольно непоследовательный, ну и сама реализация в openHAB не позволяет переиспользовать модули (например для тех же RGB подсветок в KNX — их у клиента было много). Поэтому мы за недельку вкорячили туда JS и Groovy.
          Проект был без преувеличения аццкий — с голосовым управлением и ИИ. Вот один из самых ранних прототипов Но тут использовался телефон, а в итоге мы сделали систему, которая вообще слушала хозяина без всякого девайса в руках.
          • 0
            Ну так и законтрибьютили бы свои доделки, чего втихую то сидеть? :-)
            • +1
              Да сорцы не мне принадлежали… Да и сейчас прикрутить JS движок нет проблем. Может мне вступить в ваши ряды? ))
              • 0
                Я думаю что не может, а нужет! В ESH/openHAB 2.0 там вообще еще новая концепция добавилась — items объединяются в things, будет поддержка нормального автодискавери с последующим конфигурированием новых устройств. Еще мы съели jmdns брошенный и пытаемся под себя cling подмять для upnp :-) Основная масса контрибьюторов сейчас вдарилась в написание bindings. Кай занят ESH и openHAB 2.0, Томас с трудом успевает обслуживать текущий код 1.5-1.6 и делать ревью. Есть несколько человек которые контрибьютят в новое ядро, потом сейчас еще habmin появился — веб-интерфейс для конфигурации самого openHAB. Так что хороших людей не хватает!
                • 0
                  Мой интерес лежал в прикручивании голосового управления в openHAB, это в принципе тренд сейчас, учитывая бум носимой техники (часы всякие и тд). Но вообще в ядро вписаться тоже было бы неплохо. Попробую.
                  Cling мы как раз использовали у себя в проекте именно в умном доме. Там есть некоторые заморочки с Android.
                  • 0
                    Ну тут ведь какая проблема. Нужно как то научиться встраивать контекст дома в голосового ассистента. Apple вот для себя решил это просто — идите все свои приложения и системы загоняйте в homekit, и тогда Siri будет понимать что вы хотите от своего дома :-) Я к тому что тут нужно не только на стороне дуси что то сделать, но и на стороне openHAB, чтобы экспортировать его контекст в дусю, и она понимала чего ты от неё хочешь.
                    • 0
                      Вы посмотрите мое видео о предыдущем проекте ;) там все это решено и хорошо продумано. Да, на стороне openHAB нужно будет кое-что сделать для полной интеграции.
    • 0
      Если oracle JVM – это то, что бесплатно качается с сайта оракла, то я никогда не видел, чтобы оно жрало меньше 100М памяти даже вхолостую.
      И всё же, почему именно жаба?
      • 0
        Я думаю основная причина, конечно, в том, что те кто начинал проект, писали на Java, вот и openHAB получился на Java :-) Хотя Java тут конечно скорее следствие OSGi. OSGi от стремления к модульности. Есть набор core бандлов, всё остальное — модульная архитектура. Надо — включил. Не надо — выключил. При этом надо не забывать что на момент начала этого проекта кроме Java/OSGi больше в общем то ничего и не было аналогичного наверное. Фиг знает, может быть если сейчас писалось бы, написалось бы например на nodejs. Тут ведь вопрос не в том на чём оно написано, а в том как оно написано, и что оно умеет делать. Написано оно очень хорошо, умеет делать оно очень многое и делает всё это очень хорошо. Значит задачу свою решает :-)
        • +1
          А, да, про Oracle — да, я имею ввиду бесплатную версию. Да какая разница сколько и чего она жрёт? Есть конкретное применение — берём Raspberry Pi, одну из самых слабеньких встроенных платформ и по процессору, и по памяти, на ней всё работает. Можно до бесконечности дискутировать о том, что что то будет жрать меньше. Можно взять и всё то же самое написать на C++ например. Оно точно будет жрать гораздо меньше. Задача то не в этом, а в том чтобы сделать модульную гибкую систему для IoT и умных домов — пожалуйста, всё модульное, нужно что то своё — взял и дописал. Многоплатформенную, чтобы можно было на разных системах запускать — пожалуйста, работает на Linux, Linux embedded, Windows, OS X. И так далее. Давайте зайдём с другой стороны — чем плохо Java? Чем плохо OSGi? :-)
          • 0
            Нет-нет, я не задавал вопрос о Java или не Java. Тут все понятно и все хорошо.
            Я про выбор Xtend в качестве решения для скриптов и правил. Мы для этого делали специальную обвязку.
            ПС Если бы все сделали на nodejs, то вход ИМХО был бы сложнее (в смысле что javascript в такого рода проекте превратился бы в монструозный и сложно поддерживаемый код).
      • 0
        Жрало? Ну не смешите. Есть настройки по памяти JVM — дадите ей 32мб, съест только 32
        А Java — потому что полностью кросплатформенное решение, язык очень популярный и стандарт не только на server-side, но и в embedded (тот же Android), куча разных JVM под разные платформы.
    • 0
      Главное, что исполнительные устройства не на Java, а с остальным можно смириться ради поддержки целостности системы и удобства интеграции.
      • 0
        А с чем, простите, вы собрались мириться?)) Главное что не на java? Посмотрите на тот же андроид — он весь на java и что?
  • –2
    Извините за ретроградство, но прежде, чем управлять «умным домом», надо ИМЕТЬ этот «умный дом»! :) Увы, кроме примера автора «занавески-лампочка» ничего умнее на ум не приходит (а-а-а!!! мой дом умнее меня!!). :)

    В теории, можно придумать сотню гиковских вариантов, вплоть до «зашёл в подъезд — автоматом отослалась SMSка 'Дорогая, почти дома!', а из компа выезжает CD-подставка с пивом». Но когда думаешь про стоимость, надёжность и сложность, всё желание пропадает.
    Мне кажется, вся эта тряхомудия с «умными вещами» — во-первых, надуманная индустрия для выкачивания денег, а во-вторых, как бы все ваши «умные» вещи не стали тупыми «стукачами-куда-надо» (примеров с АНБ и ФСБ достаточно).

    У меня самое «умное» в доме — фонарик+сенсор движения: когда выхожу в коридор, он сам зажигается и не надо рыскать/включать свет. Боюсь, что ничего круче этого мне не понадобится ещё лет 20. :) (при этом я люблю всякие гаджеты, имею три компа, смартфон и всего этого хватает за глаза)
    • –4
      Хабр — это такой притон ссыкунишек что ли? Не согласен — напиши почему, а как шакал минусятить и сидеть в кустах — да, это по-мужски! Чтоб твои «рога» были длинней всех твоих задротских минусов!
    • +2
      Всегда находились люди (и их было большинство), которые не видели смысла в телеграфе, телефоне, персональном компьютере, интернете, смартфоне… Перечислять можно очень долго. Это не хорошо и не плохо — просто это данность. Если «кроме примера автора ничего умнее на ум не приходит», то, нвверно, не следует принимать участие в обсуждении темы, в которой заинтересованы энтузиасты.
      • 0
        Почему вы затыкаете мне рот, если я имею мнение, отличное от ваших подростковых фантазий?

        Я не вижу смысла, например, в смартфоне — это уродливая пародия на ПК, позволяющая слишком мало для того пузыря, который вокруг них раздули. Я что, не имею право выразить своё мнение? Когда открывается тематический топик, это ровно то место, где можно и нужно выражать мнение по теме. Я — выразил, а дурачки набежали и наминусовали, причём даже без указания причины — обидели, сердешных… :))))) Ну, сами знаете, что на обиженных возят!
        • +1
          Вот к примеру я поставил вам за верхний коммент "+", так как такая точка зрения заслуживает внимания и имеет право на существование.
          Но тон, интонация и манеры ваших остальных комментариев оставляют негативное впечатление.
          Не в обиду будет сказано, думаю вам стоит «поработать над стилистикой» вашей речи.
          Для начала поменьше «якать» и ругать всех остальных без разбора.
          Один "-" это мнение лишь одного человека. И не факт что у него было время обосновать свое несогласие.
          Обругав за пару минусов всех, вы лишь вызываете еще большее раздражение.
          • 0
            Далеко не все люди заслуживают и понимают, что такое «деликатность». Особенно когда мнение откровенно тупое и автор вещает как-будто нашёл вселенскую истину — если с такими я буду расшаркиваться «не хотели бы вы пересмотреть своё мнение», мне не хватит и года, чтобы вести «вежливую переписку», в конце которой (на 50-ой странице) выяснится, что на той стороне — студент с 2 годами опыта и что свои суждения он высосал из пальца (чего мне не составит труда доказать). И потом, я никого не обзываю, а сразу указываю на конкретный недостаток в суждениях; то, что малолеткам трудно привыкнуть к тому, что ПОЧТИ ВСЕ ВЗРОСЛЫЕ умнее них — к счастью, не моя проблема.
            Затем, аргументы — пока что я вижу тупорылых минусяторов, которые тихонько пердят в карму — редко кто удосуживается нормально, _аргументированно_ ответить — уж поверьте, ни одного человека с аргументами я ещё не оскорбил! Берите все мои комменты, читайте на что я отвечал и посмотрите — почти все они содержат обоснование, почему я так думаю. Когда у меня будет достойная карма, уж поверьте — «анонимных минусов» у меня не будет.

            > Один "-" это мнение лишь одного человека. И не факт что у него было время обосновать свое несогласие.

            Нашёл время трындеть на хабре — найди и время для аргументов. Нет времени — СИДИ И НЕ ВЯКАЙ. Здесь не мальчики за пивом, поэтому за своё «фе» лучше отвечать. Тем более, что 100% тот, кто поставил минус, больше не удосужится придти обратно и объяснить с чем он не согласен — накой чёрт тогда торопиться ставить минус? Боится, что не успеет всем показать своё ужасно важное мнение?
            Трудно жить в мире взрослых, да?
            К слову, когда я был маленький и слушал «взрослые разговоры», я держал язык за зубами — мне почему-то хватало ума не выступать там, где люди априори умнее меня — я их слушал и пытался понимать — чего и местным советую. Очевидно, что «самым умным 18-леткам» бесполезно объяснять, что сейчас у них время слушать, а не спорить.

            > Обругав за пару минусов всех, вы лишь вызываете еще большее раздражение.

            Это их проблема, НОРМАЛЬНЫЙ человек, который всегда обосновывает своё несогласие, моим замечанием не задевается. Что тут такого, что анонимных минусяторов я назвал тем, чего они стоят?
            Между прочим, я уже предлагал вместе с минусом сделать обязательное обоснование(коммент) — чтобы избегать таких вот «бздунов из кустов» и чтобы само обоснование таким образом тоже выносилось на суд. Но увы, админы Хабра походу тоже недалеко от студенческой скамьи, «у них всё хорошо». Как вы оцениваете такое предлдожение? Поможет оно повысить интеллект бесед на Хабре?
            • 0
              Ваши мысли может и верны, но есть несколько простых правил культуры речи и речевого этикета.
              Из разряда «не материться в культурном обществе». Ваши комменты просто банально тяжело читать.
              Даже если оппоненты не правы, не стоит «по уровню» культуры падать ниже их.
              мнение откровенно тупое
              высосал из пальца
              малолеткам
              тупорылых минусяторов
              пердят в карму
              СИДИ И НЕ ВЯКАЙ
              18-леткам
              «бздунов из кустов»
              админы… недалеко от студенческой скамьи
              Пожалуйста, будьте культурны и доброжелательны и люди к вам потянутся!
              • +1
                Есть разница между обществом взрослых, интеллигентных людей в реальном мире, где можно и нужно себя держать в рамках, и есть разношёрстная сетевая публика, которая не то что «вежливо общаться», вообще не озабачивает себя вопросом «а должен ли я писать какие-то объяснения и приводить аргументы». Вы призываете к хорошим вещам (и я не против этого), но вы забываете о том, что «всему своё место». Заходить в пивную для шофёров и вежливо интересоваться «вино какой страны подают в это время суток» — это быть НЕУМЕСТНО ИЗЫСКАННЫМ. Хотите выглядеть глупо? Велкам, я предпочитаю общаться с людьми на понятном им языке (или языке, который лучше доходит до их незрелого мозжечка). Плюс, уж будьте лояльным — сделайте скидку на Сеть, где на «ты» обращаются даже к людям, которые потенциально могут быть старше раза в три. :)
                Я знаю, чего стóит большинство публики — это видно по их мышлению, так что не рвите душу, защищая тех, кто даже не понимает о чём речь — я вас понял, я буду стараться находить слова поделикатнее, спасибо.
    • +1
      Ну так если Вы напрячь немного мозг, то можно сделать так, чтобы не было никаких «стуков» в ФСБ, АНБ и т.п. Было бы желание.
      • 0
        А где гарантия, что в чипах не будет зашита бэкдорина, отзывающаяся на пароль «jamesbond007»? Потому и чипы все напрочь анально огорожены, что не положено публике знать что там внутри — потому и не можем мы, простые смертные, создать свой смартфон или проверить, что там «всё честно».
        • +2
          С таким отношением к технологиям Вам нужно сидеть в клетке Фарадея и питаться святым духом. Это самое безопасное: никто и ничто Вас не побеспокоит, а злые КГБшники Вас даже отравить не смогут.
          • 0
            В мире, где мрази сидят за зубцами и правят страной, другого отношения и быть не должно.
  • 0
    А как у этой штуки с резервированием? Можно ли поднять два сервера в горячем резерве? А то как-то не весело будет обнаружить, что центр умного дома в самый интересный момент перестал признаки жизни подавать.
    • 0
      Вы имеете в виду кластер? Во всяком случае можно своими силами watchdog любой поставить и поднимать сервер, как только первый остановился. Openhab поднимается за несколько секунд. Но на моей практике ни разу не падал даже под высокими нагрузками (под сотню устройств).
      • 0
        у меня вчера внезапно умерла sd, с которой raspberry грузилась. пришлось полдня потратить на переустановку всего с нуля.
        жалко, что погибли все логи по датчикам =( не подскажете, как лучше организовать бэкап для исключения такой ситуации в будущем?
        • +1
          у меня загрузочная SD-шка — содержит только загрузчик и монтируется ReadOnly, а сама система грузится дальше с HDD, подключенного через USB-SATA переходник. Бекапы делаю по крону раз в сутки на домашний NAS
  • 0
    К сожалению, я еще не встречал системы которая позволяла бы интегратору, гику «просто взять и использовать» эту самую систему. До сих пор нет нормального графического редактора интерфейса, я пишу об этом везде. Я хочу добавить прямоугольник «видео», вставить кнопку, прописать в ее свойствах скрипт, сделать свое собственное меню, сохранить, нажать RUN и увидеть результат в браузере или в телефоне… Да, может быть придется разрабатывать две версии, десктопную и мобильную.
    Чтобы я в графическом интерфейсе видел список тегов (айтемов), мог легко и быстро добавлять новые…
    Почему до сих пор не взяли какую-нибудь промышленную SCADA и не сделали такую же для умного дома?
    • 0
      Для многих итеграторов (с которыми я работал) вообще не нужен какой-то графический редактор интерфейса. В openhab есть sitemap — за глаза хватает. Гик разберется очень быстро. Есть какая-то хрень вроде iridium. Но по мне так он как ра таки наоброт непонятен. Но попробуйте.
      • 0
        Скажу по-честному, Опенхаб я «в живую» не применял (только опыты), но почему-то все равно кажется, что sitemap, как законечнное, не поддающееся кастомайзингу для HMI решение — это минус.
        Iridium — вот это хороший HMI. Если бы такая штука была бы в OpenHab — это было бы мегакруто.
        • 0
          Iridium — это долго, сложно и в итоге — выглядит страшно (имхо). А подход с sitemap в openhab — это гораздо проще, быстрее и дешевле.
          Если вы вживую не применяли openhab, то как вы можете строить предположения о том, что поддается кастомайзингу, а что нет? Sitemap — это всего лишь layout. Кастомайзинг там наоборот проще гораздо.
          • 0
            Я имею ввиду «вживую» — т.е. не применял на других людях, только на себе.
            • 0
              Понятно. Ну попробуйте применить. Мы сами долго работали над вопросом платформы. Только openhab сегодня дает полную свободу программисту для реализации сложных вещей, а не только для создания ui под ipad.
        • 0
          Ну это получается что то вроде «дайте мне бесплатный Iridium» :-)
          • 0
            OpenHab жи есть бесплатный, почему не может быть иридиума?)
            Иридиум, кстати, не веб. Это его один из минусов. Но и сервер может быть не нужен для него — это плюс.
            • 0
              Наверное, Iridium не бесплатен потому, что надо платить зарплату разработчикам, менеджерам, техподдержке и т.д., для которых работа в Iridium это основное место работы.
              OpenHub — это, на сколько я понимаю, разработка «в свободное от основной работы время» большим числом людей.
              И поддержка такого же типа. Случилась проблема — напишем в сообщество, может кто-то ответит.
              • 0
                Ну я спорить не буду, но сообщество в openHAB очень оперативно отвечает почти на все вопросы. Это, безусловно, решение не для домохозяйки, но мы такой задачи перед собой и не ставили. Я и не говорю что Иридиум должен быть бесплатным. Я скорее объясняю почему openHAB это не Иридиум. Все фичи openHAB драйвятся его пользователями. Когда кому то чего то не хватает — он просто это дописывает, ну или по крайней мере делает какой то изначальный вброс кода, который потом дорабатывает сообщество. Примерно раз в год кто нибудь говорит «а вот был бы полностью кастомизируемый интерфейс», но видимо пока никому он не нужен был настолько, чтобы его дописать :-)
    • 0
      Опять же, Habmin как графическая среда.
      Там можно через web-интерфейс простым перетягиванием накидать компоненты, а потом прописать рулесы и прочее.
      • 0
        спасибо
      • 0
        оо, спасибо!
  • 0
    Кстати, openHAB номинировали на лучший open source проект в премии IoT, голосуйте за openHAB! :-)
    postscapes.com/internet-of-things-award/2014/iot-open-source-project

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