Main

Модуль работы с Z-Wave устройствами

 
 

Обсуждение

 

sergejey: Обсуждение страницы Модуль работы с Z-Wave устройствами

sergejey: Модуль работает через RaZberry API пока реализовано для устройств поддерживающих следующие классы команд: BASIC (чтение/установка) SENSOR_BINARY (чтение/установка) SENSOR_MULTILEVEL (чтение) SWITCH_BINARY (чтение/установка) SWITCH_MULTILEVEL (чтение/установка) THERMOSTAT (чтение/установка режима) BATTERY (чтение) может работать с локальной платой RaZberry, так и подключившиь к Z-Cloud. В общем, базовая поддержка есть, дальше будет разиваться.

Killer_Angel: устройства нашлись, объект слинковал, при изменении снаружи изменяется и объект, а как управлять изнутри z-wave уст-вом ?

sergejey: устройства нашлись, объект слинковал, при изменении снаружи изменяется и объект, а как управлять изнутри z-wave уст-вом ? Аналогичным образом, только в обратную сторону -- изменяя в системе слинкованное свойство система будет отправлять запрос на изменение значения соответствующего zwave-параметру.

Killer_Angel: хм, что-то не але :/, конечно сразу пробовал, сделал кнопку и на ней код : sg('ihome.dimX','255'); свойство меняется, zwave наплевать, вместо 255 пробовал и 99, в логах z-way-server чисто, на другую конпку повесил дерганье api через http запрос, все ок, диммер реагирует, свойство запрашивается и тоже меняется

sergejey: а можно скриншот окна, где обозначена связь между свойством z-wave и свойством объекта. хочу посмотреть тип z-wave свойства. можно попробовать для начала поработать со свойством типа BASIC.

Killer_Angel: download/file.php?mode=view&id=439

sergejey: попробуй пожалуйста обновиться и снова потестировать связь между свойством объекта и zwave. я нашёл возможную причину из-за чего не отправлялась команда на изменение значения в zwave устройство при изменении значения связанной переменной.

insert103: Есть ли какие-нибудь продвижения по этой теме? Есть ли примеры работы с vera light или vera 3?

sergejey: Есть ли какие-нибудь продвижения по этой теме? Есть ли примеры работы с vera light или vera 3? К сожалению, пока ZWave работает только через Razberry. Сервера MiCasa имеют свой HTTP API, так что проблем интегрироваться с ними больших не дложно быть, но у меня их нет под рукой, чтобы разработать связующие процедуры :(

Wave: Ставлю + за идею поддержки MiCasa. Лайт достаточно дешев для экспериментов и массового использования.

Ivan: У меня тоже не работает. Считывать считывает. А установить яркость не могу. Устройство Fibaro FGD211 v1.9, через raZberyy

sergejey: У меня тоже не работает. Считывать считывает. А установить яркость не могу. Устройство Fibaro FGD211 v1.9, через raZberyy Версия последняя из обновлений? Можно скриншоты кода и настроек?

Ivan: Версия последняя Запускаю так /objects/?object=OfficeDimer&op=m&m=turnOn& Скрины в скрепке

sergejey: Версия последняя Запускаю так /objects/?object=OfficeDimer&op=m&m=turnOn& Скрины в скрепке В скринах не нашёл как эти объекты привязаны к устройствам через модуль ZWave. Можно их тоже?

Ivan: Забыл самое главное

sergejey: Ух, как тяжко-то без устройств. Но можно попробовать разобраться. Итак, есть файл ./modules/zwave/zwave.class.php, есть там начиная с 348-ой строки вот такой код: http://c2n.me/65adGQ.png стрелкой я выделил как раз ту часть, которая должна устанавливать уровень яркости. теперь просьба -- поставить перед этим вызовом строчку что-то вроде: DebMes("checkpoint"); потом попробовать изменить яркость и посмотреть в папке ./debmes/ в логе за текущее число появилась ли строчка с checkpoint, т.е. мы узнаем дошло ли выполнение до того места. если нет, то желательно ещё наставить DebMes("checkpoint1"); или по аналогии выше по данному коду, чтобы понять куда выполнение доходит (до какой строчки).

Ivan: Я понял куда копать разберусь В логе вижу доходит до строчки с красной стрелкой

Ivan: http://192.168.1.68:8083/ZWaveAPI/Run/devices.instances.commandClasses.Set(50) Работает. Но в логе я вижу на url только "ZWaveAPI/Run/devices.instances.commandClasses.Set(50)" В настройках API URL: (*) = http://localhost:8083/

Ivan: $this->config - пустая строка :(

Ivan: Вот настройки

Ivan: Решилось вставкой сточки "$this->getConfig();" В начале функции function apiCall($command) { $this->getConfig(); $command=preg_replace('/^\//', '', $command); $url=$this->config['ZWAVE_API_URL'].$command; $cookie_file=ROOT.'cached/zwave_cookie.txt'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json, text/javascript', 'Content-Type: application/json')); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); $result = curl_exec($ch); curl_close($ch);

Ivan: Есть одно. Но - Сделал слайдер на главном меню. Все меняется хорошо, но если нажать F5, при обновлении окна слайдер падает на 0 - и при этом гаснет лампа

sergejey: Решилось вставкой сточки "$this->getConfig();" В начале функции Ё-маё! Вот это спасибо -- сам не сообразил, что при установке значения модуль не читал собственные настройки и не мог отправлять запросы куда надо. Есть одно. Но - Сделал слайдер на главном меню. Все меняется хорошо, но если нажать F5, при обновлении окна слайдер падает на 0 - и при этом гаснет лампа Если слайдер связан со свойство объекта, то его значение по идее должно всегда с ним совпадать и после перезагрузки то же... У меня слайдеры используются для яркости и таких проблем не замечал. Но, правда, не с ZWave.

Ivan: Спасибо. Можно закрывать

I_I_Imonder: друзья помогите разжиться инфой. Приобрел 2 z-wave гаджета usb-стик и remotec 120, а вот что с ними делать хз) может есть у кого инфа какая как с ними работать, хотя бы с чего начать?

binladin: Интересная ссылка node.js обёртка для openzwave.

Bagir: Приобрел 2 z-wave гаджета usb-стик Я тоже присматриваюсь к покупке. Что именно приобрел? Z-Way для Windows или USB-стик Z-Wave.Me Z-Stick 4

Ivan: Официально USB ZWave не поддерживается MajorDomo. Есть варианты самому подключить, но это иследования

Bagir: Судя по этому заявлению Z-Wave.Me Z-Way, он же Z-Way для Windows тоже самое что и Контроллер RaZberry на базе Raspberry Pi и Z-Way Если I_I_Imonder приобрел именно такой свисток, то будем ждать от него новостей.

Ivan: Сам настраивал библиотеку. Там обычный serrial TX\RX - но это было под debian Под Винду думаю такого не получится

Bagir: Мне ответили по поводу свистка Z-Way на Windows и платы (API) Razberry Мы не проверяли работу Z-Way на Windows с MajorDomo, но c точки зрения взаимодействия (API) Razberry и Z-Way для Windows идентичны, так что это должно сработать, однако еще раз повторюсь, это не проверялось, могут всплыть какие-то камни.Теперь надо подумать о надежности этих вариантов.

sergejey: Мне ответили по поводу свистка Z-Way на Windows и платы (API) Razberry Мы не проверяли работу Z-Way на Windows с MajorDomo, но c точки зрения взаимодействия (API) Razberry и Z-Way для Windows идентичны, так что это должно сработать, однако еще раз повторюсь, это не проверялось, могут всплыть какие-то камни.Теперь надо подумать о надежности этих вариантов. Если API одинаковое, то будет работать. К сожалению, в своё время, когда я с ребятами обсуждал интеграцию с Razberry у них ещё не было USB-версии, так что потестировать с ней не мог. Если говорить о перспективах поддержки, то они есть -- я сам планирую в Москву поехать и как раз встретиться с ними, заодно и оборудования кое-какого закупить, в том числе указанные USB-адаптеры.

Bagir: Отличные новости! Я уже подобрал нужные датчики, и в ближайшую поездку в Ярославль собираюсь их купить. Значит выбор будет в пользу Z-Way на Windows. Ну а там увидим как получится.

Bagir: Если Z-Wave еще пока нет, но очень хочется для начала просто поглядеть что это такое, то можно подключиться и полюбопытствовать http://zwave.dyndns.org:8083/ Можно получить список устройств и посмотреть их свойства.

Bagir: Друзья, а все работает со стиком Z-Way на Windows. Но тут такая свалка, что разбираться буду еще долго. И похоже чтобы от меня была больше пользы, Сергею придется меня немного поднатаскать на эту тему. Многое из железа нашлось. Но многих свойств не вижу. Практически нет никакой инфы на почитать. Попробую вести эту тему. Для начала надо поиграться, а потом понять как и где вообще происходит взаимодействие MDM и сервера Z-Wawe. Вообщем скоро будет очень много сообщений ))

Jumangee: Bagir, а какая у Вас конфигурация - с z-wave работаете через стик, или отдельный контроллер? Расскажите подробнее, а ещё лучше поделитесь программками )

Bagir: Ну что, поехали. Ось Windows XP 32. Этот топик будет периодически обновляться. Вначале небольшое отступление. Где купить: http://rus.z-wave.me/shop/ http://www.5smart.ru/ http://zwaverussia.com/index.php?route=common/home Базы знаний: http://rus.z-wave.me/z-wave-knowledge-base/ http://z-wave.5smart.ru/support/solutions Очень понравилось общаться с 5smart. У них отличная база знаний! Для построения сети Z-Wave был использован вот такой стик http://static12.insales.ru/images/products/1/2394/30787930/large_Z-Wav_Windows_Stick.png Дрова ставить не пришлось. При подключении он сразу определился как ноывй com порт, что по заверению сайта z-wave нормально и достаточно. http://i.imgur.com/MYPur7E.png Затем от туда же был скачен установщик ZWay для Windows. Установка его прошла быстро и без бубна. Потребовалось указать номер com порта стика. Установщик сложил все свои файлы в http://i.imgur.com/EkJnJHL.png Я не стал ему возражать дабы не было какой нибудь беды. Запускается сразу вместе с Windows. Если вынуть стик, сервис остановит работу, и сразу возобновит как только вы вернем стик на место. Но нам то надо чтобы он постоянно был на страже. Так что тут не будет экспериментировать. Сервер сразу запускается по адресу http://localhost:8083 без логина и пароля. Реперь мы можем попробовать добавить устройства в Z-Wave сеть. http://i.imgur.com/ycU64Rg.png Тут есть один момент. Частоты в разных странах отличаются. Стик умеет работать с любой частотой. Но только с одной, и его надо переключить, если устройства не цепляются. Вот как то не нашел я это поиском, и спрашивал в сапорте. Вот как это сделать. Ну а дальше пойдет сплошной эксперимент. Но методом проб и ошибок мы все равно получим чего хотим. Где я буду оставлять курсив, значит сам еще мало представляю о чем идет речь. И в будущем эти места буду править в таких вот больших обзорных топиках. Немного расскажу в общих чертах, чего я нарыл. Z устройство почти всегда спит, и просыпается по установленному таймеру. Обычно это в пределах от 300 секунд до двух дней. Но можно его разюудить в любой момент, нажав сервисную кнопку. Сделано это для экономии батарей. Когда устройство спит, послать на него команду или настройку невозможно. Контроллер будет держать эту команду у себя и ждать, когда устройство проснется. В устройстве есть много настроек. Для их изменения надо указать номер свойства, новое значение, и послать на устройство. Когда оно проснется, то сразу получит ожидающие его настройки. В настройках можно указать, как часто устройство будет просыпаться, делать замеры, например температуру, период и правила для отправки данных на контроллер. Надо понимать, что проснувшись, устройство сообщит контроллеру об этом, и может получить от него и обработать ждущую его команду. Так же понятно что устройство потратит часть энергии батареи на то, чтобы проснуться или сделать замеры. Но эти замеры не всегда будут отправлены контроллеру. И сделано это опять же для экономии батарей. Результаты замеров будут отправлены только если устройству был отправлен запрос, либо устройство само принимает такое решение. А делает оно это по установленным параметрам. Например часто встречается такое как изменение температуры на 0,5 градуса; достижение температуры (измеряемому параметру в целом) пороговых значений; превышение периода времени между отправками данных и т.д. Из этого следует, что если, например, датчик сработал на движение и прислал данные на сервер, это вовсе не означает, что при этом он отправить еще и температуру. Но в МДМ мы зафиксируем обновление свойства. Вот в понимании этого и были мои грабли, пока я не нашел, где в устройстве задаются эти параметры. А делается это на закладке "Команды для экспертов" -> Configuration. Теперь надо еще раз хорошенько обдумать желаемые периоды и условия получения данных. Все же хотелось бы, чтоб батарейки служили долго. Но и прыгающие в МДМ графики на целый градус тоже не интересны. Надо найти середину в получении данных и расходе батареи. Отдельно нужно сказать, что управлять и получать данные от Z устройств можно через строку браузера. Это не какая то там абра-кадабра, а просто GET запросы, и ответы. Включить таким образом Z устройство - тоже самое, что запустить метод объекта MDM, набрав адрес в браузере. Но мы не будем это рассматривать, т.к. цель этой ветки работать с Z устройствами именно штатными методами MDM. В своих постах я не буду уделять внимание дальнейшим способам настройки. Что делать с данными, получаемыми от своих устройств каждый знает сам. Если с этим пока трудности, тогда не стоит начинать с Z-Wave. Надо взять что то по проще. Тут еще вероятно будет море подводных камней. Но в то же время нет ничего непреодолимого. Далее в этой ветке пойдут обзоры на разное Z железо. Все это можно будет подключить к МД. Но если вы только начали знакомство с системой, конечно вам наверное сложно. И сразу будет вопрос, с чего начать? Сначала нужно подключить железо в z-wave сеть. Потом, нужно посмотреть, как это ваше новое устройство увидится в МД. Ну а затем уже подумать, как правильно создать для этого железа объекты. Если вы уже полностью знакомы с объектной системой МД, то конечно же сами решите какие классы создавать и как все будет связано. А ели это первый опыт, то наверное лучше будет посмотреть, как это сделано у других. И уже потом принять свое решение. Немного позже я напишу отдельный топик для начала построения объектов Z устройств и оставлю тут на него ссылку. А пока что смотрите обзоры и выбирайте себе железо.

