Volker Knobe schrieb mir vor kurzem in einer eMail: "Ich stehe vor dem Problem, den IOWarrior aus einem Browser heraus zu starten. Nun habe ich Ihre Java Klassen entdeckt. ... Ich muss lediglich 10 Ausgänge aus einem Browser heraus an- und ausschalten können. Haben sie vielleicht ein Beispiel für ein Applet mit dem ich das machen könnte? ". Nach kurzer Überlegung bin ich zu dem Schluß gekommen, dass die Steuerung der IO-Warriors durch HTML-Code doch eine sinnvolle Erweiterung für IOWJ wäre.
Also mein Dank an Volker für diesen initialen Impuls.
zurück zum InhaltZuerst habe ich mich über Applets informiert, aber diesen Ansatz als nicht geeignet empfunden. Die nächste Idee war ein Java Servlet. Doch damit das funktioniert, benötigt man einen Servlet Container a la Tomcat, der vorher auf dem Rechner installiert werden muss. Doch warum so kompliziert? So habe ich mich entschieden, die Funktionalität in einem einfachen Webserver zu realisieren. Nach der Befragung einer bekannten Suchmaschine habe ich mich von einer existierenden HTTP-Server Klasse inspirieren lassen und eine erste Version der "Steuerung durch HTML" implementiert. Die Klasse IowHttpServer ist nun seit Version 0.9.6.0 Bestandteil von IOWJ geworden.
zurück zum InhaltIOWJ in der Version 0.9.6.3 kann hier heruntergeladen werden.
Entwickelt und getestet wurde der HTTP-Server unter WindowsXP und mit Firefox.
zurück zum InhaltAlle erforderlichen Dateien (iowkit.dll, codemercs.jar, iowj0.9.6.3.jar) in ein Verzeichnis kopieren. In diesem Verzeichnnis wird der HTTP-Server mit folgendem Aufruf gestartet:
java -cp iowj0.9.6.3.jar;codemercs.jar de.wagner_ibw.iow.http.IowHttpServerDer HTTP-Server "horcht" standardmäßig auf Port 4444. Ist eine andere Portnummer gewünscht, ist diese als Argument beim Aufruf anzugeben:
java -cp iowj0.9.6.3.jar;codemercs.jar de.wagner_ibw.iow.http.IowHttpServer 9876Um einen Missbrauch des HTTP-Servers zu erschweren, kann ein sogenanntes Server Passwort gesetzt werden. In diesem Fall muss auch die Portnummer mit angegeben werden und die Reihenfolge der Parameter ist zwingend einzuhalten. Allen Requests ist der Parameter 'pwd' mit dem selben Passwort anzuhängen. Stimmen die Passwiörter nicht überein, wird eine Exception "Wrong password" geworfen. Der Aufruf des Servers sieht dann wie folgt aus:
java -cp iowj0.9.6.3.jar;codemercs.jar de.wagner_ibw.iow.http.IowHttpServer 4444 k4711wEs können nur die IO-Warrior gesteuert werden, die während des Starts des HTTP-Servers angeschlossen waren. Nach dem Start werden diese angezeigt:
------- Version of iowkit library is 'IO-Warrior Kit V1.5' -------- Number of plugged IO-Warrior device(s): 3 Device1: IOW40,Handle[47775764],Id[5376],Rev[1011],Serial[0000038A] Device2: IOW24,Handle[47801132],Id[5377],Rev[1011],Serial[0000016F] Device3: IOW56,Handle[47826500],Id[5379],Rev[1001],Serial[0000011D] IowHttpServer is running on port 4444, password is ''oder so bei gesetztem Passwort:
... IowHttpServer is running on port 4444, password is 'k4711w'zurück zum Inhalt
Die Kommunikation mit dem HTTP-Server erfolg über sogenannte GET-Requests. Diese bestehen aus der Request-URL und den Request-Parametern. Die Request-URL für den lokalen Rechner bei Verwendung des Standardports lautet:
http://localhost:4444/iowjEin Fragezeichen leitet die Liste der Request-Parameter ein. Request-Parameter werden mit einem &-Zeichen getrennt. Folgender Request schaltet die LED des IOW24 Starterkits mit der Seriennummer 0000016F ein:
http://localhost:4444/iowj?action=low&name=IOW24&serial=0000016F&port=0&bit=3Die Parameter name und serial sind nicht nötig, wenn nur das IOW24 Starterkit an den Rechner angeschlossen ist.
Es gibt folgende Request-Parameter:
Name | Bedeutung | Wertebereich | Kommentar |
---|---|---|---|
action | Aktion, gewünschte Funktion | version, list, set, on, off, low, high | Parameter erforderlich |
name | Name, Name des IO-Warrios | IOW24, IOW40, IOW56 | Parameter optional |
serial | Serial, Seriennummer des IO-Warriors | 8stellige Zahl mit Vornullen | Parameter optional |
port | Port, Nummer des Ports innerhalb eines IO-Warriors | IOW24 (0,1), IOW40(0...3), IOW56(0...6) | bei den Aktionen on, off, low, high, set ist dieser Parameter erforderlich |
bit | Bit, Nummer des Bits innerhalb eines Ports | 0...7 | bei den Aktionen on, off, low, high ist dieser Parameter erforderlich |
pattern | Muster, Bitmuster zum Setzten eines gesamten Ports | 15 (dezimal), h0f (hexadezimal, b00001111 (binär) | bei Aktion set ist dieser Parameter erforderlich |
iomask | Maske, Bitmuster zum Setzten der IO-Maske | 15 (dezimal), h0f (hexadezimal, b00001111 (binär) | wenn Parameter nicht vorhanden, dann alle Bits Ausgabe |
pwd | Passwort | beliebige Zeichenkette | Parameter erforderlich, wenn Server Passwort gesetzt ist |
Alle Aktionen mit ihren Parametern werden später erklärt. Die nun folgenden Beispiele zeigen jedoch ihre Anwendung.
zurück zum Inhalt----- wird noch mal überarbeitet ;-) -----
Links für das IO-Warrior 24 Starterkit.
http://localhost:4444/iowj?action=off&name=IOW24&port=0&bit=3 LED ein
http://localhost:4444/iowj?action=on&name=IOW24&port=0&bit=3 LED aus
http://localhost:4444/iowj?action=off&port=0&bit=3 LED ein
http://localhost:4444/iowj?action=on&port=0&bit=3 LED aus
Formular ein:
Formular aus:
Formular 1 variable:
Name | Serial | Port | Bit | Action |
---|---|---|---|---|
Formular 2 variable (using port/bit):
Name | Serial | Port | Bit | Action | |
---|---|---|---|---|---|
Formular 3 variable (using port/pattern):
Name | Serial | Port | Pattern | Action | |
---|---|---|---|---|---|
Formular 4 variable (all parameters available):
Name | Serial | Port | Bit | Pattern | Action | |
---|---|---|---|---|---|---|
Iframe (src="http://localhost:4444/iowj?action=list")
http://localhost:4444/iowj?action=version Version
http://localhost:4444/iowj?action=list devs List
Beispiel für einen IO-Warrior 24:
http://localhost:4444/iowj?action=list&name=IOW24
List IOW24
Die gelieferte HTML-Seite könnte so aussehen:
IOW24:Handle[46792724],Id[5377],Rev[1011],Serial[0000016F],Listener[0],SpecialMode: P0[IoMask[IIIIIIII],Data[11111111],Listener[0]] P1[IoMask[IIIIIIII],Data[11111111],Listener[0]]
Beispiel für einen IO-Warrior 56:
http://localhost:4444/iowj?action=list&name=IOW56
List IOW56
Die gelieferte HTML-Seite könnte so aussehen:
IOW56:Handle[46818092],Id[5379],Rev[1001],Serial[00000125],Listener[0],SpecialMode: P0[IoMask[IIIIIIII],Data[11111111],Listener[0]] P1[IoMask[IIIIIIII],Data[11111111],Listener[0]] P2[IoMask[IIIIIIII],Data[11111111],Listener[0]] P3[IoMask[IIIIIIII],Data[11111111],Listener[0]] P4[IoMask[IIIIIIII],Data[11111111],Listener[0]] P5[IoMask[IIIIIIII],Data[11111111],Listener[0]] P6[IoMask[IIIIIIII],Data[11111111],Listener[0]]Oder so, wenn kein IO-Warrior 56 angeschlossen ist:
java.util.NoSuchElementException: IOW56
Beispiel für Port 6 eines IO-Warrior 56:
http://localhost:4444/iowj?action=list&name=IOW56&port=6
List IOW56, Port6
Die gelieferte HTML-Seite könnte so aussehen:
P6[IoMask[IIIIIIII],Data[11111111],Listener[0]]
Beispiel für Bit 0 (Taster) des Port 6 eines IO-Warrior 56 Starter Kits:
http://localhost:4444/iowj?action=list&name=IOW56&port=6&bit=0
List IOW56, Port6, Bit0 (Taster)
Die gelieferte HTML-Seite könnte bei nicht gedrückter Taste so aussehen:
highOder bei gedrückter Taste so:
low
Beispiel für Bit 0 (Taster) des Port 0 eines IO-Warrior 40 Starter Kits:
http://localhost:4444/iowj?action=list&name=IOWR40&port=0&bit=0
List IOW40, Port0, Bit0 (Taster)
Die gelieferte HTML-Seite könnte bei nicht gedrückter Taste so aussehen:
highOder bei gedrückter Taste so:
low
Einfach "&pwd=k1147w" an den Request anhängen.
----- wird noch mal überarbeitet ;-) -----
zurück zum Inhalt zurück zur Startseite