Wir lernen Bytewerte kennen und dimmen damit Lichter.
Neben der Beleuchtung ist wohl der Sonnenschutz der klassische Einsatzbereich eines KNX Systems. Wir betrachten zuerst den einfacheren Fall, den Rollladen. (Um Unklarheiten zu vermeiden: Das ist das Ding, das man auf und zu machen kann, jedoch keine Lamellenverstellung etc. möglich ist.) Auch hier besteht wieder das Problem, dass jeder Hersteller seine Aktoren ein wenig anders konfiguriert. So bietet jeder Aktor andere Statusmeldungen, andere Möglichkeiten Szenen zu verwirklichen etc. Die normale Ansteuerung läuft aber glücklicherweise bei allen Aktoren gleich ab. Bei KNiXuino sind daher diese Basisfunktionen implementiert, weil das 1. völlig ausreichend ist und man 2. somit alle Aktoren am Markt ansprechen kann.
Ein Rolladenaktor besitzt mindestens 4 Objekte. Erstens ein auf/ab Objekt, das DPT1 (Bit) Werte empfängt. Dann ein Stop Objekt. Dieses empfängt ebenfalls einen DPT1 Wert, wobei es beim Rollladen egal ist ob man 0 oder 1 sendet, in beiden Fällen stoppt der Rolladen an der momentanen Position. Wir verwenden hier noch das "Position anfahren" Objekt. Bei diesem wird über einen 1 Byte Wert (0-255) eine bestimmte Position angefahren. 255 steht für völlig geschlossen, 0 für offen. Als mögliche Statusmeldung gibt es bei praktisch jedem Aktor eine Positionsmeldung ebenfalls als 1 Byte Wert.
Es sei angemerkt, dass Sonnenschutz und KNX immer etwas problematisch ist. Grund dafür ist, dass Rollladenmotoren nicht sonderlich intelligent sind und ihre Position nicht wirklich wissen. Der Aktor kann also die Position nur an Hand der vergangenen Zeit, nach einem Schliessen oder Öffnen Befehl, abschätzen. Will man also vernünftige Statusmeldungen oder auch Positionen möglichst exakt anfahren, dann ist es notwendig die gesamte Fahrzeit zum Öffnen/Schliessen in der ETS beim Rolladenaktor genau einzustellen. Die Fahrzeit kann immer bei den Aktoreingenschaften eingestellt werden.
Mein Beispielrolladen hat folgende KNX Objekte.
GA | DPT | send/receive |
---|---|---|
2/2/25 | 1 Bit | Rollladen auf/ab (0=auf, 1=ab) |
2/2/26 | 1 Bit | Rollladen stop |
2/2/28 | 1 Byte | Position anfahren |
2/2/27 | 1 Byte | Status Position |
Dementsprechend sieht die Definition im zentralen Definitionfile so aus: (Ich verwende einen doppelten Unterstrich für Beschattung, ob das Sinn macht sei jedem selber überlassen)
KNXObject eg__sz_aa (ga(2,2,25)); KNXObject eg__sz_stop (ga(2,2,26)); KNXObject eg__sz_position (ga(2,2,28),0,1); KNXObject eg__sz_pos_status (ga(2,2,27),0,1);
#include <Arduino.h> #include "KNXConnection.h" #include "KNXObjectDefinitions.h" void setup() { Serial.begin(9600); Serial.println("Ready ! "); objectSettings(); } void loop() { } void serialEvent() { char ch = Serial.read(); if (ch == 's') eg__sz_pos_status.print(); if (ch == '0') eg__sz_aa.set(0); if (ch == '1') eg__sz_aa.set(1); if (ch == '2') eg__sz_stop.set(0); if (ch == '3') eg__sz_stop.set(1); if (ch == '4') eg__sz_position.set(0); if (ch == '5') eg__sz_position.set(128); if (ch == '6') eg__sz_position.set(255); if (ch == '7') eg__sz_position.set(15); if (ch == '8') eg__sz_position.set(25); if (ch == 'l') Serial.println("----------------------------"); } // end keyboardInput
Die Funktionsweise ist eigentlich wie beim Dimmen. Über die Eingaben kann man auf- und abfahren, stoppen oder auch bestimmte Positionen anfahren.