Bagir: Теперь для начала давайте подключим датчик движения Fibaro Motion Sensor База знаний 5smart http://rus.z-wave.me/wa-data/public/shop/products/17/08/817/images/367/367.500x0.jpg Жмем кнопку на скрине Включить (заново) устройство. Контроллер на 15 секунд перейдет в режим добавления новых устройств в сеть. На датчике под крышкой тоже есть кнопка. Быстро жмем на нее три раза. Если все правильно, то устройство добавится в сеть. Посмотреть его будет можно тут http://i.imgur.com/7nCjFul.png вот оно: http://i.imgur.com/23RV0VD.png и его свойства: http://i.imgur.com/XFQ4gDz.png Тут нам важны номер устройства и его Тип. Именно так будет видеть их MDM. Есть кое что еще. Интервью с устройством. По идеологии Z-Wave устройства очень много времени должны спать. Иначе до свидания батарейки. При первом подключении и перед обновлениям сети в MDM надо закончить интервью с устройством. На скрине стрелка. Должны быть все плюсы. Делается это неоднократным пробуждением устройства. Обычно это троекратное нажатие на сервисную кнопку. Просто будим устройство, оно общается, сразу засыпает, а мы будим его снова. Обычно достаточно после добавления разбудить устройство еще один раз, но будут и исключения :( С датчиком движения все прошло отлично. Свое интервью он закончил быстро и сразу. Теперь о том, как получить все в MDM, и как там это будет видно. Открываем панель управления MDM. Указываем адрес сервера Z-Wave. Жмем кнопки и видим список устройств. http://i.imgur.com/DQRcL97.png Вот так увиделся датчик движения. Сразу нужно сказать, что у Z устройства есть такое понятие, как экземпляры. Я пока мало что об этом знаю сам, но могу сказать, что в своих экземплярах устройство может дублировать отдельные свои данные. Зачем это нужно, я пока что сказать не могу. Все датчики, с которыми мне довелось общаться, предоставляли свои свойства в своем первом экземпляре (instances:0). Сейчас явно надо понять следующее: сколько экземпляров у устройство, столько и строк будет в MDM. http://i.imgur.com/41WbNND.png Жмем карандаш и смотрим свойства первой строки. http://i.imgur.com/xUJHIEh.png Параметр Интервал пробуждения (Wake up interval) 7200 сек Если нам нужны данные об освещенности Параметр №40. Величина изменения освещенности для отправки отчета на контроллер размер 2 байта значение 100 Параметр №42. Период отправки отчета по уровню освещенности размер 2 байта значение 0 - отчет не отправляется. Для экономии батарейки. Нам веже тут график строить не надо. Если нам нужны данные о температуре Параметр №60. Величина изменения температуры для отправки отчета контроллеру размер 1 байт Значение 2 - это 0,2 градуса. Очень хотелось красивые графики температуры, к сожалению в ущерб батарейке. Параметр №62. Интервал измерения температуры размер 2 байта значение 600 сек Параметр №64. Период отправки отчета о температуре размер 2 байта значение 3600 сек

sergejey: Bagir, спасибо за инструкцию! Я сам, честно говоря, этот протокол почти вслепую реализовывал и тщательно не тестировал, так что если будут проблемы, будем решать совместно.

adzam: Ну что, поехали. Ось Windows XP 32. Для построения сети Z-Wave был использован вот такой стик Изображение А интересно можно ли стик склонировать, чтоб поэксперементировать?

Bagir: можно ли стик склонироватьДа вот наврятли. Конечно не боги горшки обжигали, но думаю что в данном случае от покупки не уйти. Даже если повторить железо, без прошивки никуда. А она, наверное, вовсе не открытая. Но в инете цены сильно отличаются. Если ничего не напутали, то получается от 2 до 5 килорублей. Так то Z-Wave оборудование вообще ну очень дорогое. За идею что ли цена так завышена... Но поиграться то хочется :) так что если будут проблемы, будем решать совместноА так и придется. Я пока в этом направлении мало что знаю, но капать могу долго и усердно :) Перед обзором на следующее железо, все же придется немного разобрать тему использования данных датчиков Z-Wave в MDM. Сейчас у меня для теста создан отдельный класс. В нем объект датчика движения с его свойствами. http://i.imgur.com/LoB7uAj.png И, внимание, при изменении свойства Level запускается метод LevelChanged http://i.imgur.com/g6AF7Yb.png Код метода http://i.imgur.com/ZUb2rtN.png Все упрощено до безобразия, чтобы было проще понять и разобраться. А что нам вообще нужно? Нам нужно во первых наличие в MDM объекта с текущими свойствами датчика. Это есть. И во вторых - сигнал о изменении свойства объекта, чтобы запустить свои цепочки проверок и действий. С этим пока грабли. Ближе к делу: Линкуем свойства объекта датчика и смотрим что будет. Помним, что при изменении свойства Level запустится наш метод LevelChanged. http://i.imgur.com/LiVf5ni.png Теперь немного опытов и теории: Замечено, что датчик присылает одновременно все свои свойства. То есть, при движении он так же обновляет свойство температуры и яркости. Также по задумке z-Wave датчик периодически просыпается (например каждые 5 минут) и сообщает свои свойства. Это весьма полезно для сбора таких параметров как температура и яркость освещения, но, одновременно с этим идет и обновление свойства движения. 0 будет обновлен на 0 если никого нет. Это как бы и ничего, но все равно вызовет срабатывание метода LevelChanged. А вот это уже нехорошо. Конечно можно создавать свойства и хранить там предыдущее значение, но это вариант ходить домой через крышу. И еще одно наблюдение: Когда датчик замечает движение, я слышу сразу два уведомления подряд. Значит каким то образом статус обновляется два раза. А почему? Вероятно надо посмотреть на взаимодействие сервера Z-Wave и MDM. Наверное теперь вопрос уже именно к Сергею. 1. Где это все происходит. 2. Есть ли какие то логи. 3. Смогу ли я сам там что то посмотреть или сделать :) Понятно что на 3 Вы мне наврятли ответите. Но мне хотя бы в целом узнать, что там такое. Так же я еще вообще смутно представляю понятие Ассоциации. Если управлять сетью только в Z-Wave сервере, то там, например, в выключателях можно указывать исполнительные устройства, которым будут отправляться команды. Но у некоторых устройств (например датчик температура+влажность), там я вижу эти раздельные свойства. А у датчика движения такого нет. НО! у них разные производители. В общем, чтобы смело двигаться дальше, надо поточнее понять работу этого механизма получения данных. Пишите кто что знает. Кидайте действительно полезные ссылки. Будем собирать инфу.

sergejey: Наверное теперь вопрос уже именно к Сергею. 1. Где это все происходит. 2. Есть ли какие то логи. 3. Смогу ли я сам там что то посмотреть или сделать :) Понятно что на 3 Вы мне наврятли ответите. Но мне хотя бы в целом узнать, что там такое. 1. Это происходит при опросе устройства. Если конкретно говорить о том, где идёт обновление связанного свойства, то это файл ./modules/zwave/zwave.class.php строки начиная с 535:      if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY']) {
      
setGlobal($prop['LINKED_OBJECT'].'.'.$prop['LINKED_PROPERTY'], $prop['VALUE'], array('zwave_properties'=>'0'));
     }
 
теоретически код можно заменить на такой и тогда будет идти обновление только при изменении значения:      if ($prop['LINKED_OBJECT'] && $prop['LINKED_PROPERTY'] && getGlobal($prop['LINKED_OBJECT'].'.'.$prop['LINKED_PROPERTY'])!=$prop['VALUE']) {
      
setGlobal($prop['LINKED_OBJECT'].'.'.$prop['LINKED_PROPERTY'], $prop['VALUE'], array('zwave_properties'=>'0'));
     }
 
но тут логическая проблема -- что если это периодический опрос температуры и важно знать какой она была на указанный момент, даже если она не изменилась? собственно поэтому и указанный метод вызывается при каждой установке свойства, даже если само значение не изменилось. как вариант, в самом методе проверять совпадает ли новое значение с предыдущем и только при отличии производить какие-то действия 2. логов работы zwave не ведётся, можно только через xray смотреть последние вызовы метода или добавлять что-то в лог через debmes и через тот же xray его смотреть. 3. всё в ваших руках )) Так же я еще вообще смутно представляю понятие Ассоциации. Если управлять сетью только в Z-Wave сервере, то там, например, в выключателях можно указывать исполнительные устройства, которым будут отправляться команды. Но у некоторых устройств (например датчик температура+влажность), там я вижу эти раздельные свойства. А у датчика движения такого нет. НО! у них разные производители. В общем, чтобы смело двигаться дальше, надо поточнее понять работу этого механизма получения данных. Пишите кто что знает. Кидайте действительно полезные ссылки. Будем собирать инфу. Ассоциации -- это, скорее всего, прямая передача данных между устройствами без задействования сервера. Т.е. можно на одном устройстве указать какую команду и куда передать в случае возникновения события. При этом всё будет работать, даже если сервер по какой-то причине отключен -- с ассоциациями устройства сами между собой договариваются. Иногда это полезно.

Ivan: Ассоциация нужна для привязки устройств друг к другу. Например Выключатель, датчик движения <-> лампочка, реле, итд Очень нужная функция и МД тут не причём. Кстати она убирает многие проблемы. Например: Выключенный сервер, ускоряет работу (т.к. не нужно обрабатывать через скрипты). Также там есть понятие GlobalEvant, он нужен например когда у вас сработает датчик протечки воды. Будут срабатывать силовые блоки на мигание (Мигают все лампочки). А также срабатывает сирена. Bagir посмотрите пожалуйста личку

Bagir: Это происходит при опросе устройства. Если конкретно говорить о том, где идёт обновление связанного свойства, то это файл ./modules/zwave/zwave.class.php строки начиная с 535: Вот спасибо! php файл, ну тут то можно и по мучатся. но тут логическая проблема Да, безусловно тут быть беде. И так менять код нельзя. Для начала попробую понять, почему после движения приходят сразу два сообщения подряд.

Ivan: У меня тоже на Fibaro Dimer были глюки по включению. То есть приходило в систему значение включения, а потом выключения - при нажатии включения. Всё списывал на глючный димер. Пока не пользуюсь ZWave - т.к. димер совсем сгорел. Вот думаю продолжать ZWave или смотреть в сторону Noolite

Bagir: Я еще при выборе Z на этот пульт повелся http://rus.z-wave.me/manuals/show?sku=ZMR_KFOB Вот только пока не знаю как его с MDM использовать. А точнее даже не смотрел толком. В сети его зарегистрировал, но в MDM вижу только состояние его батарейки. В выходные доберусь до него.

Bagir: Долго думал, как все же быть в MDM с объектами для Z устройств. Тут надо учесть, что как правило, в Z устройстве сразу по 2-4 разных датчика + статус батареи. Но в то же время хотелось бы сохранить идеологию, когда для каждого датчика есть свой объект в соответствующем классе. Это удобно, т.к. позволяет легко переключиться на другое железо не перетряхая горы кода. Но если расщепить Z устройство на объекты его разных датчиков, то как быть с батареей? Создать еще объект под название "просто батарейка"? Ну как то мне так не нравится... Еще надо учесть, что при срабатывании по событию, и/или по времени, Z устройство обновляет в MDM сразу ВСЕ свои статусы и данные. Такое обновление данных, даже если они не изменялись, очень нужно, например для снятия температуры, но совершенно бесполезно, например для статуса движения или открытия двери. Более того, это обновление данных запустит проверку наших условий и реакцию на изменение, а нам это не нужно. В этом случае нам нужна реакция только на изменения данных. Можно нахудожничать в файле zwave.class.php, сделав изменения под свои разные задачи. Но это заведомо узкая и темная тропинка. Мое мнение - код MDM должен оставаться как можно менее измененным, чтобы потом разные участники форума не сравнивали посудомойку со стиральной машиной. Как уйти от всех заморочек, не трогать код в файле и оставить объекты в стандартных классах? Пока что я нашел только одно решение. Создать новый общий связующий класс zWave. В него добавить объекты, по одному на каждое Z устройство. Свойства класса zWave продумать так, чтобы из них можно было набрать ассортимент на любое Z устройство. Теперь о реакции на изменение. Т.к. Z устройства обновляют сразу все свои данные, надо выбрать самое распространенное свойство и по его изменению запускать метод класса, например IncomingData. В этом методе мы уже будем указывать, какому объекту, что, и при каких условиях передавать. Например, свойство температуры всегда отправлять в объект класса tempSensors. А вот движение отправлять в inhouseMovementSensors только при его изменении. Причем нам будет чего и с чем сравнить!, для принятия этого решения. Осталось выбрать свойство, по которому запускать метод. Я выберу Батарейку. Она есть у всех моих устройств. А для исполнительных устройств можно продублировать на свойство статуса. Зацените идею, и если это полный бред, пишите сразу.

