Производитель оборудования Z-Wave
40,36
рейтинг
31 марта 2013 в 03:40

RaZberry — умный дом на базе Z-Wave и Raspberry Pi tutorial

Raspberri Pi with RaZberry extention boardМногие пытаются собрать «Умный дом» своими руками. При выборе системы стоит учитывать не только ассортимент и стоимость конечных устройств, но и возможности контроллера. Большинство контроллеров сразу готовы к работе «из коробки», но представляют ограниченные возможности. Однако нередко именно гибкость и возможность лёгкой интеграции является основополагающим критерием при выборе.

И вот, появился долгожданный «кубик Lego» для систем автоматизации на базе технологии Z-Wave, который обладает желаемой гибкостью и в то же время большим функционалом и низкой ценой.

Плата расширения RaZberry для Raspberry Pi, превращает самый популярный и дешёвый мини-компьютер в Z-Wave контроллер домашней автоматизации.



RaZberry — это решение три в одном:
  • плата с трансивером Z-Wave ZM3102
  • прошивка для ZM3102, расширяющая возможности стандартных прошивок для стиков
  • ПО Z-Way

RaZberry
Железо

В ОС Linux RaZberry виден как com-порт /dev/ttyAMA0. Плата по сути состоит из трансивера ZM3102, памяти EEPROM для хранения данных сети Z-Wave, PCBA антенны и коннектора ножек UART для GPIO Raspberry Pi. Реально используются только ножки Vcc, Gnd, TX и RX. Остальные ножки не используются для работы платы и лишь помогают её крепче зафиксировать. В теории эти ножки можно использовать для других нужд.

Прошивка

Плата предоставляет интерфейс полностью совместимый с Sigma Designs Serial API, что даёт возможность использовать не только прилагаемое ПО Z-Way, но и любое другое ПО для Z-Wave (Open Z-Wave, LinuxMCE, FHEM или самописное), а также облачный сервис Z-Cloud (см. инструкцию). Плата также предоставляет расширение протокола Sigma Designs Serial API от Z-Wave.Me, которое необходимо для работы ПО Z-Way.

Прошивка также позволяет обновлять себя по UART, что позволит не только исправить возможные баги в будущем, но и сменить версию прошивки с той, что установлена по умолчанию (SDK 4.54.01) на более старую 5.03, не имеющую полезных функций NWI, Explorer Frame и Random HomeId, но включающую функционал SUC/SIS. (Для внимательных: да, я не ошибся, 4 > 5 ;)

Программное обеспечение

Z-Way устанавливается поверх Raspbian wheezy путём запуска команды
wget ‐q ­‐O ­‐ razberry.z-­wave.me/install | sudo bash

Скрипт установки поставит Z-Way в /opt/z-way-server, пропишет в /etc/init.d/Z-Way скрипт для запуска, добавит его в авто запуск и настроит порт ttyAMA0. После перезагрузки (для применения настроек ядра для ttyAMA0 — по умолчанию Raspbian использует UART для консоли) сервер готов к работе. В браузере откройте IP_OF_RASPBERRY:8083 и начните строить сеть Z-Wave.

Рассмотрим подробней поставляемое в комплекте с RaZberry ПО Z-Way. Оно состоит из нескольких частей:
  • библиотека libzway — основа движка Z-Wave, предоставляющая C API для простой работы с Z-Wave (зависит от pthreads, zlib, openssl)
  • библиотека libzwayjs — биндинг между C и JavaScript движком Google V8. Предоставляет простое JS API для работы с сетью Z-Wave (зависит от libv8 и libzway)
  • библиотека libzwayhttp — HTTP сервис для обслуживания внешних клиентов, в том числе пользовательские интерфейсы. Предоставляет JSON API (зависит от libmicrohttpd, openssl, libzwayjs и libzway)
  • main.cpp — обвязка для запуска всех сервисов вместе, чтения конфигов и параметров командной строки

Такая структура позволяет использовать разные уровни интеграции с составными частями Z-Way. Для проектов, где важна производительность, доступен API уровня C (в комплекте есть заголовочные .h файлы для libzway), для проектов, где нужна оперативная разработка, проще использовать JS API. Важно, что оба интерфейса имеют сходную структуру, что позволяет просто портировать код с JavaScript на C после быстрого прототипирования.

