Multi Switch Status

Statusüberwachung mehrerer Schalter

Multi Switch Status

Jeder der KNX kennt, kennt auch dieses Problem. In KNX Installationen ist es üblich, dass ein Statuslämpchen im Schalter den aktuellen Status eines Lichtes anzeigt. Hier gibt es verschiedene Philosophien, wie man den Status anzeigt. (grünes LED = Lampe aus, rotes LED = Lampe an, oder auch keine LED Lampe aus, rote LED = Lampe an usw.) Diese LED verwendet normalerweise die Statusmeldung des Schaltaktors auf der eigenen Status GA.

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 nie 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 "KNXConnection_SIMKNX_raw.h"
#include "elapsedMillis.h"
#include "KNXBasicObjectTypes.h"
#include "KNXObjectDefinitions.h"
#include "KNXMultiSwitchStatus.h"

KNXMultiSwitchStatus* testStatus = new KNXMultiSwitchStatus();


void setup() {
  Serial.begin(9600);
  Serial.println("Ready ! ");
  objectSettings();
  
  testStatus->setInternalBit(1); // nicht notwendig. MultiSwitchStatus ist automatisch internal.
  testStatus->setStatusGA(234);
  testStatus->add(eg_wc);
  testStatus->add(eg_buero);
  testStatus->add(eg_diele);
}

void loop() {
 knx->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 == 's') testStatus->print();
  if (ch == 'a') testStatus->toggle();
 
} // 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. Weiters wird der MultiSwitchStatus als internal definiert (bei Unklarheiten siehe letztes Tutorial). 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. Dies ist hilfreich für den AllesAus Schalter. Eigentlich empfehle ich aber das Auschalten der Lichter rein über KNX zu machen, weil es so auch funktioniert, wenn der KNiXuino mal nicht läuft. In diesem Fall würde nur die Status LED nicht laufen.