Ivan: Я внутри функции обновления (привязанной к свойству на изменение) . Анализирую изменение и в зависимости от алгоритма принимаю решение. Выполнить действие или передать в связанный объект. Также в некоторых датчиках использую свойства времени последнего обновления, чтобы убрать повторений или принять решение о реальном изменении данных (То есть даже если пришли одни и те же значения но через несколько секунд, то это новые данные)

Bagir: Да, такой и есть план. Класс zWave объект Glaz_1 (датчик движения). У него все свойства, которые есть у Z датчика. А при изменении свойства батарейки, запускается привязанный метод IncomingData. Он и раздает данные объектам датчиков других классов. // Передать температуру объекту класса tempSensors датчика температуры в коридоре
setGlobal('ts_corridor.temp', round($this->getProperty('Temperature'), 4));

// Сравнение свойства движения объекта класса inhouseMovementSensors и этого датчика. 
if (getGlobal('ms_corridor.status') != $this->getProperty('level')) {
  setGlobal('ms_corridor.status', $this->getProperty('level'));
}
Пока нравится.

Bagir: Тут какая то непонятка выплыла. Z устройства нормально передают данные согласно установленному временному интервалу. Например, каждые 5 минут. Взять тот де датчик движения. В нем есть термометр. Получаю с него данные. Но температура передается одна и та же на протяжении нескольких часов. Такого просто не может быть! Такая же одинаковая температура у датчика и на страничке сервера http://localhost:8083. Но если в свойствах для эксперта жмакнуть на кнопку GET, то при следующем сеансе связи, когда датчик проснется по таймеру, температура уже будет получена новая. Как быть? Я думал, что устройства при пробуждении по таймеру всегда передают новые данные. А вот получается и нет. Настроил датчик на обновление каждые 10 секунд. Если постоянно жать на кнопку SensorMultilevel Get http://i.imgur.com/9JrCXjn.png то температура постоянно обновляется, и в истории будет так http://i.imgur.com/jmROcbN.png А иначе в истории одна температура на протяжении нескольких часов. Как быть?

Bagir: Ну вот он и ответ: Прежде чем считать с устройства нужные данные температуры, ему надо послать запрос. В моем варианте жто так: http://localhost:8083/ZWaveAPI/Run/devices.instances.SensorMultilevel.Get() После этого уже можно получать данные мультисенсора устройства 9 экземпляра 0 И как же поступить правильно?

Vit: по таймеру отправлять запрос на датчик с требуемой для помещения переодичностью.

Bagir: Так и сделал. Но сдается мне как то это не правильно ..

Bagir: Обзор на Датчик температуры и влажности Everspring Temperature and Humidity Sensor http://rus.z-wave.me/wa-data/public/shop/products/97/07/797/images/322/322.500x0.png Ну во первых сразу скажу, что я не в восторге, а соответственно во всех комментариях даже не вольно буду оставлять негатив. Но, они все же работают, и это хорошо. Первый обзор на датчик движения уже был, так что теперь и на будущее я не буду касаться подробностей, а отмечу только основные моменты. 1. Подключение устройства. Переводим контроллер в режим добавления новых устройств. На датчике быстро жмем вторую кнопку три раза. Датчик будет сразу нормально добавлен в сеть. Дальше начнется стадия интервью. Вот тут первые грабли. Бывает так, что устройство не успевает пройти все интервью при одном сеансе связи, и его приходится еще раз будить. Вообще это нормально. Но будить 15-20 раз??? это уже перебор. http://i.imgur.com/7tYjQWa.png И при этом еще в добавок интервью завершается неудачей. Приходится отдельно по новой по одному проходить неудачные пункты интервью, при этом каждый раз будя устройство. Да и фиг бы с ним, но это уже о чем то говорит. О чем то не хорошем в плане обмена данными между устройством и контроллером... 2. Экземпляры. У устройство есть сразу три экземпляра. В первом содержатся температура, влажность и батарея, во втором только температура, в третьем только влажность. Это сделано для использования устанавливаемых пределов включения и выключения. У устройства есть возможность установить минимальный и максимальный пределы температуры и влажности. За что собственно я и купил 4 таких датчика. Чтобы в каждой комнате можно было установить свой климат. И сделать это прямо с устройства, нажав на нем кнопку. Верна была идея или полный бред, я еще не знаю. Время покажет. Как полностью разберусь с этими триггерами, напишу в теме и обновлю этот обзор. 3. Внешний вид. Ожидал большего... На фото было лучше. Там не вижно продолжения этого датчика. Уж е знаю, что за больная муха укусила дизайнера, но это оказалось заразным, раз уж довели до стадии производства. Однако на фото решили не показывать... Ну в прочем не так уж все и плохо, просто такое ощущение, что надо пропилить в стене дырку, и запихать туда этот датчик по самую белую юбку, которую видно на фото. Но зачем такие пошлости? Идея была просто поставить его на полку. Ножка у него есть. Прикрепляется легко. Но даже если просто стукнуть по столу, или сильно дунуть, он падает мордой вниз. А дальше, вероятно, полетит на пол. Конечно можно подпилить ножку, но позвольте, да за такое бабло еще и напильником, ну нет уж. К тому же вопросы гарантии еще никто не отменял. 4. Экран. На фото действительно не соврали. Видно очень плохо. Подсветка забивает блеклые цифры весьма сильно. И это еще далеко увы не все. Углы обзора просто отвратительные. Более менее видно только прямо перпендикулярно дисплею. С боку не видно вообще. Весьма хорошо видно сверху. То есть, для лучшего обзора, датчик должен находиться примерно на уровне груди. Ну и где его блин ставить? На полке или на столе ничерта не видно, пока не подойдешь, чтобы смотреть на него сверху. Обычный китайский часы-термометр с большими цифрами отлично видно с любого места комнаты. Кстати на счет часов. Ну раз уж сделали такую погремушку в виде будильника, то не добавить туда часы было просто глупо. Но нет же, не до курили... Давно точит мысль о часах, которые синхронизируются с сервером. 5. Опрос устройства сервером z-wave. Сейчас речь о MDM вообще пока не идет. Давайте посмотрим, как все устройства отреагируют на команду "обновить статусы". http://i.imgur.com/B5L3WzL.png Тут нужны комментарии. Устройства с моим номером 1 вообще очень плохо отвечают, потому что находятся очень далеко от контроллера. Ну как очень далеко, всего то на другом этаже и удалении на 12 метров. Перекрытия - ж/б плиты, но есть "окно" в виде лестницы. WiFi работал, но плоховато. Пришлось ставить ретранслятор. Так что я не в обиде на z-wave за дальность. Надо заказать розетку, будет работать как ретранслятор. Ну а что мы видим на скрине сейчас? сразу отчитались все устройства, кроме наших термодатчиков, которые что то нам подкинули, но далеко не все. Но что интересно, если посмотреть историю в MDM, то данные с них идут. Не всегда раз в 5 минут, но все таки нормально. Но что то тут подозрительно... Не иначе как аукнулось туго пройденное интервью. Такое ощущение, что датчики откликаются через раз. Теперь посмотрим, что мы увидим в MDM http://i.imgur.com/IpNIX9w.png Вначале вроде все понятно. У каждого устройства по три экземпляра. Но внутри какая то каша из разных цифр. http://i.imgur.com/jbhuTPd.png Причем эта каша появилась сразу после того, как я попробовал включить триггеры. То есть задал максимальный и минимальный придел температуры на датчике. Тут надо еще долго разбираться что к чему. Итог: z-wave это дорогой конструктор типа лего-го, в котором вам придется разбираться мучительно долго. Но надо сказать, что конструктор этот весьма интересный. Конечно нам бы хотелось покорять вершины интеграции этого железа в MDM, а не разбираться в сыром варианте того, что нам дали за весьма нескромную плату. Но тем не менее, веря в лучшее, и что в будущем вопросов будет меньше, да и на шаманской полке появятся новые бубны, я все же склонен посоветовать попробовать z-wave. Ну а что на счет именно этого датчика, ну не знаю. Все же мой ответ будет - не стоит. Температуру помещения умеют измерять очень много других устройств. И о них мы уже скоро поговорим. Взять даже предыдущий датчик движения. Его позиция в комнате может быть весьма интересной, для получения с него температуры. Датчики дыма и протечки воды тоже меряют температуру. Но их размещение будет не столь интересное. Но их данные тоже можно учитывать в логике. Например, зная температуру на полу и на потолке, можно принимать решения о включении вентиляции и теплого пола. Следующий обзор будет как раз на один из этих датчиков. В будущем, я обновлю этот топик, когда полностью пойму как использовать триггеры этого датчика температуры. ----------------------- Пока что просто добавлю новые наблюдения внизу топика. Настраивал параметры этих датчиков, чтобы они периодически отправляли данные на стик без get запросов. Ранее я писал, что устройства плохо проходили интервью. Я думаю, это ввиду того, что устройство слишком быстро засыпает. Я отправлял сразу несколько команд при настройке, и обычно они не все успевали доходить. А по одной, всегда нормально. Такой косяк у меня только пока что с этими датчиками. Толи это не доточенная совместимость с usb стиком, то ли Everspring сделал такие устройства, я не знаю. В итоге могу сказать, что это не мешает устройству нормально работать в сети, и выполнять свои функции. А вот настройку немного осложняет. Приходится повторно будить устройство, а иногда, повторно отправлять настройку. Но учитывая, что настроил и забыл - с этим можно жить. Эти датчики мне даже начали нравится. Сегодня немного подпилил им ножку, теперь больше не падают. Но с углом обзора дисплея конечно же ничего не поделаешь. Он ужасен. И еще косяк. Раз уж устройство измеряет и температуру и влажность, то могли бы сделать режим периодического переключения этих значений на экране. Кнопка выбора чего показывать, конечно же есть, но те же данные влажности не на столько интересны, чтобы подходить и жать кнопки. А вот зацепить эту информацию взглядом было бы полезно. Параметр Интервал пробуждения (Wake up interval) 7200 сек Параметр №6. Auto Report (Time Interval) размер 2 байта значение 30 мин Параметр №7. Auto Report (Temp. Change) размер 1 байта значение 1 градус (грубо конечно для спец датчика температуры до градуса округлять) Параметр №8. Auto Report (Humid. Change) размер 1 байт значение 5 %

Bagir: Обзор на Бинарный датчик Z-Wave.Me Binary Sensor

Bagir: Тут какая то непонятка выплыла. Z устройства нормально передают данные согласно установленному временному интервалу. Например, каждые 5 минут. Взять тот де датчик движения. В нем есть термометр. Получаю с него данные. Но температура передается одна и та же на протяжении нескольких часов. Вообщем уже и не непонятка. Объяснения этого я добавил вот сюда viewtopic.php?f=8&t=610&p=13611#p13611

Ivan: Просьба отредактировать посты с описанием устройств. Добавить ссылку на сайт http://rus.z-wave.me/shop/ Чтобы получить дополнительное описание по устройству (не для рекламы) Добавляю в список устройств http://smartliving.ru/Main/HardAndSoft

Bagir: Добавить ссылку на сайт Сегодня сделаем! Картинки как раз от них. У меня впереди еще много обзоров. Буду в личку присылать ссылки, чтобы их добавлять

Bagir: Сегодня я вплотную занялся остальным Z железом, и выяснил кучу неприятностей. Многое не завелось с первого раза. Так что я выложу сюда все устройства, которые еще остались, и потихоньку буду обновлять их обзоры. Как только основные вопросы закроются, я буду добавлять устройство на страницу http://smartliving.ru/Main/HardAndSoft Так что если кто еще только собирается купить это железо для использования в МД, пока что советую подождать. А если у кого уже есть, все настроено и работает, обязательно напишите!

