Command Sequence

Wir lernen zeitlich gesteuerte Befehlssequenzen kennen.

Command Sequence

Jetzt lernst du eine weitere Art der "erweiterten" KNX-Objects kennen. Die CommandSequence ist eine fixe Abfolge von KNX Befehlen in einer deifinierten zeitlichen Reihenfolge. Damit lassen sich lustige (und manchmal sogar nützliche) Dinge machen. Ich benütze z.B. eine Command Sequence um das Haus in einen Nacht- und einen Tagmodus zu versetzen. Dabei werden verschiedene Rollläden geschlossen, gedimmte Licher dunkler gedimmt, in manchen Räumen der Strom abgeschalten, das WiFi abgedreht usw. Das ganze kann dann wie ein einzelner Schalter mit eigener Gruppenadresse gehandhabt werden. Man kann also auf einen KNX Schalter die GA legen und so den Nachtmodus aktivieren.

Funktionsweise

Es wird die Command Sequence (ein Objekt) erzeugt. In dieser werden dann beliebig viele Commands mit einer gewissen Zeitverzögerung abgelegt. Schaltet man den Schalter ein, so beginnt die Sequence zu laufen. Wird ausgeschaltet, so wird sie unterbrochen.

Zu jedem Command muss man festlegen welcher Wert an welches Objekt gesendet wird, sowie nach welcher Verzögerung dies stattfinden soll. Die Verzögerung wird in 1/10 Sekunden nach dem Start der Sequenz angegeben.

Ein Beispielsketch

Der Übersichtlichkeit halber hab ich wieder die Definition in den Hauptsketch gezogen. Natürlich kann man das ganze auch im ObjectDefinitionsfile machen.

#include <Arduino.h>
#include "KNXConnection.h"
#include "KNXObjectDefinitions.h"
#include "KNXCommandSequence.h"

KNXCommandSequence testSequence;


void setup() {
  Serial.begin(9600);
  Serial.println("Ready ! ");
  objectSettings();
  
  testSequence.setInternalBit(1);
  testSequence.add(eg_buero, 1, 0);
  testSequence.add(eg_buero, 0, 10);
  testSequence.add(eg_buero, 1, 20);
  testSequence.add(eg_buero, 0, 30);
  testSequence.add(eg_buero, 1, 40);
}

void loop() {
  testSequence.doIt();
}

void serialEvent()
{
  char ch = Serial.read();
  if (ch == 't') testSequence.on();
  if (ch == 's') testSequence.print();
  
} // end keyboardInput


Erklärung

Relevant sind nur wenige Zeilen. Zuerst wird die KNXCommandSequence.h importiert. Dann wird das Objekt angelegt. Im Setup werden darin mehrere Befehle abgelegt. Ich lasse hier nur das Bürolicht im Sekundentakt blinken. Der Konstruktor des KNXCommands erwartet als Übergabewerte einen Zeiger auf das zu schaltende Objekt, den zu sendenen Wert, sowie die Verzögerung in 1/10 Sekunden.

An Tastatureingaben wird das t für das Einschalten, sowie das s um den Status auszugeben, abgefangen. Ist die Sequenz zu Ende, so schaltet sich das Objekt automatisch aus.

Will man die Definitionen im KNXObjectDefinitions.h File, so muss man das Objekt im allgemeinen Teil anlegen und die Zeilen aus Setup in die Funktion objectSettings verschieben.