Command Sequence

Wir lernen zeitlich gesteuerte Befehlssequenzen kennen.

Multi Switch Status

Jeder der KNX kennt, kennt auch dieses Problem. In KNX Installationen ist es üblich, dass ein Statuslämpchen im Lichtschalter den aktuellen Status eines Lichtes anzeigt. z.B. Brennt das Licht, dann leuchtet auch die rote Statusled im Lichtschalter.

Ein Beispiel

Schalter A schaltet ein Licht über die GA 1/1/1. Wird eine 1 = EIN geschickt, so fängt der Schaltaktor diese Meldung ab, und schaltet den richtigen Ausgang ein. Danach sendet er über die Status-GA 1/1/2 ebenfalls eine 1 zurück, was soviel heißt wie "Ausgang ist jetzt tatsächlich ein". Der Schalter A hört aber nun wiederum auf dieser GA 1/1/2 mit und wenn er hier eine 1 empfängt, dann schaltet er wiederum das kleine LED im Taster ein. So hat man am Taster die Anzeige, dass das Licht jetzt brennt. Das ganze funktioniert auch, wenn das Licht über einen anderen Taster eine WebApp oder was auch immer eingeschaltet wird, weil ja der Aktor bei jedem Schaltvorgang seinen aktuellen Status in den Bus sendet und so die LED so ebenfalls aktualisiert wird.

Nun hat man aber in praktisch jeder KNX Installation z.B. einen "ALLES AUS" Schalter, den man betätigt, wenn man aus dem Haus geht. Ich habe in fast allen Räumen auch einen "ALLES AUS" für diesem Raum immer unten rechts, was ich übrigens sehr empfehlen kann. Jetzt kann aber das Status LED des ALLES AUS Schalters (rein mit KNX) nicht sinnvoll geschalten werden. Nur aus den Statusmeldungen der einzelnen Lichter, kann der Schalter nicht wissen ob jetzt noch ein Licht im Haus an ist oder nicht. (Dazu müsste er beliebig viele StatusGA überwachen und das kann kein Schalter.) Und genau da setzt unser KNiXUino MultiSwitchStatus ein.

Der MultiSwitchStatus überwacht beliebig viele Lichter. Sobald EINES der überwachten Lichter brennt, schaltet sich der MultiSwitchStatus ebenfalls ein. Wenn alle Lichter aus sind, dann schaltet er sich auf aus. So kann man Status LEDs in Tastern aktuell halten. Gibt es ein Licht das man abdrehen kann, so leuchtet die LED, sind alle Lichter aus, leuchtet keine LED.

Ein Beispielsketch


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

KNXMultiSwitchStatus testStatus(ga(4,3,3));


void setup() {
  Serial.begin(9600);
  Serial.println("Ready ! ");
  objectSettings();
  
  testStatus.add(eg_wc);
  testStatus.add(eg_buero);
  testStatus.add(eg_diele);
}

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

void serialEvent()
{
  char ch = Serial.read();
  if (ch == 'q') eg_wc.toggle();
  if (ch == 'w') eg_diele.toggle();
  if (ch == 'e') eg_buero.toggle();
  if (ch == 'a') testStatus.toggle();
  if (ch == 's') testStatus.print();
  if (ch == 'l') Serial.println("-----------------------------------------------------------");
 
} // end keyboardInput



Erklärung

Bei den includes muss der MultiSwitchStatus inkludiert werden. Dann wird er ausserhalb jeder Funktion angelegt. Dies kann direkt im Skript erfolgen, oder in der KNXObjectDefinitions.h Datei.

In setup (bzw. object Settings in der ObjectDefinitions Datei) werden die Lichter hinzugefügt. Ich hab hier einfach 3 beliebige Lichter genommen. Die Meldung ob ein Licht an ist oder nicht wird über die Status GA ausgesendet.

Bei den Tastatureingaben können die Lichter geschalten werden, und der Status des MultiSwitchStatus ausgegeben werden. So kann man testen. In einer realen KNX Umgebung definiert man in der ETS eine Gruppenadresse für z.B. Wohnzimmer alle Lichter aus. Das Ausschalten kann man auf verschiedene Arten lösen (wer will auch über eine Command Sequence, es geht aber auch direkt in der ETS). Das Statuslicht des WZ-alles-aus Schalters legt man auf eine GA die man WZ-alles-aus-status nennt. Diese StatusGA gibt man dem MultiSwitchStatus als StatusGA. Jetzt wird bei jeder Änderung des Status eine Meldung ins KNX geschickt und die StatusLED geht an oder aus.

Den MultiSwitchStatus kann man auch ein- und ausschalten. Dabei werden alle Lichter die beobachtet werden ein- oder ausgeschalten. Ich würde aber dringend raten das Auschalten der Lichter rein über KNX zu machen. Besser ist es nur die Status-LED über den KNiXuino zu machen. Wie ich generell raten würde, was über KNX geht, soll man auch über KNX lösen!