Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: daten per 'POST' versenden Kategorie: Programmierung (von Markus - 22.03.2011 8:47)
Als Antwort auf daten per 'POST' versenden von efgn - 14.03.2011 19:08
Ich nutze:
C-Control II Station, OSOPT V3.1
> Hi@all.
> Ich möchte Daten ohne DYNDNS versenden.
> Soweit ich weiÃ?, geht das mit 'POST'.
> Die Webseite ist bei Host Europe gehostet, also kein direkter Zugang über eine URL.
>
>
> hwcom.print("C80.237.132.72/80"); //IP-Adresse HostEurope
> wait hwcom.ready();
> hwcom.print("HTTP/1.1n");
> wait hwcom.ready();
> hwcom.print("Host: heizung.efgn.den");
> wait hwcom.ready();
> hwcom.print("POST /xpr.php"); // php auch noch sehr nebulös
>
>   loop
>   {
>        hwcom.ready();
>
>        hwcom.print(tta);
>        hwcom.print(ttb);
>        hwcom.print(ttc);
>        hwcom.print(ttd);
>        hwcom.print("rn");
>        hwcom.flush();
>     timer=system.timer();do{time=system.timer();}while time-timer<15000;
>   }
>
>

>
> Nur leider klappert es überhaupt nicht.
> Mit Hyperterminal an Lan  kommen ganz genau die Daten, aber die Seite reagiert so gar nicht.
>
> die php Seite ist mir überhaupt nicht geheuer, geschweige denn klar..
>
>    $Data="";$in="";
>
>    $in = file_get_contents("php://input");
>   $Data.=$in;
>   echo "
" ;
>   echo $in;
>   $Temp = explode(",", $Data);
>   echo $Temp;
>   echo "
" ;
>
>
> Angeblich überwacht file_get.... automatisch dem port 80.
>
> Mir ist der ganze HTML und php Kram eh nicht klar.
>
> Bitte um Hilfe.
> MfG. Günther
>

Hallo Günther
Ich habe vor einiger Zeit mal so was gemacht. Ob das auch mit deinem Provider funktioniert, musst du^
noch testen. Ich Poste hier einfach mal den Code meines Threads, der das Senden an eine
PHP-Funktion auf meiner Webseite ausführt.

In meiner Steuerung habe ich einfach Arrays definiert, in welche ich im laufe der Programmierung
die Bit-, Byte-, Integer- oder Float-Werte abgelegt habe. So ist die Routine für das Senden der
Daten an die PHP-Fuktion immer gleich, unabhängig, ob die Werte belegt sind oder nicht.

Falls du am entsprechenden Teil der PHP-Funktion interessiert bist, melde dich.

Gruss: Markus


