Bonjour,
J'essaye d'intégrer un script php que j'avais pompé, modifié et fait fonctionner sur une machine windows.
Ce script récupère les valeurs de sondes 1 wire que me donne un boitier EDS. Il est supposé récupérer les valeurs Températures pour chaque pièce et sauvegarder l'emsemble dans un fichier XML, que je souhaite récupérer dans jeedom.
J'attache mes commandes ci dessous.
Quand je teste le script php, j'ai un message erreur "Echec de la requête HTTP : /plugins/script/core/ressources/EDS_OWserver/temperature_pieces.xml cURL error : malformed"
Cependant, le script crée bien mon fichier XML comme le montre la copie attachée.
Mais lorsque j'effectue une lecture xml avec la commande " a", aucune valeur ne s'affiche et aucune erreur n'est posté dans le log.
Une âme charitable peut elle m'apporter ses compétences?
Merci
Mon script
_____________________________________________
<?php
// Connexion boitiers OWS / sondes 1wire
$CFG['OWStemp_pieces_url']="http://192.168.5.13"; // url du boitier EDS des sondes temperatures
$CFG['Sondes'] = array("TExterieur"=>"48000802937F5A10","TSB_Et"=>"430010000024F97E","TCh_Vger"=>"8D0008027472B010","TCh_Cour"=>"9A00080293985910","TCuisine"=>"CB0010000025087E",
"TSAM"=>"650008029742D210","TDress"=>"E50000051017B428","TSal_TV"=>"0A0000050FF41328","TSB_RC"=>"140010000031777E","TCh_RC"=>"03011464E5DFFF28"); // Noms et ROMid des sondes
$CFG['require_health'] = 7; //don't update values if health of sensor is less than this value
$t=strtotime ("now");
$date= date("d-m-Y - h:ia",$t);
$nb_sondes ='9';
//Collecte des temperatures
$serverxml = getServerXML();
if ($serverxml) {
$data = simplexml_load_string($serverxml);
if ($data) {
$devices = parseServerXML($data);
if (count($devices['devices'])) {
} else {
die("No devices found, nothing to do..");
}
} else {
die("Couldn't decode XML response, bailing...");
}
} else {
die("Couldn't connect to {$CFG['OWStemp_pieces_url']}, fatal error");
}
// Creation doc XML temperature pieces
$dom = new DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;
// $root = $dom->createElement('pieces');
// $dom->appendChild($root);
for($i=1; $i < ($nb_sondes+1);$i++ )
{
$piece= $devices['devices'][$i]['piece'];
$temp= $devices['devices'][$i]['temp'];
$health= $devices['devices'][$i]['health'];
print "<pre>";
print ($piece." = ");
print ($temp." ");
print ($health);
print "\n";
$dom->appendChild( $dom->createElement($piece,$temp));
}
chdir('/var/www/html/plugins/script/core/ressources/EDS_OWserver');
// echo '<xmp>'. $dom->saveXML() .'</xmp>';
$dom->save('temperature_pieces.xml') or die('XML Create Error');
/*
$temperaturep = new DOMDocument('1.0', 'utf-8');
$sondep = $temperaturep ->appendChild($temperaturep->createElement('temperature_pieces'));
for($i=1; $i < ($nb_sondes+1);$i++ )
{
$piece= $devices['devices'][$i]['piece'];
$temp= $devices['devices'][$i]['temp'];
$health= $devices['devices'][$i]['health'];
// A integrer pour afficher les résultats
/*
print "<pre>";
print ($piece." = ");
print ($temp." ");
print ($health);
print "\n";
$content = $temperaturep->createElement('content');
$root->appendChild($content)
$content->appendChild($piece)->createTextNode('Example content'));
}
// Flush XML from memory to file in one go
file_put_contents('example.xml', $dom->saveXML());
*/
/*$temperaturep->formatOutput = true; // set the formatOutput attribute of domDocument to true
// sauvegarde doc XML
chdir('/var/www/html/plugins/script/core/ressources/EDS_OWserver');
$test1 = $temperaturep->saveXML(); // put string in test1
$temperaturep->save('temperatures_pieces.xml'); // save as file */
function getServerXML() {
global $CFG;
$server = "{$CFG['OWStemp_pieces_url']}/details.xml";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $server);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
$code = $info['http_code'];
if ($code == "200" && $output <> "") {
return $output;
} else { return ""; }
}
function floor_dec($number,$precision,$separator)
{
$numberpart=explode($separator,$number);
$numberpart[1]=substr_replace($numberpart[1],$separator,$precision,0);
if($numberpart[0]>=0)
{$numberpart[1]=floor($numberpart[1]);}
else
{$numberpart[1]=ceil($numberpart[1]);}
$ceil_number= array($numberpart[0],$numberpart[1]);
return implode($separator,$ceil_number);
}
function parseServerXML($xml) {
global $CFG;
$skip = 1;
$id = 0;
//$d['devices'][$id]['time'] = $v->DateTime;
foreach ($xml as $k => $v) {
if ($skip == 0) {
$ROM = (string) $v->ROMId;
$d['devices'][$id]['piece']=array_search($ROM,$CFG['Sondes'],true);
if (isset($v->Temperature)) { $d['devices'][$id]['temp'] = floor_dec($v->Temperature,1,"."); } else { $d['devices'][$id]['temp'] = -99; }
$d['devices'][$id]['health'] = floor_dec($v->Health,1,".");
$id++;
}
if ($skip == 1) {
if ($k == "MACAddress") { $skip = 0; }
}
}
return $d;
}
?>
Script php : curl error:malformed
Script php : curl error:malformed
- Pièces jointes
-
- fichier xml.jpg (22.28 Kio) Consulté 910 fois
-
- commandes.jpg (89.52 Kio) Consulté 910 fois
Re: Script php : curl error:malformed
salut,
Essaie en ajoutant une balise XML racine avant et après ta liste de balises.
Ex :
<? XXX ?>
<Racine>
<Tsam>21.5...
...
...21.8</Tsb_rc>
</Racine>
Essaie en ajoutant une balise XML racine avant et après ta liste de balises.
Ex :
<? XXX ?>
<Racine>
<Tsam>21.5...
...
...21.8</Tsb_rc>
</Racine>
Re: Script php : curl error:malformed
Merci, je vais essayer.
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 21 invités