Выключатель Gira + Z-Wave. 4-кнопочный радио выключатель на базе Z-Uno +12





Какие задачи решает радио выключатель:

  • В комнате с готовым ремонтом переместили мебель, шкафом закрыли выключатель
  • На этапе ремонта не продумали удобный выключатель около кровати
  • В доме из бруса не эстетично тянуть наружную проводку, требуются радио выключатели, но с конкретным дизайном
  • Интеграция с существующей системой автоматизации

На данный момент существуют Z-Wave выключатели на батарейках, например Z-Wave.Me Wall Controller, но эти выключатели идут с определенным дизайном клавиш. Если вы хотите использовать выключатели Legrand, Gira и др., то тут на помощь приходит Z-Wave плата Z-Uno.

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

Я использую механизм выключателя Gira для жалюзи с 4 кнопками и фиксацией в середине. Дизайн клавиш и рамки выбрал из серии System 55 только потому, что в линейке Z-Wave выключателей на батарейках есть рамки в таком же дизайне.



Добавление новых функций к Z-Uno происходит постоянно, и в последнем релизе был добавлен KeyScanner, который позволяет обрабатывать нажатия от 112 кнопок одновременно, я ограничусь считыванием 4 кнопок от выключателя.

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



Скетч 4-кнопочный радио выключатель на базе Z-Uno
// KeyPad 1x4
#include <ZMEKeypad.h>
// Count of rows
#define ROWS  1
// Count of columns
#define COLS  4

// Set rows pins
BYTE rowPins[1] = {17};
// Set columns pins
BYTE columnPins[4] = {9, 10, 11, 12};

// Create object KeyPad
ZMEKeypad kpd = ZMEKeypad(columnPins, COLS, rowPins, ROWS);

#define CONTROL_GROUP1 1  // number of Association Group 
#define CONTROL_GROUP2 2  // number of Association Group
#define SWITCH_ON 0xff
#define SWITCH_OFF 0

// Start holding flags for 4 buttons
byte button_0_start_holding = TRUE;
byte button_1_start_holding = TRUE;
byte button_2_start_holding = TRUE;
byte button_3_start_holding = TRUE;

ZUNO_SETUP_ASSOCIATIONS(ZUNO_ASSOCIATION_GROUP_SET_VALUE_AND_DIM, ZUNO_ASSOCIATION_GROUP_SET_VALUE_AND_DIM); // Send Turn On/Off and Dim commands to associated devices
ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_SLEEPING); // SLEEPING MODE

void setup() {
  zunoSetupKeyScannerWU(4); // turn INT1 wakeup into Key Scanner mode with two columns: pins 9 and 10
  // can also be called in any other place before zunoSendDeviceToSleep()
  kpd.begin();
  kpd.setHoldTime(50); // 100 ms for detect hold button, 10 = 100 ms
  kpd.setDebounceTime(2); // 20 ms debounce, 2 = 20 ms
}

