Wert wird nicht richtig aus CURL übergeben

Ich bastel weiterhin an meinem Modul und habe das Problem, das ich einen Wert nicht richtig via CURL übergeben bekomme. Das Wert ist 0.51 - ankommen in der Variable tut aber 1.00 - ich vermute es ist irgendwas mit runden o.ä.

Code der den Wert abruft ist:


$ch = curl_init(); 
				curl_setopt($ch, CURLOPT_URL, 'http://'.$User_Name.':'.$Password.'@'.$Server_Address.'/cgi-bin/template.cgi?template=[sol0evo-act]');
				$evo = curl_exec($ch);
				//$evo1 = str_replace(".",",",$evo); 
				echo $evo;
				SetValue($this->GetIDForIdent("Evaporation"), $evo);
				curl_close($ch); 

hier sieht man das der Wert richtig kommt, aber „falsch“ gesetzt wird.

var-man.PNG

Ich denke das ich mit Floar richtig sitze, aber ich bekomme es irgendwie nicht hin … ich habe auch schon mit . vs. , gespielt - keine Änderung.

Kann jemand helfen?


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://'.$User_Name.':'.$Password.'@'.$Server_Address.'/cgi-bin/template.cgi?template=[sol0evo-act]');
$evo = curl_exec($ch);

SetValue($this->GetIDForIdent("Evaporation"), (float)$evo);
curl_close($ch); 

Michael

Hi Michael,

danke das Code Snipsel. Bis auf das Echo und den auskommentierten str_replace sieht der Code identisch aus? Ist das was was ich übersehe?

Das Ergebnis ist auch das gleiche wie vorher - es wird immer 1 übergeben.

Danke

Enno

Teste Mal dies und schau dir dabei die Debug Ausgabe von der Instanz an:


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://'.$User_Name.':'.$Password.'@'.$Server_Address.'/cgi-bin/template.cgi?template=[sol0evo-act]');
$evo = curl_exec($ch);
$this->SendDebug('Result', $evo,0);
$this->SendDebug('Result trim', trim($evo),0);
SetValue($this->GetIDForIdent("Evaporation"), (float)trim($evo));
curl_close($ch); 

Michael

Wie immer Danke!

Anbei die Fehlerausgabe:

Das Resultat in Browser

result in browser.PNG

Mein Fehler… Sollte aufhören PHP am Handy zu lesen, dann wäre mir das gleich aufgefallen :wink:
Du hast einfach vergessen die richtige Option in curl zu setzen.
Wenn du CURLOPT_RETURNTRANSFER nicht auf true setzt, bekommst du mit curl_exec nur true/false zurück.
Btw das dargestellte Ergebnis im Browser ist nicht aussagekräftig; da er automatisch z.b. Leerzeichen usw. entfernt.
Dann lieber die Entwicklerkonsole vom Browser als Referenz nutzen.
Darum auch nie Echo benutzen. PHP gibt z.B. Float in deiner lokalen Sprache mit Komma aus.
Lieber SendDebug oder ggfls. var_dump nutzen wenn du den Datentyp nicht kennst.
Hier bekommst du aktuell einen bool Wert da CURLOPT_RETURNTRANSFER nicht gesetzt war.
Durch den automatischen Cast auf Integer wird daraus eine 1.
Wenn du jetzt CURLOPT_RETURNTRANSFER setzt, bekommst du einen String zurück. Keinen Float. Und da wir nicht wissen ob der String nur deine Zahl oder noch Leerzeichen oder Zeilenumbrüche enthält, hatte ich das trim eingesetzt.
Also noch mal:


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://'.$User_Name.':'.$Password.'@'.$Server_Address.'/cgi-bin/template.cgi?template=[sol0evo-act]');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$evo = curl_exec($ch);
$this->SendDebug('Result', $evo,0);
$this->SendDebug('Result trim', trim($evo),0);
SetValue($this->GetIDForIdent("Evaporation"), (float)trim($evo));
curl_close($ch); 

Michael

Geht … kaum man es richtig.

Was ich noch alles lernen muss!!! Was aber toll ist, dass man hier so gutes Feedback bekommt. Da macht auch der Probieren und Programmieren Spaß!

Danke