Bagir: Обзор на Датчик протечки Fibaro Flood Sensor База знаний 5smart http://rus.z-wave.me/wa-data/public/shop/products/75/07/775/images/229/229.500x0.jpg В МД мы увидим датчик так: http://i.imgur.com/sEMPpWP.png Пока что я не знаю, зачем и почему sensor multilevel был вынесен в третий экземпляр датчика. Но в ПО http://localhost:8083 все именно так же. Внешний вид датчика Fibaro Flood Sensor мне очень понравился. По заверению он вообще умеет плавать. И это правда, вот только без батарейки на борту :) А с батарейкой он хоть и не утонул, то погрузился почти полностью. За секунду вода в корпус не попала, но он не герметичный! Нет резинового уплотнителя на крышке. Плата покрыта лаком, но с виду за затопление не рассчитана. В общем лучше его не топить. Но возможно, ему и ничего не будет. В небольшой луже, я думаю, что он воды не нахлебается, но в далеком плавании ему кирдык. Но вообще то наша цель как раз и не допустить этого плавания. Так что я не буду придираться к малышу. Главное - чтобы он хорошо работал. У датчика есть класс AlarmSensor. Теперь он поддерживается в МД! На скринах из ПО Z-Wave видно как меняется состояние свойств этого класса. Вот например что там можно увидеть без воды: http://i.imgur.com/WogvApH.png А сейчас датчик в воде http://i.imgur.com/zO7i7dN.png Видно, что в 5 группе значение sensorState = 255. По нему можно определить тревогу. Причем эти значения обновляются сразу же, если окунуть датчик в воду. И эти же группы мы увидим в МД. Нулевая группа возможно отвечает либо за перемещение датчика, либо за вскрытие корпуса. Пока не знаю, но позже выясню.

Bagir: Обзор на Датчик дыма Fibaro Smoke Sensor База знаний 5smart http://rus.z-wave.me/wa-data/public/shop/products/96/07/796/images/280/280.500x0.jpg В МД увидим так: http://i.imgur.com/bmx2Hm4.png свойства: http://i.imgur.com/V4Js23A.png Температура, батарейка и новый класс AlarmSensor. Свойства этого класса в ПО Z-Wave: http://i.imgur.com/Y49wOFV.png Вот, раздраконил датчик дымом. Видно что группа 1 показывает значение 255. http://i.imgur.com/Ww70ssf.png Этот датчик так же может видеть резкое изменение температуры. Это будет группа 4

Bagir: Обзор на Брелок Z-Wave.Me Key Fob http://rus.z-wave.me/wa-data/public/shop/products/32/07/732/images/88/88.500x0.jpg Классы http://i.imgur.com/dNXprEh.png Как определится в МД http://i.imgur.com/7AR3giQ.png Пока что из имеющихся работающих классов есть только батарейка. Недавно появился еще класс в котором есть свойство кода действия с кнопкой. Но значение само не обновляется. Причиной тому особенности ПО Z-Wave. Пульт в режиме запуска сцен, ведет себя ни как обычный датчик. И увидеть его активность можно только смотря на ведущий контроллер Z сети. В моем случае, это USB Стик. Но все же временное решение есть, и оно нормально работает. Можно отлавливать это событие у главного контроллера сети, и при этом запускать свой скрипт, который проверить все наши пульты и выключатели, и выяснит что и как было нажато. viewtopic.php?f=8&t=610&p=14018#p14018 Все эти свойства размером 1 байт. Если это выражение сейчас непонятно, то пока что настраивать z железо вам рано. Читайте инструкции и этот форум. Но вообще тут нет ничего сложного, правда когда уже вкурил, и знаешь что к чему. Если что, спрашивайте! Параметр Интервал пробуждения (Wake up interval) 43200 сек - это 12 часов Режим работы пары кнопок 1 и 3 (параметр № 1, размер 1) 0 - Раздельно Режим работы пары кнопок 2 и 4 (параметр № 2, размер 1) 0 - Раздельно Действия для группы 1 (параметр № 11, размер 1) 4 - Отправлять Сцены Действия для группы 2 (параметр № 12, размер 1) 4 - Отправлять Сцены Действия для группы 3 (параметр № 13, размер 1) 4 - Отправлять Сцены Действия для группы 4 (параметр № 14, размер 1) 4 - Отправлять Сцены Отправлять непрошенные отчёт заряда батареек Battery Report при пробуждении (параметр № 30, размер 1) 1 - Тому же узлу, что и оповещение о пробуждении

Bagir: Будущий обзор на Настенный двухклавишный выключатель на батарейках Z-Wave.Me Dual Paddle Wall Controller http://rus.z-wave.me/wa-data/public/shop/products/14/08/814/images/329/329.500x0.png Пока скажу только что интервью и поведение точно такое же как у брелка выше. Похоже можно считать их одинаковыми устройствами. Только дин висит на ключах, а второй на стене. Очень не понравились кнопки у выключателя. Ход кнопки при нажатии меньше чем клик у мышки. К тому же нажатие (сам клик) не прощупывается. Такое ощущение, как будто давишь на сенсорную кнопку. Не знаю, может в этом и вся фишка, а я прост привык к обычным выключателя, где при нажатии ощущается ход кнопки и слышен щелк. Если получится его использовать в МД, возможно со временем мнение о кнопках и поменяется. Но пока просто непривычно.

Bagir: Будущий обзор на Датчик CO Vision Security CO Sensor http://rus.z-wave.me/wa-data/public/shop/products/84/07/784/images/248/248.500x0.jpg Классы: http://i.imgur.com/9iA2yrF.png Тут пока что вообще ничего не ясно. Странно что нет AlarmSensor. Пока что отложил этот датчик.

Bagir: Итог: В МД очень нужен класс AlarmSensor. Он позволит получить от датчиков как основное свойство тревоги, там и несколько дополнительных свойств. Тут я прошу откликнутся Сергея. Есть ли возможность добавить этот класс? И нужно ли собрать по нему еще какие либо данные. Узнал кое что интересное, и в том числе про AlarmSensor тут.

Vit: Итог: В МД очень нужен класс AlarmSensor. Он позволит получить от датчиков как основное свойство тревоги, там и несколько дополнительных свойств. Тут я прошу откликнутся Сергея. Есть ли возможность добавить этот класс? И нужно ли собрать по нему еще какие либо данные. Узнал кое что интересное, и в том числе про AlarmSensor тут. так класс сам можешь добавить в систему или какой класс именно тебе нужен?

Bagir: сам можешь добавитьэх, ну как бы рано мне еще на такие дела покушаться. Я тут могу как слон в посудной лавке такого нагородить. И главное аукнется это может не сразу. Речь идет о файле .\majordomo\modules\zwave\zwave.class.php в нем вероятно требуется дописать функции function scanNetwork() function pollUpdates() Нужно добавить класс команд SENSOR_ALARM. У него 6 групп. GENERAL(0, "General") SMOKE(1, "Smoke") CARBON_MONOXIDE(2, "Carbon Monoxide") CARBON_DIOXIDE(3, "Carbon Dioxide") HEAT(4, "Heat") FLOOD(5, "Flood") Примеры с группами есть у датчиков дыма и протески. Если у устройства есть SENSOR_ALARM, в МД на страничке настройки должны добавиться группы, которые у него есть. Добраться до нужного свойства через браузер можно так: http://localhost:8083/ZWaveAPI/Run/devices.instances.AlarmSensor.data.sensorState.value data - нулевая группа GENERAL. У датчика дыма и протечки, в соответствующих группах, вернет 0 при отсутствии тревоги и 255 при тревожном состоянии.

Bagir: А вообще, кто знает, как в МД работает Z-Wave? Каждую секунду в цикле просто идет поллинг нужных ссылок типа таких? http://localhost:8083/ZWaveAPI/Run/devices.instances.AlarmSensor.data.sensorState.value http://localhost:8083/ZWaveAPI/Run/devices.instances.SensorBinary.data.level.value или сразу забираем все http://localhost:8083/ZWaveAPI/Run/devices и потом выбираем из этой кучи то что нам надо с присвоением нужных свойств объектам МД? Ну или же, что врятли, каким то хитрым образом устроен вызов обратных функций МД при изменении показаний Z датчиков?

sergejey: А вообще, кто знает, как в МД работает Z-Wave? Каждую секунду в цикле просто идет поллинг нужных ссылок типа таких? http://localhost:8083/ZWaveAPI/Run/devices.instances.AlarmSensor.data.sensorState.value http://localhost:8083/ZWaveAPI/Run/devices.instances.SensorBinary.data.level.value или сразу забираем все http://localhost:8083/ZWaveAPI/Run/devices и потом выбираем из этой кучи то что нам надо с присвоением нужных свойств объектам МД? Ну или же, что врятли, каким то хитрым образом устроен вызов обратных функций МД при изменении показаний Z датчиков? Каждую секунду идёт запрос списка изменений в сети, а затем отдельно запрашиваются детали по каждому из устройств, в которых были изменения. По поводу сенсора Alarm, а можно получить то, что отдаёт браузер по запросу к сенсору?

Bagir: Да, конечно! Вот по этой ссылке как раз http://localhost:8083/ZWaveAPI/Run/devices.instances.AlarmSensor.data.sensorState.value ответ будет число 255. Это значение value. Или если надо сразу все 6 групп, то так: http://localhost:8083/ZWaveAPI/Run/devices.instances.AlarmSensor {"supported":true,"name":"AlarmSensor","data":{"name":"devices.19.instances.0.commandClasses.156.data","type":"NoneType","value":null,"updateTime":1410993460,"invalidateTime":1410993459,"version":{"name":"version","type":"int","value":1,"updateTime":1410993461,"invalidateTime":1410993460},"security":{"name":"security","type":"bool","value":false,"updateTime":1410993460,"invalidateTime":1410993459},"interviewDone":{"name":"interviewDone","type":"bool","value":true,"updateTime":1410993463,"invalidateTime":1410993459},"interviewCounter":{"name":"interviewCounter","type":"int","value":9,"updateTime":1410993462,"invalidateTime":1410993459},"alarmMap":{"name":"alarmMap","type":"int","value":33,"updateTime":1410993463,"invalidateTime":1410993459},"alarms":{"name":"alarms","type":"NoneType","value":null,"updateTime":1410993460,"invalidateTime":1410993459},"0":{"name":"0","type":"NoneType","value":null,"updateTime":1410993464,"invalidateTime":1411860768,"srcId":{"name":"srcId","type":"int","value":19,"updateTime":1411861633,"invalidateTime":1410993463},"sensorState":{"name":"sensorState","type":"int","value":255,"updateTime":1411861633,"invalidateTime":1410993463},"sensorTime":{"name":"sensorTime","type":"int","value":0,"updateTime":1411861633,"invalidateTime":1410993463}},"5":{"name":"5","type":"NoneType","value":null,"updateTime":1410993464,"invalidateTime":1411860768,"srcId":{"name":"srcId","type":"int","value":19,"updateTime":1411860808,"invalidateTime":1410993463},"sensorState":{"name":"sensorState","type":"int","value":0,"updateTime":1411860808,"invalidateTime":1410993463},"sensorTime":{"name":"sensorTime","type":"int","value":0,"updateTime":1411860808,"invalidateTime":1410993463}}},"id":156} Это пример датчика протечки. У него из 6 групп есть только 0-General и 5-Flood. К примеру у датчика дыма есть три группы. Их можно видеть в топике обзора на него.

Bagir: Сергей, это конечно наверное нагло с моей стороны просить, но может сразу и 43 класс добавите. Он очень маленький и нужен для брелков и выключателей. И похоже как пока что нужен только мне одному. Но в будущем конечно должен пригодиться и остальным. Ответ браузера и описание я обновил в обзорном топике на брелок viewtopic.php?f=8&t=610&p=13921#p13921 В будущем я уверен, что сумею помогать в разработке системы не только идеями, но и работой. А пока что мне сложновато въехать в написанный код. В структуре файлов z-Wave я разобрался, но многое еще не ясно.

sergejey: Добавил поддержку класса Alarm и класса контроллера сцены (пультов). В последнем читаю свойство CurrentScene -- возможно не то, что нужно, так что надо тестировать. Для добавления новых свойств надо нажать на сканирование сети -- уже настроенные связи останутся и добавяться новые свойства.

Bagir: Аларм отлично настроился. Сразу получаю в объект свойство тревоги. Вечерком обновлю обзоры датчика дыма и протечки, и можно будет считать их законченными. А пульт и выключатель не обновляет свое свойство, пока не зайдешь в настройки Z устройств в МД, и не откроешь его (где линкуем свойства). Вероятно в этот момент происходит повторный опрос. http://i.imgur.com/G6DOarY.png Пульт ведет себя несколько по другому. Ранее я на это просто не обратил внимание. Если посмотреть на тот же датчик протечки, то при опускании его в воду, мы сразу увидим http://i.imgur.com/kOk2Y40.png где 19 это id датчика протечки. Такое можно наблюдать со всеми устройствами в момент передачи ими данных. А теперь посмотрим, что будет, если нажать на кнопку пульта: http://i.imgur.com/GkDF4Nq.png 2 это id стика (usb свистка - главного контроллера сети) а id пульта 28. Но его тут нет. Соответственно и свойство само не обновляется. Пока что это все наблюдения. Будем копать.

sergejey: Можно попробовать в файле ./modules/zwave/zwave.class.php после строчки echo "Unknown device (".$m[0].")\n" добавить echo serialize($v);  перезапустить циклы и посмотреть что будет выдаваться -- возможно там "выщемим" код пульта

Bagir: Сейчас сделаю!