Далее я опишу API уровня JavaScript и покажу, как создавать простые правила автоматизации. Интерфейс уровня C останется за рамками данной статьи. Стоит заметить, что синтаксис в движке JavaScript Z-Way на стороне сервера сделан по аналогии с тем, что было реализовано для Z-Cloud на стороне клиента — см. описание API Z-Cloud. Для дальнейшего чтива предполагается, что читатель уже знаком с особенностями протокола Z-Wave (см. подробное описание протокола Z-Wave).

Всё относящееся к Z-Wave в пространстве имён JavaScript находится в глобальном объекте zway, который предоставляет полное дерево данных и методов над устройствами Z-Wave.

Дочерний объект controller, содержит данные специфические для контроллера Z-Wave, а также список устройств devices. Каждое устройство содержит структуру данных (data), а также список каналов устройства (instances). Каждый канал имеет список Классов Команд Z-Wave, поддерживаемых устройством. На Классе Команд имеются методы для вызова функций (Set, Get, ...), а также дерево данных (data), где хранится вся информация о Классе.

Графически это можно иллюстрировать примерно так (картинка из документации):



Структура API асинхронна и делится на две части:
  • отправка команд и запросов
  • получение событий изменения состояний

Отправка команд осуществляется запросами вида zway.devices[2].instances[0].commandClasses.Basic.Set(0) (этот пример выключит свет). Функция .Get() отправит запрос значения устройству. zway.devices[2].RequestNodeNeighbourUpdate() попросит устройство обновить соседей, а команда zway.AddNodeToNetwork(1) запустит процесс добавления нового устройства к сети. Более подробно все команды описаны в документации на странице документации проекта RaZberry. Каждому запросу можно добавить два дополнительных параметра: callback-функции для успешной и неудачной отправки.

Команды ставят в очередь на отправку соответствующие пакеты. Отправка осуществляется через Sigma Designs Serial API, реализованную на плате расширения RaZberry. Вся магия Z-Wave скрыта под этим уровнем абстракции: для устройств на батарейках эти пакеты помечаются как ожидающие пробуждения, для шифрования идёт предварительный обмен ключами, для экономии заряда батареек и времени в эфире некоторые пакеты стыкуются вместе и многое другое… Как и в любом протоколе, в Z-Wave много своих тараканов, которые все находятся под ковром API Z-Way и не вылезают оттуда.

Все полученные от устройств данные записываются в дерево data, относящееся к устройству или Классу Команд. Каждый элемент дерева data имеет атрибуты value (значение элемента), updateTime и invalidateTime (timestamp дат обновления и устаревания значения), name (имя). Структура дерева тоже подробно описана в документации. Для получения уведомлений об изменении значений дерева существует система подписок на события. Функция bind для каждого элемента дерева позволяет привязать callback функцию к изменению данных.

zway.devices[2].instances[0].commandClasses.Basic.data.level.bind(function (type[, arg]) {}, [arg, [watchChildren=false]]);

Опциональный аргумент arg, передаваемый bind будет передан в callback функцию и пригодится для передачи дополнительных параметров для разделения разных событий, имеющих общий callback-обработчик. Параметр watchChildren (true или false) позволяет отслеживать не только изменения данного элемента дерева, но и дочерних. Объект this в callback функции — это элемент дерева data, на котором запускается bind: this.value — значение, this.updateTime — дата последнего обовления и т.д. Аргумент type содержит битовую маску типа изменения (изменён, обновлён, удалён, устарел,… — подробно все значения описаны в ZDefsPublic.h, который входит в комплект ПО).

Аналогично есть функция bind на глобальном объекте zway, которая позволяет отслеживать изменения в массивах devices, instances и commandClasses:

zway.bind(function(type, nodeId, instanceId, commandClassId) {}, [mask = 0xffff])

