Lichtsteuerung/Konzept

Aus RaumZeitLabor Wiki

Einführung

Die Lichtsteuerung verwendet DMX, um die Schaltzustände zu übertragen. Dies ermöglicht es, auch andere Peripherie wie z.b. PAR-Spots anzusteuern. DMX sendet kontinuierlich die Werte für alle 512 Kanäle.

Schaltzustände

In regulären DMX-Setups gibt es nur einen Controller, der alle angeschlossenen Geräte steuert. Im Falle der Lichtsteuerung gibt es da aber ein Problem: Was ist, wenn jemand einen Lichtschalter betätigt? Wie bekommt der Controller den Schaltzustand mit?

Wir verwenden RDM, um dieses Problem zu umgehen. Mittels RDM können Daten von RDM-fähigen Geräten abgerufen werden.

Wird ein Schaltzustand von der Lichtsteuerung verändert, z.b. durch einen Taster, so wird dieser Kanal zukünftig von der Lichtsteuerung ignoriert.

Der Controller frägt den Schaltzustand aktiv mittels DEFAULT_SLOT_VALUE ab, um den aktuellen Wert des Kanals zu erhalten. Die Slotnummern sind 0-31, analog zu den Ausgängen der Lichtsteuerung.

Erst wenn der empfangene Wert über DMX mit dem internen Wert der Lichtsteuerung übereinstimmt, wird der Kanal nicht mehr ignoriert.

Hierdurch ist sichergestellt, daß die Lichtsteuerung autark funktioniert, auch wenn der Controller defekt ist.

Firmware

Die Firmware ist generisch gehalten, sodaß die selbe Firmware für Haupt- und Nebenraum eingesetzt werden kann. Die Konfigurationsdaten werden im EEPROM vorgehalten.

Auf der Lichtsteuerung kommt deshalb bitlash zum Einsatz, welches rudimentäres Scripting ermöglicht. Folgende Funktionen stehen zur Verfügung:

setDeviceName

setDeviceName("description");

Setzt den Namen der Lichtsteuerung. Maximal 32 Zeichen ASCII. Wird im EEPROM abgespeichert. Kann über RDM gesetzt und abgefragt werden (DEVICE_LABEL). Beispiel:

setDeviceName("Lichtsteuerung Hauptraum");

getDeviceName

getDeviceName();

Liefert den Namen der Lichtsteuerung. Beispiel:

print getDeviceName();
> Lichtsteuerung Hauptraum

getDMXStartAddress

getDMXStartAddress();

Liefert die konfigurierte DMX Startaddresse zurück. Kann über RDM gesetzt und abgefragt werden (DMX_START_ADDRESS). Beispiel:

print getDMXStartAddress();
> 32

setDMXStartAddress

setDMXStartAddress(number);

Setzt die DMX-Startaddresse. Wird im EEPROM abgespeichert. Beispiel:

setDMXStartAddress(32);

getRDMUID

getRDMUID();

Liefert die RDM UID zurück. Beispiel:

print getRDMUID();
> 1f13:abde1000

setOutputName

setOutputName(number, "Description");

Gibt dem Ausgang mit number eine Beschreibung, maximal 32 Zeichen, nur ASCII. Wird im EEPROM abgespeichert. Die Beschreibung kann über RDM abgefragt werden. Beispiel:

setOutputName(1, "Lichtkreis 1 (Lager)");

getOutputName

getOutputName(number);

Liefert den Namen eines Ausgangs zurück. Beispiel:

print getOutputName(1);
> Lichtkreis 1 (Lager)

setOutputState

setOutputState(number, state);

Setzt den Ausgang number auf den Zustand 0 (aus) oder 1 (an). Beispiel:

setOutputState(10, 1);

getOutputState

getOutputState(number);

Gibt den Zustand des Ausgangs number zurück.

Beispiel:

print getOutputState(10);
> 1

toggleOutputState

toggleOutputState(number);

Toggelt den Zustand des Ausgangs number.

Beispiel:

toggleOutputState(1);
print getOutputState(1);
> 1
toggleOutputState(1);
print getOutputState(1);
> 0

setInputName

setInputName(number, "Description");

Gibt dem Eingang mit number eine Beschreibung, maximal 32 Zeichen, nur ASCII. Wird im EEPROM abgespeichert. Beispiel:

setInputName(1, "Lichtschalter Tuer Lager");

getInputName

getInputName(number);

Gibt den Namen des Eingangs zurück. Beispiel:

print getInputName(1);
> Lichtschalter Tuer Lager

setInputMode

setInputMode(number, mode);

Setzt den Modus des Eingangs. Wird im EEPROM abgespeichert. Folgende Modis sind definiert:

MODE_TOGGLE: Wechselschalter
MODE_MOMENTARY: Taster

Beispiel:

setInputMode(1, "MODE_MOMENTARY");

getInputMode

getInputMode(number);

Liefert den Modus des Eingangs.

Beispiel:

print getInputMode(1);
> MODE_MOMENTARY

listOutputs

listOutputs();

Gibt alle Ausgänge inklusive der Namen auf dem Terminal zurück. Beispiel:

listOutputs();
> #1: Lichtkreis 1 (Lager)
> #2: Lichtkreis 2 (Lager)
> #3: Lichtkreis 3 (Lager)
> ...
> #32: Nicht belegt

listInputs

listInputs();

Gibt alle Ausgänge inklusive der Namen und des Modus auf dem Terminal zurück. Beispiel:

listInputs();
> #1: Lichtschalter Tuer (Lager) [MODE_TOGGLE]
> #2: Lichtschalter Tuer (Beamer) [MODE_TOGGLE]
> #3: Lichtschalter Tuer (Tafel) [MODE_TOGGLE]
> #4: Lichtschalter Tuer (Kueche) [MODE_TOGGLE]
> ...
> #16: Nicht belegt [MODE_TOGGLE]

anyOutputOn

anyOutputOn (number[,number,...]);

Gibt zurück, ob ein Eingang in der Range eingeschalten ist. Beispiel:

anyOutputOn(1,2,3,4,5,6);
> 0

onInput

function onInputN {}

Wird aufgerufen, wenn sich der logische Zustand des Eingangs ändert. Bei einem Taster ist dies analog zu einem kurzen Tasterdruck. Der Zustand wird mit arg(1) abgerufen. N wird dabei durch den entsprechenden Eingang ersetzt.

Beispiel: Prüft, ob einer der Lichtkreise der Tafel an ist. Wenn ja, schalte alle Lichtkreise der Tafel aus. Wenn nein, schalte alle Lichtkreise der Tafel an.

function onInput1 { z=anyOutputOn(5,6,7,11,12,13); setOutputState(5, !z); setOutputState(6, !z);
setOutputState(7, !z); setOutputState(11, !z); setOutputState(12, !z); setOutputState(13, !z);}