Récupération de données html plugin script

j’ai essayé, mais pas de retour apparemment…

Vous n’avez pas choisi le bon type de script pour les 2 premiers. Il faut prendre HTML et mettre l’URL http://192.168.1.4/30000 dans Options


Le résultat de la requête est du texte qu’il faudra interpréter OFF   ou ON   C’est pour cela que rien ne s’affiche quand vous cliquez Tester. En passant par les engrenages à gauche de Tester, il y a image

Pour accéder au relay suivant, il faut ajouter center > à chaque fois

Bien vu pour la valeur. J’avais testé et je ne voyais rien non plus, surtout que ça faisait même planter l’affichage dans le dashboard. Il faut dire que le code html de la page de départ est bien pourri.

Par contre, la commande génère une erreur dans le testeur d’expression. J’ai réussi à avoir quelque chose qui semble fonctionner en choisissant une commande de type binaire ou numérique, puis dans Configuration > Formule de calcul en mettant (substr(#value#,0,2) == "ON")?1:0

Avec votre formule dans un virtuel, je n’arrive pas à faire fonctionner.
Bien que OFF je récupère toujours 1 sur le virtuel.
Compte-tenu de l’excellente qualité du html (structure et data ) :rofl: je serais plutot parti sur un script dédié.

Super, merci beaucoup pour vos retours,

Avec cette méthode j’ai ‹ ‹ un retour › ›, en revanche j’ai l’impression qu’après un certain temps (moins de 1 min) la valeur 1 ou 0 du retour disparaît pour ne rien avoir.

Au pire, je corrigerai ça avec de l’écriture dans des variables, mais par curiosité savez-vous pourquoi ?

C’est sur qu’avec une carte à 30e sur amazon j’imagine qu’ils ont fait des économies sur ça aussi :smiley:

Si je ne dis pas de bêtises, c’est parce qu’en fait en remplissant en face des actions la colonne « Divers » cela vient écrire directement la valeur dans l’info :

  • Relay 01 on exécute la commande http puis met la commande Relay 01 à 1
  • Le script se rafraichit et la commande Relay 01 va chercher l’info en html mais renvoie une valeur vide

En fait, on fait plutôt cela quand on ne peut pas avoir de retour, on simule un état. Dans un tel cas, on ne remplirait rien pour la partie requête de la commande Relay 01. En fait, cela donne l’impression d’avoir un retour, mais je pense qu’il est faussé. Enfin, ça semble être ce qu’il se passe mais pas 100% sûr.

Effectivement y’a un soucis. Je viens de tester en rajoutant des guillemets et ça semble bon (substr(#value#,0,2) == "ON")?"1":"0"

Tout à fait d’accord sur la qualité :smile:
Comme ça m’énervait tout à l’heure, j’avais commencé à partir d’un autre script que j’utilise, de type bloc code dans un scénario. J’étais arrivé à cela qui fonctionnait :

  $url = "http://192.168.1.50/test";
  $data = file_get_contents($url);
  @$dom = new DOMDocument();
  $dom->loadHTML($data);
  $xpath = new DomXPath($dom);
  
  // Relai 1
  $node = $xpath->query("/html/body/center/center/center/p[1]/font/text()");
  $val = $node[0]->nodeValue;
  $scenario->setLog("Relai 1:".($val));
  if (stripos($val," ON") !== FALSE) {
    cmd::byString("#[Tests][VIRTUEL essai][Relai 1]#")->event("1");
  } else {
    cmd::byString("#[Tests][VIRTUEL essai][Relai 1]#")->event("0");
  }

Mais c’est tout de suite un petit peu plus complexe même si là ça marche bien.

Je suis resté dans le plugin script.
Compte-tenu de la m… que fait l’extraction de données de ce html le mieux est que seul 1(ON) 0(OFF) -1(Inconnu,pb xPATH) -2(erreur nombre d’arguments) remonte

Mon script HtmlBoolean.php dans plugins/script/data

<?php
require_once __DIR__ .'/../../../core/php/core.inc.php';
if ($argc != 3)  {
  message::add('script', "Usage:" .$argv[0] ." URL XPath");
  echo -2;
  exit();
}

  $dom = new DOMDocument();
  libxml_use_internal_errors(true); // disable warning on screen
  $dom->loadHTMLFile($argv[1]);
  $xpath = new DomXPath($dom);
  
  $node = $xpath->query($argv[2]);
  $val = $node[0]->nodeValue;
  if(strpos($val,"ON") !== false) echo 1;
  else if(strpos($val,"OFF") !== false) echo 0;
  else echo -1;

L’appel dans le plugin script:


Le résultat sur le dashboard en affichant l’équipement script
image

2 « J'aime »

Ah oui si on pouvait rester dans le plugin script comme ici c’est le top,
Cette solution à l’air vraiment bien,
J’ai voulu l’a tester mais j’ai ces erreurs lors de l’enregistrement :

J’ai pourtant repris votre code:

En adaptant ici :

J’imagine que pour avoir les autres retours de relais, on incrémente le ''center>center>… ‹  ›?

Si je ne dis pas de bêtises, c’est parce qu’en fait en remplissant en face des actions la colonne « Divers » cela vient écrire directement la valeur dans l’info :

  • Relay 01 on exécute la commande http puis met la commande Relay 01 à 1
  • Le script se rafraichit et la commande Relay 01 va chercher l’info en html mais renvoie une valeur vide

En fait, on fait plutôt cela quand on ne peut pas avoir de retour, on simule un état. Dans un tel cas, on ne remplirait rien pour la partie requête de la commande Relay 01. En fait, cela donne l’impression d’avoir un retour

Oui c’était la ‹ ‹ solution de facilité › ›, car en théorie seul l’envoi de requête pour les relais peut les actionner, donc si lors de l’envoi de cette dernière on commande le retour d’état au passage… ça passe même si ça manque de fiabilité …

Il faut que le fichier ait une extension .php sinon le plugin script ne sait quoi en faire et le fait exécuter par le shell unix.
image

C’est un XPath, on passe au relais suivant en ajoutant /center dans le cas de votre html.

Super, ça marche hyper bien !
Encore merci

Seul petit dernier problème, les 4 derniers relais se trouve sur une 2 eme page mais avec la même adresse ip local et même port, et je n’ai pas leurs retour, je pense que l’ajout /center est limité à la 1ere moitié de relais

j’ai nommé le fichier 30001 de la 2eme page mais sinon il a le même nom
30001.txt (1,7 Ko)

Sur la 1ère page, le lien vers la seconde page est http://192.168.1.4/30000/43
N’accédez-vous pas aux relais 5 à 8 avec cette URL ?

En effet, et si je rafraîchi la page en enlevant le /43 je reste sur la page des relais de 5 à 8, c’est pour cela que je précisais que c’était la même adresse, /42 sert a revenir sur les relais de 1 à 4.

Bon j’ai quand même tenté ceci pour le Etat relay 5:

en ajoutant /43 à l’adresse mais la valeur reste en -1, j’imagine du coup que ce n’est pas aussi simple que cela ><’

Vous avez ajouté .html à l’URL dans l’appel du script . Why?
Et avec les 7 /center de la capture d’écran, vous accédez au relay 9 ! qui n’existe pas. D’où le retour -1.
XPath du relay 8: /html/body/center/center/center/center/center/center/p[1]/font ( 6 /center )
Il faut le même nombre de /center pour accéder au relay 1 (URL: http://192.168.1.4/30000) et le relay 5 (URL: http://192.168.1.4/30000/43 )

Avec un petit script python c’est quand même moins galère …

J’avais pris model sur le fichier 3000.html
En faisant le test d’activer uniquement les relais 5 à 8 j’obtiens ça en retour:
(même resultat que si j’active uniquement 1 à 4)
image

avec comme config état relay 5:

mais en étant sur l’adresse 192.168.1.4/30000/42 ça revient pareil que d’être sur 192.168.1.4/30000/43, que je sois sur l’une ou l’autre dés que je fais F5 ça change les relais 1 à 4 ou 5 à 8 sans même changer d’adresse web.

je m’y connais encore moins en python alors que déjà je ne connais rien du php :smiley:

J’ai un bon tutoriel qui prend en charge depuis le niveau débutant …

ça traite une adresse qui parle du soleil et de la pluie mais ça pourrait être tes pages

C’est quel matériel ?
Ya une doc ?

@olive La galère c’est pas le langage, c’est la qualité du html fourni et les relais sur 2 pages html à la même URL sans maitriser totalement si la page des relais 1 à 4 est affichée ou celle des 5 à 8