Récupération de donnée externe

Bonjour,

Mon objectif et d’intégrer les données de ma piscine (température, pH, etc) à mon équipement jeedom.
Pour cela j’ai fait un script php qui va chercher sur le site du constructeur les informations dont j’ai besoin (édité en temps réelle).
Tout cela fonctionne parfaitement bien en local (Wamp), et encore mieux, cela fonctionne sur un serveur (Apache).

Tout content j’ai donc essayé de l’intégrer à mon serveur jeedom grâce au plugin Script. Mais malheureusement, ça ne marche plus ! :frowning:
De ce que j’ai compris, chaque script ne peux retourner qu’une seul valeur numérique, donc j’ai fait un script par information que je cherche. (ici je ne parlerais que de celui de la température).
Pour être plus précis, lorsque je lance le script, cela met énormément de temps à s’effectuer (~45s), hors sur Apache ou Wamp c’était quasiment instantané. De plus, le résultat de ma requête affiche « 0 ».

Je me dis que c’est peut-être que jeedom n’autorise pas les requête http via curl ? ou peut-être qu’il y a un autre problème ? C’est pour cela que je m’en refaire à vous ! est ce que quelqu’un à déjà eu ce problème ? ou avez-vous des idées de correctif ?

Merci d’avance pour vos retours :star_struck:

Mon script:

<?php
define("DOC_ROOT","/var/www/html");

//set the directory for the cookie using defined document root var
$path = DOC_ROOT."/glpi";
//build a unique path with every request to store. the info per user with custom func. I used this function to build unique paths based on member ID, that was for my use case. It can be a regular dir.
//$path = build_unique_path($path); // this was for my use case

//login form action url
$url="https://www.bayrol-poolaccess.de/webview/m/login.php?r=reg"; 
//$postinfo = "email=".$username."&password=".$password."&login=1";
$postinfo = array(
    'username' => 'USERNAME',
    'password' => 'MOTDEPASSE',
    'login' => 1
);

$cookie_file_path = $path."/cookie.txt";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
//set the cookie the site has for certain features, this is optional
curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0");
curl_setopt($ch, CURLOPT_USERAGENT,
    "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $_SERVER['REQUEST_URI']);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_exec($ch);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, "https://www.bayrol-poolaccess.de/webview/getdata.php?cid=5282");
//do stuff with the info with DomDocument() etc
$html = curl_exec($ch);
curl_close($ch);


$data = array();
preg_match_all("#<h1>([0-9.]*)<\/h1>#",$html,$data);
$data = $data[1];


// Les données sont affichés dans $data
// $data[0] = Acidité (pH)
// $data[1] = Tension (mV)
// $data[2] = Température (°C)

echo $data[2];

?>

Normalement curl est installé dans jeedom .

si ce n’était pas le cas tu peut toujours le faire en ssh

sudo apt update && sudo apt upgrade

sudo apt install curl

le script que tu utilise …
il serait peut’être plus facile de traiter un retour de données multiple a l’intérieur d’un bloc code
d’un scenario.

il y a un exemple ici qui ne fait pas la même chose mais dont tu peut prendre exemple pour le principe.
c’est en plus plus facile a debuger que dans un script …

Merci pour ta réponse ! mais j’aimerais bien trouver la solution à mon problème et garder un code à peut près simple pour le debuggage, mais je prends note ! :slight_smile:

Au sujet de cURL, j’ai oublié de le préciser dans l’introduction de mon sujet, mais il est belle et bien installé, j’avais déjà vérifié.
Pour le coup, je ne vois vraiment pas d’où peut venir mon problème.

J’ai tenté une autre solution pour essayer de voir ce qu’il ne marchait pas, et le code n’a vraiment rien à voir avec le problème pour le coup. J’ai mis le code sur une autre machine, sur un serveur web, et dans le plugin script, j’ai simplement exécuter ce code:

<?php
     echo file_get_contents("IP_DE_LA_MACHINE");
?>

Je me dis peut être que cela vient de du fait que je n’ai pas mis d’entête shell

#!/usr/bin/env php

Ne pouvant pas tester dans l’immédiat, je vous tiens au courant dès que possible.

1 « J'aime »

Après avoir tester ça ne marche pas non plus, le résultat est « 0 ».

1 « J'aime »

En passant par la fenêtre scénario il semblerait que cela marche. Je suis désolé pour ceux qui aurait là même erreur mais je ne sais pas du tout pourquoi là ça marche et pourquoi hier cela ne marchait pas :man_shrugging:

Ca peut être une histoire de droits sur les fichiers
entre hier et aujourd’hui une sauvegarde a eu lieu hors celle-ci remet a plat les droits …

Il semble pas que ce soit ça, j’avais vérifié les droits pourtant :confused:

Bonjour,
Quelle centrale Bayrol utilisez-vous? Au vu de l’adresse web je pense à une PM5. Si c’est le cas vous savez que la documentation complète existe sur le site pour dialoguer directement sans passer par leur site. J’ai une Salt Relax Power et je suis complément bloqué pour me connecter via le port RS485 modbus dédié à l’interface wifi. Je n’arrive pas à faire la connexion car en plus je n’ai pas le menu réseau qui apparaît sur la machine. Je pense qu’il doit y avoir un système de déblocage lors du branchement de leur interface wifi mais elle est carrément hors de prix donc je tente avec une interface Elfin RS485/wifi toujours sans résultats. Cette interface fonctionne trés bien avec une PZEM-014 qui mesure les courant et autres avec le plugin mymodbus. Donc c’est Bayrol qui bloque. Avez-vous une idée, astuce??. Merci votre aide.

Bonsoir,
Je reprends cette conversation, qui m’intéresse.
Pour ma piscine, j’ai installé également un appareil Bayrol Pool Relax Chlore/pH.
N’ayant pas pris le module Wifi, je cherche un moyen pour remonter les informations via Jeedom. Avez-vous des suggestions? à partager ou à me proposer?
Merci.

Bonjour,
Effectivement, j’ai pris une Elfin RS485/WiFi et aprés un bon parametrage, j’ai obtenu tout ce que je voulais de la centrale Bayrol.
En fait, pour la communication RS485, il faut être en 19200 bauds alors que pour la PZEM-014 la com est en 9600 bauds. Ceka explique mes difficultés pour avoir un dialogue :wink:
J’ai utilisé le soft IOT de Elfin pour parametrer l’interface (adresse pass wifi etc) et j’interroge avec le plugin Mymodbus.
Pour les adresses il est indispensable d’avoir la doc que l’on trouve Version anglaise minimale ou bien Version Espagnole beaucoup plus complete.
Tout à bien fonctionné cet été, je ne fais que de l’interrogation car pour les commandes/manipulations je préfere être devant la centrale par sécurité.
Voila un visu sous Jeedom:
ecranBayro
et un peu plus sympa sous JeedomConnect :


Les valeurs sont dans les choux car la centrale est complétement arrétée.
Mon installateur piscine est resté stupéfait, surtout pour le cout en comparaison avec l’interface wifi Bayrol qui ne donne rien.

Voilà, j’espère vous avoir aidé,