HTTP Server für die Steuerung der IO-Warrior


Inhalt


Die Aufgabe

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 Inhalt

Die Lösung

Zuerst 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 Inhalt

Download

IOWJ 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 Inhalt

Start des HTTP-Servers

Alle 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.IowHttpServer
Der 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 9876
Um 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 k4711w
Es 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

GET Request Parameter

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/iowj
Ein 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=3 
Die 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

Anwendungsbeispiele (Ausgabe)

----- 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
For the IO-Warrior 24 Starterkit's LED use port 0, bit 3.
For the IO-Warrior 40 Starterkit's LEDs use port 3, bit 0-7.
For the IO-Warrior 56 Starterkit's LED use port 6, bit 7.

Formular 2 variable (using port/bit):
Name Serial Port Bit Action
For the IO-Warrior 24 Starterkit's LED use port 0, bit 3.
For the IO-Warrior 40 Starterkit's LEDs use port 3, bit 0-7.
For the IO-Warrior 56 Starterkit's LED use port 6, bit 7.

Formular 3 variable (using port/pattern):
Name Serial Port Pattern Action

Formular 4 variable (all parameters available):
Name Serial Port Bit Pattern Action
For the IO-Warrior 24 Starterkit's LED use port 0, bit 3.
For the IO-Warrior 40 Starterkit's LEDs use port 3, bit 0-7.
For the IO-Warrior 56 Starterkit's LED use port 6, bit 7.

Iframe (src="http://localhost:4444/iowj?action=list")

http://localhost:4444/iowj?action=version Version

http://localhost:4444/iowj?action=list devs List


Anwendungsbeispiele (Eingabe)

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:

high
Oder 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:

high
Oder bei gedrückter Taste so:
low


Anwendungsbeispiele mit Server Passwort (Eingabe, Ausgabe analog ;-)

Einfach "&pwd=k1147w" an den Request anhängen.

----- wird noch mal überarbeitet ;-) -----

zurück zum Inhalt zurück zur Startseite
© 2008,2009 by Thomas Wagner, Mail: thomas at wagner-ibw dot de (aktuallisiert: 10.05.2009)