Элементы умного дома z-wave на Razberry и Z-Uno. Часть 2

В части 1 —  Элементы умного дома z-wave на Razberry и Z-Uno. Часть 1  было рассмотрено создание умного дома для устройств z-wave на контроллере Razberry.

Рассмотрим создание собственных устройств z-wave на плате Z-Uno

Z-Uno — это Arduino в мире Z-Wave. На этой плате вы можете собрать все ваши устройства. Код пишется на языке C в стиле Arduino прямо в среде Arduino IDE. Эта же среда используется для загрузки кода по USB (есть также возможность залить новый код по радио через контроллеры Z-Wave — так называемая перепрошивка OTA). Код управляет всеми ножками как в Arduino. Привычный набор функций Arduino дополнен специфическими для работы с сетью Z-Wave — получения и отправки команд. Все сложности Z-Wave скрыты «под капотом» Z-Uno.

Технические характеристики:

— 28 кБайт FLASH-памяти для ваших скетчей,
— 4 кБайта RAM,
— Z-Wave радио-трансивер на каналах 9.6, 40 и 100 кбит/с,
— 22 GPIO (некоторые перекрываются с другими функциями),
— 4 АЦП,
— 5 ШИМ,
— 2 UART,
— 1 USB (в режиме serial),
— 64 кБайта EEPROM,
— 1 SPI (master или slave режимы)
— 4 ИК-контроллера и 1 ИК-приёмник с функцией обучения,
— 1 TRIAC/ZEROX контроллеры для диммирования,
— 1 прерывание,
— 2 таймера (16 MHz или от внешнего источника),
— I2C (программный на ногах GPIO),
— 1-wire (программный на ногах GPIO),
— 8×6 сканер кнопок (в том числе в режиме глубокого сна),
— 2 сервисных светодиода, 1 сервисная кнопка,
— 1 пользовательский LED (как pin 13 у Arduino).

Распиновка Z-Uno

Режимы питания:

USB 5 В, внешнее 3 В, внешнее 4-15 В или батарейка 3 В,
всегда в сети, спящее или FLiRS,

Функции Z-Wave:

Соответствие Z-Wave Plus,
Все частоты Z-Wave (из-за разных SAW-фильтров будет 3 вида Z-Uno),
Поддержка из коробки шифрования AES 128 бит, описанного в протоколе Z-Wave,
Обновление прошивки и бутлоадера через USB или по радио (Z-Wave OTA),
MultiChannel (10 пользовательских каналов — каждый канал предоставляет одну функцию, см. ниже),
10 групп ассоциаций для управления другими устройствами,
Возможность управлять по радио Z-Wave реле, диммерами, замками, запуском сцен,

Каждый пользовательский канал может содержать один из следующих классов команд Z-Wave:
— Binary Switch (для реле),
— Multilevel Switch (для диммеров, жалюзи),
— Color Switch (для цветных ламп),
— Binary Sensor и Notification (для детекторов и сигнализаций),
— Multilevel Sensor (для датчиков, возвращающих числовое значение),
— Meter (для счётчиков).

Программирование Z-Uno в среде Arduino IDE с дополнительным специальным пакетом для платы Z-Uno. Позволяет создавать свои собственные проекты и загружать их в Z-Uno через USB. Содержит различные примеры для начала.

Запускаем Arduino IDE 1.6.5
Выбираем Файл —> Настройки
B поле Дополнительные ссылки для Менеджера плат добавим адрес z-uno.z-wave.me/files/z-uno/package_z-wave.me_index.json
и нажимаем OK

Выбираем Инструменты —> Плата —> Boards Manager
И в списке плат находим Z-Uno by Z-WANE>ME
и нажимаем Install

После загрузки Плата Z-WANE>ME Z-Uno появится в списке плат

Пункт Записать Загрузчик позволяет обновить загрузчик скетча Z-Uno и стек Z-Wave до самой последней версии, входящей в пакет Z-Uno.
Также в меню появится галочка для включения шифрования (класс команд Security), компактной отправки пакетов (класс команд MultiCommand) и рабочей частоты Frequency (RU, EU, USA). Эти функции не поддерживаются некоторыми контроллерами.
В меню Файл —> Образцы появятся примеры, специфичные для Z-Uno. С них можно начать изучение возможностей Z-Uno.