thread SendWGData
{
  int Laenge, txtLaenge;
  long Timer, Timeout;
  byte i, Versuche, maxVersuche, SendOK, Min;
  string strSend, strBuffer, strComp, strPrefix; //, strTemp;
  string strBool, strInt[10], strLong[10], strFloat[10];
  byte buf[512], recBuf[512];

  cap.init();

  swcom.init();
  sleep 500;
  swcom.setbuf(buf,512);
  swcom.setspeed(5);

  lcdext.init();
  Versuche = 0;
  maxVersuche = 0;
  strComp = "HT";
  strPrefix = "werte=";
  Timeout = 2000;
  Min = system.minute();

 loop
 {
   if system.minute() %2 == 0 and system.minute() != Min
   {
    Min = system.minute();
    global.strSQLDate = "" ;
    str.putintf (global.strSQLDate,system.year()-2000,2);
    global.strSQLDate = global.strSQLDate + "-";
    str.putintf (global.strSQLDate,system.month(),2);
    global.strSQLDate = global.strSQLDate + "-";
    str.putintf (global.strSQLDate,system.day(),2);
    global.strSQLDate = global.strSQLDate + " ";
    str.putintf (global.strSQLDate,system.hour(),2);
    global.strSQLDate = global.strSQLDate + ":";
    str.putintf (global.strSQLDate,system.minute(),2);
    global.strSQLDate = global.strSQLDate + ":";
    str.putintf (global.strSQLDate,system.second(),2);
// WHILE-Schlaufe für Sendeversuche
    do
    {
     Versuche = Versuche + 1;
     SendOK = 0;
     txtLaenge = str.length(strPrefix);
     txtLaenge = txtLaenge + str.length(global.strSQLDate)+1; // + 1 für Trennzeichen

// alle Werte an einem Stück konvertieren, da sich die Längen sonst andern könnten
     wait cap.Capture(1);
     strBool="";
     for i=0...9
    {
       if global.ByteWert[i] strBool = strBool + '1';
       else strBool = strBool + '0';
       strBool = strBool +",";
    }
     txtLaenge = txtLaenge + 20;  // für 10 Boolean-Werte, 1 oder 0 und ein Trennzeichen
     for i=0...9
         {
             strInt[i] = "";
             str.putint(strInt[i],global.IntWert[i]);
             strInt[i] = strInt[i]  + ",";
             txtLaenge = txtLaenge + str.length(strInt[i]);
         }
     for i=0...9
         {
             strLong[i] = "";
             str.putlong(strLong[i],global.LongWert[i]);
             strLong[i] = strLong[i]  + ",";
             txtLaenge = txtLaenge + str.length(strLong[i]);
         }
     for i=0...9
         {
             strFloat[i] = "";
             str.putfloatf(strFloat[i], global.FloatWert[i],1);
             strFloat[i] = strFloat[i]  + ",";
             txtLaenge = txtLaenge + str.length(strFloat[i]);
         }
// und das Capture wieder frei geben, damit anderes erledigt wird
     cap.Release(1);

// hier beginnt das eigentliche Senden
    strSend="Cxxx.xxx.xxx.xxx/80xD";
    swcom.print2(strSend);
    sleep 1000;

// alles an einem Stück senden
    wait cap.Capture(1);
    strSend = "POST /ccreceive.php";        swcom.print2(strSend);wait swcom.ready();
    strSend=" HTTP/1.1rn";                swcom.print2(strSend);wait swcom.ready();
    strSend="Host: 192.168.9.5rn";     swcom.print2(strSend);wait swcom.ready();
    strSend="Connection: closern";      swcom.print2(strSend);wait swcom.ready();
    strSend="Cache-Control: norn";      swcom.print2(strSend);wait swcom.ready();
    strSend="Content-type: ";             swcom.print2(strSend);wait swcom.ready();
    strSend="application/";               swcom.print2(strSend);wait swcom.ready();
    strSend="x-www-form-urlencodedrn";  swcom.print2(strSend);wait swcom.ready();
    strSend= "Content-length: ";
    str.putint(strSend, txtLaenge);
    strSend = strSend +"rnrn";        swcom.print2(strSend);wait swcom.ready();

// hier folgen die $_POST-Daten
    swcom.print2(strPrefix);   //"werte="
    swcom.print2(global.strSQLDate);swcom.put(44);
    swcom.print2(strBool);
    for i=0...9 { swcom.print2(strInt[i]); }
    for i=0...9 { swcom.print2(strLong[i]); }
    for i=0...9 { swcom.print2(strFloat[i]); }
    swcom.print("rn");
    swcom.flush();
// und das Capture wieder frei geben
    cap.Release(1);

// ab hier wird kontrolliert ob der Webserver ein ACK sendet
    Timer=system.timer();
    do
    {
       Laenge = 0;
       // plm.beep(25);sleep 20;plm.beep(-1); // für Testzwecke
       sleep(Versuche * 200);
       if swcom.rxd()
       {
          Laenge = swcom.inbuffercnt();
          swcom.receive(recBuf,Laenge,1000);
       }
       strBuffer = "";
       if Laenge >= 2
       {
          for i = 0 ... 1
          {
            str.putchar(strBuffer,recBuf[i]);
          }
       }
       else { strBuffer = "??"; }
    }
    while math.labs(system.timer()-Timer) <= Timeout and Laenge == 0;
    if strx.comp(strBuffer, strComp) SendOK = 1;
    /*
           lcdext.delline(2);
            lcdext.goto(2,0);
            lcdext.zahl2(Laenge);
            lcdext.goto(2,3);
            lcdext.print2(strBuffer);
            lcdext.goto(2,7);
            lcdext.print2(strComp);
            lcdext.goto(2,10);
            lcdext.zahl4(txtLaenge);
    */

   }
   while Versuche < maxVersuche and SendOK == 0;
   Versuche = 0;
  }
 }
}




    Antwort schreiben


Antworten:

Re: daten per 'POST' versenden (von efgn - 7.04.2011 22:11)
Re: daten per 'POST' versenden (von efgn - 7.04.2011 15:06)
    Re: daten per 'POST' versenden (von efgn - 7.04.2011 22:14)