Ankündigung

Einklappen
Keine Ankündigung bisher.

IP BAOS 770: Programmierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    KNX/EIB IP BAOS 770: Programmierung

    Hallo,
    wir sind derzeit am Bauen und bekommen auch EIB. Inwischen habe ich schon einiges gelesen und zumindest schon mal verstanden, daß es ein wirklich sehr komplexes Thema ist - wenn auch sehr interessant.
    Ich komme aus der Software-Entwicklung und würde sehr gerne von jedem Punkt meines Netzwerks auf das EIB zugreifen können. Hierbei geht es weniger um die ES3 Programmierung. Im ersten Schritt möchte ich einfach nur mal eine Möglichkeit ein Programm schreiben zu können, mit dem ich ein Licht an bzw. ausschalte oder auch Abfrage, ob das Licht an oder aus ist.
    Nach einigem Suchen bin ich auf das Produkt KNX IP BAOS 770 von Weinzierl gekommen.
    Nun habe ich es so verstanden, daß man einfach mit diesem Produkt über eine Socket Programmierung auf den Bus zugreifen kann, wenn man die Adressierungen kennt.
    Hat hier jemand schon damit Erfahrung und vielleicht sogar ein Source-Code Beispiel (Java, VB, Perl oder egal welche Sprache)?
    Derzeit bin ich doch noch von der Vielfalt der Möglichkeiten überfordert, aber dieses Produkt hat sich nach einer einfachen und recht kostengünstigen Lösung angehört.
    Danke im voraus & Gruß,
    Roger

    #2
    hallo,
    bist du schon weiter?
    Bin ebenfalls Programmierer. Mit welcher Sprache hast du gearbeitet? Habe mit einem Kollegen vor den Bus via Web zu steuern und so dann per Handy Zugriff zu haben. Bestelle mir gerade den KNX IP BAOS 770 damit ich mitmischen kann.

    Kommentar


      #3
      Hallo,
      ich habe als 1. Test ein Excel gebaut und über VBA geschaltet => hat geklappt.
      Ich baue derzeit ein Portal (mit Usern und Berechtigungen für Funktionen) mit Templatesteuerung.
      Die Ausführung der BAOS Funktionen erfolgt über Perl.

      Problem 1: Wenn zu viele Objekte im BAOS stehen dauert das lesen von 255 Objekten ca. 4-5 Sek. Daher habe ich eine Zuordnung in der Admin von BAOS Objekten zu Templates. Somit kann ich den Lesevorgang performanter gestalten.

      Problem 2: Die Internetseite kann nicht auf Events reagieren. Man müßte hier evtl. einen zyklischen Refresh einbauen, worauf ich jedoch im 1. Schritt verzichten werde - Refresh Button reicht.

      Ich kaufe mir dann einen Nettop, der an den PC kommt. Eine Hama Fernbedienung habe ich und dann kann ich von der Couch mein Haus kontrollieren.
      Braucht man so etwas??? Nein... aber ist total geil :-)

      Gruß,
      Roger

      PS: Den Bus über Handy steuern kann man mit der Telefonanlage von AGFEO AS181 EIB

      Kommentar


        #4
        hallo,
        Handyzugriff war bei uns via Web angedacht nicht über das Telefonnetz.

        Einen einfachen Refresh bekommst du per Meta refresh hin, etwas besser ist ein Cronjob der eine Webseite aufruft welche den Bus abfragt. Ganz deluxe ist wenn die Datenbank direkt den Bus fragt. Bei letzterem kenne ich noch nicht die Möglichkeiten welche ich mit dem 770er Baustein habe... AJAX ist auch eine Möglichkeit oder Javascript.

        Kommentar


          #5
          Hallo zusammen,

          wäre es möglich das VBA oder zumindest Auszüge aus den Perl Scripten zu bekommen, um den Einstieg zu schaffen?

          Gruß

          Matthias

          Kommentar


            #6
            Habe den Kram zuhause.
            VBA geht nur mit einer installierten DLL für Socket Programmierung.
            Das Excel war auch nur zum Testen.
            Was genau willst Du?
            Kann ich Dir zumailen...
            Gruß, Roger

            Kommentar


              #7
              Am liebsten wären mir ein paar Codezeilen in Perl, in denen ich sehe wie die Abfrage der Datenpunkte bzw. Setzen von Datenpunkten durchgeführt wird.
              Es muss keine lauffähige Anwendung sein.
              Natürlich auch die Info, welche Perlmodule ich dazu brauche.

              Gruß

              Matthias

              Kommentar


                #8
                Zitat von seibling Beitrag anzeigen
                Habe den Kram zuhause.
                VBA geht nur mit einer installierten DLL für Socket Programmierung.
                Das Excel war auch nur zum Testen.
                Was genau willst Du?
                Kann ich Dir zumailen...
                Gruß, Roger
                Hallo Roger,

                Wie wärs? Stell die Scripte doch allen zur Verfügung! Damit die Entwicklung weiter gehen kann

                VG Dirk

                Kommentar


                  #9
                  Hallo,
                  zuerst einmal sind die Sourcecodes alle nur zu Testzwecken erstellt worden. Daher bitte keine ausgereifte Software erwarten.
                  Es ging mir nur um das Erfolgserlebnis das Licht, die Temperatur bzw. den Rollladen zu steuern.
                  Die Hex Werte habe ich aus dem Protokoll von Weinzierl für BAOS770.
                  Der Excel Teil ist nur ein Mini-Test, aber das Licht ging an :-)
                  Der Perl Teil ist schon etwas weiterführend. Hier arbeite ich noch dran, für mein Portal, damit ich über den TV das Haus steuern kann.
                  In dem Modul sind einige Funktionsaufrufe aus anderen Modulen, die zum Testen auskommentiert werden sollten.
                  Hier ist mit Sicherheit für Perlprofis noch Verbesserungspotial enthalten.
                  Ich hoffe, es hilf weiter!
                  Gruß,
                  Roger

                  ################################################## ####################################
                  Damit man in Excel Socket programmieren kann, muß Winsock registriert werden:
                  MSWINSCK.OCX ins Verzeichnis C:\WINDOWS\SYSTEM32 kopieren
                  regsvr32 C:\WINDOWS\SYSTEM32\MSWINSCK.OCX

                  ************************************************** ***********************
                  Excel Macro mit 3 Buttons: Connect Disconnect und Test
                  ************************************************** ***********************
                  Code:
                  Option Explicit
                  'Status Wert Beschreibung
                  'SckClosed 0 Der Socket ist geschlossen
                  'SckOpen 1 Der Socket ist geöffnet
                  'SckListening 2 Der Socket ist empfangsbereit
                  'SckConnectionPending 3 Die Verbindung wird aufgebaut
                  'SckResolvingHost 4 Der Remote-Host-Name wird in eine IP-Adresse umgewandelt
                  'SckHostResolve 5 Der Remote-Host-Name wurde in eine IP-Adresse umgewandelt
                  'SckConnecting 6 Der Socket verbindet sich zu dem Remote
                  'SckConnected 7 Der Socket hat sich zu dem Remote verbunden
                  'SckClosing 8 Der Remote hat die Verbindung getrennt
                  'SckError 9 Ein Fehler ist aufgetreten
                  Private Sub Client_DataArrival(ByVal bytesTotal As Long)
                    Dim Text As Variant
                    Client.GetData Text, vbString
                    MsgBox Text
                  End Sub
                  Private Sub cmdConnect_Click()
                    'Zelle D1 enthält Host des BAOS770
                    'Zelle D2 enthält Port des BAOS770
                    Client.Close
                    Client.RemoteHost = Range("d1").Value
                    Client.RemotePort = Range("d2").Value
                    Client.Connect
                  End Sub
                  Private Sub cmdDisconnect_Click()
                    If Client.State = sckConnected Then
                      Client.Close
                    End If
                  End Sub
                  Private Sub cmdTest_Click()
                    If Client.State = sckConnected Then
                      Dim byteArray(7) As Byte
                      byteArray(0) = &HF0
                      byteArray(1) = &H6
                      byteArray(2) = &H1
                      byteArray(3) = &H1
                      byteArray(4) = &H1
                      byteArray(5) = &H31
                      byteArray(6) = &H1 'Licht an
                      Client.SendData byteArray()
                      DoEvents
                   
                      Dim resByteArray(100) As Byte
                      Client.GetData (resByteArray)
                      DoEvents
                    End If
                  End Sub
                  ************************************************** ***********************
                  Perl Modul mit Funktionen zum Lesen und Schreiben
                  ************************************************** ***********************
                  Code:
                  use IO::Socket;
                  my $ip = get_param_wert('knx-ip');
                  my $port = get_param_wert('knx-port');
                  my $offline = get_param_wert('knx-offline');
                  my $error = "";
                  my $socket;
                  my $with_template = 1;
                  my %tele_types = ("S"=>"Schalten",
                                    "J"=>"Jalousie",
                                    "H"=>"Heizung",
                                    "DP"=>"Dimmen (Prozent)",
                                    "DS"=>"Dimmen (stufenlos)");
                  #******************************************************************************
                  sub open_knx {
                     $without_template = shift || 0;
                   
                    $with_template = 0 if ($without_template);
                   
                    return 1 if $offline;
                   
                    $socket = new IO::Socket::INET (
                      PeerAddr => $ip, 
                      PeerPort => $port,
                      Proto=> "tcp",
                      Type => SOCK_STREAM,
                      Timeout => 0, 
                    );
                   
                    return check_connection("open_knx");
                   
                    #die "Keine Verbindung zum BAOS770 über $ip:$port möglich! $!\n" unless defined $socket;
                  }
                  #******************************************************************************
                  sub check_connection {
                    my $aufruf = shift || "check_connection";
                   
                    if (defined $socket) {
                      return 1;
                    }
                    else {
                      if ($with_template) {
                        $error=set_error('knx_open', $ip, $port, $aufruf);
                        error_template();
                      } 
                      else {
                        error("Es existiert keine Verbindung zur KNX BAOS770 Schnittstelle (Aufruf: $aufruf)!<br>- IP: '$ip'<br>- Port: '$port'");
                      }
                      return 0;
                    }
                  }
                  #******************************************************************************
                  sub close_knx {
                    return 1 if $offline;
                    return -1 if (! check_connection("close_knx"));
                   
                    $socket->close();
                  }
                  #******************************************************************************
                  sub get_knx_response {
                    my $res_id = shift || "";
                   
                    return 1 if $offline;
                    $res_id = hexstrg2int($res_id, 1);
                   
                    my $buffer = "";
                    my $z = 0;
                   
                    while (($z<=5) && (hexstrg2int($buffer, 2) != $res_id)) {
                      $z++;
                      $socket->recv( $buffer, 200 );
                      $buffer = hex2strg($buffer);
                      #debug("$z. Res: $buffer - check: ".hexstrg2int($buffer, 2)." = $res_id");
                    }
                   
                    #debug("Response-ID $res_id: Return-Buffer = $buffer");
                    return $buffer;
                  }
                  #******************************************************************************
                  sub get_knx_description {
                    my $idx = shift || 1;
                    my $desc = "";
                   
                    return "Offlinebeschreibung $idx" if $offline;
                   
                    return "" if (! check_connection("get_knx_description"));
                    return "" if ($idx > 250);
                    my $tele = "F0 04 ".byte2hexstrg($idx)." 01";
                    #debug("Send: ".$tele);
                   
                    $socket->send( hexstrg2hex($tele) );
                   
                    my $buffer=get_knx_response("84");
                    #Fehler, wenn 4. Byte 00 ist => 5. Byte enthält ErrorCode
                    if (hexstrg2int($buffer, 4) == 0) {
                      my $errorcode = hexstrg2int($buffer, 5);
                      if ($with_template) {
                        $error=set_error('knx_error', get_knx_error_code_strg($errorcode)."  ($idx)");
                        error_template();
                      } 
                      else {
                        error("Kommunikationsfehler zur KNX BAOS770 Schnittstelle ($idx): ".get_knx_error_code_strg($errorcode));
                      }
                      return "";
                    }
                   
                    #debug("Response: ".hex2strg($buffer) );  
                    my $strg = substr($buffer,12);
                    #debug("String in hex: >". $strg);  
                    $strg =~ tr/ //d;
                    #debug("String in hex: >". $strg);  
                   
                    $desc = hex2ascii($strg);
                    #debug("String: ".$desc );  
                   
                    #Spaces am Anfang raus
                    $desc =~ s/^\s*//g;
                   
                    #Doppelte Spaces raus
                    $desc =~ s/\s\s/ /gsex;
                   
                    return $desc; 
                  }
                  #******************************************************************************
                  sub get_knx_typ {
                    my $idx = shift || 1;
                    my $no_error = shift || 0;
                    my $typ= "";
                   
                    return "S" if $offline;
                   
                    return "XX" if (! check_connection("get_knx_typ"));
                    return "--" if ($idx > 250);
                    my $tele = "F0 03 ".byte2hexstrg($idx)." 01";
                    #debug("Send: ".$tele);
                   
                    $socket->send( hexstrg2hex($tele) );
                   
                    my $buffer=get_knx_response("83");
                   
                    #Fehler, wenn 4. Byte 00 ist => 5. Byte enthält ErrorCode
                    if (($no_error) && (hexstrg2int($buffer, 4) == 0)) {
                      my $errorcode = hexstrg2int($buffer, 5);
                      if ($with_template) {
                        $error=set_error('knx_error', get_knx_error_code_strg($errorcode)."  ($idx)");
                        error_template();
                      } 
                      else {
                        error("Kommunikationsfehler zur KNX BAOS770 Schnittstelle ($idx): ".get_knx_error_code_strg($errorcode));
                      }
                      return -1;
                    }
                    my $config = sprintf("%08b", hexstrg2int($buffer, 6));
                    #debug("config = $config");
                   
                    return "--" if (substr($config,5,1) eq "0");
                   
                    #Der Typ ist im 5. Byte im Buffer
                    #Typ gemäß 5. Byte der folgenden Tabelle setzen:
                    #  0 = 1 Bit  => S 
                    #  3 = 4 Bit  => DP
                    #  7 = 1 Byte => DS
                    #  8 = 2 Byte => H
                    my $byte5 = hexstrg2int($buffer, 5);
                    if    ($byte5 == 0) { $typ = "S";  }
                    elsif ($byte5 == 3) { $typ = "DP"; }
                    elsif ($byte5 == 7) { $typ = "DS"; }
                    elsif ($byte5 == 8) { $typ = "H";  }
                    else { $typ = "XX"; }
                   
                    return $typ;  
                  }
                  #******************************************************************************
                  sub get_knx_val {
                    my $idx = shift || 1;
                    my $no_convert = shift || 0;
                    my $val = "";
                   
                    return int(rand(2)) if $offline;
                   
                    return -1 if (! check_connection("get_knx_val"));
                    #rok - fehlt noch
                    my $tele = "F0 05 ".byte2hexstrg($idx)." 01";
                    #debug("Send: ".$tele);
                   
                    $socket->send( hexstrg2hex($tele) );
                   
                    my $buffer=get_knx_response("85");
                   
                    #Fehler, wenn 4. Byte 00 ist => 5. Byte enthält ErrorCode
                    if (hexstrg2int($buffer, 4) == 0) {
                      my $errorcode = hexstrg2int($buffer, 5);
                      if ($with_template) {
                        $error=set_error('knx_error', get_knx_error_code_strg($errorcode)."  ($idx)");
                        error_template();
                      } 
                      else {
                        error("Kommunikationsfehler zur KNX BAOS770 Schnittstelle ($idx): ".get_knx_error_code_strg($errorcode));
                      }
                      return -1;
                    }
                   
                    if ($no_convert) {
                      #Hier nur einen Teilstring zurückliefern - die ersten Zeichen sind uninteressant - nur die Werte (max. 14 Byte)
                      $val = substr($buffer,18);
                    } 
                    else {
                      #Konvertieren nach 0 oder 1
                      $val = hexstrg2int($buffer, 7);
                    }
                   
                    return $val;  
                  }
                  #******************************************************************************
                  sub get_knx_temp {
                    my $idx = shift || 1;
                    my $temp = "";
                   
                    $temp = hex2temp( get_knx_val($idx, "no convert") );
                    return $temp;
                  }
                  #******************************************************************************
                  sub set_knx_temp {
                    my $idx  = shift;
                    my $temp = shift;
                   
                    #$temp enthält Temperatur - umrechnune in Hex-String und ohne Konvertierung auf den Bus schreiben
                    set_knx_val($idx, temp2hex($temp), "no convert");
                  }
                  #******************************************************************************
                  sub set_knx_val {
                    my $idx = shift;
                    my $val = shift;
                    my $no_convert = shift || 0;
                    return 1 if $offline;
                   
                    return -1 if (! check_connection("set_knx_val"));
                   
                    #rok fehlt - send gemäß typ (schalten, dimmen) unterscheiden - evtl. vorher... seh ich später
                   
                    my $tele = "";
                    if ($no_convert) {
                      $tele = "F0 06 ".byte2hexstrg($idx)." 01 ".byte2hexstrg($idx)." 31 ".$val;
                    }
                    else {
                      $tele = "F0 06 ".byte2hexstrg($idx)." 01 ".byte2hexstrg($idx)." 31 ".byte2hexstrg($val);
                    }
                   
                    #debug("Send: ".$tele);
                   
                    $socket->send( hexstrg2hex($tele) );
                   
                    my $buffer=get_knx_response("86");
                   
                    #Fehler, wenn 4. Byte 00 ist => 5. Byte enthält ErrorCode
                    if (hexstrg2int($buffer, 4) == 0) {
                      my $errorcode = hexstrg2int($buffer, 5);
                      if ($with_template) {
                        $error=set_error('knx_error', get_knx_error_code_strg($errorcode)."  ($idx)");
                        error_template();
                      } 
                      else {
                        error("Kommunikationsfehler zur KNX BAOS770 Schnittstelle ($idx): ".get_knx_error_code_strg($errorcode));
                      }
                      return -1;
                    }
                  }
                  #******************************************************************************
                  sub getteletypes {
                    return \%tele_types;
                  }
                  #******************************************************************************
                  sub get_knx_error_code_strg {
                    #Error code Description
                    #0 No error
                    #1 Internal error
                    #2 No item found
                    #3 Buffer is too small
                    #4 Item is not writeable
                    #5 Service is not supported
                    #6 Bad service parameter
                    #7 Wrong datapoint ID
                    #8 Bad datapoint command
                    #9 Bad length of the datapoint value
                    #10 Message inconsistent
                    my $err = shift || 0;
                   
                    my $strg = "Other Error...";
                   
                    if    ($err ==  0) { $strg = "No error"; }
                    elsif ($err ==  1) { $strg = "Internal error"; }
                    elsif ($err ==  2) { $strg = "No item found"; }
                    elsif ($err ==  3) { $strg = "Buffer is too small"; }
                    elsif ($err ==  4) { $strg = "Item is not writeable"; }
                    elsif ($err ==  5) { $strg = "Service is not supported"; }
                    elsif ($err ==  6) { $strg = "Bad service parameter"; }
                    elsif ($err ==  7) { $strg = "Wrong datapoint ID"; }
                    elsif ($err ==  8) { $strg = "Bad datapoint command"; }
                    elsif ($err ==  9) { $strg = "Bad length of the datapoint value"; }
                    elsif ($err == 10) { $strg = "Message inconsistent"; }
                    return $strg;
                  }
                  #******************************************************************************
                  #**** Hex Hilfsfunktionen *****************************************************
                  #******************************************************************************
                  #Einzelnes Byte wird als HEX String zurückgeliefert
                  sub byte2hexstrg {
                    my $byte = shift;
                    return sprintf("%02X", $byte);  
                  }
                  #******************************************************************************
                  #ByteArray wird als HEX String (getrennt durch Space) zurückgeliefert
                  sub hex2strg {
                    my $buffer = shift;
                    my $ergeb = "";
                    foreach my $byte (unpack 'C*', $buffer) { 
                      $ergeb .= byte2hexstrg($byte). " ";
                    } 
                    return $ergeb;  
                  }
                  #******************************************************************************
                  #Wert eines HEX Strings als INT ermitteln hexstrg2int("00 F0 03 07", 3) => 3
                  sub hexstrg2int {
                    my $hexstrg = shift;
                    my $posi    = shift || 1;
                   
                    $posi--;
                   
                    my @hex = split(' ',$hexstrg);
                   
                    my $ergeb = 0;
                   
                    if (($posi >= 0) && ($posi <= $#hex)) {
                      $ergeb = hex($hex[$posi]);
                    }
                    return $ergeb;  
                  }
                  #******************************************************************************
                  #HEX String (getrennt durch Space) wird als ByteArray zurückgeliefert 
                  sub hexstrg2hex {
                    my $szHexFolge = shift || "";
                    #my $szHexFolge='F0 06 03 01 03 31 01';
                   
                    $szHexFolge =~ s/\G([0-9A-F]{2})\s*/'\x'.$1/ieg;
                    #debug($szHexFolge);   #-> '\x80\x80\xAA\x04\x02\x01\x01\x00'
                   
                    #jetzt noch die HexFolge in einen String umwandeln:
                    my $szSendeString;
                    eval ( "\$szSendeString=\"$szHexFolge\"" );  
                   
                    return $szSendeString;  
                  }
                  #******************************************************************************
                  #ByteArray wird in Ascii Zeichen konvertiert
                  sub hex2ascii {
                   ## Convert each two-digit hex number back to an ASCII character.
                   my $str = shift;
                   $str =~ s/([a-fA-F0-9]{2})/chr(hex $1)/eg;
                   #$str =~ s/ //eg;
                    return $str;
                  }
                  #******************************************************************************
                  sub hex2temp {
                  # INPUT = "0D 14"
                  # OUTPUT = 26,0
                  #x0D x14 => 26,0 Grad
                  # => 0000 1101 0001 0100
                  #1. Bit (Länge 1): Vorzeichen
                  #2.-5.Bit (Länge 4): Exponent
                  #6.-16. Bit (Länge 11): Mantisse
                  #=>- Vorzeichen=0=Plus
                  #  - Exponent=0001=1
                  #  - Mantisse=10100010100=1300
                  #Formel: (Mantisse * 0,01) * (2 ^ Exponent) = (1300 * 0,01) * (2^1) = 26,00
                  #Andere Beispiele prüfen:
                  #x0C x1F = 21,1
                  #x0C x1A = 21,0
                    my $hexstrg = shift || "";
                    my $temp = "";
                    my $byte1 = hexstrg2int($hexstrg, 1);
                    my $byte2 = hexstrg2int($hexstrg, 2);
                   
                    my $bit = sprintf("%08b%08b", $byte1, $byte2);
                   
                    my $vorzeichen = bin2dec( substr($bit, 0, 1)  );
                    my $exponent   = bin2dec( substr($bit, 1, 4)  );
                    my $mantisse   = bin2dec( substr($bit, 5, 11) );
                    if ($vorzeichen == 0) {$vorzeichen = 1;}
                    else {$vorzeichen = -1;}
                   
                    #debug("hex: $hexstrg");
                    #debug("byte 1: $byte1");
                    #debug("byte 2: $byte2");
                    #debug("bit: $bit");
                   
                    #Formel: Vorzeichen * (Mantisse * 0,01) * (2 ^ Exponent) = (1300 * 0,01) * (2^1) = 26,00
                    $temp = $vorzeichen * ($mantisse * 0.01) * (2 ** $exponent); 
                    $temp = sprintf("%.1f", $temp);
                   
                    #debug("Temperatur = $vorzeichen * ($mantisse * 0.01) * (2 ^ $exponent) = $temp");
                   
                    return $temp;
                  }
                  #******************************************************************************
                  sub temp2hex {
                  # INPUT = 26,0
                  # OUTPUT = "0D 14"
                    my $temp = shift || "";
                    my $hexstrg = "";
                    my $vorzeichen = "";
                    if ($temp >=0 ) {
                      $vorzeichen = 0;
                    }
                    else {
                      $vorzeichen = 1;
                      $temp = $temp * -1
                    }
                    #debug("Vorzeichen: $vorzeichen");
                    my $exponent = sprintf("%d", ($temp / 20.47));
                    #debug("Exponent = $exponent");
                   
                    my $mantisse = $temp / 0.01 / (2 ** $exponent);
                   
                    my $bit = sprintf("%01b%04b%11b", $vorzeichen, $exponent, $mantisse);
                    #debug("bit: $bit");
                    $hexstrg = byte2hexstrg(bin2dec(substr($bit,0,8))) . " " . byte2hexstrg(bin2dec(substr($bit,8,8)));
                    return $hexstrg;
                  }
                  #******************************************************************************
                  sub bin2dec {
                    return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
                  }
                   
                  1;

                  Kommentar


                    #10
                    Danke Roger

                    VG Dirk

                    Kommentar


                      #11
                      Vielen Dank Roger,

                      hab mir die Perl-Scripte mal kurz angeschaut. Hab zwar mit Sockets noch nie was gemacht, aber soweit ich das jetzt gesehen habe hilft mir das auf jeden Fall weiter.
                      Dass es keine fertige Anwendung ist die Du postest ist kein Problem. Ich denke das erwartet auch keiner.
                      Was nicht heißen soll, dass wir uns nicht über eine fertige Anwendung freuen würden ;-)

                      Gruß

                      Matthias

                      Kommentar


                        #12
                        perl Modul: unbekante Elemente

                        Hallo Roger

                        Vieeelen Dank, dass Du Dein Modul hier reingestellt hast. Ich versuche grade es zum Leben zu bringen... ich hab das Ganze einfach eib.pm genannt und zu den anderen .pm's kopiert. Wenn ich das Modul jetzt aufrufe, stolpert der Interpreter über die Funktion set_error in der .pm.

                        Woher hast du diese Funktion eingebunden? Wenn ich CPAN befrage gibts ne Menge antworten... ich frag mich welche du benutzt hast... WebDAV?

                        Gruss,
                        Henning

                        Kommentar


                          #13
                          set_error

                          Hallo,
                          ich habe mir eine Template Verwaltung in Perl programmiert. Für das Fehlerhandling gibt es diese Routine, um aufgetretene Fehler im Template anzuzeigen. Wenn diese Funktion aufgerufen wird, bedeutet es, dass ein Fehler aufgetreten ist. Der zugehörige Fehlertext wird aus dem 1. String sprachabhängig ermittelt und die übrigen Werte sind Parameter für die Fehlermeldung.
                          Du kannst die Funktion durch die "Sprechender Fehlertext" ersetzen.
                          Gruß, Roger

                          Kommentar

                          Lädt...
                          X