PHP-Klasse

Aus Deutsches DMXC-Wiki
Zur Navigation springen Zur Suche springen
PHP-Klasse
Entwickler Michael Kuron
Aktuelle Version 1.1.1
Funktioniert mit 2.10
Programmier­sprache php
Download

Beschreibung

Seit Version 2.10 bietet DMXControl eine Terminal-Schnittstelle, über die externe Programme über das Netzwerk auf Funktionen von DMXControl zugreifen können. Für den Zugriff auf die Terminal-Schnittstelle wurde von Michael Kuron eine PHP-Klasse erstellt, die die Kommunikation und den Aufruf der Befehle abwickelt.

Auf Basis dieser PHP-Klasse wurde von Michael Kuron ein Web-Interface entwickelt, das sich an den Funktionen der PDA-Steuerung orientiert. Der User Weissbier entwickelt momentan, ebenfalls auf Basis dieser PHP-Klasse, eine Erweiterung des Web-Interfaces zur Benutzung von Kommandobuttons.

Server-Anforderungen

Es wird serverseitig mindestens PHP5 benötigt, da PHP4 nur eingeschränkt Objektorientierung unterstützt. Die Benutzung von PHP 5.2.5 oder höher wird empfohlen.

Syntax

setChannel ( int $channel, int $value )
setzt Kanal $channel auf den Wert $value (0-255).
int getChannel ( int $channel )
gibt den aktuellen Wert von Kanal $channel zurück.
array getAllDevices ( )
gibt ein assoziatives Array mit allen Geräten zurück - die Keys sind die Geräte-IDs, die Werte die Geräte-Namen.
Array
(
   [1] => PAR left (1)
   [2] => PAR left (2)
   [3] => PAR right (1)
   [4] => PAR right (2)
   [5] => Roboscan 518
)
array getDeviceInfo_byname ( string $device )
gibt Informationen über das Gerät mit dem Namen $device aus.
Array
(
   [Name] => Roboscan 518
   [StartAddress] => 9
   [PanTilt] => Fine 5 7 6 8
   [Channels] => 9
   [Channel1] => Multifunktion
   [Channel2] => Helligkeit
   [Channel3] => Farbe
   [Channel4] => Gobo
   [Channel5] => Effekte
   [Channel6] => Pan
   [Channel7] => Pan (Fein)
   [Channel8] => Tilt
   [Channel9] => Tilt (Fein)
)
array getCommandPossibilities_byname ( string $module, string $function, string $channel )
gibt die Befehlsmöglichkeiten aus. Alle Parameter sind optional (wenn keiner angegeben wird, werden die verfügbaren Module ausgegeben; wenn nur $module angegeben wird, werden die Funktionen dieses Moduls ausgegeben; wenn $module und $function angegeben werden, werden die Kanäle dieser Funktion ausgegeben.
Array
(
   [1] => Deaktiviert
   [2] => Audiotrack
   [3] => BeatTool
   [4] => DMX-Ausgabe
   [5] => DMXIn-Remote
   [6] => Effekte
   [7] => Geräte
   [8] => Gruppenauswahl
   [9] => Kommandozeile
   [10] => Master
   [11] => MIDI-Remote
   [12] => Sound Analyzer
   [13] => Submaster
   [14] => Szenenbibliothek
   [15] => Szenenliste
   [16] => Textbuch

runCommand_byname ( string $module, string $function, string $channel, int $flags, int $value )
führt den Befehl aus. Als $flags kann flagToggle (Umschaltmodus), flagOverride (Wert verwenden), flagAskValue (Wert abfragen) oder flagIgnoreZero (0 ignorieren) angegeben werden; um mehrere Flags zu verwenden, müssen diese mit + aneinandergereiht werden.

Codebeispiel

Dieses Code-Beispiel bindet die Klasse ein, instanziert sie und stellt eine Verbindung mit DMXControl auf localhost her und setzt Kanal 1 auf 100%.

<?php
   require_once "dmxc.inc.php";
   $dmxc = new dmxc("127.0.0.1");
   $dmxc->setChannel(1,255)
?>

Changelog

Version 1.0

  • Erste Version
  • Für DMXControl 2.10 Beta 2 programmiert.

Version 1.1 (30.08.2008)

  • Timeouts sind jetzt nicht mehr nötig, da mehrzeilige Ausgaben von DMXControl seit dem RC1 mit ".\n" abgeschlossen werden. Dies führt zu einem Geschwindigkeitszuwachs von ca. 1000000% (!).

Version 1.1.1 (08.09.2009)

  • RunCommand übergibt jetzt den Wert korrekt (die Schnittstelle erwartet z.B. 100000 statt 100.000)

Known Bugs

  • Die ChannelNotifications, die die Terminalschnittstelle bietet, sind nicht implementiert
    • In einer single-threaded-Programmiersprache wie PHP sind sie recht nutzlos.
    • Nach dem Durchlauf des PHP-Skriptes bleibt keine Verbindung zum Client bestehen, sodass die ChannelNotifications auch nicht dazu benutzt werden können, z.B. eine Kanalübersicht im Web-Interface laufend zu aktualisieren. Falls das aber in Kombination mit AJAX nützlich sein könnte, kann man das aber immer noch implementieren.
  • Nur ein simultaner User
    • Das ist aber eine Beschränkung der DMXControl-Terminalschnittstelle, die nur eine Verbindung gleichzeitig zulässt.

Die ersten beiden Beschränkungen löst Weissbier momentan - er programmiert einen Daemon, der bei ChannelNotifications Befehle ausführen kann und wohl auch mehrere parallele Verbindungen zulässt. Ersteres ist vorallem zur Programmierung von Effekten in PHP nützlich (wenngleich dafür eher die Plugin-Schnittstelle benutzt werden sollte); Letzeres erlaubt mehrere Benutzer gleichzeitig und würde auch eine Beschränkung des Web-Interfaces aufheben.

Forums-Threads

Web-Interface für DMXC 2.10 (Download)

(Beta-Forum, Nur für Betatester zugänglich) PHP-Klasse für DMXControl; iPhone-Kommandobox; vollständiges Web-Interface