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 efgn, http://www.heizung.efgn.de/index.php - 7.04.2011 15:06)
Als Antwort auf Re: daten per 'POST' versenden von Markus - 22.03.2011 8:47
Ich nutze:
C-Control II Station, CC2-ReglerBoard, OSOPT V3.1
Puh, vermutlich geschafft.

Ich danke erst einmal insbesondere André, Markus und WernerR für die tatkräftige Unterstützung!!

Realisiert wurde die Steuerung mit einer CC2 Station und vielen Komponenten von CCTools.

Erschwerend kam wohl hinzu, dass ich via Vodafone UMTS die Webseite aktualisieren muss und
es da so einige Unwägbarkeiten gibt.

Zur Einstellung des XPorts (auf Hutschiene, ohne Hardware-Handshake):

*** basic parameters
Hardware: Ethernet TPI
IP addr 192.168.0.20, gateway 192.168.0.1,netmask 255.255.255.0

*** Channel 1
Baudrate 57600, I/F Mode 4C, Flow 00
Port 10001
Connect Mode : C4
Send '+++' in Modem Mode disabled
Show IP addr after 'RING' disabled
Auto increment source port disabled
Remote IP Adr: --- none ---, Port 00000
Disconn Mode : 00  Disconn Time: 00:05
Flush   Mode : 33

*** Security
SNMP is              disabled
Telnet Setup is      enabled
TFTP Download is     enabled
Port 77FEh is        enabled
Web Server is        disabled
Web Setup is         disabled
ECHO is              disabled
Enhanced Password is disabled
Port 77F0h is        enabled

*** Expert
TCP Keepalive    : 45s
ARP cache timeout: 600s
CPU performance: Regular
Monitor Mode @ bootup : enabled
RS485 tx enable  : active low
HTTP Port Number : 80
SMTP Port Number : 25
MTU Size: 1056
Alternate MAC: disabled
Ethernet connection type: auto-negotiate

Zu den Scripten und Programmen:
Sendeteil CC2:


