die Webseite umändern
Verfasst: Mittwoch 21. April 2004, 08:51
Hi,
Ich hoffe das ihr mir helfen könnt. Ich hab ne Aufgabe die ich mit Hilfe von Python realisieren möchte. Ich habe keine große Python Kenntnisse. Die Aufgabe, wurde letztes Jahr von einem Kollegen programmiert. Die Programmierte Webseite, möchte ich auffrischen und einige Änderungen vornehmen.
Kurze Problemstellung:
Das Gerät hat 10 Video-Eingänge und 10 Video-Ausgänge, mithilfe eines Skripts lässt sich dies von der Webseite aus ansprechen und steuern. Also z.b. Eingang 1 wird mit Ausgang 2 verbinden.
Die Ein- und Ausgänge werden auf der Web seite von 1 bis 10 ausgegeben. siehe Bild und Skript
Ich möchte nun, statt die Ausgabe von 1 bis 10, diese mit einem Namen vergeben...
statt die "1" soll er den Namen HNO bekommen u.s.w.
und das möchte ich mit allen Ein- und Ausgängen machen...
So sieht es momentan aus.
Eingänge 1 2 3 4 5 6 7 8 9 10
Ausgänge 1 2 3 4 5 6 7 8 9 10
Und so hätte ich es gerne, ist leider nicht so einfach wie es sich’s anhört.
Eingänge HNO OP1 Frauenklinik Augenklinik u.s.w.
Ausgänge G. Hörsaal K. Hörsaal u.s.w.
Skript: //
#!/usr/bin/python
"""
Dieses Skript dient zur Steuerung der Kreuzschiene über einen Com-Server
für die Schaltung von Videoübertragungen
Autor: Christian Maus
Datum: 27.02.2002
"""
import cgi,string,select,time
from socket import *
"""Hier sind die Konstanten für die Adresse und Port des Com-Servers eingetragen """
SERVER_PORT=6000
SERVER_IPS = ["10.10.90.7"]
PORTS = {
"10.10.90.7" : { 1 : "Kreuzschiene im UG", 2 : "OP1-HNO", 3 : "OP1-Augen", 4 : "Laser-OP1-Augen", 5 : "", 6 : "", 7 : "" , 8 : "", 9 : "", 10 : "" }
}
"""Hier werden die Farben deklariert mit denen die Verbindungen dargestellt werden"""
COLORS = ["#0000FF","#FF0000" ,"#CC9900","#99CC33","#009900","#FF9900","#FFCC00","#99FFCC","#33CCFF","#CCFFFF", "#99FF99", "#00FF00" ,"#33CC99" ,"#CC9999","#CC66FF"]
#Farbe für nicht geschaltete Ein-Ausgänge definieren
EMPTY = "#EFEFEF"
"""Die Funktion get_status gibt ein Dictionary mit den Eingängen als Schlüssel und den geschalteten Ausgängen als Werte zurück """
def get_status():
antwort = sende_befehl("D\r\n",formular["ip"].value,SERVER_PORT)
#Zweite zeile wird nicht benötigt
antwort = antwort.split("\r\n")[0]
#Array erstellen
status = antwort.split("OV")
from_to = {}
for item in status:
if item != "":
from_to[int(item.split(",")[0])]=int(item.split(",")[1])
#Ausgang:Eingang (beides Integer-Werte)
return from_to
"""Die Funktion sende_befehl sendet einen übergebenen String an den Com-Server, liest die
Antwort aus und gibt diese zurück. Bei Fehler wird der Leerstring zurück gegeben"""
def sende_befehl(befehl,ip,port):
datas =""
#Socket erstellen und verbinden
sockobj = socket(AF_INET, SOCK_STREAM)
try:
sockobj.connect ((ip,port))
except:
sockobj.close()
return datas
#Die ersten Bytes enthalten den 'Anmeldeschirm' des Comservers, diese interessieren nicht
sockobj.recv(512)
sockobj.send(befehl)
#Antwort lesen, Abbruch bei 0,2 Sekunden ohne Aktivität
while 1:
result, dont_care, either = select.select([sockobj],[],[],0.2)
if result != []:
datas = datas +sockobj.recv(1024)
else: break
sockobj.close()
return datas
############################################################################################################
# Das eigentliche Skript
############################################################################################################
print "Content-type: text/html\n\n"
print "<html>\n"
#Formulardaten holen
formular = cgi.FieldStorage()
if not formular.has_key("ip"):
print "<h2>Bitte Kreuzschiene ausw&hlen</h2>"
print "<form>"
print "<select name=\"ip\">"
for i in range(len(SERVER_IPS)):
print "<option>%s</option>" %SERVER_IPS
print "</select>"
print "<input type=\"submit\" action=\"edinneu.py\" value=\"Verbinden\">"
print "</form>"
else:
#Befehle ausführen
#Eingang zu Ausgang schalten
if formular.has_key("zu"):
if formular.has_key("von"):
befehl = "SB%s,%s\r\n" %(formular["zu"].value, formular["von"].value)
#Ausgang zurücksetzen
else:
befehl = "SB%s,00\r\n" %formular["zu"].value
sende_befehl(befehl,formular["ip"].value,SERVER_PORT)
#Dem Com-Server Zeit geben die verbindung zu trennen
time.sleep(0.2)
elif formular.has_key("Reset"):
sende_befehl("R\r\n",formular["ip"].value,SERVER_PORT)
time.sleep(0.2)
#Status erfragen
status = get_status()
#Wenn keine Socketverbindung möglich, dann Fehler anzeigen
if not len(status):
print "<h2 style=\"color:red\">Fehler: keine Verbindung zum Com-Server m&glich</h2>"
print "<h4>wom&glich besteht noch eine offene Verbindung</h4>"
else:
print "<html><head><title>Kreuzschiene</title></head><body>"
print "<h2>Hier werden die Ein- und Ausg&nge der Kreuzschiene geschaltet</h2>"
print "<h3>Um einzelnen Ausgang zur&ckzusetzen, nur den Ausgangsknopf anklicken</h3>"
print "<form>"
print "<table>"
print " <tr><td>Eing&nge</td>"
#Eingänge darstellen
for i in range(1,11):
if i < 11:
#nicht geschaltete Eingänge
if not i in status.values():
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(EMPTY,i,i)
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[out-1],i,i)
else:
print " <td>&</td>"
print " </tr>"
#Ausgänge darstellen
print " <tr><td>Ausg&nge</td> "
for i in range(1,11):
#geschaltete Ausgänge
if status:
print " <td bgcolor=\"%s\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[i-1],i,i)
else:
#freie Ausgänge
print " <td bgcolor=\"#efefef\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(i,i)
print " </tr>"
print "</table>"
pri
print "<p>"
print "<table>"
print "<tr><td colspan=\"2\">Eingangsbeschreibung</td></tr>"
for i in range(1,10):
#nicht geschaltet
if not i in status.values():
print " <tr><td bgcolor=\"#efefef\">%d</td><td bgcolor=\"#efefef\">%s</td></tr>" %(i,PORTS[formular["ip"].value])
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <tr><td bgcolor=\"%s\">%d</td><td bgcolor=\"%s\">%s</td></tr>" %(COLORS[out-1],i,COLORS[out-1],PORTS[formular["ip"].value])
print "</table>"
print "<p>"
print "<input type=\"hidden\" name=\"ip\" value=%s>" %formular["ip"].value
print "<input type=\"submit\" action=\"edinneu.py\">"
print "<input type=\"submit\" action=\"edinneu.py\" name=\"Reset\" value=\"Reset\">"
print "</form>"
print "</html>"
Ich hoffe ihr könnt mir helfen.
Gruß
Nicole
Ich hoffe das ihr mir helfen könnt. Ich hab ne Aufgabe die ich mit Hilfe von Python realisieren möchte. Ich habe keine große Python Kenntnisse. Die Aufgabe, wurde letztes Jahr von einem Kollegen programmiert. Die Programmierte Webseite, möchte ich auffrischen und einige Änderungen vornehmen.
Kurze Problemstellung:
Das Gerät hat 10 Video-Eingänge und 10 Video-Ausgänge, mithilfe eines Skripts lässt sich dies von der Webseite aus ansprechen und steuern. Also z.b. Eingang 1 wird mit Ausgang 2 verbinden.
Die Ein- und Ausgänge werden auf der Web seite von 1 bis 10 ausgegeben. siehe Bild und Skript
Ich möchte nun, statt die Ausgabe von 1 bis 10, diese mit einem Namen vergeben...
statt die "1" soll er den Namen HNO bekommen u.s.w.
und das möchte ich mit allen Ein- und Ausgängen machen...
So sieht es momentan aus.
Eingänge 1 2 3 4 5 6 7 8 9 10
Ausgänge 1 2 3 4 5 6 7 8 9 10
Und so hätte ich es gerne, ist leider nicht so einfach wie es sich’s anhört.
Eingänge HNO OP1 Frauenklinik Augenklinik u.s.w.
Ausgänge G. Hörsaal K. Hörsaal u.s.w.
Skript: //
#!/usr/bin/python
"""
Dieses Skript dient zur Steuerung der Kreuzschiene über einen Com-Server
für die Schaltung von Videoübertragungen
Autor: Christian Maus
Datum: 27.02.2002
"""
import cgi,string,select,time
from socket import *
"""Hier sind die Konstanten für die Adresse und Port des Com-Servers eingetragen """
SERVER_PORT=6000
SERVER_IPS = ["10.10.90.7"]
PORTS = {
"10.10.90.7" : { 1 : "Kreuzschiene im UG", 2 : "OP1-HNO", 3 : "OP1-Augen", 4 : "Laser-OP1-Augen", 5 : "", 6 : "", 7 : "" , 8 : "", 9 : "", 10 : "" }
}
"""Hier werden die Farben deklariert mit denen die Verbindungen dargestellt werden"""
COLORS = ["#0000FF","#FF0000" ,"#CC9900","#99CC33","#009900","#FF9900","#FFCC00","#99FFCC","#33CCFF","#CCFFFF", "#99FF99", "#00FF00" ,"#33CC99" ,"#CC9999","#CC66FF"]
#Farbe für nicht geschaltete Ein-Ausgänge definieren
EMPTY = "#EFEFEF"
"""Die Funktion get_status gibt ein Dictionary mit den Eingängen als Schlüssel und den geschalteten Ausgängen als Werte zurück """
def get_status():
antwort = sende_befehl("D\r\n",formular["ip"].value,SERVER_PORT)
#Zweite zeile wird nicht benötigt
antwort = antwort.split("\r\n")[0]
#Array erstellen
status = antwort.split("OV")
from_to = {}
for item in status:
if item != "":
from_to[int(item.split(",")[0])]=int(item.split(",")[1])
#Ausgang:Eingang (beides Integer-Werte)
return from_to
"""Die Funktion sende_befehl sendet einen übergebenen String an den Com-Server, liest die
Antwort aus und gibt diese zurück. Bei Fehler wird der Leerstring zurück gegeben"""
def sende_befehl(befehl,ip,port):
datas =""
#Socket erstellen und verbinden
sockobj = socket(AF_INET, SOCK_STREAM)
try:
sockobj.connect ((ip,port))
except:
sockobj.close()
return datas
#Die ersten Bytes enthalten den 'Anmeldeschirm' des Comservers, diese interessieren nicht
sockobj.recv(512)
sockobj.send(befehl)
#Antwort lesen, Abbruch bei 0,2 Sekunden ohne Aktivität
while 1:
result, dont_care, either = select.select([sockobj],[],[],0.2)
if result != []:
datas = datas +sockobj.recv(1024)
else: break
sockobj.close()
return datas
############################################################################################################
# Das eigentliche Skript
############################################################################################################
print "Content-type: text/html\n\n"
print "<html>\n"
#Formulardaten holen
formular = cgi.FieldStorage()
if not formular.has_key("ip"):
print "<h2>Bitte Kreuzschiene ausw&hlen</h2>"
print "<form>"
print "<select name=\"ip\">"
for i in range(len(SERVER_IPS)):
print "<option>%s</option>" %SERVER_IPS
print "</select>"
print "<input type=\"submit\" action=\"edinneu.py\" value=\"Verbinden\">"
print "</form>"
else:
#Befehle ausführen
#Eingang zu Ausgang schalten
if formular.has_key("zu"):
if formular.has_key("von"):
befehl = "SB%s,%s\r\n" %(formular["zu"].value, formular["von"].value)
#Ausgang zurücksetzen
else:
befehl = "SB%s,00\r\n" %formular["zu"].value
sende_befehl(befehl,formular["ip"].value,SERVER_PORT)
#Dem Com-Server Zeit geben die verbindung zu trennen
time.sleep(0.2)
elif formular.has_key("Reset"):
sende_befehl("R\r\n",formular["ip"].value,SERVER_PORT)
time.sleep(0.2)
#Status erfragen
status = get_status()
#Wenn keine Socketverbindung möglich, dann Fehler anzeigen
if not len(status):
print "<h2 style=\"color:red\">Fehler: keine Verbindung zum Com-Server m&glich</h2>"
print "<h4>wom&glich besteht noch eine offene Verbindung</h4>"
else:
print "<html><head><title>Kreuzschiene</title></head><body>"
print "<h2>Hier werden die Ein- und Ausg&nge der Kreuzschiene geschaltet</h2>"
print "<h3>Um einzelnen Ausgang zur&ckzusetzen, nur den Ausgangsknopf anklicken</h3>"
print "<form>"
print "<table>"
print " <tr><td>Eing&nge</td>"
#Eingänge darstellen
for i in range(1,11):
if i < 11:
#nicht geschaltete Eingänge
if not i in status.values():
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(EMPTY,i,i)
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[out-1],i,i)
else:
print " <td>&</td>"
print " </tr>"
#Ausgänge darstellen
print " <tr><td>Ausg&nge</td> "
for i in range(1,11):
#geschaltete Ausgänge
if status:
print " <td bgcolor=\"%s\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(COLORS[i-1],i,i)
else:
#freie Ausgänge
print " <td bgcolor=\"#efefef\"><input name=\"zu\" type=\"radio\" value=\"%d\">%d</input></td>" %(i,i)
print " </tr>"
print "</table>"
pri
print "<p>"
print "<table>"
print "<tr><td colspan=\"2\">Eingangsbeschreibung</td></tr>"
for i in range(1,10):
#nicht geschaltet
if not i in status.values():
print " <tr><td bgcolor=\"#efefef\">%d</td><td bgcolor=\"#efefef\">%s</td></tr>" %(i,PORTS[formular["ip"].value])
else:
#geschaltete Eingänge
for out in status.keys():
if status[out] == i:
print " <tr><td bgcolor=\"%s\">%d</td><td bgcolor=\"%s\">%s</td></tr>" %(COLORS[out-1],i,COLORS[out-1],PORTS[formular["ip"].value])
print "</table>"
print "<p>"
print "<input type=\"hidden\" name=\"ip\" value=%s>" %formular["ip"].value
print "<input type=\"submit\" action=\"edinneu.py\">"
print "<input type=\"submit\" action=\"edinneu.py\" name=\"Reset\" value=\"Reset\">"
print "</form>"
print "</html>"
Ich hoffe ihr könnt mir helfen.
Gruß
Nicole