die Webseite umändern

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Nicole

die Webseite umändern

Beitragvon Nicole » 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[i]
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[i]:
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][i])
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][i])

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 21. April 2004, 11:52

Hi Nicole,

setzte deinen Code bitte in [code]...[/code]
dann bleiben die Einrückungen erhalten. So ist er nicht zu lesen.

Programmzeilen sollten auch nicht länger als 79 Zeichen sein.


Gruß

Dookie
Nicole
User
Beiträge: 1
Registriert: Mittwoch 21. April 2004, 09:14
Wohnort: Frankfurt
Kontaktdaten:

update

Beitragvon Nicole » Freitag 23. April 2004, 22:56

Entschudlige, ich hatte zuvor nicht gewusst, wie ich es mit der Formatierung machen sollte. :)
Ich sitze schon nun mehr als 2 Wochen dran, aber habe leider keine große Ahnung, wie ich es machen muss.Werde erst in 4 Wochen ein Pythonkurs machen. Ich möchte nur, das die Eingänge und Ausgänge nicht mit nummer ausgegeben werden, sondern stattdessen ein Namen bekommen. Aber ohne das es zu problemen kommt. Die Webseite fängt im skript erst bei der kommentierung "Das eigentliche Skript " siehe Skript.


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 verbunden.
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

So sollte es z.B. aussehen:
Eingänge: HNO OP1 Frauenklinik Augenklinik u.s.w.
Ausgänge: G. Hörsaal K. Hörsaal u.s.w.

Hier ist nun der eigentlich Skript:



Code: Alles auswählen

############################################################################################################
# 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[i]
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[i]:
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][i])
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][i])

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 würde mich über eine Lösung natürlich sehr freuen. Und bin euch ebenso sehr dankbar.

Gruß
Nicole
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Freitag 23. April 2004, 23:49

Hi Nicole,

hmm leider ist da wieder nichts formatiert.

Egal, ich versuchs mal so.

um von einer (fortlaufenden) Zahl auf einen passenden String zu bekommen, würde ich einfach eine Liste mit den Strings erstellen und dann den entsprechenden Index aus der Liste holen.

Code: Alles auswählen

in_list = ["HNO", "OP1",
           "Frauenklinik",
           "Augenklinik",
           ...]# muss noch ergänzt werden

out_list = ["G. Hörsaal",
            "K. Hörsaal",
            ...]

for i in xrange(1,11):
    print in_list[i-1] # wichtig -1 weil die Zahlen bei 1 beginnen, die Liste bei 0!

for i in xrange(1,11):
    print out_list[i-1] # wieder -1 wie oben


Ich hoffe ich konnte Dir etwas helfen.


Gruß

Dookie
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Sonntag 25. April 2004, 01:07

hier mal im Code

Code: Alles auswählen

#!/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 eigentlicheSkript
######################################################################################

"""*** from Dookie ***"""
in_list = ["HNO",
           "OP1",
           "Frauenklinik",
           "Augenklinik",
           "",
           "",
           "",
           "",
           "",
           ""]# muss noch ergänzt werden

out_list = ["G. Hörsaal",
            "K. Hörsaal",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""]# siehe oben

"""*** Ende from Dookie ***"""

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[i]
    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\">%s</input></td>" %(EMPTY,i,in_list[i-1])
                else:
                    #geschaltete Eingänge
                    for out in status.keys():
                        if status[out] == i:
                            print "    <td bgcolor=\"%s\"><input name=\"von\" type=\"radio\" value=\"%d\">%s</input></td>" %(COLORS[out-1],i,in_list[i-1])
            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[i]:
                print "    <td bgcolor=\"%s\"><input name=\"zu\" type=\"radio\" value=\"%d\">%s</input></td>" %(COLORS[i-1],i,out_list[i-1])
            else:
                #freie Ausgänge
                print "    <td bgcolor=\"#efefef\"><input name=\"zu\" type=\"radio\" value=\"%d\">%s</input></td>" %(i,out_list[i-1])
        print "  </tr>"
        print "</table>"

        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][i])
            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][i])       
                       
        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>"


ob das läuft kann ich leider nicht testen.


Gruß

Dookie

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder