Gira + Z-Wave Schalter. 4-Tasten-Funkschalter basierend auf Z-Uno



Welche Aufgaben löst der Funkschalter:

  • In einem reparaturfertigen Raum wurden die Möbel bewegt, der Schalter mit einem Schrank verschlossen
  • Bei der Reparatur dachten sie nicht an einen geeigneten Schalter in der Nähe des Bettes
  • In einem Haus aus Holz ist es nicht ästhetisch, externe Kabel zu ziehen, es sind Funkschalter erforderlich, sondern mit einem bestimmten Design
  • Integration in ein bestehendes Automatisierungssystem

Derzeit gibt es batteriebetriebene Z-Wave-Schalter wie den Z- Wave.Me-Wandcontroller. Diese Schalter verfügen jedoch über ein bestimmtes Schlüsseldesign. Wenn Sie die Schalter Legrand, Gira usw. verwenden möchten, hilft Ihnen das Z-Wave Z-Uno-Board.

Ich werde zeigen, wie man einen batteriebetriebenen Funkschalter aus einem normalerweise Gira-Schalter herstellt, der an jedem geeigneten Ort installiert werden kann. Das Video des Schalters am Ende des Artikels.

Ich benutze den Gira-Schaltmechanismus für Jalousien mit 4 Knöpfen und einem Riegel in der Mitte. Ich habe das Design der Tasten und Rahmen aus der System 55-Serie nur gewählt, weil die Z-Wave- Reihe batteriebetriebener Schalter Rahmen im gleichen Design hat.



Das Hinzufügen neuer Funktionen zu Z-Uno ist noch nicht abgeschlossen. In der neuesten Version wurde KeyScanner hinzugefügt, mit dem Sie Klicks von 112 Tasten gleichzeitig verarbeiten können. Ich beschränke mich darauf, 4 Tasten vom Switch zu lesen.

In der folgenden Skizze erwartet Z-Uno im Ruhemodus, dass eine der Tasten gedrückt wird, nachdem Z-Uno gedrückt wurde, und sendet einen Funkbefehl, nach dem es sofort einschlafen wird, um keinen Batteriestrom zu verbrauchen.



Skizzieren Sie einen 4-Tasten-Funkschalter basierend auf 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 


Der Empfänger des Funkbefehls wird mit Hilfe von Zuordnungen auf jeder der 4 Tasten konfiguriert. Dies kann ein Relais , ein Dimmer , ein RGBW-Band , eine LED-Lampe oder ein anderer Aktuator sein. In der Skizze erstelle ich 2 Gruppen von Zuordnungen zur Steuerung von 2 Geräten. Die oberen Tasten senden Energiebefehle, die unteren Tasten senden Energiebefehle.



Wir verbinden den GIRA-Schaltmechanismus mit den Pins von Z-Uno 1,2,3,4. Der Z-Uno wird mit einem Stecker geliefert. Ich habe ihn in das 1/2 AA-Batteriefach gelötet und in den Batterieanschluss gesteckt. Die 1 / 2AA-Batterie (ER14250) hat eine kompakte Kapazität von 3,6 V, Sie können jedoch auch 2 AA-Batterien verwenden, die auch perfekt in die Steckdose passen.

Z-Uno verfügt über 2 DC-DC-Wandler, die für den Batteriebetrieb nicht erforderlich sind. Daher können sie durch Entfernen der R12-Brücke vom Stromversorgungskreis ausgeschlossen werden. Gleichzeitig wird der Stromverbrauch von Z-Uno im Schlafmodus um das 143-fache von 1 mA auf 7 μA reduziert.

Ich empfehle eine Tiefe von 60 mm für Steckdosen. Es ist bequemer, mit ihnen zu arbeiten. Es ist schwierig, den Z-Uno mit einer Batterie, Kabeln und dem Schalter selbst in eine 40-mm-Steckdose zu schieben, aber Sie können!





2 rechte Tasten steuern die Steckdose, senden EIN- und AUS-Befehle an die Z-Wave.Me-Steckdose .

2 linke Tasten steuern den Dimmer, mit einem kurzen Druck werden EIN- und AUS-Befehle gesendet, mit einem langen Halten von UP oder DOWN werden die Dimmbefehle an den Dimmer Z-Wave.Me gesendet .

Wie Sie am batteriebetriebenen Gerät sehen können, ist das Lesen des Tastenstatus mit Z-Uno sehr einfach. Auf diese Weise können Sie eine ganze Tastatur an Z-Uno anschließen, wobei jede Taste eine nützliche Funktion Ihres Smart Homes erfüllt.


Video des Batterieschalters basierend auf Z-Uno. Dimmer- und Relaissteuerung.

Source: https://habr.com/ru/post/de396839/


All Articles