void loop() {
  byte actions[4]; // Array that return all actions from keypad (hold, release, press, double press, etc.)
  byte go_to_sleep = FALSE; // go to sleep after button released;
  
  // Default value for buttons - inactive, then read real states
  byte button_0_active = FALSE;
  byte button_1_active = FALSE;
  byte button_2_active = FALSE;
  byte button_3_active = FALSE;

  byte num_touched_keys = kpd.scanKeys(actions);
  if (num_touched_keys) {
    bool hold = KEYPAD_IS_HOLDING(actions[0]);
    switch (KEYPAD_KEYINDEX(actions[0])) {
      case 0: // Button Left Down
        button_0_active = TRUE;
        if (hold && button_0_start_holding) { // If button 0 start holding
          button_0_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP1, TRUE, TRUE); // start dimming down (group, direction, start_stop)
        }
        if (!hold) { // If button 0 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP1, SWITCH_OFF);  
        }
        break;
      case 1: // Button Left Up
        button_1_active = TRUE;
        if (hold && button_1_start_holding) { // If button 1 start holding
          button_1_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP1, FALSE, TRUE); // start dimming up (group, direction, start_stop)
        }
        if (!hold) { // If button 1 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP1, SWITCH_ON);
        }
        break;
      case 2: // Button Right Down
        button_2_active = TRUE;
        if (hold && button_2_start_holding) { // If button 2 start holding
          button_2_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP2, TRUE, TRUE); // start dimming down (group, direction, start_stop)
        }
        if (!hold) { // If button 2 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP2, SWITCH_OFF);
        }
        break;
      case 3: // Button Right Up
        button_3_active = TRUE;
        if (hold && button_3_start_holding) { // If button 3 start holding
          button_3_start_holding = FALSE;
          zunoSendToGroupDimmingCommand(CONTROL_GROUP2, FALSE, TRUE); // start dimming down (group, direction, start_stop)
        }
        if (!hold) { // If button 3 not holding
          go_to_sleep = TRUE;
          zunoSendToGroupSetValueCommand(CONTROL_GROUP2, SWITCH_ON);
        }
        break;
    }
  }

  if(!button_0_start_holding && !button_0_active) { // If button 0 release holding
    button_0_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP1, TRUE, FALSE); // stop dimming down (group, direction, start_stop)
  }
   if(!button_1_start_holding && !button_1_active) { // If button 1 release holding
    button_1_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP1, FALSE, FALSE); // stop dimming up (group, direction, start_stop)
  }
   if(!button_2_start_holding && !button_2_active) { // If button 2 release holding
    button_2_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP2, TRUE, FALSE); // stop dimming down (group, direction, start_stop)
  }
   if(!button_3_start_holding && !button_3_active) { // If button 3 release holding
    button_3_start_holding = TRUE;
    zunoSendToGroupDimmingCommand(CONTROL_GROUP2, FALSE, FALSE); // stop dimming up (group, direction, start_stop)
  }

  // if all buttons released
  if (kpd.isIdled()) {
    go_to_sleep = TRUE;
  }

  if (go_to_sleep) {
    zunoSendDeviceToSleep();  
  }
}
// Для правильной работы этого скетча на версии Z-Uno 2.0.6 требуется в файле /Volumes/Files/user/Library/Arduino15/packages/Z-Uno/hardware/zw8051/2.0.6/libraries/ZMEKeypad/ZMEKeypad.h добавить "BYTE isIdled(){return mon_keys == 0;};" после строки 55 


На каждую из 4 кнопок с помощью ассоциаций настраивается получатель радио команды, это может быть реле, диммер, RGBW лента, LED лампа или другое исполнительное устройство. В скетче я создаю 2 группы ассоциаций для управления 2-мя устройствами, верхние кнопки отправляют команды включения, нижние кнопки отправляют команды выключения.



К пинам Z-Uno 1,2,3,4 подключаем механизм выключателя GIRA. В комплекте с Z-Uno идет штекер, его я припаял к батарейному отсеку 1/2 AA и подключил в разъем для аккумулятора. Батарейка 1/2AA (ER14250) компактная емкая 3.6 В, но можно использовать и 2 батарейки AA, они тоже отлично влезают в подрозетник.

В Z-Uno работают 2 DC-DC преобразователя, при работе от батарейки они не требуются, поэтому их можно исключить из схемы питания, отпаяв перемычку R12. При этом энергопотребление Z-Uno в спящем режиме снижается в 143 раза, с 1 мА до 7мкА.

Подрозетники рекомендую 60 мм глубиной, с ними удобнее работать, в 40 мм подрозетник затолкать Z-Uno с батарейкой, проводами и самим выключателем сложно, но можно!





2 правые кнопки управляют розеткой, отправляют команды ВКЛ и ВЫКЛ на розетка Z-Wave.Me.

