FAQ EPC Cpp

Aus Gude- Analog- und Digitalsysteme GmbH

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

HTTP-GET-Request senden

Um den EPC Schaltkomandos in ein eigenes Programm einzubinden haben Sie folgende Möglichkeiten:

  • Selbst einen HTTP-GET-Request auf das Ethernet legen (am besten mit Hilfe eines Object Frameworks Ihrer Wahl) und die HTTP-Antwort des Servers (hier: der EPC) analysieren


In beiden Fällen ist das Ergebnis ein HTTP-GET-Request, und die Rückgabe eine vom EPC per HTTP versendete HTML Seite (z.B. ov.html). Da HTTP ein überaus offenes und weit verbreitetes Standardprotokoll ist, werden Sie genügend Informationen und Implementierungen eines HTTP-GET-Requests im Internet finden.


HTTP Dokumentationen (Bsp):


HTTP Implementierungen (Bsp):


Zum Schalten des EPC Sie brauchen nun noch:

HTTP Antwort des EPC analysieren

Verwenden Sie zum Senden des Schaltkommandos die URL der EPC-Übersicht (ov.html), so bekommen Sie als Antwort die HTML Datei ov.html mit folgenden Inhalt im HTML Header gesendet

  • Bsp: Port 1 soll eingeschaltet werden:
    • ein HTTP-GET-Request fragt 'ov.html?cmd=1&p=1&s=1
    • EPC Antwortet mit HTTP Error Code 200 (OK), und sendet die HTML Seite ov.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="cache-control" content="no-cache">
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<meta http-equiv="powerstate" content="Power Port 1,1">
<meta http-equiv="powerstate" content="Power Port 2,1">
<meta http-equiv="powerstate" content="Power Port 3,1">
<meta http-equiv="powerstate" content="Power Port 4,1">
<meta http-equiv="powerstate" content="Power Port 5,0">
<meta http-equiv="powerstate" content="Power Port 6,0">
<meta http-equiv="powerstate" content="Power Port 7,0">
<meta http-equiv="powerstate" content="Power Port 8,0">
<title>Expert Power Control NET 8x - EPC </title>
</head>

<body>
[...]
</body>


Bitte beachten Sie hier die meta-Informationen im HTML-Header:

 <meta http-equiv="powerstate" content="Power Port 1,1">

Hieraus entnehmen Sie dass der erste Powerport den Namen 'Power Port 1' trägt, und gerade eingeschaltet ist. Steht hinter dem Komma eine 0, ist er ausgeschaltet.

HTTP Error Codes

Code
200 OK Der HTTP-GET-Request wird erfolgreich beantwortet
404 Not Found Die angefragte Ressource ist nicht verfügbar
401 Unaurhorized Im EPC ist 'HTTP Athentification' eingeschaltet, aber im HTTP-GET-Request fehlt der sog. Authentication-Header oder der darin codierte Benutzername bzw. das Password ist falsch


Authentication Header im HTTP-GET-Request

  • Der EPC erwartet den Athentication Header als Option innerhalb des HTTP-GET-Requests
  • Diese sog. Credentials müssen nach dem sogenannten Authentication Type 'Basic' im HTTP-GET-Request mitgesendet werden werden (Base64 / Mime)
  • Ein Beispiel solcher Credentials finden sie in den Wikipedia:HTTP Erläuterungen


Beispiel in Delphi / Indy


function TForm1.send_request(url: string) : boolean;
var
  html : string;
  IdHTTP1 : TIdHTTP;
begin
  // prepare GUI widgets
  Memo1.Lines.Clear;
  Edit4.text := url;

  IdHTTP1 :=  TIdHTTP.Create(Form1);

  // prepare Athentification Header
  IdHTTP1.Request.Username := Edit2.text;
  IdHTTP1.Request.Password := Edit3.text;
  IdHTTP1.Request.BasicAuthentication := true;

  // Send HTTP-GET-Request
  html := IdHTTP1.Get(url);

  // post reply to GUI widgets
  Memo1.Lines.Add(html);
  Edit5.Text := IdHTTP1.ResponseText;

  // return True on HTTP 200 (OK)
  send_request := (IdHTTP1.ResponseCode = 200);

  IdHTTP1.Destroy;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  url : string;
  I : integer;
  meta : string;
  portname : string;
  portstate : string;
begin
  url := 'http://' + Edit1.Text + '/ov.html';
  if (ComboBox1.ItemIndex > 0) and (ComboBox2.ItemIndex > 0) then
    url := url + '?' + 'cmd=1&p='+IntToStr(ComboBox1.ItemIndex) +
           '&s='+inttostr(ComboBox2.Itemindex - 1);

  // send HTTP-GET Request, and parse the HTML Respons
  if send_request(url) then
  begin
    Memo2.Lines.Clear;
    // analyse HTML response
    for I := 0 to Memo1.Lines.Count - 1 do
    begin
      if (pos('powerstate', Memo1.Lines[i]) > 0) then
      begin
        meta := Memo1.Lines[i];
        delete(meta, 1, pos('content="', Memo1.Lines[i])+8);
        portname := copy(meta, 1, pos(',', meta)-1);
        portstate := copy(meta, pos(',', meta)+1, 1);
        Memo2.Lines.Add('Name: "' + portname + '", State: "'+portstate+'"');
      end;
    end;
  end;

end;
  • Hinweis: das oben stehende Beispiel wird wie im Quelltext angegeben unter der BSD Lizenz veröffentlicht



Mbachem 11:42, 1. Aug 2007 (CEST)

Persönliche Werkzeuge
Navigation