Bagir: Ну задачка. Вот, посмотрите сами, может на что глаз упадет: http://i.imgur.com/5xPNgsC.png id выключателя 29 id пульта 28 Но этих цифр тут нет. Сначала нажал на кнопку выключателя. Затем сразу на кнопку пульта. Отличия есть, но выключатель настроен "из коробки", а пульт я настроил на запуск сцен. Сейчас для чистоты эксперимента, я настрою выключатель точно так же как и пульт и все повторю.

Bagir: Настроил выключатель так же на запуск сцен, и теперь по записям даже нельзя понять, какой выключатель был нажат http://i.imgur.com/0RX7WO6.png instances.<цифра> зависит от кнопки. 1-4. А 0 всегда сопутствует. Видимо чтобы увидеть повторное нажатие той же кнопки. Дело ясное, что дело темное. Если есть идеи, пишите! Пока буду копать вслепую.

sergejey: Возможно нажатие кнопки на пульте меняет текущую сцену, которая хранится в общем контроллере сети. В таком случае, нужно будет делать привязку к этому свойству для устройства типа контроллер, а не для пульта.

Bagir: Я тоже так подумал. В пользу этого предположения еще факт отсутствия этого класса в интервью пульта и выключателя. Возможно действительно надо смотреть в сторону свойств контроллера. И еще грабли: Допустим мы нажали на кнопку 1. http://localhost:8083/ZWaveAPI/Run/devices.instances.commandClasses.data.currentScene.value приняло значение 11. Мы увидим, что значение поменялось на 11, и поймем что нажата кнопка кнопка 1. А вот если второй раз нажать на кнопку 1, то поллингом этого адреса мы уже ничего не увидим, т.к. значение как было 11, так таким и осталось. Следовательно, нам нужен сигнал о том, что было совершено действие с кнопками, а какое именно мы уже и поймем по этому значению value. Но получается так, что и выключатель и пульт шлют одинаковые данные, и понять кто это прислал с помощью анализа echo serialize($v); невозможно. Придется как то подбивать клинья к контроллеру. Что то как то за мудрили zеторубы в этом вопросе... Но есть лазейка. Можно смотреть свойство updateTime, и сравнивать его с предыдущим. Так мы можем понять, что была нажата та же кнопка, если value не изменилось. Вообще я слышал, что они собираются в корне переделать ПО, работающее по http://localhost:8083. И что даже там будут возможности указать GET запросы, чтобы не нужно было делать поллинг. Ну как бы это конечно правильно. Непонятно только куда смотрели до сих пор. Я вообще думал, что Z тема давно выглажена, чиста и прозрачна. А тут оказывается еще не вспаханное поле для творчества. Ну может быть даже так интересней..

Bagir: Как итог: Если других вариантов нет, то можно сделать так: В настройке Z устройств, где линкуем свойства, нового класса scene controller добавляем к уже имещемуся http://localhost:8083/ZWaveAPI/Run/devices.instances.commandClasses.data.currentScene.value еще свойство http://localhost:8083/ZWaveAPI/Run/devices.instances.commandClasses.data.currentScene.updateTime А по отлову echo serialize($v); возможно по слову "currentScene" заводим в МД некое событие. А у же сами потом в своем коде, при наступлении этого события, проверяем все свои объекты пультов и выключателей, и сравниваем updateTime. Где нашли разницу, значит то и было нажато. А что нажато (какая кнопка и как именно) смотрим по value. Остается придумать, как завести в МД событие появления "currentScene" Конечно решение не очень, но работать будет.

Bagir: Временное решение: В файле zwave.class.php в function pollUpdates() после строчки echo "Unknown device (".$m.")\n"; вставляем строку if ( strpos(serialize($v), 'currentScene') && $instance_id == 0 ) { runScript('switchRemoteAction'); Идея в вызове скрипта switchRemoteAction если в данных неизвестного устройства есть слово "currentScene", и экземпляр.0 (чтобы избежать части повторных запусков). На счет первой части условия, наверное можно написать как то более интересно. Я догадался пока что так: сериализируем переменную $v и ищем в ней вхождение строки "currentScene". Если оно есть, то условие выполняется. Наверное проще обратиться сразу к нужному элементу, но, если честно, я пока толком даже не полян, что такое $v. В скрипте switchRemoteAction перебираем все наши пульты и выключатели, и смотрим их свойства времени изменения и код действия с кнопками. Сверяем с объектами МД и если тут что то новое, присваиваем значения и запускаем нужный нам метод.  $cmdUrl = 'http://localhost:8083/ZWaveAPI/Run/devices[28].instances[0].commandClasses[43].data.currentScene.updateTime';
 $ans = getURL($cmdUrl, 0);
 
 $cmdUrl 
= 'http://localhost:8083/ZWaveAPI/Run/devices[28].instances[0].commandClasses[43].data.currentScene.value';
 $ans =  getURL($cmdUrl, 0);  Полный код скрипта я выложу тут чуть позже. Возможно не стоит больше ломать копья. А можно просто подождать выхода новой версии ПО z-wave. Если там будет возможность задавать свои GET запросы по разного рода событиям, то изменения в МД будут очень простые. Так что я сегодня прикручиваю пульт и выключатель в тестовом режиме. Посмотрим как он себя покажет. Планов на них много.

sergejey: Я обновил модуль, так что теперь после сканирования сети в списке устройств появляется с десяток экземпляров контроллера сети (не знаю зачем их столько, но добавляются все, что есть). Каждый из этих экземпляров содержит свойство CurrentScene, которое (по идее) должно обновляться при нажатии кнопки на пульте, так что к нему можно привязаться без изменения кода самого модуля. Так же я добавил к каждому устройству свойство updateTime -- это время (в формате Unix timestamp), когда устройство обновлялось в последний раз.

Bagir: Скоро вернусь домой, и сразу посмотрю! Про количество экземпляров я тоже ничего сказать не могу. Есть наблюдение, что при нажатии на кнопку пульта или выключателя, сразу проскакивает запись с экземпляром контроллера 0, а потом с цифрой соответствующей номеру кнопки. Так что у меня были только 0, 1-4. Но есть же еще пульты, у которых куча кнопок. Может такое обилие экземпляров для них. И еще как вариант, может быть связано с действием над кнопкой. Хотя за это отвечает свойство value. Нажатие, двойное нажатие, долгое нажатие + отпускание после него. * все это на 4 кнопки = будет тоже много. Но это врятли. Разберемся, а если нет, спрошу в сапорте, обычно отвечают на все вопросы. updateTime это отлично! в кнопках пульта без него вообще не отловить повторное нажатие той же кнопки. Да может пригодится и в других датчиках. Вечерком отпишусь!

Bagir: updateTime не хочет обновляться вообще ни у кого. Так и висит одинаковое число, даже после сканирования сети. CurrentScene обновляется при нажатии кнопки, но так же обновляется и при любом другом событии в Z сети. Так что в таком варианте оно бесполезно. А вообще я вижу тупик. Конечно если починить у всех updateTime, и заставить CurrentScene контроллера обновляться только при нажатии кнопок пультов и выключателей, то было бы можно по CurrentScene видеть, что за действие было с кнопкой, а по updateTime находить какой это был выключатель. Но тут тоже есть грабли, я не думаю, что даже после починка updateTime не будет обновляться у объектов выключателей. Они ведут себя не так как другие датчики. Так что есть опасения, что их updateTime все равно не будет обновляться при нажатии кнопок. И еще грабли. Например updateTime обновится при обновлении свойства заряда батареи. А мы по обновлению CurrentScene, светим значение updateTime, и посчитаем это за нажатие кнопки. Ну и еще до кучи. updateTime у каждого свойства свой. Датчик может отправить например свойство движения, но это не означает, что он отправил при этом температуру и батарейку. Я в начале это не продумал. Так что в таком виде updateTime тоже бесполезен. Он должен быть напротив каждой строки, или не быть вообще. Итог: 1. updateTime в основном нужен у объектов пультов и выключателей. Но он должен сам обновляться, при нажатии кнопки, а с этим могут быть проблемы. 2. CurrentScene у контроллера должен реагировать только на нажатия кнопок пультов и выключателей. Надо решить, стоит ли продолжать бороться за "scene controller" или оставить заплаточный вариант с отловом слова 'currentScene'. Если обновление ПО Z-Wave все же будет, а они так то обещали, и также обещали что там будут GET запросы, вот только я не представляю, где именно и на какие события сети, то возможно стоит подождать и посмотреть, чего они там натворят. Если продолжаем борьбу, то я в игре. Если откладываем до обновления Z ПО, то предлагаю пока исключить из сканирования сети стик и класс scene controller.

sergejey: 1. updateTime в основном нужен у объектов пультов и выключателей. Но он должен сам обновляться, при нажатии кнопки, а с этим могут быть проблемы. 2. CurrentScene у контроллера должен реагировать только на нажатия кнопок пультов и выключателей. Надо решить, стоит ли продолжать бороться за "scene controller" или оставить заплаточный вариант с отловом слова 'currentScene'. Если обновление ПО Z-Wave все же будет, а они так то обещали, и также обещали что там будут GET запросы, вот только я не представляю, где именно и на какие события сети, то возможно стоит подождать и посмотреть, чего они там натворят. Если продолжаем борьбу, то я в игре. Если откладываем до обновления Z ПО, то предлагаю пока исключить из сканирования сети стик и класс scene controller. Насчёт updateTime буду смотреть ещё, но для пультов он не будет скорее всего обновляться, раз событие не приходит о нажатии. А currentScene у контроллера не меняется разве? Ведь можно к нему привязаться, нет? Что касается того, что updateTime разный у разных событий одного устройства, то сейчас сделано так, что должно записываться последнее среди всех для данного устройства.

Bagir: А currentScene у контроллера не меняется разве? Ведь можно к нему привязаться, нет? Да, меняется сразу при нажатии кнопки на пульте или выключателе. Но так же и меняется просто так при неизвестных мне событиях. За 5 минут это свойство может обновиться раз 10-15 просто так. Конечно как бы нет в этом беды. Мы все равно будем проверять updateTime. Просо будет лишний исполняемый код. Но зато не придется изменять zwave.class.php Возможно мы найдем этому объяснение и получится исправить. Но на данный момент безотказно работает только это условие: В файле zwave.class.php после строчки        $rec=SQLSelectOne("SELECT ID from zwave_devices WHERE NODE_ID='".$device_id."' AND INSTANCE_ID='".$instance_id."'");
 
       if ($device_id == 2 && $instance_id == 0 ) {
        if ( strpos(serialize($v), 'currentScene') ) { runScript('switchRemoteAction'); } 
       
где 2 это id моего стика. switchRemoteAction мой скрипт по проверке последнего времени обновления в updateTime. Что касается того, что updateTime разный у разных событий одного устройства, то сейчас сделано так, что должно записываться последнее среди всех для данного устройства.Тут если получится сделать обновление у пультов, что наврятли в виду Z особенностей, то нас будут ждать грабли. Допустим нажали кнопку, и updateTime обновился. Мы смотрим на время и по нему понимает какой именно выключатель был нажат. А если выключатель прислал данные о батарейке? Скорее всего updateTime тоже обновится, но он один для всех, и для кнопок (или статусов) и для батарейки. Мы начнем проверять все наши выключатели, и ошибочно поймет, что нажата кнопка. Мое мнение, что updateTime мог бы быть полезен только если он будет у всех свойств. Но в основном я думал о нем для пультов, т.к. это единственный способ понять, на каком пульте была нажата кнопка. Приведу пример своего скрипта switchRemoteAction. Может немного прояснит ситуацию. $zsrv = 'http://localhost:8083';
$zapi = '/ZWaveAPI/Run/devices[].instances[0].commandClasses[43].data.currentScene';

 $ot = 'zKeychain_1'; // Имя объекта пульта
 $dv = '28'; // id устройства
 $cmdUrl = $zsrv.substr_replace($zapi , $dv, 22, 0).'.updateTime';
 $ans = getURL($cmdUrl, 0);
 if (is_numeric($ans)) { 
   if 
(gg($ot.'.zUpdateTime') < $ans) {
     sg($ot.'.zUpdateTime', $ans);
     $cmdUrl = $zsrv.substr_replace($zapi , $dv, 22, 0).'.value';
     $ans =  getURL($cmdUrl, 0);
     sg($ot.'.value', $ans);
     cm($ot.'.IncomingData');
   }
 }  

 $ot 
= 'zKeychain_2'; // Имя объекта выключателя
 $dv = '29'; // id устройства
 $cmdUrl = $zsrv.substr_replace($zapi , $dv, 22, 0).'.updateTime';
 $ans = getURL($cmdUrl, 0);
 if (is_numeric($ans)) { 
   if 
(gg($ot.'.zUpdateTime') < $ans) {
     sg($ot.'.zUpdateTime', $ans);
     $cmdUrl = $zsrv.substr_replace($zapi , $dv, 22, 0).'.value';
     $ans =  getURL($cmdUrl, 0);
     sg($ot.'.value', $ans);
     cm($ot.'.IncomingData');
   }
 }
 
Скрипт работает с объектами, и сверяет полученные updateTime из Z сети со свойствами объекта. Можно было сделать перебор с цикле, но я заленился )) Да и у меня всего их только 2. Пульт и выключатель. Итог: 1. Чтобы не изменять код zwave.class.php нам нужно чтобы свойство currentScene объекта контроллера Z сети реагировало только на нажатия кнопок пультов или выключателей. Возможно оставить и так, но это приведет к исполнению лишнего кода проверок и обращений к Z сети за свойством updateTime всех выключателей. 2. Я пока что не вижу как и где можно применить общее свойство updateTime. Но если это не нагружает код, то пускай конечно будет. Сегодня нет планов на него, но это не значит, что они не появятся завтра. Но все же, имея updateTime для каждого свойства, можно было бы точно видеть, какие данные прислало Z железо. Я уже писал, что стоит датчику прислать чего угодно, в МД обновляются все его слинкованные свойства объектов. Возможно тут был бы полезен updateTime, по которому можно будет понять какое свойство действительно обновилось.