Создадим 2 устройства на Z-Uno. Одно — RFID-считыватель, второе реле с двойной защелкой.

RFID-считыватель 125 кГц и метки к нему. RFID-считыватель подключается к Z-Uno по последовательному порту

Скетч для Z-Uno

 ZUNO_SETUP_CHANNELS(ZUNO_SENSOR_BINARY(ZUNO_SENSOR_BINARY_TYPE_GENERAL_PURPOSE, getter)); // vars byte statusKey=0x00; unsigned long millisOK = 0; // buffer array for data receive over serial port unsigned int buffer[15];  // counter for buffer array int count = 0; // time wait packet              unsigned long millis1 = 0;  // the code RFID tag combo that opens the door  unsigned int rfid_ok[14] =      {0x2,0x30,0x31,0x30,0x30,0x30,0x37,0x30,0x36,0x30,0x35,0x30,0x35,0x3};  void setup() {     Serial.begin();          // the USB Serial     Serial0.begin(9600);     // the Serial port of rfid reader }   void loop() {     // read data from rfid reader     if (Serial0.available()) {                     millis1 = millis();         // read into buffer         buffer[count] = Serial0.read();         count++;          }         if (millis() - millis1 > 1000 && count > 0) {         // write rfid tag combo code         for (int i = 0; i < count; i++) {              Serial.print(buffer[i], HEX);               Serial.print(" ");         }         // code review         if (control_rfid()) {             Serial.println("OK!!!");             // command to controller             statusKey=0xff;             zunoSendReport(1);             millisOK=millis();         } else {             statusKey=0x00;             zunoSendReport(1);             Serial.println("NO!!!");         }                clearBufferArray();         millis1 = millis();         count = 0;     }      if(statusKey==0xff && (millis()-millisOK >= 5000)) {         statusKey=0x00;         zunoSendReport(1);              } }  // function to clear buffer array void clearBufferArray() {     for (int i = 0; i < 14; i++) {         buffer[i] = NULL;     }                   }  // function code review boolean control_rfid() {     int count1;        count1 = 0;     for (int i = 0; i < 14; i++) {         if (buffer[i] == rfid_ok[i]) {             count1++;         }     }     if (count1 == 14) {         return true;     }   return false;                 }  byte getter(void) {     return statusKey; }

Загружаем скетч на плату и добавляем устройство в сеть z-wave (Включить устройство —> тройное нажатие на кнопку BTN на Z-Uno)

Появится устройство ZUNO_SENSOR_BINARY(), которое назовем rfid. Устройство принимает статус 1 при опознании выбранной метки и через 10 секунд принимает статус 0.

Дверная защелка подключена к Z-Uno через реле. При подаче 1 на выход 13 Z-Uno, на защелку подается 12В и она открывается.

Скетч для этой Z-Uno

 // pin number, where relay is connected #define RELAY_PIN     13  // variable to store current relay state byte lastSetValue;  // next macro sets up the Z-Uno channels // in this example we set up 1 switch binary channel // you can read more on http://z-uno.z-wave.me/Reference/ZUNO_SWITCH_BINARY/ ZUNO_SETUP_CHANNELS(ZUNO_SWITCH_BINARY(getter, setter));  void setup() {   pinMode(RELAY_PIN, OUTPUT); // set up relay pin as output }  void loop() {   // loop is empty, because all the control comes over the Z-Wave }   // function, which returns the previously saved relay value // this function runs only once the controller asks byte getter() {     return lastSetValue; }   // function, which sets new relay state // this function runs only once the controller sends new value void setter(byte newValue) {   // newValue is a variable, holding a "value"   // which came from the controller or other Z-Wave device   if (newValue > 0) { // if greater then zero     digitalWrite(RELAY_PIN, HIGH); //turn relay on   } else {            // if equals zero     digitalWrite(RELAY_PIN, LOW); //turn relay off   }    // save the new value in a variable   lastSetValue = newValue; }

Загружаем скетч на плату и добавляем устройство в сеть z-wave (Включить устройство —> тройное нажатие на кнопку BTN на Z-Uno)

Появится устройство Z-Wave.Me Switch.

Создаем 2 приложения Если —> Тогда. 

При поднесении нужной метки защелка будет открываться на 10 секунд