Web-Interface

Aus Deutsches DMXC-Wiki

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. Weissbier entwickelt momentan, ebenfalls auf Basis dieser PHP-Klasse, eine Erweiterung des Web-Interfaces zur Benutzung von Kommandobuttons.

PHP-Klasse

Download

http://michael.kuron-germany.de/dmxc/dmxc.inc.php


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.

Web-Interface

Download

http://michael.kuron-germany.de/dmxc/dmxcontrol_php.tar

Funktionen

  • Kommandozeile
  • Gerätesteuerung
  • Befehle
  • Kanalübersicht
  • DIP-Rechner

Screenshots

Iphone kommandozeile.jpg

Browser-Kompatibilität

Das Web-Interface wurde (in standardkonformem Code) für Firefox 2, Firefox 3, Safari 3 und MobileSafari (iPhone OS 2.0) entwickelt. In jedem anderen standardkonformen Browser sollte das Web-Interface daher auch problemlos funktionieren. Besonders ältere Internet Explorer-Versionen sind daher nicht damit kompatibel. Eine Optimierung auf diese älteren Browser ist nicht geplant - es handelt sich hier bei um Bugs in den Browsern und nicht im Web-Interface, wodurch eine Anpassung des Codes an ebendiese Bugs sehr zeitaufwendig ist.

Getfirefox.gif Getsafari.gif

Browser Kompatibilität
Firefox 2 ++
Firefox 3 ++
Internet Explorer 6 +
Internet Explorer 7 +
Internet Explorer 8 +
Internet Explorer Mobile (Windows Mobile 5) --
Opera 9.5 +
Opera Mobile 9.5 +
Safari 2 +
Safari 3 ++
Safari Mobile (iPhone 2.0) ++

Legende

++ sehr gut, weil für diesen Browser optimiert
+ gut
0 ungetestet
- schlecht
-- unbenutzbar

Installation

  1. dmxcontrol_php.tar auf den Webserver entpacken.
  2. In der Datei ./config.inc.php die Adresse zum DMXControl-Computer (i.d.R. 127.0.0.1) angeben.
  3. Die Datei dom-drag.js von http://www.dynamicdrive.com/dynamicindex11/domdrag/index.htm (Step2) herunterladen und nach ./Ger=ae=testeuerung kopieren.

Changelog

Version 1.0

  • Erste Version

Version 1.1 (30.08.2008)

  • Anpassungen an DMXControl 2.10 RC1
  • enthält neue Version 1.1 der PHP-Klasse, dadurch viel schneller
  • StartAddress war in früheren Versionen mal mit nur einem d geschrieben - jetzt ist es korrekt, also musste ich auch das Web-Interface anpassen
  • unnötige htmlentities()-Aufrufe entfernt
  • Drag-Felder in der Gerätesteuerung senden jetzt während dem Draggen alle 100ms ihren Wert an DMXControl und nicht mehr erst nach dem Loslassen

Version 1.1.1 (08.09.2008)

Version 1.1.2 (23.12.2008)

  • Kleine Probleme bei der Handhabung von Javascript-Events auf dem iPhone behoben.

Known Bugs

  • Beim Draggen in der Gerätesteuerung wird der neue Wert während dem Draggen nur alle 100ms an DMXControl übertragen - weil sonst mehrere Verbindungen zu geöffnet werden, die Terminal-Schnittstelle aber nur eine zulässt. (Beim Loslassen wird hingegen der Wert sofort übertragen.)
  • Auf dem iPhone:
    • Es kann in der Gerätesteuerung nicht gedraggt werden - dies ist aber ein Bug von MobileSafari (das onMouseDown-Event wird erst nach dem onMousemove-Event ausgelöst) - stattdessen muss man an die Zielposition klicken
    • Es wird in den Feldern, in denen nur Zahlen eingegeben werden dürfen, nicht die Zifferntastatur angezeigt - diesen Bug hat Apple mit der Firmware 2.0 eingeführt (bzw. das Feature gestrichen - in der 1.x ging es nämlich, jetzt taucht es nicht mal mehr in der Dokumentation auf)
    • Die Adressleiste wird nicht ausgeblendet

Weitere Bugs siehe PHP-Klasse.

Kommandobuttons

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