Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

Script php : curl error:malformed

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
philb
Timide
Messages : 22
Inscription : 15 juin 2018, 14:11
Localisation : Lot et garonne

Script php : curl error:malformed

Message par philb » 15 juin 2019, 14:58

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;
}



?>
Pièces jointes
fichier xml.jpg
fichier xml.jpg (22.28 Kio) Consulté 910 fois
commandes.jpg
commandes.jpg (89.52 Kio) Consulté 910 fois

Avatar de l’utilisateur
noodom
Actif
Messages : 982
Inscription : 13 juil. 2014, 17:25
Contact :

Re: Script php : curl error:malformed

Message par noodom » 15 juin 2019, 15:25

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>

philb
Timide
Messages : 22
Inscription : 15 juin 2018, 14:11
Localisation : Lot et garonne

Re: Script php : curl error:malformed

Message par philb » 15 juin 2019, 19:23

Merci, je vais essayer.

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 21 invités