Аргумент type указывает на характер изменения (добавлено/удалено устройство/канал/класс команд или сохранён файл с деревом данных на диск (ZDDX-файл). Триплет nodeId, instanceId, commandClassId указывает на изенённый объект.

Отписаться от событий можно функцией unbind.

Для упрощения синтаксиса можно опускать слова commandClasses, instances[0] (именно нулевой канал!), .value (level == 0 аналогично level.value == 0, но при JSON-сериализации без .value будет сериализован весь элемент дерева с его атрибутами, а не только значение).

Стоит обратить внимание, что глобальный объект zway является нативным в v8, т.е. это не обычный JavaScript объект: у него можно лишь менять данные элементов дерева. Все остальные изменения в дереве игнорируются.

Приведём несколько примеров:

Запуск shell-команд при получении контроллером событий Basic Set от других устройств сети (например, выключатель ассоциирован с контроллером с каналом 1 при помощи MultiChannelAssociation)

var instanceId = 1;

var ctrlNodeId = zway.controller.data.nodeId.value; // Get controler Node Id
if (zway.devices[ctrlNodeId] && zway.devices[ctrlNodeId].instances[instanceId]) { // Check that instance object exists
	var basicCC = zway.devices[ctrlNodeId].instances[instanceId].Basic;
	if (basicCC) { // check that Basic exists
		basicCC.data.level.bind(function() { // bind to Basic level value
			system("echo " + this.value);
		});
	}
}


Автоматическое отключение диммера света через 10 секунд после включения (для реле используйте SwitchBinary вместо SwitchMultilevel). (Здесь предполагается, что устройство умеет отправлять отчёты и ассоциировано с контроллером)

var nodeId = 2;
var instanceId = 0;

var _tmr = null
zway.devices[nodeId].instances[instanceId].SwitchMultilevel.data.level.bind(function() {
	var node = args[0];
	var instance = args[1];
	if (_tmr) {
		clearTimeout(_tmr);
	}
	_tmr = null;
	if (this.value > 0) {
		_tmr = setTimeout(function () {
			zway.devices[nodeId].instances[instanceId].SwitchMultilevel.Set(0);
			_tmr = null;
		}, 10*1000);
	}
});


(тут стоит обратить внимание, что для запуска данного кода несколько раз нужно вводить массив _tmr для каждого устройства/канала)

Выполнение JavaScript кода

Куда вставлять этот JavaScript код? Есть несколько способов выполнить данный код:
  • Записать код в файл и положить его на SD-карту Raspberry Pi в папку /opt/z-way-server/[ваша папка]. Далее этот код можно исполнить из automation/main.js: executeFile(pathToJavaScriptFile).
  • Вы также можете прописать ваш собственный JavaScript файл в config.xml вместо родного файла RaZberry.
  • Отправить его по HTTP через Z-Way JSON API


Теперь опишем Z-Way HTTP/JSON API

Данный интерфейс взаимодействия с сервером Z-Way использует протокол HTTP и формат JSON для передачи данных. С его помощью не сложно создать собственный графический интерфейс для сервера автоматизации.

Команды кодируются прямо в URL запрос, а ответы приходят в привычном аяксерам JSON формате.

Запрос /ZWaveAPI/Data/<timestamp> предоставляет JSON структуру полного дерева обновлений с момента времени <timestamp>. Она имеет вид
{
path1: object1,
path2: object2,
...
updateTime: <timestamp>
}

Здесь pathN — это путь к изменившемуся элементу дерева, objectN — новое значение этого элемента. updateTime — время формирования обновлений (его нужно указать в следующем запросе, чтоб получить обновления)

Если запросить /ZWaveAPI/Data/0, то сервер вернёт полную структуру данных.

Запрос /ZWaveAPI/Run/<cmd> запускает JavaScript код zway.<cmd>. Этот запрос аналогичен более общему /JS/Run/ и создан для совместимости с API сервиса Z-Cloud.

Запрос /JS/Run/<cmd> выполняет <cmd> в v8 движке и возвращает в виде JSON результат выполнения этой команды.

Другие команды описаны в документации.

Несколько примеров:
  • localhost:8083/ZWaveAPI/Run/devices[2].SwitchMultilvel.data.level.value — возвращает последний полученный от устройства уровень яркости (стоит перед чтением послать SwitchMultilevel.Get())
  • localhost:8083/ZWaveAPI/Run/devices[3].instances[1].SensorMultilvel.data.level.value — возвращает последнее полученное от устройства значение датчика (стоит перед чтением послать SensorMultilevel.Get())
  • localhost:8083/ZWaveAPI/Run/devices[2].Basic.Set(0) — выключает устройство


Напомним, instances[0], commandClasses и value можно опустить.

! Не забывайте, что некоторые символы требуется явно кодировать перед отправкой (url encode): например, + { }.

Вместе с софтом поставляется базовый интерфейс для браузера. Он тоже использует Z-Way JSON API для взаимодействия с сервером. Его код удобно использовать для изучения работы API. Также может оказаться полезным расширение для jQuery для отслеживания обновлений дерева, полученных запросом /ZWaveAPI/Data/<timestamp>

Вот так выглядит взаимодействие разных слоёв системы (картинка из документации):



Через некоторое время планируется написание JS скриптов для автоматизации, предназначенных для простых пользователей (кривые заготовки уже лежат в папке automation). Их можно будет использовать совместно с собственными скриптами пользователя, т.е. собственные скрипты можно уже начинать писать и использовать в ваших проектах.

Где взять?

Raspberry Pi продаются на сайтах RS components или Farnell.
Плата RaZberry и другое Z-Wave оборудование доступно в интернет-магазине Z-Wave.Me и других.

Пора автоматизировать!

Уверен, RaZberry станет удобным решением для построения бюджетных систем автоматизации на базе Z-Wave.
Автор: @PoltoS
Z-Wave.Me
рейтинг 40,36
Производитель оборудования Z-Wave

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

  • +9
    Штука классная, но я очень не уверен в слове «бюджетных».
    • +3
      Бюджет у каждого свой. У кого щи пустые, а кого жемчуг мелкий :)
    • +2
      Я только интересуют темой «умный дом» но те законченные готовые решения со сравнимой гибкостью которые я видел стоят в разы дороже.
      И если уж развивать тему «бюджетности» — то умный дом это излишек что слабо совместимо с низким доходом. Да и если человек может собрать и настроить себе «умный дом» и у него мало денег — возможно ему просто надо сменить работу.
      • 0
        Возможно собрать, не самая большая проблема.
        Еще больше трудностей возникает — это все запрограммировать, особенно когда результат нужен вчера.
        • 0
          Так как «умный дом» это аппаратно программный комплекс — то под «собрать» подразумевалось в том числе и «запрограммировать» и «настроить».
          • 0
            Именно тем и интересно данное решение, что используется весьма популярный JavaScript для работы с оборудованием автоматизации Z-Wave. Да, тут нет (пока) визуального редактора (но ведь на хабре все работают только в терминале, не так ли? ;) Но гибкость очень большая.
    • 0
      Бюджет — штука относительная. Удобным критерием сравнение здесь скорей выступает не абсолютная стоимость, а относительная: сколько стоит контроллер относительно остальных устройств сети. Многие хабрапользователи уже имеют RPi, и для них контроллер обойдётся почти во столько же, во сколько одно конечное устройство. На фоне 20-30 устройств для дома это 3% стоимости. Сравните с Fibaro HomeCenter 2 для того же Z-Wave (в 8 раз дороже и менее гибкий, но коробочный и сразу готов к бою). Про всякие KNX, AMX, ModBus,… я вообще молчу! За 100 баксов там ничего нет ;)
    • 0
      Сам модуль ZM3102 кстати стоит $14 в рознице.
      А себестоимость этого razberry получается где-то $8-$10 по прикидкам. Неплохая наценка в 800%.
      • 0
        Ну, продолжая вашу тему, стоимость CD-ROM с дистрибутивом MS Office 2007 составляет менее 10 центов, а стоил он более 130 баксов. Видимо, не только за материальные вещи платить надо ;)

        Себестоимость самого железа больше ваших прикидок, т.к. чип стоит > 5$ в объёме 10 000, остальной обвес ещё почти столько же, сборка и PCB стоят ещё более 5$ каждая. Далее работа по написанию прошивки для ZW0301 и ПО Z-Way стоит по прикидкам более 50 000 баксов. А теперь учтите НДС, транспорт, пошлины и увеличения цены в 2 раза при попадании в retail.

        Видимо, вы не знакомы с процессом вывода продукта на рынок ;)
        • 0
          Допустим от тысячи штук чип стоит $6.50, eeprom — $1, кварц $1, остальное копейки. PCB и сборка такой платы стоит меньше $10, даже если её в России собирать. Про остальные затраты вы правы конечно, тут одна стоимость разработки софта вполне могла превосходить всё остальное, я не берусь судить.

          Единственное, что производителю стоит быть готовым к тому, что если продукт будет популярным, то китайцы всё-таки сделают то же самое за $10.

          Ну и для кого-то может быть альтернативой купить сам модуль за $14, собрать на макетке и использовать с бесплатным ПО.
          • 0
            RaZberry сделана в Германии (см. описание на сайте). Это оправдано при производстве объёмов менее 5000 штук, а качество сильно выше. Если китайцы сделают такую плату за 10$, то будет здорово!

            Если говорить о самостоятельной сборке модуля на макетной плате, то здесь всё упирается в прошивку. Где её взять бесплатно? Чем заливать? Покупка DevKit или программатора убьёт всю выгоду.
            • 0
              Кстати, о качестве. В моем RaZberry одна нога EEPROM (правая нижняя, если смотреть на рис. в этой статье) жестоко припаяна такой большой каплей припоя поверх платы к CMD компоненту возле нее. Это все платы такие или мне просто повезло? На всех фотографиях, что смог найти в сети, этого нет.
              • 0
                Возможно, повезло… Такие объёмы делаются отчасти вручную, особенно первые 200 штук. Если есть нарекания на работу платы, то, уверен, её быстро заменят.
                • 0
                  Нет, плата работает нормально, просто было интересно.
  • +6
    конченых устройств


    Вы точно это слово имели ввиду?
    • 0
      спасибо, исправил ;)
  • 0
    Кстати, для iOS уже есть готовое приложение Z-Way для управления всем этим счастьем: itunes.apple.com/us/app/z-way/id569743272
  • 0
    Подскажите кто недавно заказывал raspberry pi, где? На rscomponents России вообще в списке нет, а farnell ведёт на терраэлектроника с заоблачной ценой.
    • 0
      В Украине на аукционе аукро.юа брал. Там их навалом в наличии, но где-то баксов по 45-48 + доставка по стране (зато за 1 день).
      • 0
        А что на счет самой платки RaZberry в Украине?
        • 0
          Не нашел, заказал в Британии.
          • 0
            А можно по хотя бы ссылку?
            • 0
              Брал тут, с доставкой через ибейтудей. Может есть варианты и поумнее, не сильно искал.
    • 0
      adafruit — пришла через 2 недели обычной почтой
      с rs не связывайтесь, я заказал и оплатил в январе и до сих пор глухо, заказ снять тоже не дают
      • 0
        Кстати, adafruit покупают у farnell, но дешевле выйдет купить в штатах, потому что у европейских раселлеров farnell цены в евро, причем у некоторых и в евро цена выше, и доставка из европ дороже. Мне доставка обошлась в 12$, причем в посылке была еще всякая ерунда, кроме rpi.
        • 0
          На adafruit нет в наличии. с farnell заказать я вообще способ не нашёл, да и наслышан что очень долго всё…
    • 0
      Заказывал в RS в декабре, пришло в ДС спустя 2 месяца. Не вижу проблем.
    • 0
      Ответ RSComponents:
      As you may be aware we have been encountering problems with the delivery of orders within the Russian Federation and have been looking at alternative methods of shipping. Unfortunately we haven't been able to find a solution that would help to solve this issue order.
    • 0
      Сегодня получил вот отсюда raspberrypi.rsdelivers.com
  • –6
    wget ‐q ­‐O ­‐ http://razberry.z-­wave.me/install | sudo bash

    Это ужасно, сделайте репо, а не это виндузячье нечто, которое даже обновить потом нормально нельзя.
    • 0
      Согласен, решение не элегантное… Это будет меняться.

      Кстати, данный скрипт также обновляет ПО без особых проблем.
  • +1
    А можно какое-то сравнение z-wave, zigbee, bt 4.0 le? Хотя бы вкратце? Потому как тоже смотрю в сторону home automation, и тут столько вариантов, что глаза разбегаются.
    • +2
      Zigbee и BT 4.0 имеет важное отличие — они покрывают стандартом не все уровни OSI. В Zigbee верхние уровни полностью отданы производителям, в BT это пытаются решить профилями, но пока даже hue ни с кем не совместима. Т.е. приборы разных производителей могут жить в одной сети и даже пользоваться mesh-сетью (в ZigBee), но понимать друг друга не могут. В BT кстати, нормального mesh так и не сделали.

      В отличии от них Z-Wave имеет полноценную совместимость разных производителей. Что это означает для нас, пользователей? Больший ассортимент работающих вместе устройств и защиту инвестиций: уходя с рынка компания-производитель может быть заменена другим производителем. В ZigBee это увы не так.
    • +2
  • 0
    Интересно узнать, как поведет себя Raspberri Pi при подключении пары десятков устройств.

    Здесь вот товарищ жалуется, что Vera 3 начинает тормозить.
    Raspberri будет помощней (700 МГц процессор против 500 МГц, 512 Мб памяти в Model B rev 2 против 128 у Веры), но всё же.

    Кстати, а какой сейчас самый мощный контроллер на рынке? Fibaro Home Center 2?
    • 0
      У меня дома пока 19 и всё летает. Тут и проц лучше, и код более шустрый. Хороший JS на V8 не уступает C++ коду по скорости, а на Vera 3 используется Lua, которая сильно более тормозная.

      И, кстати, основная проблема на Vera 3 — это память — при большом количестве устройств её просто не хватает. С Z-Way на Raspberry Pi Rev B этот порог должен быть где-то около 70-100 устройств (зависит от кол-ва Command Classes на устройствах).

      Fibaro HomeCenter 2 пока самый производительный (это полноценный писюк! отсюда и цена). Fibaro'вцы на нём строят сети до 170 устройств. Но и там начинаются глюки, хотя уже совсем другого характера.
      • 0
        Какого, если не секрет?
        • +1
          С маршрутизацией и авторазруливанием мёртвых маршрутов. С другой стороны, 170 устройств распределённых на 5 этажах по 200 квадратов — это уже не совсем профиль технологии Z-Wave… Z-Wave — это о квартирах и домах до 500 м2 и не более 4-х этажей
      • 0
        Кстати, скоро в продажу выйдет Вера с более мощным процессором.
  • +1
    Отличная статья, спасибо. Уже достаточно давно слежу за z-wave, но пугает качество и цена устройств (самые простые датчики стоят ~$70, игрушечные камеры непонятного качества >$100), да и выбор сравнительно небольшой. Было бы здорово почитать об эксплуатации конкретных устройств.
  • +1
    Темой «Умного дома» я проникся больше года назад. Изначально планировал в коридоре сделать включение свет от датчика движения и выключение через 2 минуты. Первым делом попытал свои силы в самостоятельной разработке на микроконтроллере. Понял, что быстро не сделаю что нужно.
    Затем стал искать готовые решения, по соотношению цена/функциональность мне показалось, что Z-Wave оптимальный вариант.
    Купил датчик движения и выключатель света Z-Wave, установил, настроил и сразу же обнаружил косяк, если вручную выключить свет, то он моментально включается от датчика движения. Принял решение купить недорогой контроллер и запрограммировать логику работы датчика движения и выключателя света.
    Приобрел облачное решение Z-Cloud, нужен только стик, софт работает в интернете. Написал правило для датчика движения и выключателя:
    «Если свет выключили с выключателя, то в течении 30 секунд выключатель не реагирует на датчик движения».
    Все работало, но напрягало, что без интернета мой умный дом работать не будет. Но с выходом RaZberry решил и эту проблему. Теперь у меня дома локальный контроллер с моей собственной логикой.
    Практиковался в программировании пол iOS и решил ради эксперимента написать собственно приложение для умного дома используя Z-Way JSON API. Разобрался за пару минут в синтаксисе, в App Store не выкладывал, так как лень пока доделать, вот что вышло:
    image
    А вот кусочек кода, где я с помощью слайдера выставляю нужный уровень свет в комнате:
    // слайдер для класса 38
    - (void) sliderMoved:(UISlider*)sender {
        // Устанавливаем задержку на обновление, слайдер обновится только через 2 обновления после нажатия на нем, т.е. через 2 секунды
        delaySlider = 2;
        // Готовим запрос к серверу //
        NSURL *url = [NSURL URLWithString:self.controllerAddress];
        AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
        // Если используется пароль и логин, то добавить эти данные к запросу
        if (([self.username length] != 0) && ([self.password length] != 0) ) {
            [httpClient setAuthorizationHeaderWithUsername:self.username password:self.password];
        }
        NSMutableURLRequest *request = [NSMutableURLRequest new];
        NSString *path = [NSString new];
        NSUInteger value = (int)(sender.value + 0.5f);
        NSLog(@"Slider value = %i", value);
        
        path = [NSString stringWithFormat:@"/ZWaveAPI/Run/devices[%@].instances[%@].commandClasses[%@].Set(%i)", number, instance, deviceClass, value]; // /ZWaveAPI/Run/devices[3].instances[0].commandClasses[38].Set(50)
        request = [httpClient requestWithMethod:@"POST" path:path parameters:nil];
        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"Запрос доставлен %@%@",self.controllerAddress, path);}
        failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"Запрос не доставлен %@%@",self.controllerAddress, path);}];
        [operation start];
    }
    
  • 0
    Если взять конкретно двойное реле fibaro fgs 221, меня интересует слудующая ситуация, когда стейты каналов меняются с помощью клавиш выключателя, будут ли приходить коллбеки с обоих каналов и будут ли в этих коллбеках поканально приходит значения (вкл. / выкл.)?
    Намучался с этой ситуацией в либе openzwave так ничего и не смог сделать…
    • 0
      Завтра откопаю и попробую. Но что-то мне подсказывает, что сам Fibaro FGS-221 не может этого: у него два канала для двух клавиш (т.е. можно получать отдельно два события нажатия — это Basic Set) и одна группа для отчёта (Basic Report). А вот какой канал прислал отчёт, возможно, не получится узнать. В идеале должно быть две репортных группы или они от каналов должны приходить. Хотя есть чит — при получении репорта (группа 3) можно сразу спрашивать явно значения на обоих каналах — тогда они обновятся. Т.е. как-то так:

      zway.devices[fgs221_id].SwitchBinary.data.level.bind(function() {
        zway.devices[fgs221_id].instances[1].SwitchBinary.Get();
        zway.devices[fgs221_id].instances[2].SwitchBinary.Get();
      });
      zway.devices[fgs221_id].instances[1].SwitchBinary.data.level.bind(function() {
        debugPrint("channel 1: " + this.value);
      });
      zway.devices[fgs221_id].instances[2].SwitchBinary.data.level.bind(function() {
        debugPrint("channel 2: " + this.value);
      });
      


      Но вообще, слабо верится, чтоб Fibaro облажались здесь. Уверен, что у них это как-то красиво релиалтзовано.
      • 0
        Всё оказалось сильно проще, чем я думал: Fibaro FGS-221 возвращает при изменении состояния три отчёта Basic Report (лишнее удалил):
        [2013-04-01 04:15:40.232] RECEIVED: ( 01 09 00 04 00 0B 03 20 03 FF 26 )
        [2013-04-01 04:15:40.232] SETDATA devices.11.instances.0.commandClasses.32.data.level = 255 (0x000000ff)
        [2013-04-01 04:15:40.242] RECEIVED: ( 01 0D 00 04 00 0B 07 60 0D 01 01 20 03 FF 4B )
        [2013-04-01 04:15:40.243] SETDATA devices.11.instances.1.commandClasses.32.data.level = 255 (0x000000ff)
        [2013-04-01 04:15:40.264] RECEIVED: ( 01 0D 00 04 00 0B 07 60 0D 02 02 20 03 00 B4 )
        [2013-04-01 04:15:40.264] SETDATA devices.11.instances.2.commandClasses.32.data.level = 0 (0x00000000)

        Первый сделан через Association (скорее всего группы 3) и оповещает о первом канале (дублирует в канале 0 первый канал — так часто делают), второй и третий — это ассоциации групп 1 и 2, сделанные MultiChannelAssociation. Виден номер канала и значение. Вот только эти два вам и нужны:
        zway.devices[11].instances[1].Basic.data.level.bind(...);
        zway.devices[11].instances[2].Basic.data.level.bind(...);
        


        Обратите внимание, что здесь не SwitchBinary, а Basic — почему-то Fibaro именно так сделали.

        Таким образом в RaZberry это получилось out of the box!

        У меня такой на кухне управляет двумя лампами, а посылает команды им батареечный выключатель: один клик — обе лампы, два клика — только одна (тоже через MultiChannelAssociation сделано).
        • 0
          Ага, вчера в ночи туговато думал уже… Можно и SwitchBinary использовать (и это правильней, т.к. для всех устройств типа реле работает). Просто устройство не прошло интервью по SwtichBinary во время тестов (это я игрался со стиранием конфигов Z-Way). Теперь всё выглядит так:
          [2013-04-01 20:48:52.855] RECEIVED: ( 01 0D 00 04 00 0B 07 60 0D 01 01 20 03 FF 4B )
          [2013-04-01 20:48:52.856] SETDATA devices.11.instances.1.commandClasses.32.data.level = 255 (0x000000ff)
          [2013-04-01 20:48:52.856] SETDATA devices.11.instances.1.commandClasses.37.data.level = 255 (0x000000ff)
          • 0
            Спасибо за проверку. А в принципе, учитывая что одноплатных компьютеров с поддержкой линукса и наличием gpio появляется все больше и больше, эта плата расширения может с ними работать?
            • 0
              В теории да. На практике нужно чтоб совпал порядок GPIO и был аналогичный проц и библиотеки ОС. Иначе нужно будет компилить софт специально под конкретное железо/ОС. Например, под OpenWRT без бубна не собрать ничего. И поддерживать это просто ужас!

              Но в конечном счёте RPi — самый популярный и дешёвый.
  • 0
    А как насчет вашего софта не под rpi? Есть где-то отдельно сорцы или хотя-бы бинарники под популярные ОС?
    • 0
      Пока нет. Планируется под Windows сделать (очень уж много запросов от любителей Windows — хотят HomeSeer заменить чем-то адекватным) и под Ubuntu/Debian (просто поддерживать пакеты).
      • 0
        Появилась ли версия под Linux? Хочу попробовать под свой роутер (Asus RT-N16) скомпилировать. Z-Connector раньше работал :).
        • 0
          Да, под Ubuntu и Debian, но не для роутера. У RT-N16 маловато флэша… Да и под OpenWRT задолбаться собирать можно. Мы пробовали — в теории пакето собрать можно, даже когда-то это работало, но лучше брать гигагерцовые роутеры с кучей памяти и диска.

          В теории, для популярного роутера можно даже сделать билд, только вот какие сейчас популярные? И ведь у большинства стоит стандартная прошивка, на которую сторонний софт-то и не поставишь.

          Вот в Германии есть Fritz box — лидер рынка, а у нас нет таких.
  • 0
    Можно ли где-то получить само ПО Z-Way для установки на какой-нибудь другой девайс? Собственно нужен только API сервер.
    • 0
      Пока нет. См. чуть выше. Если Вы собираетесь использовать Z-Way в коммерческих проектах, то, думаю, правильней написать на razberry@z-wave.me.
  • 0
    ...level.value == 0, но при JSON-сериализации без .value будет сериализован весь элемент дерева с его атрибутами, а только значение).


    Наверное пропущено НЕ в последней части предложения?!
    • 0
      да, дествительно
  • 0
    А обычный «свисток» (вроде AEON Labs USB, или Z-wave.me usb stickC) сможет работать вместо razberry с малинкой на указанном софте, если его вставить в usb? Иными словами — подойдёт ли /dev/ttyUSB0 в этом случае вместо /dev/ttyAMA0? Или там что-то в корне другое, заточенное конкретно под эту платку?
    • 0
      Нет, т.к. прошивка RaZberry содержит некоторые дополнения к протоколу Z-Wave Serial API.
  • 0
    > Прошивка также позволяет обновлять себя по UART, что позволит не только исправить возможные баги в будущем, но и сменить версию прошивки с той, что установлена по умолчанию (SDK 4.54.01) на более старую 5.03

    А как это сделать на практике?
    Вот есть rasspberry c raspbian + razberry. Есть консоль.
    Где взять «более старую 5.03»?
    Как прошить?
    • 0
      Можем прислать на почту. Однако не очень советую, т.к. фишки новой прошивки очень полезны для сети. Explorer Frames — штука нужная!

      Единственный повод перейти на 5.03 — это пара кривых устройств от известных производителей.
  • 0
    А частота модуля по странам зависит от прошивки или от железа?
    • 0
      И от того, и от другого. На модуле Z-Wave есть частотный фильтр (SAW filter), определяющий полосу в 20 МГц (часто несколько регионов используют одну широкую полосу, например, EU/RU/IN/MY). Более точная подстройка делается в прошивке (выбор полосы в 150-200 kHz).

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

Самое читаемое