system.TIME Zeit;
string ts[50];int t[25];
int len;string sendlen;
byte sendready,makeready;
function makedata()
{
 makeready=10;

 byte i;
//++++++Leeren des Arrays++++++++++++
       for i=0...24
         {
          t[i]=0;
         }
//+++++++++++++++++++++++++++++++++++
//Zuweisung Solartemperaturen
  t[0]= holtemp.tsso;
  t[1]= holtemp.tssu;
  t[2]= holtemp.tsr;
  t[3]= holtemp.tsv;
//Zuweisung Speichertemperaturen
  t[4]= holtemp.tso;
  t[5]= holtemp.tsm;
  t[6]= holtemp.tsu;
//Zuweisung Kamintemperaturen
  t[7]= holtemp.trr;
  t[8]= holtemp.tkv;
  t[9]= holtemp.tkr;
//Zuweisung Heiztemperaturen
  t[10]= holtemp.tmhw;
  t[11]= holtemp.thw;
  t[12]= holtemp.tww;
//Zuweisung Umgebung
  t[13]= holtemp.tout2;
  t[14]= holtemp.sonne;
//Zuweisung Pumpen
  t[15]= var.sproz;
  t[16]= var.kproz;
  t[17]= var.lp; //0 ein;-1 aus
  t[18]= var.hp; //0 ein;-1 aus
//Zuweisung Ã?lbrenner und Kaminfeuer
  t[19]= var.oel; //0 ein; -1 aus
  t[20]= var.kam_puf;   //10 ein;0aus
//Zuweisung Wasserwege
  t[21]= var.oel_ww; //Marker website: oel2ww 10 ein;0aus
  t[22]= var.oel_puf;// Marker website: oel2puf 10 ein;0aus
  t[23]= var.puf_hk; //Marker website: oel2heiz 10 ein;0aus
  t[24]= var.puf_ww; //Marker website: puf2ww 10 ein;0aus
//+++++++Leeren des stringarray und Konvertierung int 2 string+++++++++++
        for i=0...49
         {
          ts[i]="";
         }

        for i=0...24
         {
          str.putint(ts[i],t[i]);
         }
//++++++++++++++++++++++++++++++++++++++++++++
//Zuweisung Betriebszeiten Brenner
  str.putint(ts[25],var.oeljahr_alt_h);// Brenner std vorjahr
  str.putint(ts[26],var.oeljahr_alt_m);// Brenner min vorjahr
  str.putint(ts[27],var.oelstd);// Brenner std jahr
  str.putint(ts[28],var.oelmin);// Brenner m jahr
 
  str.putint(ts[29],var.oh); //Tagesbetrieb std
  str.putint(ts[30],var.omin); //Tagesbetrieb min
//Zuweisung Anläufe Brenner
  str.putint(ts[31],var.anlauf_alt);// Anläufe Vorjahr
  str.putint(ts[32],var.anlauf_akt);// Anläufe Jahr
  str.putint(ts[33],var.run4day);// Anläufe Tag
//Zuweisung Ã?lverbrauch Vorjahr
  str.putint(ts[34],var.verbrauch_alt_l);
  str.putint(ts[35],var.verbrauch_alt);
//Zuweisung Ã?lverbrauch Jahr
  str.putint(ts[36],var.verbrauch_akt_l);
  str.putint(ts[37],var.verbrauch_akt);

//Zuweisung Betriebszeiten Solar
  str.putint(ts[38],var.soljahr_alt_h);// Solar std vorjahr
  str.putint(ts[39],var.soljahr_alt_m);// Solar  min vorjahr
// Zuweisung Solarstunden jährlich
  str.putint(ts[40],var.solstd);// Solar  std jahr
  str.putint(ts[41],var.solmin);// Solar  m jahr
// Zuweisung Solarstunden täglich
  str.putint(ts[42],var.sh);// Solarstd tag
  str.putint(ts[43],var.smin);// Solarmin tag

//Zuweisung Betriebszeiten Kamin
  str.putint(ts[44],var.kamjahr_alt_h);// Kamin std vorjahr
  str.putint(ts[45],var.kamjahr_alt_m);// Kamin  min vorjahr
// Zuweisung Kaminstunden jährlich
  str.putint(ts[46],var.kamstd);// Kaminstd
  str.putint(ts[47],var.kammin);// Kaminmin
// Zuweisung Kaminstunden täglich
  str.putint(ts[48],var.kh);// Kaminstd
  str.putint(ts[49],var.kmin);// Kaminmin
 
     len=0;sendlen="";
         for i=0...49
          {
           len = len+str.length(ts[i]);
           if i < 49 len=len+1;
          }
         len=len+6;//werte= zur Länge addieren
         str.putint(sendlen,len);
 makeready=0;
  }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function send()
{
 string s1;
 byte i;
 wait sendready==0;
 sendready=10;
  hwcom.print("C80.237.132.72/80rn");hwcom.ready();
  sleep 250;
  hwcom.print("POST /xpr.php HTTP/1.1rn");hwcom.ready();
  hwcom.print("Host: www.heizung.efgn.dern");hwcom.ready();

  s1="Content-Length: ";
  s1=s1+sendlen+"rn";
  hwcom.print2(s1);hwcom.ready();
  hwcom.print("Connection: closern");hwcom.ready();
  hwcom.print("Content-Type: application/");hwcom.ready();
  hwcom.print("x-www-form-urlencodednn");hwcom.ready();

       hwcom.print("werte=");
        for i=0...49
         {
          hwcom.print2(ts[i]);
          if i < 49 hwcom.put(44);
         }
         hwcom.print("rn");hwcom.ready();hwcom.flush();
  sendready=0;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
thread senddata
 {
 long time,timer;
 timer=system.timer(); do{time=system.timer();}while time-timer<30000;
 wait makeready == 0;
 makedata();
 wait sendready==0;
 send();
 }


Dieses TCP Protokoll scheint etwas unorthodox, ist aber von Host Europe freigegeben und
funktioniert anders auch nicht..

Ich habe für Abrufe mit mehr Daten noch eine andrer Routine geklaut ähh, besorgt (André sei Dank)
Die Erzeugung der Daten in der Tabelle liegt im Forum


string gs;// = getstring
//----------------------------------------
function getstr(byte s[]) returns int
//----------------------------------------
{
byte i,y;
 i=0;
 y=255;
 for i=0 ... 29
 {
  wait hwcom.rxd();
   y=hwcom.get();
       if y==254
       {
        byte x[2];
        x[1]=hwcom.receive(x,1,1000);
        if x[0]==254 and x[1]==1 quit 1;// Hostmode einleiten RS232
        if x[0]==253 and x[1]==1 quit 256;// Hostmode einleiten LAN
       }
  if y==10 or y==13 break;
  s[i]=y;

 }
 if y==13 hwcom.get();
 s[31]=i;
 mem.fillpos(gs,i,30-i,0);
 hwcom.flush();
 return i;
}
//############################################################################
byte buf[4096];

 thread  xport// Thread vom main-thread aus starten
{
 byte x,y,z;
 hwcom.init();
 hwcom.setbuf(buf,4096);
 hwcom.setspeed(8);
 sendready=0;makeready=0;
// klappt COM! 14.2.09
 loop
 {
  getstr(gs);
//++++++++++++++meldet sich eine WEB_Anfrage, dann:

  x=strx.comp(gs,"GET / HTTP/1.0");y=strx.comp(gs,"GET / HTTP/1.1");z=strx.comp(gs,"GET /index.html HTTP/1.1");
  if x==0 and y==0 and z==0 hwcom.flush();
  else
   {
          wait sendready==0;
          sendready=10;
          hwcom.print("HTTP/1.0 200 OKn");
          hwcom.print("Server: C-Control IIn");
          hwcom.print("Transfer-Encoding: chunkedn");
          hwcom.print("Content-Type: text/htmlnn");
          hwcom.print("<html>n<body>n");
          hwcom.print("<b>C-Control II im Web<br>n");
          hwcom.print("Kaminsteuerung</b><br>n");
          table();
          //hwcom.flush();
          hwcom.print("<a href="/">aktualisieren</a>n");
          hwcom.flush();
          hwcom.print("</body>n</html>rn");
          hwcom.flush();
          sendready=0;
    }

 }
}


Das php Empfangsscript: Da eine Aktualisierung mindestens 5 Minuten braucht (Vodafone),
habe ich auf einen refresh der Daten verzichtet.


 <?php
error_reporting(E_ALL);

  $temp = ($_POST['werte']);
    if ($temp != "")
    {
     strip_tags($temp);
     $fp = fopen( "werte.txt", "w" );
     fwrite( $fp, $temp );
     fclose( $fp );
     print_r($temp);
    $temp="";
    }
?>

und index.php im Ausschnitt:

<?php
error_reporting(E_ALL);
//include("counter.php");

$fp=fopen("werte.txt","r");//Textdatei wird geöffnet und Daten eingelesen
$data=fgets( $fp, 256);
fclose($fp);
$Temp=explode(",",$data );
//Zuweisung Solartemperaturen
$tsso = $Temp[0];
$tssu = $Temp[1];
$tsr = $Temp[2];
$tsv = $Temp[3];
//Zuweisung Puffertemperaturen
$tso = $Temp[4];
$tsm = $Temp[5];
$tsu = $Temp[6];
//Zuweisung Kamintemperaturen
$trr = $Temp[7];
$tkv = $Temp[8];
$tkr = $Temp[9];
//Zuweisung Heiz- und Warmwasser
$tmhw = $Temp[10];
$thw = $Temp[11];
$tww = $Temp[12];
//Zuweisung Umgebung
$tout= $Temp[13];
$env = $Temp[14];
//Zuweisung Pumpen
$sp= $Temp[15]; //Zuweisung in %
$kp= $Temp[16]; //Zuweisung in %
$lp= $Temp[17]; //0 ein, -1 aus
$hp= $Temp[18]; //0 ein, -1 aus
//Zuweisung Brennstellen ein
$brenner= $Temp[19]; //0 ein, -1 aus
$kamin= $Temp[20];   //10 ein, 0 aus
// Zuweisung Wasserwege
$oel2ww= $Temp[21];   //10 ein, 0 aus
$oel2puf= $Temp[22];   //10 ein, 0 aus
$puf2heiz= $Temp[23];   //10 ein, 0 aus
$puf2ww= $Temp[24];   //10 ein, 0 aus
//******************************************
//Zuweisung Datum
$datum = date("d.m.Y");
$uhrzeit = date("H:i");
$jahr = date("Y");
//Zuweisung Vorjahr
$jahralt = ($jahr - 1);
//Zuweisung Betriebszeiten Brenner
$oeljahralt_h=  $Temp[25];
$oeljahralt_m=  $Temp[26];
$oeljahr_h=  $Temp[27];
$oeljahr_m=  $Temp[28];
$oeltag_h=  $Temp[29];
$oeltag_m=  $Temp[30];
//Zuweisung Brenner-Anläufe
$anlauf_alt=  $Temp[31];
$anlauf_akt=  $Temp[32];
$anlauf_tag=  $Temp[33];
//Zuweisung Ã?lverbrauch Vorjahr
$verbrauch_alt_l=  $Temp[34];
$verbrauch_alt=  $Temp[35];
//Zuweisung Ã?lverbrauch Jahr
$verbrauch_akt_l=  $Temp[36];
$verbrauch_akt=  $Temp[37];
//Zuweisung Betriebszeiten Solar
$solarjahralt_h = $Temp[38];
$solarjahralt_m = $Temp[39];
$solarjahr_h = $Temp[40];
$solarjahr_m = $Temp[41];
$solartag_h = $Temp[42];
$solartag_m = $Temp[43];
//Zuweisung Betriebszeiten Kamin
$kaminjahralt_h = $Temp[44];
$kaminjahralt_m = $Temp[45];
$kaminjahr_h = $Temp[46];
$kaminjahr_m = $Temp[47];
$kamintag_h = $Temp[48];
$kamintag_m = $Temp[49];
//Ermittlung Wetterbedingung
if ($env < 350) $wetter = "Abenddämmerung";
if ($env <= 100) $wetter = "Nacht";
if ($env >= 350) $wetter = "Dämmerlicht";

if ($env >= 600) $wetter = "stark bedeckt";
if ($env >= 700) $wetter = "bedeckt";
if ($env >= 800) $wetter = "sonnig, bewölkt";
if ($env >= 900) $wetter = "sonnig, durchziehende Wolken";
if ($env >= 950) $wetter = "sonnig, diesig";
if ($env >= 1000) $wetter = "sonnig, leicht diesig";
if ($env >= 1050) $wetter = "sonnig";
?>

Der Rest ist wieder bei http://www.cc2net.de/Foren/CC2Net_Forum/lesen.php?eintrag=13791
im Forum zu finden.

Da nichts davon wirklich auf meinem Mist gewachsen ist, soll zeigen, dass es auch ohne
tiefere Vorkenntnisse, mit viel suchen im Netz und Hilfe aus dem Forum geht.
Gru�, Günther

Meine Seite: http://www.heizung.efgn.de/index.php


    Antwort schreiben


Antworten:

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