2 левые кнопки управляют диммером, при коротком нажатии отправляются команды ВКЛ и ВЫКЛ, при долгом удержании ВВЕРХ или ВНИЗ отправляются команды диммирования на диммер Z-Wave.Me.

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


Видео работы батареечного выключателя на базе Z-Uno. Управление диммером и реле.


Комментарии (24):

  1. PoltoS
    /#9638938

    Конкретно эту задачу можно решить при помощи CONNECT radio transmitter flush-mounted, 4-gang. Однако устройство морально устарело, на старых чипах Z-Wave (т.е. хуже дальность, нет канала 100 kbps, нет шифрования).

    К Z-Uno можно ещё и датчиков пару прикрутить и в соседний подрозетник засунуть (датчик движения, например).

  2. aivs
    /#9638948

    Можно еще разобрать Z-Wave.Me KFob и подпаяться к кнопкам.


  3. lingvo
    /#9638968

    На сколько хватит батарейки у такого выключателя?

    • aivs
      /#9639004 / +1

      В режиме сна Z-Uno потребляет 0.02 мАч (20 мкАч), нажатие длится примерно 1 секунда, и потребление составляет в момент отправки радио команды 20 мАч. Батарейка 1/2 AA имеет примерную емкость 1000мАч.
      Если нажимать в день 30 раз, то потребление в день будет: (20/3600 30) + (0.0224) = 0.17+0.48 = 0.65мА в день
      1000/0.65 = 1538 дней/ 365 = 4.2 года
      Если все правильно посчитал, то более 4х лет должно устройство работать. Но нужно учитывать еще момент, что после того, как батарея разрядится до 2.7В чип не сможет загрузиться. Это примерно произойдет через 2 года, это цифра взята из опыта, Fibaro Door Sensor с такой батарей живет чуть больше 2х лет.

      • lingvo
        /#9639018

        Не верится. Простые Z-wave устройства живут на батарейках меньше. А в Z-Uno есть еще контроллер, потребление которого добавляется к потреблению Z-wave чипа.

        • aivs
          /#9639022

          Сегодня с мультиметром сидел и мерил потребление, если мультиметр не врет и расчеты верны, то так и есть.

          • mrigi
            /#9641376

            Но зачем это всё? Не логичнее ли поставить миниатюрный блок питания?

          • lingvo
            /#9641424

            Импульсный ток при радиообмене не так просто промерять мультиметром.

          • olartamonov
            /#9641840

            Мультиметр на таких нагрузках врёт как сивый мерин.

            Только осциллографом.

        • PoltoS
          /#9642970

          Какой контроллер у Z-Uno? Нет там ничего такого. А вот об отключении DC-DC нужно позаботиться — оторвать одну перемычку — это сильно оптимизирует потребление во сне.

      • olartamonov
        /#9641838 / +1

        Если все правильно посчитал, то более 4х лет должно устройство работать. Но нужно учитывать еще момент, что после того, как батарея разрядится до 2.7В чип не сможет загрузиться. Это примерно произойдет через 2 года, это цифра взята из опыта, Fibaro Door Sensor с такой батарей живет чуть больше 2х лет.


        Всё будет веселее.

        То, что у вас на фото, на 3,6 В — это литий-тионилхлоридная батарейка, Li-SOCl2. При разрядных токах меньше 1-2 мА у них случается пассивация — рост внутреннего сопротивления батареи со временем. То есть, батарейка, которую редко-редко использовали на миллиамперных токах в течение года, начнёт заметно и сильно просаживать напряжение под нагрузкой.

  4. stripe
    /#9639130

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

    • rttm
      /#9639672

      gira, merten, jung, abb. всё что в 55 формфакторе.
      Гира и юнгом уг, кмк. Устанавливал их 15 лет назад и сейчас вот гиру ставлю, а юнг зимой ставил. За 15 лет ничего не поменялось, какие были, такие и остались, механика так себе. Шнайдер мертен улучшают механизмы, что то новое делают. И суппорты на железках, у гиры с юнгом пластик полностью. При снятии-установке сломать можно и сохнут со временем.

      • aivs
        /#9639678

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

        • rttm
          /#9639944

          легранд немного не из той ценовой категории ) Это пока гнется. Сейчас меняю гиру, стояли 9 или 10 лет. Большинство суппортов сломалось. А вот именно через сколько лет они засохли неизвестно. Может через год после установки, а может и через 9.

  5. opanas
    /#9639634

    А можете озвучить стоимость платки Z-Uno? Где заказывали?

    • aivs
      /#9639670

      3500?, например здесь http://www.5smart.ru/collection/diy/product/z-uno-2

      • timelle
        /#9639978 / +1

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

        В целом про история шкаф неубедительна. Сейчас при любом приличном ремонте выключатели переносят к дверным проемам. Шкаф под размер берется, в конце концов. Даже если прохлопали размер, а стена у вас — железобетон без штукатурки, то можно разобрать новый шкаф и отдать в контору по распилу. Там срежут лишнее и закромят за копейки, если речь о ламинате, а не о тамбурине.

        Можно рассказать о том, как безопасны умные выключатели для детей. Мол, если полезет сынок гика с отверткой в выключатель на уровне пояса взрослого, то его там не пришибет. Хотя и тут есть вагон выключателей на 220, в которых малого с отверткой тоже не пришибет.

        Игрушка для взрослых — более верное описание.

        • aivs
          /#9639996 / +1

          В здании представляющем историческую ценность вам не разрешат пригласить электрика для штробления и протяжки проводов.
          Цена решения (в моем случае 1500+500+500+3500 = 6000р) для одних это очень дорого (на ESP8266 можно дешевле сделать), а для других, например у кого дом построен на KNX, это копейки за возможность установить дополнительный выключатель и не долбить 30 метров штробы в замке.

          • lingvo
            /#9640168

            Насколько я помню в линейке Z-wave есть модули, которые позволяют установить рамки от Gira и это не только Merten. Но вопрос в батарейном питании.
            Конкретно в данной ситуации я бы смотрел на EnOcean.

          • timelle
            /#9640888

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

            Кстати, крепеж вашего варианта выключателя, судя по фото, тоже предполагает дырку в стене.
            Или мы будем закреплять на суровом двухстороннем скотче?
            Но если уж захотелось выключатель перенести, то зачем нужно решение на микроконтроллере за 6000 рублей, когда можно радиореле к выключателю за шкафом сделать? Потом так же вывести на выключатель или на пульт.

            Продолжу дискуссию по цене. Я отталкиваюсь не от решения типа «умный дом», а от обычного решения типа «глупый дом». Здравый смысл подсказывает, что расположение элементов умного дома проектируют во время очередного капитального ремонта помещения. Тогда же, заодно, и мебель меняют. Втыкать после этого «умные» выключатели вместо «глупых» выключателей, переплачивая две цены — не самая рациональная затея. Но как хобби или игрушка — вполне себя отправдывает. Те, кто может позволить себе жизнь в историчесокм замке, может получить разрешение на любые (почти) изменения. И это не только в России, но даже в Лондоне. А те, кто живет в исторической рухляди и не имеет столько денег, те скорее посмотрят в сторону радиореле или пошлой переноски.

            Кстати, в некоторых исторических зданиях проводка внешняя, в тканевой оплетке, на керамических изоляторах. Вешай выключатели на здоровье, называется ))
            Как-то так.

            • PoltoS
              /#9642986

              Пока вы тут всё г-ом поливаете, у нас всё партию зун скупили ;)

        • olartamonov
          /#9641842

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


          Очень Эстетичное Решение.

          А ненужные дырки в стенах можно картинами закрывать.

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


          1 % в год у Li-SOCl2.