Web-Interface für DMXC 2.10 (Download)

We proudly present: The release of DMXControl 3.3.3!


On September 29, 2026, we held our release show for DMXControl 3.3.3. During our usual “hour-long” session, we showed you all the new features in this version and what it now has to offer.
Read all about it in the corresponding news article: We proudly present: The release of DMXControl 3.3.3!


  • Quote

    Vieleicht könnte man dann ja echt Effekte in PHP programmieren, nur müsst man denn halt schauen wie man des mit den mehreren Effekten in einem Thread macht, weil man denn ja nicht einfach nen sleep() in nen Effekt hauen darf, da denn ja alles stehen würde.


    Du könntest mehrere PHP-Prozesse nehmen, die über SIGHUPs und temporäre Dateien kommunizieren - das geht allerdings nur unter Unix/Linux.
    Aber ich würde davon eher abraten, zeitkritische Dinge (wie Effekte) mit PHP zu machen - für solche Sachen gibt es die "normale" Plugin-Schnittstelle von DMXC; die Terminalschnittstelle ist zum Einleuchten/Testen gedacht und vielleicht noch zum Steuern (z.B. Start/Stop, Next, ...).

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Soo, ich habe jetzt die dmxc.inc.php an die neue Version angepasst (StartAddress und Zeilenabschluss mit .).
    Und siehe da, Geschwindigkeitszuwachs ca. 1000000% (!) - von 0,3s auf 0,00003s.
    Ich denke mal, das Cachen von GetCommandPossibilities, GetAllDevices und GetDeviceInfo kann ich mir dann sparen ;) .

    Das Verlagern der Escapes in die Klasse schaue ich mir momentan noch an - ist auch schon wieder einige Zeit her, dass ich den Code geschrieben habe ;) .

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

    Edited 2 times, last by mkuron (August 30, 2008 at 5:03 PM).

  • Soo, ich habe jetzt die dmxc.inc.php an die neue Version angepasst (StartAddress und Zeilenabschluss mit .).
    Und siehe da, Geschwindigkeitszuwachs ca. 1000000% (!) - von 0,3s auf 0,00003s.

    Des ist doch ma schnell. Wenn man des Cachen noch einbaut wirds bestimmt doppelt so schnell wies nun ist, weil wieder nen paar Abfragen wegfallen. Ich kann mir das ja mal morgen und in der nächsten Woche anschauen.

    Kannste die neue Version mal hochladen?

  • Quote

    Wenn man des Cachen noch einbaut wirds bestimmt doppelt so schnell wies nun ist, weil wieder nen paar Abfragen wegfallen.


    Das bezweifle ich - diese 0,00003 Sekunden braucht das PHP-Skript auch, wenn ich jegliche Interaktion mit der Terminalschnittstelle auskommentiere ;) . Das ist also einfach nur die Latenz, die der PHP-Interpreter für sich selbst braucht.

    Quote

    Kannste die neue Version mal hochladen?


    Irgendwann heute abend - ich feile gerade noch an ein paar Ecken.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Quote

    Das bezweifle ich - diese 0,00003 Sekunden braucht das PHP-Skript auch, wenn ich jegliche Interaktion mit der Terminalschnittstelle auskommentiere Augenzwinkern . Das ist also einfach nur die Latenz, die der PHP-Interpreter für sich selbst braucht.

    Ok ... aber vieleicht sieht mans ja wenn man viele Kommandos hintereinander schickt.

  • Da müsstest du schon einige Tausend senden ;) .
    Ich denke nicht, dass sich der Aufwand mit dem geringen Nutzen rechtfertigen lässt (der Caching-Code könnte sich sogar negativ auswirken, weil dann mehr Speicherzugriffe nötig wären); außerdem hat das Caching auch den Nachteil, dass z.B. nach dem Hinzufügen von Geräten erst nach einem Browser-Neustart auch darauf zugegriffen werden kann.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Quote

    Das Verlagern der Escapes in die Klasse schaue ich mir momentan noch an - ist auch schon wieder einige Zeit her, dass ich den Code geschrieben habe ;) .


    Die htmlentities-Aufrufe waren allesamt unnötig (bis auf die, die in einem echo() waren und zur Erzeugung von validem HTML nötig sind).

    Die neue Version der PHP-Klasse (mit korrigiertem "StartAddress" und ohne Timeouts) ist unter http://michael.kuron-germany.de/dmxc/dmxc.inc.php verfügbar. Die neue Version des Web-Interfaces ist unter http://michael.kuron-germany.de/dmxc/dmxcontrol_php.tar (ohne unnötige Escapes und mit während dem Draggen updatendem Pan-/Tilt-Feld in der Gerätesteuerung).

    Viel Spaß damit, Bugs bitte an mich melden.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Also für Effekte eignet sich die Schnittstelle leider doch nicht. Zumindest wenn man Fades ohne Sprünge ausführen will. Also wenn man bei den Fades immer + 1 macht.

    Hier die Ausgabe meines Testscriptes:

    Code
    1434 Befehle innerhalb von 10 Sekunden ausgeführt
    Dauer pro Befehl 0.00697350069735 Sekunden
    143.4 Befehle pro Sekunde

    Dann hab ich mal versucht wies aussieht, wenn ich speziell bei dem SetChannel-befehl nicht auf die Antwort von DMXC warte.

    Das brachte nicht viel, da ich damit DMXC wohl überfordert habe ...
    Es wurden zwar 10446 Befehle innerhalb von 10 Sekunden geschickt, aber DMXC kam mit der Ausgabe nicht hinter her. Das Script war schon längst beendet, aber DMXC war immer noch mit der Ausgabe beschäftigt.

    Außerdem schafft man es damit, dass sich DMXC manchmal lautlos crashed.
    Und das PDA-Plugin bekommt nicht mit, das die verbindung geschlossen wurde ...

  • Quote

    Dann hab ich mal versucht wies aussieht, wenn ich speziell bei dem SetChannel-befehl nicht auf die Antwort von DMXC warte.


    Das ist klar, dass DMXC damit überfordert wird, wenn die Befehle schneller kommen, als sie verarbeitet werden ;) .

    Für zeitkritische Dinge ist die Schnittstelle nicht geeignet (wie du jetzt selber gemerkt hast) - dafür ist die große Plugin-Schnittstelle da.
    Effekte programmierst du am besten in DMXC und rufst sie über RunCommand auf. Effekte in PHP zu programmieren stelle ich mir etwas mühsam vor - da ist die grafische Unterstützung von DMXC doch sehr hilfreich.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Naja ich will ja nicht nur "einfache" Effekte machen.

    Wenn man die richtig programmieren könnte also mit ner Sprache, dann hätte man unendliche Möglichkeiten. Man könnte z.B.
    - immer zufällige Lampen ein und auschalten/ auf einen zufälligen Wert dimmen
    - Effekte in Abhängigkeit zur Aktuellen BPM laufen lassen also z.B.
    Wenn BPM > 90 dann Effekt 1
    Wenn BMP < 90 dann Effekt 2

    Man könnte damit halt des DMXC besser Standalone laufen lassen quasi, was gerade für Partys interessant ist, weil man denn ja auch selber mitfeiern will und nich nur hinterm Laptop stehn möchte.

  • Naja, da sind wir auch schon wieder an den Grenzen der Terminalschnittstelle angekommen: du kannst über die Terminalschnittstelle nämlich keinen BPM abfragen. Auch ob ein Effekt gerade läuft oder nicht kannst du nicht herausfinden.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Für den BMP hätt ich nen Workaround ...
    Einfach einen Effekt erstellen, der bei jedem Beat einen Kanalwert verändert.

    oder irgendwie mit StartChannelNotification
    Dazu müsste die Verbindung aber dauerhaft abgehört werden.

    Der Kanal wird denn von PHP abgefragt und wenn der Wert ungleich dem ist, den der Wert beim letzten mal abfragen hatte, dann kam nen Beat Signal.

    Vieleicht könnte man das abfragen ob ein Effekt läuft oder nicht ja noch in die Schnittstelle implementieren. Man könnt dadraus auch ne allgemeine Schnittstelle machen für sämmtliche Befehle also Start/Stop, läuft ein Effekt usw.
    Weil die Schnittstelle is ja nur für komplette Effekte in PHP zu langsam. Man könnte aber damit Effekte die breits in DMXC erstellt wurden steuern.

  • Quote

    Für den BMP hätt ich nen Workaround ...
    Einfach einen Effekt erstellen, der bei jedem Beat einen Kanalwert verändert.

    Der Kanal wird denn von PHP abgefragt und wenn der Wert ungleich dem ist, den der Wert beim letzten mal abfragen hatte, dann kam nen Beat Signal.


    Das würde nur klappen, wenn die Schleife, die schaut, ob sich der Wert geändert hat, genau mit der gleichen Frequenz durchläuft wie die BPM-Frequenz (oder einem Vielfachend davon). Ansonsten werden die Abstände zwischen den Beats, die PHP registriert, immer unterschiedlich sein.
    Ein wenig übertrieben (wenn PHP einmal pro Sekunde nach einer Änderung schaut und DMXC gerade 1,33 Beats pro Sekunde hat) sähe das dann so aus:
    [Blocked Image: http://img262.imageshack.us/img262/6430/bild3rr5.png]
    Die schwarzen Linien in der DMXC-Spalte geben die "echten" Beats an, die schwarzen Linien in der PHP-Spalte zeigen, wann PHP die Beats registriert. Daraus ergeben sich dann variierende Beat-Frequenzen bzw. Beat-Latenzen (bis PHP den Beat mitbekommt).

    Quote

    Vieleicht könnte man das abfragen ob ein Effekt läuft oder nicht ja noch in die Schnittstelle implementieren. Man könnt dadraus auch ne allgemeine Schnittstelle machen für sämmtliche Befehle also Start/Stop, läuft ein Effekt usw.
    Weil die Schnittstelle is ja nur für komplette Effekte in PHP zu langsam. Man könnte aber damit Effekte die breits in DMXC erstellt wurden steuern.


    Schick am besten mal eine PN an Stefan Krupop. Der ist der Entwickler.

    Quote

    Achso hier denn nochma die Kommandobuttons aber nun für des neue Webinterface.

    Einfach entpacken Datenbank importieren, falls nicht schon vorher mal gemacht und dann kanns los gehn.


    Wäre es nicht praktischer, wenn die Buttons statt einer MySQL-Datenbank eine Datei für ihre Einstellungen nähme? Durch die Datenbank wird die Installation eigentlich nur unnötig kompliziert.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Quote

    Wäre es nicht praktischer, wenn die Buttons statt einer MySQL-Datenbank eine Datei für ihre Einstellungen nähme? Durch die Datenbank wird die Installation eigentlich nur unnötig kompliziert.

    Hmm ... naja denn müsst ich noch was schreiben, was die Daten halt in ne csv speichert und denn nach der ButtonID suchen kann.

    Quote

    Das würde nur klappen, wenn die Schleife, die schaut, ob sich der Wert geändert hat, genau mit der gleichen Frequenz durchläuft wie die BPM-Frequenz (oder einem Vielfachend davon). Ansonsten werden die Abstände zwischen den Beats, die PHP registriert, immer unterschiedlich sein.

    Is mir schon klar ... hatte es auch so gedacht, das x-mal in der Sekunde der Wert abgefragt wird.
    Hatte schonmal ne Funktion zum Warten geschrieben die halt wie sleep() war nur, des in der zeit der beat oder andere Sachen gemacht wurden.

    Wollte des denn auch wieder so machen.

    Außerdem muss der Beat ja nicht 100% genau sein. Reicht ja wenn der ungefähr ist. Denn könnt man die Effekte quasi nach der allgemeinen Geschwindigkeit regeln lassen. Denn würde bei nem Schmusesong langsame Effekte genommen und denn bei Techno oder so halt schnelle.


    Ich hab grad langeweile, daher spiel ich grad nen bisschen mit Sockets rum.
    Hab nu nen Script geschrieben, was quasi die ganze Zeit die verbindung zu DMXC hält und als Relay funktioniert.
    Man muss für des Webinterface nur nen anderen Port angeben und in der dmx.inc.php nen bisschen was verändern. Denn würd die Kommunikation mit DMXC quasi so ablaufen:

    Webinterface --> daemon.php -->DMXC
    Das Funktioniert schonmal soweit. In der daemon.php könnt man denn z.B. die Beatüberwachung reinfügen und denn durch Pluginklassen oder so die Steuerung in Abhängigkeit zum Beat/zeit vornehmen.
    Ich werd damit mal weiter rumbasteln ... vieleicht wirds ja was. Bin ziehmlich spontan was solche Sachen angeht, habs nicht so mit ewigem theoretischem denken ;)

  • Das mit dem Daemon hört sich interessant an....

    In der dmxc.inc.php müsstest du dafür eigentlich nur die __construct-, __destruct- und sendCommand-Funktionen ändern. Oder besser gleich eine Kind-Klasse erstellen, wie sich das für objektorientierte Programmierung gehört:


    Dann kann ich das später (wenn's gut funktioniert) in meine Klasse übernehmen.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

    Edited once, last by mkuron (September 1, 2008 at 4:04 PM).

  • sendCommand hab ich ein klein bisschen umgebaut. Ist aber noch abwärtskompatible.
    Ach und booleanwerte vergleich mit in PHP mit === ;)

    Code
    function sendCommand($command, $multiline = FALSE, $relay = false)		/* Usage: string sendCommand ( string $command ) */		/* Usage: array sendCommand ( string $command , TRUE ) */		{			fwrite($this->conn,$command . self::lineDelimiter);			$this->last_command = $command;			if ($multiline === FALSE)			{				return str_replace(self::lineDelimiter, '', fgets($this->conn));			}			else			{				/*				while ($line = fgets($this->conn))				{					$return[] = str_replace(self::lineDelimiter, '', $line);				}				*/				while ($line != "." . self::lineDelimiter)				{					$line = fgets($this->conn);					$return[] = str_replace(self::lineDelimiter, '', $line);				}				if(!$relay)					array_pop($return); // remove "."				if($relay)					return $return;				else					return implode(self::lineDelimiter, $return);			}		}	}

    Und hier die beiden Funktionen die das Weiterleiten übernehmen.
    Dabei wird die Funktion relay nur einmal beim start aufgerufen falls man des Weiterleiten aktivieren will.
    Die relay_dowork wird immer wieder zwischendurch aufgerufen.

    Ich bau des denn mal in eine Kindklasse ein.

  • Quote

    Ach und booleanwerte vergleich mit in PHP mit === ;)


    Nicht ganz. == vergleicht Werte, === vergleicht Typen und Werte.
    Wenn ich also nicht will, dass 1, 19.67, TRUE, "true" und "dfdsuzg" alle gleich TRUE sind, sondern nur TRUE gleich TRUE ist, nimmt man ===. Wenn es egal ist (wie in diesem Falle), nimmt man ==.

    Software: DMXControl 2.10.5
    Hardware: Digital Enlightenment USB-DMX-Interface
    MIDI-Faderpult: Behringer BCF2000, Firmware 1.10

  • Najo ich machs aber so, wenn in die Variable eh nur Boolean reinkommen, denn vergleich ich des auch so ;)

    Hänge gerade bei der Umwandlung von float nach integer bzw andersrum ...

    Will des X Millisekunden/Mikrosekunden gewartet wird und halt des man einstellen kann wie oft pro Sek z.B. get_bpm ausgeführt wird. Währ ja quatsch, wenn des 200 mal pro Sek ausgeführt wird.

    Hatte mich am anfang mit Millisekunden und Mikrosekunden vertan ...

    EDIT:
    nen bisschen Knifflig das ganze ... da die Sockets normalerweise blocken ..
    Hör für heut auf und mach morgen damit weiter ...
    Aber ich hab schon ne Idee wies klappen könnte

  • Newly created posts will remain inaccessible for others until approved by a moderator. The last reply was more than 365 days ago, this thread is most likely obsolete. It is recommended to create a new thread instead.