Lichtsteuerung/Konzept: Unterschied zwischen den Versionen
(Initialer Draft) |
K (Eventabfrage) |
||
Zeile 111: | Zeile 111: | ||
</pre> | </pre> | ||
=== setOutputState === | |||
<pre> | |||
setOutputState(number, state); | |||
</pre> | |||
Setzt den Ausgang <code>number</code> auf den Zustand 0 (aus) oder 1 (an). Beispiel: | |||
<pre> | |||
setOutputState(10, 1); | |||
</pre> | |||
=== getOutputState === | |||
<pre> | |||
getOutputState(number); | |||
</pre> | |||
Gibt den Zustand des Ausgangs <code>number</code> zurück. | |||
Beispiel: | |||
<pre> | |||
print getOutputState(10); | |||
> 1 | |||
</pre> | |||
=== toggleOutputState === | |||
<pre> | |||
toggleOutputState(number); | |||
</pre> | |||
Toggelt den Zustand des Ausgangs <code>number</code>. | |||
Beispiel: | |||
<pre> | |||
toggleOutputState(1); | |||
print getOutputState(1); | |||
> 1 | |||
toggleOutputState(1); | |||
print getOutputState(1); | |||
> 0 | |||
</pre> | |||
=== setInputName === | === setInputName === | ||
Zeile 202: | Zeile 243: | ||
> ... | > ... | ||
> #16: Nicht belegt [MODE_TOGGLE] | > #16: Nicht belegt [MODE_TOGGLE] | ||
</pre> | |||
=== anyOutputOn === | |||
<pre> | |||
anyOutputOn (number[,number,...]); | |||
</pre> | |||
Gibt zurück, ob ein Eingang in der Range eingeschalten ist. Beispiel: | |||
<pre> | |||
anyOutputOn(1,2,3,4,5,6); | |||
> 0 | |||
</pre> | |||
=== onInput === | |||
<pre> | |||
function onInputN {} | |||
</pre> | |||
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. | |||
<pre> | |||
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);} | |||
</pre> | </pre> |
Version vom 1. Dezember 2013, 14:52 Uhr
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. 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. 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. 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. 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. 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);}