Bagir: Обновился до z-way-server-Windows-x86-v2.0.0-rc8.msi Интерфейс стал интересней. Очень надеюсь, что теперь например розетки и реле перестанут слать данные о скорости ветра и тому подобное... Заглянул в Z модуль МД. Там этого мусора просто вагон! Завтра буду удалять хлам. Хорошо бы, если больше ошибочные пакеты не будут обрабатываться. Увидим. А пока что вроде API живы. Еще не знаю где и что отвалится завтра, но сейчас вижу, что с датчиков движения не приходит статус о движении. Данные об освещенности точно идут, а движение нет. В Raw Data я свойство движения вижу. "level": { "invalidateTime": 1421363055, "updateTime": 1421363463, "type": "bool", "value": true Но вот со старой версии Raw Data у меня нет и сравнить не с чем. Прикрепляю только новый. commandClasses 48 { "commandClasses": { "32": { "name": "Basic", "data": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "level": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 255 } }, "id": 32 }, "48": { "name": "SensorBinary", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "typemask": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 2 }, "1": { "invalidateTime": 1421363055, "updateTime": 1421363463, "type": "empty", "value": null, "sensorTypeString": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "string", "value": "Generalpurpose" }, "level": { "invalidateTime": 1421363055, "updateTime": 1421363463, "type": "bool", "value": false } } }, "id": 48 }, "49": { "name": "SensorMultilevel", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 5 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363057, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "typemask": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "binary", "value": [ 5 ] }, "1": { "invalidateTime": 1421363056, "updateTime": 1421363088, "type": "empty", "value": null, "sensorTypeString": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "string", "value": "Temperature" }, "val": { "invalidateTime": 1421363056, "updateTime": 1421363088, "type": "float", "value": 19.3 }, "deviceScale": { "invalidateTime": 1421363056, "updateTime": 1421363088, "type": "int", "value": 0 }, "scale": { "invalidateTime": 1421363056, "updateTime": 1421363088, "type": "int", "value": 0 }, "scaleString": { "invalidateTime": 1421363056, "updateTime": 1421363088, "type": "string", "value": "\u00b0C" } }, "3": { "invalidateTime": 1421363056, "updateTime": 1421363439, "type": "empty", "value": null, "sensorTypeString": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "string", "value": "Luminiscence" }, "val": { "invalidateTime": 1421363056, "updateTime": 1421363439, "type": "float", "value": 20 }, "deviceScale": { "invalidateTime": 1421363056, "updateTime": 1421363439, "type": "int", "value": 1 }, "scale": { "invalidateTime": 1421363056, "updateTime": 1421363439, "type": "int", "value": 1 }, "scaleString": { "invalidateTime": 1421363056, "updateTime": 1421363439, "type": "string", "value": "Lux" } } }, "id": 49 }, "86": { "name": "CRC16", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 } }, "id": 86 }, "112": { "name": "Configuration", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "1": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 10 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "2": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 15 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "3": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "4": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "6": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 30 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "8": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "9": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 200 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "12": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "14": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 255 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "16": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "20": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 15 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "22": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 30 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "24": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "26": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "40": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 10 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "42": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "60": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "62": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "64": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "66": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 0 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "80": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 10 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "81": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 50 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "82": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 100 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "83": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1000 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2 } }, "86": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 18 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "87": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 28 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } }, "89": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "val": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 }, "size": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1 } } }, "id": 112 }, "114": { "name": "ManufacturerSpecific", "data": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "vendorId": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 271 }, "vendor": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "string", "value": "FibarGroup" }, "productId": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 16385 }, "productType": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 2048 } }, "id": 114 }, "128": { "name": "Battery", "data": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "lastChange": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1421363056 }, "history": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "empty", "value": null, "100": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 1421363056 } }, "last": { "invalidateTime": 1421363055, "updateTime": 1421363056, "type": "int", "value": 100 } }, "id": 128 }, "132": { "name": "Wakeup", "data": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "interval": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 300 }, "nodeId": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 2 }, "min": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "empty", "value": null }, "max": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "empty", "value": null }, "default": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "empty", "value": null }, "step": { "invalidateTime": 1421363056, "updateTime": 1421363055, "type": "empty", "value": null }, "lastWakeup": { "invalidateTime": 1421363056, "updateTime": 1421363388, "type": "int", "value": 1421363388 }, "lastSleep": { "invalidateTime": 1421363056, "updateTime": 1421363388, "type": "int", "value": 1421363388 } }, "id": 132 }, "133": { "name": "Association", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 2 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363057, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "groups": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 3 }, "specificGroup": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null }, "1": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "empty", "value": null, "max": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 5 }, "nodes": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "binary", "value": [ 2 ] } }, "2": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "empty", "value": null, "max": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 5 }, "nodes": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "binary", "value": [ 2 ] } }, "3": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "empty", "value": null, "max": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 1 }, "nodes": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "binary", "value": [ 2 ] } } }, "id": 133 }, "134": { "name": "Version", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 2 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 8 }, "ZWLib": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 3 }, "ZWProtocolMajor": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 3 }, "ZWProtocolMinor": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 67 }, "SDK": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "string", "value": "4.55.00" }, "applicationMajor": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 2 }, "applicationMinor": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 6 }, "hardwareVersion": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 1 }, "firmwareCount": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 1 }, "firmware1": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "major": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 2 }, "minor": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 6 } } }, "id": 134 }, "142": { "name": "MultiChannelAssociation", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 2 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363057, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "groups": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 2 }, "1": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "empty", "value": null, "max": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 5 }, "nodes": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "binary", "value": [ 2 ] }, "nodesInstances": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "binary", "value": [ 2, 1 ] } }, "2": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "empty", "value": null, "max": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "int", "value": 5 }, "nodes": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "binary", "value": [ 2 ] }, "nodesInstances": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "binary", "value": [ 2, 2 ] } } }, "id": 142 }, "143": { "name": "MultiCmd", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 } }, "id": 143 }, "156": { "name": "AlarmSensor", "data": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": true }, "version": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "int", "value": 1 }, "security": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363054, "updateTime": 1421363057, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421363054, "updateTime": 1421363056, "type": "int", "value": 9 }, "alarmMap": { "invalidateTime": 1421363054, "updateTime": 1421363057, "type": "int", "value": 1 }, "alarms": { "invalidateTime": 1421363054, "updateTime": 1421363055, "type": "empty", "value": null }, "0": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "empty", "value": null, "srcId": { "invalidateTime": 1421363056, "updateTime": 1421363435, "type": "int", "value": 39 }, "sensorState": { "invalidateTime": 1421363056, "updateTime": 1421363435, "type": "int", "value": 255 }, "sensorTime": { "invalidateTime": 1421363056, "updateTime": 1421363435, "type": "int", "value": 0 }, "typeString": { "invalidateTime": 1421363056, "updateTime": 1421363057, "type": "string", "value": "GeneralPurposealarm" } } }, "id": 156 }, "96": { "name": "MultiChannel", "data": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "empty", "value": null, "supported": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "bool", "value": false }, "version": { "invalidateTime": 1421363131, "updateTime": 1421363282, "type": "int", "value": 3 }, "security": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "bool", "value": false }, "interviewCounter": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "int", "value": 10 }, "endPoints": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "int", "value": 0 }, "dynamic": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "empty", "value": null }, "identical": { "invalidateTime": 1421363131, "updateTime": 1421363132, "type": "empty", "value": null } }, "id": 96 } }, "data": { "invalidateTime": 1421360011, "updateTime": 1421360012, "type": "empty", "value": null, "dynamic": { "invalidateTime": 1421360011, "updateTime": 1421360012, "type": "bool", "value": false }, "genericType": { "invalidateTime": 1421360011, "updateTime": 1421360013, "type": "int", "value": 32 }, "specificType": { "invalidateTime": 1421360011, "updateTime": 1421360013, "type": "int", "value": 1 } }, "id": 0 }

sergejey: А где можно скачать новую версию? по value буду смотреть, возможно неправильно система распознаёт value: true

Bagir: Вот тут все. В самом низу для винды. http://razberry.z-wave.me/ZWay4Win.msi/

Bagir: Шкурка конечно стала интересней. Но грабли нам тоже опять подложили. Многие пишут, что не запускается. И у меня тоже сразу не завелось. При открытии страницы будет выбор куда идти дальше: Все интересное нам в разделе Expert UI. Но там была ошибка. В начале придется сходить в Z-Way Home Automation UI. Далее Preferensece -> Automation -> Z-Wave binding -> поставить свой com порт стика. Так же люди писали, что бывает этот модуль вообще не загружается при установке и его ставят отдельно. У меня были грабли только с неверно указанным com портом. Причем при установке больше номер порта у нас уже не спрашивают как в прошлой версии. А вообще конечно странная контора... Ценник заоблачный, а в итоге получаем конструктор. Если бы без МД, то я вообще не представляю как можно этот хлам использовать. Тут хоть свою логику работы прикрутить можно. Спасибо sergejey! Но больше всего удивляет даже не лень и не расторопность разработчиков Z-Wave, а полное отсутствие информации. Все приходится самому разыскивать на форумах, где кто то когда то чего то писал.

Ivan: Все кто использует ZWave юзают Vera - а АПИ походу пишут практически только для таких как мы. То есть маленький круг пользователей. Насчёт новой версии. Ubuntu x86 придётся наверно опять собирать библиотеку самому :( - скрещивая несколько пакетов :( УРОДЫ

sergejey: А с Верой работал кто? Как там с API?

Ivan: Не работал но вижу как там другие делают. Сама железка под ZWave заточена. Логика вся на ява скриптах

sergejey: Не работал но вижу как там другие делают. Сама железка под ZWave заточена. Логика вся на ява скриптах Логика ладно... вот API интересно. Фактически, чтобы была возможность получать события/данные от устройств и отправлять им команды.

Bagir: Если дело продумало, так и модуля не надо. Максимум промежуточный класс как с МегаД. Кстати, разработчики Z-Wave обещали, что можно будет настроить их чудо так, чтобы оно при возникновении событий само GET запросы слало на указанный адрес. Но похоже это был баян. Ничего подобного я не нашел. Еще из минусов: при установке новой версии Z ПО говорит, что надо вначале самому удалить старое. Вот приколитесь если бы нам так sergejey сделал :mrgreen: И пиши все по новой после обновления :cry: Ну а по факту получилось так, что теперь надо самому по новой будить все Z железки. Я пока что только датчики движения разбудил. Пока ковырялся с установкой и поиском решения почему не работает, уже близилось утро )) А сейчас бы еще и помучал из офиса, так интервью устройства сами не прошли. Да что там интервью, пришлось имена по новой задавать. Хорошо что сразу к номерам привязался, и было просто их переименовать в соответствии с объектами МД. А то если устройство не определено, так попробуй еще сразу пойми что это за датчик.

Ivan: Как оказалось у меня уже стаял 2.0.0 Просто заменил Alex x86 И всё заработало. Проверить не могу, моё исполнительное устройство обуглилось (Причины так и не пойму пока)

Bagir: Обуглилось? Как? В каком смысле?

Ivan: Fibaro Dimer. Неделю проработал и сдох. Вскрытие показало перегрев блока питания. Причины не ясны. Но по словам скпорта ему не понравились лампы

Bagir: Этого бы горе манагера да на метлу двор мести. Печально конечно с димером вышло. А я еще при самой первой покупке думал взять, за с жабой не договорился )) Похоже хорошо что не хапнул. У меня Fibaro реле на два канала. Но нагрузка просто смешная. Посмотрим сколько отживет. Брал в основном для ретрансляции пакетов от удаленных датчиков.

Bagir: Ivan а вот в версии 2.0.0 были замечены битые пакеты? Например у меня датчик температуры запросто мог прислать давление. А розетки вообще сума сходили. Слали все что только можно придумать. Скорость ветра, освещенность, и просто всякий хлам. Подозреваю, что это из-за их возможности ретранслятора. А Z стик все это добро ел. Естественно весь этот хлам попадал в МД. И со временем, в настройке Z модуля, его скопилась целая помойка. Удалять было бесполезно, к.т. при обновлении сети, все это падало обратно в МД. А как на счет 2.0.0, есть на что надеяться?

