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 | ||
| ||
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) |