Posts by mkuron

    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.

    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.

    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.

    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.

    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 ;) .

    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, ...).

    Quote

    Ich versteh schon, des einmal das Modul abgefragt werden muss, danach die Funktion und danach der Channel

    Aber um jetzt die Sachen fürn Channel abzufragen wird folgendes alles gemacht:
    Modul
    Funktion
    Modul
    Funktion
    Channel

    Also wurden zwei Abfragen zuviel gemacht oder etwa nicht?


    Nein, das ist nötig. Das ist nämlich so eine Art Menüstruktur, wo man sich immer wieder durchhangeln muss.

    Aber dadurch, dass der Timeout ja jetzt unnötig wird, hat sich das Geschwindigkeitsproblem sowieso praktisch in Luft aufgelöst :D .

    Quote

    Läuft DMXC eigentlich Multithreaded oder hat des ganze nur einen Thread?


    Single-threaded.

    Quote

    EDIT: Mir ist grad aufgefallen, das die Klasse manchmal Fehler produziert z.B. nicht lang genug wartet, bis die Befehlsliste angekommen ist. Bei Funktion hab ich dann nen Error und die Sachen die bei Funktion stehen sollten stehen bei Channel.


    Mhm, das passiert manchmal, wenn DMXControl zu langsam antwortet. Das Problem will ich aber dieses Wochenende lösen (siehe letzter Punkt in diesem Post).

    Quote

    Außerdem wird die Liste der Befehle meineserachtens zu oft abgefragt ... Hier mal der Quelltext einer Ausgabe der HTML Seite.


    Das liegt daran, dass ich kein Caching für diese Daten implementiert habe - das habe ich aber vor, am Wochenende zu tun.

    Quote

    EDIT2: Mir ist grad nochwas aufgefallen ... anscheinend werden die Ausgaben nun doch mit einem . in einer einzelnen zeile begrenzt, so das man keinen Timeout mehr braucht.


    Sehr gut - Update der PHP-Klasse kommt bald! Das war in den Betas, mit denen ich die Klasse entwickelt habe, noch nicht.


    To-Do für nächste Version der PHP-Klasse:
    - StartAddress korrigieren
    - unnötige Escapes überprüfen
    - Timeouts jetzt unnötig, weil Ausgaben mit . abgeschlossen
    - GetCommandPossibilities und GetDevices cachen
    Habe ich was vergessen?

    Quote

    Dann könnte man das vieleicht ja in einer Session zwischenspeichern.
    Denn müsste des nicht bei jedem Aufruf abgefragt werden.


    Gute Idee, ich schau mir das am Wochenende mal an.

    Quote

    Hmm komisch ... bei mir läufts weder under Firefox 3 noch unter IE 7
    Vieleicht hab ich ja auch schon drin rumgepfuscht und kann mich nur nicht mehr erinnern. Aber aufm iPhone läufts ...


    Auf dem iPhone wird ein anderes JavaScript benutzt, weil das iPhone kein Drag kann. Im IE7 geht es vermutlich aber nicht.

    Quote

    Jo des kann sein, das die Schnittstelle mit Sonderzeichen nich klar kommt.
    Währe aber besser, wenn du die Umwandlung nur in der Klasse machst, denn dafür ist OOP ja da, das man nicht wissen muss was die Klasse macht.
    Hatte dadurch nen paar Fehler im Script drin gehabt, weil ich denn quasi nen unescapten String mit einem excapten vergleichen wollte.


    Ok, das schau ich mir nochmal an.

    Im Wiki ist StartAddress jetzt auch mit dd geschrieben, also vermute ich mal, dass das korrigiert wurde. Werde ich mal testen.

    Also, vielen Dank für die Bugreports! Neue Version der Klasse kommt in den nächsten Tagen.

    Quote

    Also ich musste das StartAddres ändern ... nutze Version 2.10
    Hier ne Ausgabe des Arrays:

    Code
    Array ( [Name] => LED-Scheinwerfer [LED-Interface.xml] [StartAddress] => 16 [PanTilt] => No [Channels] => 10 [Channel1] => Strobe [Channel2] => Ausgang 1 [Channel3] => Ausgang 2 [Channel4] => Ausgang 3 [Channel5] => Ausgang 4 [Channel6] => Ausgang 5 [Channel7] => Ausgang 6 [Channel8] => Ausgang 7 [Channel9] => Ausgang 8 [Channel10] => nicht benutzt [.] => )

    Vorher war die Variable immer leer also waren alle geräte immer ab Kanal 1 an. hab mich denn gewundert warum des nicht richtig funktioniert.
    Wenns in 2.9 anders ist, dann könnt man ja ne abfrage reinbauen, ob was in der Variable steht.


    Ok, dann schau ich mir das nochmal an. In 2.9 gab es noch keine Terminalschnittstelle, ich habe die PHP-Klasse mit einer 2.10-Beta entwickelt.

    Quote

    Im normalen Browser geht das Javascript irgendwie garnicht ...


    Ich habe es erfolgreich in Safari 3 und Firefox 2 und 3 unter Mac OS X getestet.


    Quote

    Zu dem RunCommand ... man könnte doch eigentlich auch direkt die Nummern speichern.
    Hab mir deine Klasse noch nicht so genau angeschaut ...
    Vieleicht kann man da noch nen bisschen was optimieren.
    Man könnte z.B. die möglichen Befehle für Effekte usw. direkt in der Klasse definieren. Zwar währs dann nicht mehr so dynamisch, falls in einer neuen Version neue Befehle hinzukommen/wegfallen, aber das könnt man dann ja nen Update rausbringen.


    Die Reihenfolge der Befehle hängt auch von den installierten Plugins ab - es ist also keine gute Idee, die fest einzuprogrammieren.


    Quote

    Zu der Sache mit den Slashes ... mir ist aufgefallen, das du sehr viele Variablen immer umformen lässt ... eigentlich ist das nicht notwendig ...
    Weil wenn du per Formular nen äöü oderso verschickst wird das automatisch umgewandelt und auch wenn du das dann per Get wieder holst.
    Oder brauchste des für das Javascript.


    Ich kann mich auch nicht mehr genau erinnern, warum ich jeweils die Umformung eingebaut habe - ich weiß nur noch, dass es oft nötig war, weil die Terminalschnittstelle eine andere Zeichenkodierung verwendet als PHP normalerweise - ich habe das ganze dann halt so gelöst, Alternativ könnte man das auch mit der iconv-Erweiterung von PHP lösen, um den String in einen anderen Zeichensatz zu konvertieren, aber diese Erweiterung ist nicht auf jeder PHP-Installation vorhanden (auf meiner beispielsweise nicht).

    Quote

    In der Datei: dmx.inc.php
    Suche nach:

    Code
    $deviceid = array_search($device, $this->GetAllDevices());			return $this->GetDeviceInfo($deviceid);


    und füge dadrüber ein:

    Code
    $device = stripslashes($device);

    Das behebt Fehler, wenn z.b. ein ' das im Namen des Gerätes stand escaped wurde.


    Muss ich mir mal anschauen, danke für den Hinweis.

    Quote

    Und nu zum Schreibfehler:
    In der Datei: Ger=ae=testeuerung/index.php

    Suche:

    Code
    $startAddress = $device["StartAdress"];


    ersetze durch:

    Code
    $startAddress = $device["StartAddress"];

    Nu sollte alles laufen ;)


    Das ist kein Schreibfehler von mir, das ist ein Schreibfehler in DMXControl ;) . DMXControl bezeichnet die Startadresse intern fälschlicherweise als StartAdress, weshalb ich das auch in meinem Skript so machen musste. Ich habe mich darüber vor einiger Zeit mit Stefan unterhalten - er meinte, er könne das zwar ändern, aber dann würde die PocketPC-Remote wohl nicht mehr funktionieren. Oder ist das inzwischen geändert?

    Quote

    Was jetzt noch schön währe, währe, wenn man noch ne Art Colorpicer einfügen könnte und wenn man das Pan/Tilt-Feld per richtigem drag bedienen könnte, also das man den Punkt ganze zeit ziehen kann.


    Colorpicker ließe sich theoretisch machen, aber ich wollte meine Fernsteuerung so allgemein wie möglich halten - es lassen sich ja nicht alle Geräte über drei Kanäle mit RGB-Farbwerten versorgen, manche haben ja auch nur zwei oder einen Kanal.
    In einem PC-Browser kannst du im Pan/Tilt-Feld eigentlich schon draggen. Nur in der iPhone-Version geht es nicht, weil der iPhone-Browser das nicht beherrscht (dort kannst du nur den Zielpunkt antippen). Was allerdings nicht geht, ist, dass DMXControl den Wert des Pan/Tilt-Feldes fortlaufend übermittelt bekommt - die Terminalschnittstelle lässt sich dazu von PHP nicht schnell genug mit Daten beschicken.

    Quote

    Mir ist aufgefallen, dass sich per Befehl "Start/Stop" die Effekte nur stoppen lassen und nicht starten lassen. Ist das bei der PDA-Remote auch so?


    Ich meine mich zu erinnern, dass das ein Bug in DMXControl bzw. der Terminalschnittstelle ist.[/quote]


    Deine Kommandobox sieht echt interessant aus - Respekt.

    Quote

    - Im moment dauert es 1-2 Sekunden, bis der Befehl ausgeführt wird. Ich hab noch nicht getestet, ob das an der HTTP-Verbindung liegt, oder dadran, das PHP immer eine neue Verbindung aufbauen muss. Daher bin ich am überlegen, ob ich einen Daemon in PHP schreibe, der eine dauerhafte Verbindung zu DMXC hat und dann die Befehle aus einer Warteschlange in MYSQL holt.


    Ein Daemon mit dauerhafter Verbindung würde da auch nichts nützen, das liegt daran, wie meine PHP-Klasse mit DMXControl kommuniziert. RunCommand bekommt den Befehl im Klartext und fragt dann mit GetCommandPossibilities bei DMXControl ab, welche Zahl im Befehle-Menü der jeweilige Befehl hat. Dabei ist das Problem, dass DMXControl mehrzeilige Ausgaben (was diese Befehlslisten ja sind) nicht irgendwie besonders abschließt, sodass ich stattdessen ein Timeout nach einigen hundert Millisekunden machen muss.

    Das geht wohl eher nicht - die PHP-Steuerung ist darauf beschränkt, was die DMXC-Terminal-Schnittstelle bietet.
    Abgesehen davon hat die PHP-Schnittstelle den Nachteil, dass sie relativ langsam ist (es kann nur ein Befehl gleichzeitig abgeschickt werden, und nach jedem Befehl muss erst mal ein Timeout von einigen hundert Millisekunden erreicht werden).
    Für deine Idee ist eher die echte Plugin-Schnittstelle gedacht.

    Sorry für die späte Antwort.

    Anscheinend hast du den Ordner "Header" gelöscht. Dieser enthält nur ein paar Sachen, die nur auf iPhones angezeigt werden. Für diese Einbindung (die bei Nichtvorhandensein den Fehler verursacht) ist die Zeile

    Code
    include('../Header/index.html');

    , die in jeder von meinen einzelnen Komponenten in der index.php vorhanden ist, verantwortlich.

    Dieser Fehler an sich ist für die Funktion aber nicht relevant.

    Hallo,

    jetzt, da die 2.10 RC1 allgemein verfügbar ist, will ich auch das von mir entwickelte Webinterface für die neue Terminal-Schnittstelle allgemein veröffentlichen.
    Der Funktionsumfang entspricht etwa dem der offiziellen PDA-Steuerung:
    - Kommandozeile
    - Gerätesteuerung
    - Befehle
    - Kanalübersicht
    - DIP-Rechner

    Das Web-Interface gibt es unter http://michael.kuron-germany.de/dmxc/dmxcontrol_php.tar zum Herunterladen. Nach dem Extrahieren in der Datei ./config.inc.php die IP-Adresse des DMXC-Rechners korrekt eintragen (i.d.R. 127.0.0.1). Für die Gerätesteuerung braucht man außerdem die Datei http://www.dynamicdrive.com/dynamicindex11/domdrag/dom-drag.js (aus Lizenzgründen nicht in der ZIP-Datei enthalten), die man nach ./Ger=ae=testeuerung/dom-drag.js kopieren muss.
    Für korrekte Funktion ist ein (lokaler) Webserver mit PHP5 (empfohlen: PHP 5.2.6 oder höher) erforderlich, z.B. XAMPP.
    Screenshot:
    Admin-Edit: Screenshot entfernt, da das Bild nicht mehr verfügbar ist

    Außerdem habe ich eine PHP-Klasse geschrieben, mit der diese Funktionen auch in eigenen PHP-Projekten genutzt werden können. Download unter http://michael.kuron-germany.de/dmxc/dmxc.inc.php . Folgend die Syntax:

    Code
    /* Usage: string sendCommand ( string $command ) *//* Usage: array sendCommand ( string $command , TRUE ) *//* Usage: bool setChannel ( int $channel , int $value ); $value may be 0-255 *//* Usage: int getChannel ( int $channel ) *//* Usage: array getAllDevices ( ); array keys are device IDs, array values are device names *//* Usage: array getDeviceInfo_byname ( string $device ) *//* Usage: array getCommandPossibilities_byname( string $module = NULL, string $function = NULL, strin $channel = NULL); specify up to the level you know it already *//* Usage: array runCommand_byname ( string $module , string $function , string $channel , int $flags , int $value ); $flags can be flagToggle (switch mode), flagOverride (use value), flagAskValue (ask value) or flagIgnoreZero (ignore 0) or any combination thereof combined with +; please note that all of the flags are to be specified without quotes since they are constants */


    und ein Stückchen Beispielcode, welches Kanal 1 auf 100% setzt:

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

    Viel Spaß damit, ich freue mich über Feedback, Anregungen und Bugreports.

    Gruß,

    Michael

    Sollte problemlos gehen.
    99,99% aller USB-MIDI-Keyboards sind normale MIDI-Keyboards mit integriertem USB-MIDI-Interface und verhalten sich dem Computer gegenüber auch so, also wie ganz normale MIDI-Geräte.
    AFAIK braucht man dafür nicht mal einen Treiber.

    Du kannst über Windows Update (http://windowsupdate.microsoft.com) unter "Optionale Updates" das .NET Framework 2.0, 3.0 oder 3.5 installieren, damit funktioniert dann der DDFCreator.

    Als manuellen Download gibt's das .NET Framework 2.0 unter http://www.microsoft.com/downloads/deta…dd-aab15c5e04f5 .
    Vorzugsweise solltest du aber gleich das aktuelle .NET Framework 3.5 nehmen ( http://www.microsoft.com/downloads/deta…31-508d977d32a6 ), das enthält schon alle möglichen Sicherheitsupdates etc.

    Bei den Folgekosten ist aber zu beachten: Entladungslampen halten um ein Mehrfaches länger als Halogenleuchtmittel (z.B. 2000h bei Entladung vs. 500h bei Halogen), d.h. bei Preisen von 10€ bzw. 80€ kommst du auf 4 Cent pro Stunde bei Entladung und 2 Cent pro Stunde bei Halogen, wodurch Entladung nur noch doppelt so teuer ist wie Halogen.