Bagir: Ну дела! Данные с датчиков температуры/влажности тоже не идут. Возможно конечно, что это следствие граблей с интервью, и сегодня вечером я их расшатаю. Но вот еще косяк. Смотрите в истории сообщений куча записей Пульт 11. Это Z брелок, на который я уже давно хотел повесить управление подъемными воротами, да все руки не доходили до электрощита. Вот бы сейчас у меня ворота на распашку были... 11 - первая кнопка 11 - нажатие. Теперь однозначно буду делать только с имобилайзером. Если метка не в зоне, пульт работать не должен.

Bagir: Итог обновления на 2.0.0 Не все гладко, не все так просто как должно быть, но однозначно надо. "Левых" данных пока не обнаружено. Розетки не передают скорость ветра, а датчик движения не шлет данные о влажности. И это очень радует. Возможно действительно кого то осенила мысль повесить проверку контрольной суммы на пакеты или что то вроде того. Искаженных данных пока что тоже не обнаружено. Показатель заряда батареек не превышает 100%, температура в комнатах не прыгает временами до сотен градусов, да и освещение больше не зашкаливает за сварочную дугу. Думаю, что у обеих этих проблем был одинаковый корень. И если он полностью исправлен, то никакие трудности обновления уже не пугают. Мне удалось поднять все свои железки за исключением класса 48, о котором писал ранее. А этот класс у меня в датчиках движения на событии движения, и у бинарного сенсора на событии замыкания контактов. "Сырые" данные с датчика обновляются и их можно легко прочитать "level": { "invalidateTime": 1421428814, "updateTime": 1421428967, "type": "bool", "value": false } У меня два варианта: либо скобки у значения, либо то, что его засунули в "1": { } К сожалению сравнить мне уже не с чем. Проверьте кто может до обновления! Конечно перспектива остаться без включения света при движении не радует, но обновиться все равно стоит. А пока sergejey с этим не разобрался, можно написать небольшую заплатку и при изменении того же UpdateTime проверять свойство "value" самому и обновлять статус объекта. Что я сейчас и сделаю. Удачных вам танцев с бубном друзья :lol: { "commandClasses": { "48": { "name": "SensorBinary", "data": { "invalidateTime": 1421428809, "updateTime": 1421428810, "type": "empty", "value": null, "supported": { "invalidateTime": 1421428809, "updateTime": 1421428810, "type": "bool", "value": true }, "version": { "invalidateTime": 1421428810, "updateTime": 1421428811, "type": "int", "value": 2 }, "security": { "invalidateTime": 1421428809, "updateTime": 1421428810, "type": "bool", "value": false }, "interviewDone": { "invalidateTime": 1421428809, "updateTime": 1421428815, "type": "bool", "value": true }, "interviewCounter": { "invalidateTime": 1421428809, "updateTime": 1421428813, "type": "int", "value": 9 }, "typemask": { "invalidateTime": 1421428809, "updateTime": 1421428813, "type": "int", "value": 2 }, "1": { "invalidateTime": 1421428814, "updateTime": 1421428967, "type": "empty", "value": null, "sensorTypeString": { "invalidateTime": 1421428814, "updateTime": 1421428815, "type": "string", "value": "Generalpurpose" }, "level": { "invalidateTime": 1421428814, "updateTime": 1421428967, "type": "bool", "value": false } } }, "id": 48 },

Bagir: А вот и заплатка: devices - id железяки level - свойство которое надо менять Обязательно отвяжите это свойство в Z модуле, а то зациклит //Заплатка для обновления свойства класса 48
$cmdUrl = "http://localhost:8083/ZWaveAPI/Run/devices[39].instances[0].commandClasses[48].data[1].level.value";
$ans = getURL($cmdUrl, 0);
switch ($ans) {
case 'true':
 $this->setProperty('level' , 1);
 break;
case 'false':
 $this->setProperty('level' , 0);
 break;
default:
 
 say
("непонятно");
В Z модуле при изменении свойства Level у меня запускается метод IncomingData. У вас может быть например statuschanged, или что там у кого, не суть. Главное, отключить установку (линк) свойства, которое мы будем сами ставить заплаткой, иначе зациклит! Отключить надо только свойство, а запуск метода, в начал которого будет добавлен этот код, обязательно оставить. http://i.imgur.com/10iNv2o.png

sergejey: Bagir, отличные новости, что работать стало лучше! Запишусь в фан-клуб ZWave, если всё действительно так :) По поводу этого свойства, на следующей неделе разберусь -- есть у меня объект, где всё на ZWave.

Bagir: есть у меня объект, где всё на ZWave.Даже как то страшно звучит! Как общее впечатление? Железки конечно очень полезные, и где нет возможности протянуть провода они сильно выручают, но очень уж беспокоят потери пакетов. Если раньше пакеты доходили битыми, то сейчас вероятнее всего они будут просто игнорироваться контроллером. Думаю, что точно такая же история и с вариантом, когда датчик напрямую передает команды исполнительным устройствам в его ассоциациях. С сервером опять же все как то проще. Тут мы хоть что то может обработать и на все повлиять. А отдельная Z паутина, ну не знаю. Страшно )) Разве как резервный вариант работы без сервера. Но такая возможность увы не настраивается. Я бы совершенно спокойно отнесся к варианту сети на Мегах без сервера, ввиду надежности, на порядок превышающей Z. Но сравнивать радио датчики с проводными конечно глупо. Сейчас у меня в сети 20 устройств. Вчера, когда обновлял Z ПО, а точнее разбирался с последствиями, целый вечер бегал по дому, собирал эти железяки, таскал к серверу и будил их :D Могу только представить чего бы стоил вариант будь их не 20 а 200 к примеру :shock: Очень надеюсь, что в следующих Z обновлениях больше таких номеров вытворять не придется. По поводу класса 48. Заплатка нормально работает. Свет включается так же быстро как и раньше. Так что кто еще в раздумьях - смело обновляйтесь.

