J’utilise le plugin script depuis plusieurs mois pour extraire les valeurs de plusieurs sondes Mobile Alerts/La crosse (extraction du site https://measurements.mobile-alerts.eu dans une commande info de type html.
Depuis ce matin je n’ai plus aucune valeur alors que le site est toujours accessible et ne semble pas avoir changé quand je m’y rend avec un navigateur.
Afin de comprendre le problème j’ai programmé la requête dans un scénario/code PHP par la fonction file_get_contents et je n’obtiens rien. J’ai alors spécifié un User-Agent et la ca fonctionne sans problème :
J’ai lors modifié le fichier php.ini pour prendre en compte user_agent=« PHP » mais rien n’y fait mon script de fonctionne pas.
Peut-être que quelqu’un de Jeedom en charge du plugin script peut-il me dire si un moyen peut me permettre de paramétrer le User-Agent utilisé par le plugin script ?
C’est le copier/coller qui m’a remplacé les " par <<>>. Mon code PHP fonctionne sans problème c’est l’utilisation d’une commande de type « html » (avec extraction jquery) qui ne fonctionne plus car le plugin script ne doit rien envoyer dans le user-agent lorsqu’il fait la requête http.
J’ai donc commencé à réécrire tout cela en PHP dans un scénario et finalement ce n’est pas plus mal !
Aucun problème pour récupérer les valeurs avec xpath :
$html = file_get_contents("https://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=XXX",false,$stream);
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$elements = $xpath->query("/html/body/div[2]/div[1]/div/div/div[4]/h4");
Une autre solution était d’appeler un script Php via le plug-in script au lieu d’appeler l’URL directement (donc type script Php au lieu de type html) et dans le script vous pouviez mettre votre code custom avec le user-agent voulu.
Il n’est pas possible de le spécifier via une commande script de type html
le retour $xpath->query("/html/body/div[2]/div[1]/div/div/div[4]/h4");
me génère une erreur, j’ai essayer en changent les valeurs numériques ?
mon selecteur jquery google me retourne une valeur suivant mon ordre de sonde
ex: la 3eme et le champ à lire le premier
a quoi correspondent les 3 valeurs de ta requête ?
Slt @Mips
La question est de savoir pourquoi depuis hier à partir de 8 / 9 H la requête ne passe plus ?
Même si je l’ai refait dans un scénario en bloc code .
Un changement côté serveur probablement qui fait qu’à présent une requête sans user-agent est bloquée.
Impossible à savoir.
Mais qu’importe si ça passe avec le user-agent définit c’est bon non ?
Bravo, super boulot !
Ok ça marche pour moi.
j’ai une vingtaine de mesures temp, hyro, météo…
les temp gère les température par pièce au travers de robinet thermostatiques zwave.
les hygro des salles de bain gère la vmc.
la météo (soleil ou tempête) et lumandar gère les volets.
Je cherchais a les intégrer en php, pour m’éviter tous les scripts.
Grand merci
Bonjour, @mick37@HermioneG@Mips@laurent.da-col
Le site et de nouveau accessible par la méthode ! depuis un script .
Mais cela fonctionne avec un bloc code dans le scénario, donc on reste comme çà .
Merci à tous .
L’avantage du bloc code est que lorsqu’une sonde ne fonctionne pas (— ou OFL) la commande Jeedom n’est pas mise à jour avec une valeur égale à 0 d’une part et en plus le mécanisme de surveillance des équipements fonctionne, si un équipement n’a pas eu de transmission depuis un certain temps une alerte se produit.
Bonjour et merci pour le bloc code.
Malheureusement je ne comprends pas très bien comment récupérer les valeurs dan un virtuel.
Comment procéder ?
Par avance merci de votre aide.
Bonjour,
Il te faut créer autant de virtuel (au moins) que le nombre de mesures de tes capteurs.
Puis récupérer les ID de ces virtuels et y faire référence dans le code du scénario .
$value=$xpath->query("/html/body/div[2]/div[5]/div/div/div[5]/h4")[0]->childNodes[0]->nodeValue;//Température Piscine
if ($value!="---" && $value!="OFL") cmd::byId(2934)->event($value);
Dans l’exemple de @laurent.da-col , correspond à la mesure de son capteur qui se trouve être le 5éme capteur qu’il récupère dans le virtuel avec l’ID « 2934 » cmd::byId(2934) qui se trouve sur la 5éme donnée de ce capteur .