Smolalex: А вот и заплатка: devices - id железяки level - свойство которое надо менять Обязательно отвяжите это свойство в Z модуле, а то зациклит //Заплатка для обновления свойства класса 48
$cmdUrl = "http://localhost:8083/ZWaveAPI/Run/devices[39].instances[0].commandClasses[48].data[1].level.value";
$ans = getURL($cmdUrl, 0);
switch ($ans) {
case 'true':
 $this->setProperty('level' , 1);
 break;
case 'false':
 $this->setProperty('level' , 0);
 break;
default:
 
 say
("непонятно");
В Z модуле при изменении свойства Level у меня запускается метод IncomingData. У вас может быть например statuschanged, или что там у кого, не суть. Главное, отключить установку (линк) свойства, которое мы будем сами ставить заплаткой, иначе зациклит! Отключить надо только свойство, а запуск метода, в начал которого будет добавлен этот код, обязательно оставить. http://i.imgur.com/10iNv2o.png Bagir, мучаюсь с глазом. Сделал по твоей рекомендации. Цикл zwave падает при изменении значения Level. Потом поднимается и опять падает. С периодичностью 10 секунд. Похоже на зацикливание.Не могу найти причину. Свойство от Z-wave отвязано. Похоже нельзя обращаться к Глазу в момент изменения Level.? Может зависит от версии . Я обновился до 2.0.1-rc15

Bagir: Таких бед у меня не наблюдается. И если не брать во внимание полное отсутствие надежности работы сети z-wave, сам модуль работы с Z сетью в МД работает отлично. Но к сожалению, очень часто падает сам стик.

Smolalex: Таких бед у меня не наблюдается. И если не брать во внимание полное отсутствие надежности работы сети z-wave, сам модуль работы с Z сетью в МД работает отлично. Но к сожалению, очень часто падает сам стик. У меня RaZberry на Raspberry, MJ на Cubietruck. Cеть z-wave и MJ работают надёжно. Но вот столкнулся с такой проблемой. Имеется объект и свойство связанные с z-wave. (датчик движения) Имеется метод вызываемый при изменении свойства. При чтении свойства объекта (вызывается метод) именно в момент изменения падает цикл z-wave. Пробовал отвязывать свойство. Датчик движения ассоциирован в сети z-wave с выключателем. Пробовал отвязаться от датчика движения и привязаться к выключателю. При чтении свойства выключателя в момент изменения падает цикл z-wave. Подскажите как обойти это, а именно прочитать значение либо объекта MJ, либо самого z-wave без падения цикла z-wave.

SergNB: Эх... жаль, что произошла авария и часть сообщений форума потерялась, писал-писал, теперь переписывать, ну что-ж, всякое бывает. Очень печально, что у такого активного пользователя, как Bagir, оказалась такая ненадежная точка интеграции с Z-wave сетью в виде стика. Много времени вложено в развитие интеграции MD + Z-Wave и в конце звучит разочарование. У меня вся текущая автоматизация построена на Z-wave, где контроллером является VeraLite и никаких проблем с потерями пакетов, сбоями и т.п. не наблюдается, за 2,5 года Vera ни разу не зависла. Причин с потерей пакетов может быть несколько и я хочу высказать свои предположения. Возможно, действительно есть какие-то проблемы со стиком. А возможно, проблемы с маршрутизацией пакетов в Z-wave сети. В каком-то из сообщений упоминалось, что после полного обнуления, все устройства для включения в сеть подносились к контроллеру, включались в сеть и уносились обратно на их постоянное место. При этом в памяти устройства в таблице маршрутизации появлялся прямой маршрут до контроллера, т.к. устройство считало, что контроллер в прямой видимости (при включении в сеть, так и было, верно?). И дальше, вероятно, устройство старательно отсылало пакеты напрямую в контроллер и видимо в большинстве случаев это проходило успешно, но иногда пакеты видимо терялись. Косвенным подтверждением этому может служить ответ на вопрос, проблемы с потерями были со всеми устройствами или с теми, которые наиболее далеко находились от стика? Например в Vera, после добавления нового устройства в Z-wave сеть и установки устройства на его постоянное место рекомендуется нажать кнопку Repair Network, что запускает процесс обновления таблиц маршрутизации на всех устройствах сети и прописывание наиболее оптимальных маршрутов, чтобы посылать пакеты не напрямую к контроллеру, а по цепочке через ближайшие устройства. Возможно причина и не в этом, но как идею проверить можно. Так же можно в переменных каждого устройства обновить информацию о ближайших устройствах, в переменной Neighbors и потом вручную прописать маршрутизацию используя переменную ManualRoute.

Bagir: Спасибо за идеи! Посмотрю что записано в переменных. Да, действительно я полностью разочарован в Z-wave. Маркетинг компании заявляет что их сеть чуть ли не эталон надежности. А на деле мы видим кривое железо и сырой код. Устройств Z-wave у меня очень много. Так что просто сгребсти в ведро и выбросить довольно жаль. Но и работать эта штука не хочет. Испробовало практически все. Сейчас обновился на последнюю z-way-server-Windows-v2.1.2-rc17.msi Как выяснилось это было напрасно. Раньше у меня с периодичностью раз в день-два чип в стике. Его получалось поднимать перезагрузкой чипа с примерно вот так: localhost:8083/ZWaveAPI/Run/SerialAPISoftReset() Но после обновления стала падать вся служба Z-Wave Service. Перезапустить программно невозможно, т.к. после падения остается окно, где нужно нажать Ок. Вероятно мне нужно посмотреть в сторону VeraLite. Работать нормально со стиком эта система скорее всего не будет. Если за столько времени разработчики не смогли ничего исправить, а дописали только новые баги, надеяться тут уже не на что.

Shurman: Досталась мне в руки RaZberry (свежая модель от z-wave.me), и захотел я попробовать её прикрутить. Она работает, и по адресу http://192.168.1.111:8083/ZWaveAPI/Data/0 выдаёт длинный json (ну я как думаю так и должно быть). Пытаюсь в панели управления в Устройства -> Z-Wave нажать на "RaZberry API connection status: OFFLINE ", ввожу туда адрес во всяких видах - всё равно офлайн. Взглянул на код:  //CHECK
   
$url=$this->config['ZWAVE_API_URL'].'ZWaveAPI/Data/0';
   if (!
$url || $url=='http://') {
    return 
0;
   }
 
Из него понятно что надо только URL, без URI. Не нашёл ни в БД ни в config.php данной настройки - добавил ради интереса в config.php - в результате когда нажимаешь "Обновить" - URL в итоге заполняется тем же значением, которое я в config.php прописал. Но - во всех случаях OFFLINE. Кто виноват и что делать? Спасибо, если кто ткнёт носом, куда рыть...

sergejey: Попробуйте зайти в настройку сервиса ZWay в раздел Applications и там ZWave Network (или как-то так, точно не помню), а внём поставить галочку Allow Public Access (тоже не помню точно название).

Victor: Вот точный путь где поставить галочку: Apps=>Z-Wave Network Access uses app Z-Wave Network Access=>Allow public access to Z-Wave API

Bagir: А у меня что то вся служба сдохла сама по себе. Переустановка не помогает. Пока ещё не разбирался что к чему. Но хрень эта не надёжная совершенно. Не знаю как там отдельный контроллер будет работать, но USB свисток это полная ерунда. Само железо глючное. Виснет чип. А ПО вообще на всю голову больное. Повёлся на рекламу. Решил купить сразу корзинку разного железа, чтобы скидку получить. Теперь остался у разбитого корыта. Можно конечно попробовать купить контроллер. Вроде как не сильно ругают. Не знаю, уже сомневаюсь.

Rad81: Вот точный путь где поставить галочку: Apps=>Z-Wave Network Access uses app Z-Wave Network Access=>Allow public access to Z-Wave API Это все хорошо но так у нас появляется то элементы который только Z-wave устройство. Но кроме z-wave устройство у меня есть еще HTTP Device они не как не появляется на Major-е. На вложения можно видеть их

sergejey: HTTP-устройства модуль не вытягивает. Используются только возможности ZWave-шлюза.

leo: Вот точный путь где поставить галочку: Apps=>Z-Wave Network Access uses app Z-Wave Network Access=>Allow public access to Z-Wave API Такая же проблемма. mjd только установил и не могу найти в панели управления эти пункты. Ткните в нужном направлении P.S. Решил. Оказывается настраивать надо на стороне Razzberry, путем установки приложения Z-wave network access

airafree: Приобрел модуль RaZberry2, установил по инструкции https://razberry.z-wave.me/index.php?id=24 на Raspberry Pi3 с MD, после перехода на http://192.168.1.211:8084, выдает Webif is switched off. You can switch it on from Z-Way UI or box shell. В чем может быть проблема?

airafree: Приобрел модуль RaZberry2, установил по инструкции https://razberry.z-wave.me/index.php?id=24 на Raspberry Pi3 с MD, после перехода на http://192.168.1.211:8084, выдает Webif is switched off. You can switch it on from Z-Way UI or box shell. В чем может быть проблема? Спасибо за помощь, заработало.

airafree: Всем привет! Хочу реанимировать ветку Z-Wave, Нашел причину почему не всегда работает класс 48 (CLASS_SENSOR_BINARY), точнее, не со всеми датчиками. Недавно приобрел плату RaZberry2 и датчики, Датчик движения Vision Security Motion Sensor Датчик протечки NEO Coolcam Датчик открытия NEO Coolcam Датчик движения NEO Coolcam Первым подключил датчик Vision Security Motion Sensor VIS_ZP3102, который сразу был обнаружен в MD, все значения датчика обновляются (движение, температура), датчик определился как - Routing Binary Sensor. Вторым подключил датчик движения NEO Coolcam, у которого обновляется только значения параметра "освещенность" (Luminiscence, Lux, класс 49), параметр движения (Level) всегда показывает "0", не обновляется, датчик определился как - Notification Sensor (Датчик уведомления). Параметры датчиков протечки и открытия NEO Coolcam, после установки, также не обновляются (Level=0), датчики определились как Notification Sensor (Датчик уведомления). Датчики_zwave.png В Raw Data (команды) датчика Vision Security Motion Sensor VIS_ZP3102 обратил внимание на то, что в 48 классе, ссылка к значению "level" -> "value" (true/false) идет через (значение) "1". Напомню, у датчика Vision Security Motion Sensor VIS_ZP3102 все значения обновляются, датчик работает штатно. Routing Binary Sensor 20_Датчик движения Vision Security Motion Sensor VIS_ZP3102.png http192.168.1.2118083ZWaveAPIRundevices.instances.commandClasses В остальных датчиках вместо "1" другие значения, Датчик протечки NEO Coolcam - "6"; Notification Sensor_1 (23) датчик протечки_NEO Coolcam.png Датчик открытия NEO Coolcam - "10"; Notification Sensor_2 (19) датчик открытия_NEO Coolcam.png Датчик движения NEO Coolcam - "12"; Notification Sensor_3 (21) датчик движения, осв_NEO Coolcam.png Реализация в zwave.class.php (48 класс); zwave.class.php.png Если в zwave.class.php, указано выше, вместо "1" поставить "6", у датчика протечки NEO Coolcam начинает обновляться значение при срабатывании (Level=1), аналогично с остальными датчиками NEO Coolcam. Попробовал сам раскомментировать выбираемое значение в "...", не получается, падает zwave.class.php, не хватает знаний. Прошу помощи у разработчика, Сергей, Посмотрите, что можно сделать.

woow: Да тут бы интересно если МЖД подружить с Coolcam, как раз акция https://brands.aliexpress.com/en?spm=2114.11010108.24.1.Zp0FV0

vshuka911: Всем привет! Приобрел модуль Razbery 2 и сразу же затык. Как его подружить с малинкой. Может ли кто описать мануал от начала до конца. Что качать как подключать пароли логины... Заранее спасибо

vshuka911: Приобрел 2 реле от фибаро. Но что с ними делать ума не приложу Может кто сможет направить на путь истинный? В приложении z-wave они нашлись а как их добавить в классы и объекты без понятия Нужна помощь!!!Только если можно по подробнее так как в освоении МЖД я новичок

airafree: Приобрел 2 реле от фибаро. Но что с ними делать ума не приложу Может кто сможет направить на путь истинный? В приложении z-wave они нашлись а как их добавить в классы и объекты без понятия Нужна помощь!!!Только если можно по подробнее так как в освоении МЖД я новичок Можно через простые устройства, можно создать объекты.

vshuka911: А можно пожалуста по подробнее....Если нужно создавать обекты то как (хотя бы на одном примере) или есть готовая библиотека для z-wave которую можно импортировать

airafree: Немного эксперементов и танцем с бубном и... 48 класс заработал. Поправил zwave.class.php следующим образом,    if ($rec['CLASS_SENSOR_BINARY']) {

    
$sensor_data=$data->commandClasses->{"48"}->data;
    if (isset(
$data->commandClasses->{"48"}->data->{"1"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"1"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"2"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"2"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"3"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"3"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"4"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"4"};
    }    
    if (isset(
$data->commandClasses->{"48"}->data->{"5"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"5"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"6"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"6"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"7"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"7"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"8"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"8"};
    }    
    if (isset(
$data->commandClasses->{"48"}->data->{"9"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"9"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"10"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"10"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"11"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"11"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"12"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"12"};
    }    
    if (isset(
$data->commandClasses->{"48"}->data->{"13"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"13"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"14"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"14"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"15"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"15"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"16"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"16"};
    }        
    if (isset(
$data->commandClasses->{"48"}->data->{"17"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"17"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"18"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"18"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"19"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"19"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"20"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"20"};
    }    
    if (isset(
$data->commandClasses->{"48"}->data->{"21"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"21"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"22"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"22"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"23"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"23"};
    }
    if (isset(
$data->commandClasses->{"48"}->data->{"24"})) {
     
$sensor_data=$data->commandClasses->{"48"}->data->{"24"};
    }        
    
    
$value=(int)$sensor_data->level->value;

    if (
$value!==$rec['LEVEL']) {
     
$rec['LEVEL']=$value;
     
$rec_updated=1;
    }
    
$properties['Level']=$rec['LEVEL'];
    
$command_classes['Level']=48;
    
$updatedList['Level']=$sensor_data->{"updateTime"};
    if (
$sensor_data->{"updateTime"}>$updateTime) {
     
$updateTime=$sensor_data->{"updateTime"};
    }
   } 
Добавил побольше устройст на всякий случай, пока работает без ошибок.

vshuka911: Ребят! Кто подскажет как Homebrige для Razbery запустить на малинке через start up чтобы при включении ее в сеть он поднимался автоматически а то приходится после падения питания каждый раз запускать его снова

airafree: Сергей, прошу внести изменения по 48 классу в zwave.class.php при обновлении, использую в течение месяца, проблем и ошибок нет, все работает стабильно. if ($rec) { $sensor_data=$data->commandClasses->{"48"}->data; if (isset($data->commandClasses->{"48"}->data->{"1"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"1"}; } if (isset($data->commandClasses->{"48"}->data->{"2"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"2"}; } if (isset($data->commandClasses->{"48"}->data->{"3"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"3"}; } if (isset($data->commandClasses->{"48"}->data->{"4"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"4"}; } if (isset($data->commandClasses->{"48"}->data->{"5"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"5"}; } if (isset($data->commandClasses->{"48"}->data->{"6"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"6"}; } if (isset($data->commandClasses->{"48"}->data->{"7"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"7"}; } if (isset($data->commandClasses->{"48"}->data->{"8"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"8"}; } if (isset($data->commandClasses->{"48"}->data->{"9"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"9"}; } if (isset($data->commandClasses->{"48"}->data->{"10"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"10"}; } if (isset($data->commandClasses->{"48"}->data->{"11"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"11"}; } if (isset($data->commandClasses->{"48"}->data->{"12"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"12"}; } if (isset($data->commandClasses->{"48"}->data->{"13"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"13"}; } if (isset($data->commandClasses->{"48"}->data->{"14"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"14"}; } if (isset($data->commandClasses->{"48"}->data->{"15"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"15"}; } if (isset($data->commandClasses->{"48"}->data->{"16"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"16"}; } if (isset($data->commandClasses->{"48"}->data->{"17"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"17"}; } if (isset($data->commandClasses->{"48"}->data->{"18"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"18"}; } if (isset($data->commandClasses->{"48"}->data->{"19"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"19"}; } if (isset($data->commandClasses->{"48"}->data->{"20"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"20"}; } if (isset($data->commandClasses->{"48"}->data->{"21"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"21"}; } if (isset($data->commandClasses->{"48"}->data->{"22"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"22"}; } if (isset($data->commandClasses->{"48"}->data->{"23"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"23"}; } if (isset($data->commandClasses->{"48"}->data->{"24"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"24"}; } $value=(int)$sensor_data->level->value; if ($value!==$rec) { $rec=$value; $rec_updated=1; } $properties=$rec; $command_classes=48; $updatedList=$sensor_data->{"updateTime"}; if ($sensor_data->{"updateTime"}>$updateTime) { $updateTime=$sensor_data->{"updateTime"}; } }

airafree: Сергей, прошу внести изменения по 48 классу в zwave.class.php при обновлении, использую в течение месяца, проблем и ошибок нет, все работает стабильно. if ($rec) { $sensor_data=$data->commandClasses->{"48"}->data; if (isset($data->commandClasses->{"48"}->data->{"1"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"1"}; } if (isset($data->commandClasses->{"48"}->data->{"2"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"2"}; } if (isset($data->commandClasses->{"48"}->data->{"3"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"3"}; } if (isset($data->commandClasses->{"48"}->data->{"4"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"4"}; } if (isset($data->commandClasses->{"48"}->data->{"5"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"5"}; } if (isset($data->commandClasses->{"48"}->data->{"6"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"6"}; } if (isset($data->commandClasses->{"48"}->data->{"7"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"7"}; } if (isset($data->commandClasses->{"48"}->data->{"8"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"8"}; } if (isset($data->commandClasses->{"48"}->data->{"9"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"9"}; } if (isset($data->commandClasses->{"48"}->data->{"10"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"10"}; } if (isset($data->commandClasses->{"48"}->data->{"11"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"11"}; } if (isset($data->commandClasses->{"48"}->data->{"12"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"12"}; } if (isset($data->commandClasses->{"48"}->data->{"13"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"13"}; } if (isset($data->commandClasses->{"48"}->data->{"14"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"14"}; } if (isset($data->commandClasses->{"48"}->data->{"15"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"15"}; } if (isset($data->commandClasses->{"48"}->data->{"16"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"16"}; } if (isset($data->commandClasses->{"48"}->data->{"17"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"17"}; } if (isset($data->commandClasses->{"48"}->data->{"18"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"18"}; } if (isset($data->commandClasses->{"48"}->data->{"19"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"19"}; } if (isset($data->commandClasses->{"48"}->data->{"20"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"20"}; } if (isset($data->commandClasses->{"48"}->data->{"21"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"21"}; } if (isset($data->commandClasses->{"48"}->data->{"22"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"22"}; } if (isset($data->commandClasses->{"48"}->data->{"23"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"23"}; } if (isset($data->commandClasses->{"48"}->data->{"24"})) { $sensor_data=$data->commandClasses->{"48"}->data->{"24"}; } $value=(int)$sensor_data->level->value; if ($value!==$rec) { $rec=$value; $rec_updated=1; } $properties=$rec; $command_classes=48; $updatedList=$sensor_data->{"updateTime"}; if ($sensor_data->{"updateTime"}>$updateTime) { $updateTime=$sensor_data->{"updateTime"}; } } Сергей, спасибо! 48 класс работает.

zhilicov: Привет,помогите пожалуйста , есть такой модуль Z-Wave RaZberry,Raspberry2 почему устройство OFFLINE как победить проблему? спасибо. board-details.pngCapture.PNG

Aven: Модуль работает с Z-Way API. Установите Z-Way, которая работает с этой платой.

zhilicov: извините хочу спросить где взять и как установить? Спасибо.

Rad81: http://razberry.z-wave.me/z-way-server/ wget -q -O - razberry.z-wave.me/install/v3.0.0-rc1-13-gb66410b | sudo bash v3.0.0-rc1-13-gb66410b где версия ставьте нужный вам версию

zhilicov: Спасибо!

[ Обсудить на форуме ]

 

MajorDomo

Информация

Проекты

Партнёры

edit SideBar

 
 
 

 

Blix theme adapted by David Gilbert, powered by PmWiki