Forum eedomus
https://forum.eedomus.com/

Données Lacrosse dans le script HTTP-Capteur
https://forum.eedomus.com/viewtopic.php?f=5&t=8844
Page 1 sur 1
Auteur:  thrymartin [ 07 Sep 2019 10:36 ]
Sujet du message:  Données Lacrosse dans le script HTTP-Capteur

Hello,

J'ai posé (et d'autres se la sont posée) la question sur une discussion qui concerne des capteurs de température, mais ce n'était peut être pas le meilleur endroit (?)

Le Problème
==========
Je recherche toujours le moyen d'inclure les données Mobile Alerts (Lacrosse) dans HTTP-Capteur // je suis certain que cela enlèverait une épine du pied de beaucoup :
Je résume:
- Il n'ya aucun capteur de température pour extérieur correct en z-wave (conçus plutôt pour l'intérieur), ne restent que Lacrosse et Oregon (c'est vrai aussi pour humidité, pluie, anemometre...)
- les capteurs Oregon sont certes corrects, mais ils sont en 433 : faible puissance = faible portée, ce qui est un problème pour des capteurs censés se trouver dehors, à distance de l'habitation.
(et puis trivialement, j'ai déjà des capteurs Lacrosse et une passerelle MA ...)
- Les capteurs Lacrosse en 868 ont toutes les qualités: portée (100m), conso piles(plus d'un an), fourchette de mesure (-30, +60)
- Mais voila, même le nouveau rfp1000 qui connait le 868 ignore Lacrosse

Il ya une passerelle Mobile Alerts (MA10001), moins de 50€ dont la configuration est enfantine (scan d'un barrecode ou entrée de son N°) et une page WEB correspondante (avec son ID de mobile).
Les données sur téléphone ou ordinateur sont immédiatement accessibles, mais il serait intéressant de les avoir dans l'interface Eedomus, ne serait-ce que pour pouvoir utiliser la donnée de température extérieure notamment !

D'après un didacticiel Jeedom, il est donné 2 méthodes :
*une API, qui ne fonctionne qu'avec quelques capteurs
*et plus universel, l'extraction des données de la page Mobile Alerts :
https://measurements.mobile-alerts.eu/H ... honeid=xxx

Jeedom fonctionne avec un resultat script d'un module jqery de chrome, de type :
div.body-content>div:nth-child(3)>div>div>div:nth-child(4)>h4
mais le bouton Eedomus veut un chemin XPath ...

et c'est la que ça coince !
je me suis plongé un peu la dedans, mais c'est plein de pièges, ce n'est pas simple, loin s'en faut, il n'existe que des exemples enfantins qui n'aident pas beaucoup et surtout... un utilitaire qui donnerai dans un xml, l'XPath d'une donnée cliquée ! ou au moins un convertisseur pour donner l'arborescence, du coup, ça devient un calvaire !
Mais bon, à force de tourner en rond, j'y arriverai presque sauf que :

Une balise de fermeture manquante et XPath ne sait plus renvoyer qu'une donnée vide : dans la page Mobile Alerts, il manque une fermeture ( </meta> ) au début du fichier.

ma question : est ce qu'on peut passer outre ? si oui, comment ?
j'ai eu beau tester dans tous les sens, si je pose un html test avec au début, des balises <machin></machin> et un résultat correct, dès que j'enlève la fermeture </machin>, impossible d'obtenir autre chose que "Valeur lue vide"

Si pas possible, comment contourner la chose ? (est ce qu'on pourrait, par exemple, avoir un moyen de générer une page correcte, de manière régulière, pour que le bouton HTTP-Capteur puisse interroger cette dernière ?)

Désolé de ces questions qui peuvent paraître "bateau" pour quelqu'un qui maîtrise le sujet, mais dont la réponse pourrait être d'une grande utilité - On (je) pourrait par la suite faire un didacticiel complet sur le sujet au cas ou on arrive à un résultat avec Eedomus, comme avec Jeedom.

Merci
Auteur:  merguez07 [ 07 Sep 2019 11:02 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

bonjour,

j'ai pas tout compris à ton message. pourquoi appelles tu le capteur Http "bouton Http" ?
Que mets tu dans l'url de la requete de ton capteur?

thrymartin a écrit:un utilitaire qui donnerai dans un xml, l'XPath d'une donnée cliquée !

http://xmltoolbox.appspot.com/xpath_generator.html
Auteur:  thrymartin [ 07 Sep 2019 11:56 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

j'ai supprimé ma dernière question (enlever le "C" dans une donnée température) puisque la solution c'est une commande XPath substring-before par exemple.

merguez07 a écrit:j'ai pas tout compris à ton message. pourquoi appelles tu le capteur Http "bouton Http" ?


heu... je corrige aussi ma demande, il s'agit du http-capteur dans configuration/ajouter/autre/reseau/http-capteur qui me semble le plus approprié et qui demande une url et une requête XPath

Que mets tu dans l'url de la requete de ton capteur?

pour l'instant, rien, je teste avec la page de test Xpath eedomus : je cherche à obtenir un xpath correct, j'avance petit à petit, mais je coince de toute façon avec cette fin de balise </meta> manquante qui me plante ma requête

exemple de la partie concernée :
obtenue dans la page Mobile Alert (https://measurements.mobile-alerts.eu/H ... neid=xxxxx)
On peut essayer avec par exemple l'ID 471576390702

<body>
<toto></toto>
<div class="sensor-header">
<div class="sensor-component">
<h5>ID</h5>
<h4>XXXXXXXXXX</h4>
</div>
</div>
<div class="nofloat"></div>
<div class="sensor-component">
<h5>Relevés avec date</h5>
<h4>07/09/2019 09:00:10</h4>
</div>
<div class="sensor-component">
<h5>Température</h5>
<h4>-19.2 C</h4>
</div>
</body>


avec une requete de type
substring-before(//div[4]/h4, ' C')
j'obtient bien -19.2

J'ai mis juste après <body> une balise <toto> et sa fermeture </toto>
sans </toto> la requête ne fonctionne plus et me renvoi "ERREUR: Valeur lue vide"
Est ce que ça veut dire qu'une requête XPath ne peut pas fonctionner avec un html qui contient une erreur ? ou il y a t il un moyen de passer outre ?

Sinon, je ne peux donc utiliser l'adresse de Mobile Alerts dont l'html a une balise de fermeture (</meta>) manquante...

> http://xmltoolbox.appspot.com/xpath_generator.html
MERCI beaucoup ! l'aide est plus que précieuse pour affiner la requête - et il n'ya ... aucun résultat quand une balise de fermeture est manquante
ce qui doit répondre à la question : est ce qu'on peut passer outre ... c'est donc NON ?

Alors quelle est l'alternative, puisqu'il semble qu'il faille corriger l'html de l'url de Mobile Alerts !
est ce qu'on peut concevoir une commande qui récupère cette page, la modifie (ou la converti en xml ? si je fais ça, tout roule !), AVANT d'interroger le capteur qui lui ferait référence à la nouvelle URL ou sa version en xml ? ou à tout le moins qui le ferait de manière indépendante toutes les X minutes par exemple ?
(si ce n'est pas possible via eedomus, j'ai un espace web ou je peux stocker une page corrigée)

Merci
Auteur:  merguez07 [ 07 Sep 2019 13:23 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

en fait ton problème c'est que tu veux faire du xpath avec du html alors que le xpath c'est pour du xml.
Le problème est somme toute assez simple à contourner mais il te faut passer par un script php. Sais tu faire ou veux tu de l'aide ?
Auteur:  thrymartin [ 07 Sep 2019 14:13 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

Heu.. la je suis perdu ...

Je veux bien me retrousser les manches, apprendre le XPath, etc. j'ai bien déjà eu programmé (de l'assembleur à VB), mais j'avoue que j'ai toujours laissé le php de côté mais s'il ne s'agit que d'une ligne ou deux...

Oui je veux bien de l'aide, mais déjà sur quelle direction aller
Qu'entendez vous par "contourner le problème" ?

Il ne faut pas utiliser un http-capteur ? ou modifier son script ?

PS et pour un script : est ce qu'il faut avoir un accès local ?

merci
Auteur:  merguez07 [ 07 Sep 2019 20:46 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

thrymartin a écrit:Heu.. la je suis perdu ...


bon reprenons,

Sur Eedomus, tu veux utiliser un capteur virtuel http pour récupérer les valeurs de température lacross qui sont sur un site internet.

L'affichage des données sur le site internet est sous forme d'une page web (HTML)

un capteur virtuel http Eedomus ne peut lire que du xml ou du json

donc il faut réaliser un script php qui va aller transformer les données HTML en données lisibles par le capteur , du xml.

dans l'URL du capteur, on met le lien vers la requete Php qui va rappatrier le xml
et dans le xpath on met le code qui permettra d'extraire la valeur recherchée

Script
Code : Tout sélectionner
<?

// nom du script : lacross.php
$phone_id    = getArg('phoneid');
$url         = "https://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=".$phone_id;
$result      = httpQuery($url, 'GET');
$result      = preg_replace("#\n|\t|\r#","",$result);
$Toccurences = array("<h5>","</h5>","<h4>","</h4>","<h3>","</h3>","&#233;"," ");
$Treplace    = array("","","","","","","e","");
$result      = str_replace($Toccurences,$Treplace,$result,$count);

$termes = array("date"            => "Relevesavecdate",
                "temp_interieure" => "Temperatureinterieure",
                "hyg_interieure"  => "Hygrometrieinterieure",
                "temp_exterieure" => "Temperatureexterieure",
                "hyg_exterieure"  => "Hygrometrieexterieure",
               );
   

$xml .= "<LACROSS>\n";   
foreach($termes as $k => $terme) {
    preg_match('/(' . $terme . '([0-9\/:\.]+)(%|C)?<\/div>)/', $result, $matches);
    $xml .= "<".$k.">".$matches[2]. "</".$k.">\n";
}
$xml .= "</LACROSS>";
echo $xml;

       
?>


URL de la requête
http://localhost/script/?exec=lacross.php&phoneid=[VAR1]

dans VAR1 : 471576390702

dans Xpath
//temp_interieure
ou
//date
ou
//hyg_interieure
ou
//temp_exterieure
ou
//hyg_exterieure
Auteur:  thrymartin [ 08 Sep 2019 04:21 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

OK, un grand merci
Je vais me pencher la dessus...

j'ai juste compris ça : (mais c'est le plus important)
dans l'URL du capteur, on met le lien vers la requete Php qui va rappatrier le xml
et dans le xpath on met le code qui permettra d'extraire la valeur recherchée


pour le xpath, pas de soucis, j'ai testé sur une version xml de l'html, converti en ligne, ça fonctionne parfaitement avec l'utilitaire donné précédemment (j'étais même arrivé à faire plus concis) - évidemment déjà avec un code sans erreur, ça facilite les choses...
Mais je ne voyais pas du tout le truc de faire ça en appelant cette page de conversion avec ses pubs, ses boutons pour télécharger le résultat, bref... c'était bien pour voir comment écrire la requête XPath, mais sans plus.

le php, je devrais arriver à le modifier (l'ID donné est un ID test, ce n'est pas le mien) pour l'adapter à mes capteurs. Mais je peux déjà tout tester sur celui-ci pour me faire la main...

=================
ne me reste que :
Le script, je crois avoir vu qu'il faut être en local (?) pour le mettre sur l'eedomus (?)
je vais voir si je peux contourner ça avec une redirection NAT, sinon, ça attendra décembre...
(je suis à plus de 10 000 bornes de ma RS)
=================

Ben quand j'aurai une journée presque entière, comme hier, je m'y colle
et je reviens vers vous si je coince

encore un grand merci pour votre aide.
Auteur:  merguez07 [ 08 Sep 2019 07:28 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

thrymartin a écrit:le php, je devrais arriver à le modifier (l'ID donné est un ID test, ce n'est pas le mien) pour l'adapter à mes capteurs. Mais je peux déjà tout tester sur celui-ci pour me faire la main...


Pas besoin de modifier le script php. le numero d'ID est juste à mettre dans la variable VAR1

thrymartin a écrit:=================
ne me reste que :
Le script, je crois avoir vu qu'il faut être en local (?) pour le mettre sur l'eedomus (?)
je vais voir si je peux contourner ça avec une redirection NAT, sinon, ça attendra décembre...
(je suis à plus de 10 000 bornes de ma RS)
=================


Je crains qu'il faille être effectivement en local (mais j'en suis pas sûr). Par contre si on met l'ensemble sous forme de plugin on doit pourvoir le mettre à distance.

Tiens moi au jus
Auteur:  thrymartin [ 09 Sep 2019 09:46 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

Hello,

Pas besoin de modifier le script php. le numero d'ID est juste à mettre dans la variable VAR1


C'est l'organisation des données, mes capteurs, leurs nom, donc leur position dans l'html n'est pas le même, mais j'en suis à comprendre ton php, savoir ce que je dois modifier, en attendant, je testerai avec l'ID d'exemple.

être en local

Je suis passé par une redirection TCP, un peu branquignol puisqu'il faut à chaque étape sur mon navigateur, remettre https et le N° de port dans l'url pour que ça fonctionne (notament quand on clique sur "envoyer")
Mais c'est bon, j'ai calé le script dans l'eedomus
Je rajoute pour je ne sais plus qui nous parlait de sécurité, qu'on peut désactiver (voir supprimer) la redirection une fois l'opération terminée, opération qui prend quelques secondes...

Au départ je voulais poser ça dans une page perso, mais rien à faire ... free refuse tout, ovh me dit forbidden et chez.com trouve du vide... Bon, pas grave, mais je chercherai un jour à comprendre :-)

Bon, plus de temps, boulot oblige, mais la première étape étant validée, je vais bien y arriver...

encore merci
Auteur:  thrymartin [ 10 Sep 2019 05:06 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

tout fonctionne à merveille, avec l'ID de test

Ahah merguez07 tu es un génie

et maintenant, donne moi le Nil :-)
comment ça même pas en rêve ?
j'ai fait qu'un vœu, m'en reste 2 la hein ? :-)

(j'aurai pas du regarder Aladdin avec Will Smith et ne pas arrêter de faire des comparaisons avec le DA, du coup, ça me trotte dans la tête sans arrêt, comme dit l'autre: Si on te rentre une chanson dans la tête pour qu'elle tourne en boucle, eh bien... Ԓ résiste, montre que tu existes ԓԒ ! :mrgreen: )

Bon, ne me reste qu'à comprendre ce petit php d'enfer, ça me permettra peut être de mettre le pied à l'étrier du php... puis l'adapter à mes capteurs - je reviens vers toi si je n'y arrives pas, mais je tiens à y arriver tout seul, je veux pas mourir bête :oops:

ensuite je préparerai un didacticiel, auquel je t'associerai si tu le veux bien, pour la partie http-capteur.
Comme déjà dit, je reste persuadé que c'est la meilleure solution pour les périphériques météo: déjà la passerelle n'est pas chère (autour de 50 et c'est vendu avec un capteur de temperature), on reste en 868 ce qui garanti la portée (100m), et la gamme compatible est assez vaste et surtout adaptée ! (plage de température qui commence à -30°, pluviomètre, anémomètre etc. voir la page mobile alerts).
Auteur:  flouret [ 10 Sep 2019 12:53 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

Bonjour,
Tout ceci est très intéressant.
Ce serait bien que ce script soit intégré dans le store eedomus.
Avec le didacticiel pour utiliser des sondes lacrosse extérieure.
Bravo à vous deux.
Auteur:  merguez07 [ 10 Sep 2019 12:58 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

flouret a écrit:Ce serait bien que ce script soit intégré dans le store eedomus.
Avec le didacticiel pour utiliser des sondes lacrosse extérieure.


Effectivement si ça interesse du monde il faut en faire un plugin. Thrymartin à toi de jouer, je reste en "back office" pour toute demande d'aide.
Auteur:  flouret [ 10 Sep 2019 13:12 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

On peut l'acheter où cette passerelle ?
La sonde vendue avec est pour l'extérieur ?
Auteur:  thrymartin [ 10 Sep 2019 14:16 ]
Sujet du message:  Re: Données Lacrosse dans le script HTTP-Capteur

script ici : viewtopic.php?f=58&t=8879

Hello,

toutes les sondes Lacrosse démarrent à -40°(edit sauf celle livrée avec la passerelle 10001 : -30)
la passerelle se trouve chez tous les revendeurs domotiques, sur amazon, etc. : ref MA10001
Comme dit, je ferai un didacticiel (par exemple, il faut installer une sonde extérieure sous abris, y'en a des petits, TFA Dostman par exemple, loin d'un mur, etc sinon, c'est plusieurs degrés d'écart ou pire)

c'est franchement pas cher : c'est vraiment fait pour l'extérieur et l'ensemble passerelle+sonde coûte moins cher que ce qu'on trouve en Z-Wave et qui ,'est pas adapté aux températures extérieures, à moins d'habiter sous les tropiques.
En plus on peut en rajouter des tacons (50 ? bref, toute la gamme Lacrosse)

Attention: toutes les sondes ne vont pas dessus, il faut vérifier que la sonde, ou la centrale (qui renverra les données des sondes qui lui sont associé) soit "Mobile Alerts" compatible (reconnaissable: elle a toujours un barcode) - voir la page Mobile Alerts, mais y'a tout ce qu'il faut, même de l'inutile puisque certains se trouvent directement en ZWave (détecteurs divers classique).

Un plugin pourquoi ? ça marche très bien avec le http-capteur et le script de notre ami merguez07
mais le plus ennuyeux, c'est que pour l'instant, ce n'est pas universel : pour cela il faudrait avoir en main tous les capteurs compatibles Mobile Alerts pour faire évoluer le script...
c'est une fois le script rendu universel que merguez07 pourrait réaliser un plugin, à moins qu'on puisse trouver des ID en pagaille pour voir l'affichage de toutes les sortes de capteurs (?)
en attendant, tout le monde peut se lancer, sérieux, j'y connais rien en php, je suis bien arrivé à adapter le script (une liste de valeur à éditer en fait), et si il ya un écueil, il ya le forum.
Il faut juste savoir une chose : ça fonctionne très bien !

Ah oui, j'ai pas dit ? j'y suis arrivé avec mon ID et mes capteurs, et justement, ya eu 2 couacs

1 - les températures négatives, ça ne renvoyait rien, voila ce que j'ai corrigé

Code : Tout sélectionner
preg_match('/(' . $terme . '([0-9\/:\.]+)(%|C)?<\/div>)/', $result, $matches);
// rajout du signe moins \- dans la première liste
preg_match('/(' . $terme . '([0-9\/:\.\-]+)(%|C)?<\/div>)/', $result, $matches);


merguez07 peut me dire si c'est correct ? (en tout cas, ça fonctionne)

Je ne sais pas si une donnée de direction ou de vitesse de vent va passer sinon, pour un capteur anémomètre : si on se retrouve avec des ESE, des ° ou des m/s ... (? sans capteur correspondant, je ne peux dire ce que ça va afficher)
il faudra ajouter dans ce cas ce qui manque et soustraire ce qu'on ne veut pas voir apparaître (2eme liste, ici le C et le %)

Dans tous les cas, c'est simple à corriger: un caractère à ajouter ici ou a ne pas afficher la, c'est tout

2 - le cas de deux données qui portent le même nom

Moi ça ne m'a pas gêné, il ne s'agissait que des 2 dates (une par périphérique: j'ai un capteur et une centrale) et je n'ai pas besoin de cette donnée qui change avec l'acquisition toutes les 7 mn environ d'après la doc (du coup, inutile de rafraîchir le http-capteur en dessous de cette valeur, 15' voir 30' ira très bien)

Mais par exemple, si on a 2 sondes, les 2 valeurs vont s'appeler "Température"
et on n'aura que la première...
(moi avec une sonde et une centrale, les autres températures sont appelées temp1, temp2 etc)
donc ça ne m'a pas gêné non plus)

la du coup, on va rappeler merguez07 à la rescousse pour qu'il modifie le script afin de le rendre plus universel : soit s'il ya plusieurs appels dans la liste des occurrences, que le 2eme appel passe à la 2eme occurence... et ne boucle pas sur la première

ça je ne saurais absolument pas faire
par contre, je peux tester le script puisque j'ai 2 occurrences de date et comme ça ne se rafraichis pas en même temps, je peux donc savoir si le script fonctionne !
Je n'ai même pas essayé de mettre une seconde valeur dans la liste, genre :
Code : Tout sélectionner
"date1"            => "Relevesavecdate",
"date2"            => "Relevesavecdate",

parceque si ça fonctionne le problème est réglé
Édit: Réglé: viewtopic.php?f=58&t=8879

Je prépare un didacticiel sur Lacrosse, Mobile Alerts, même comment mettre un script sur l'eedomus quand on est à l'autre bout de la terre...
Édit: Et donc fait

et je renverrai ci pour le script.
rendons à Cés....merguez07, ce qui appartient à merguez07

En tout cas, je suis content, ça fait depuis le début de l'année quasi que j'y pense !

merci

edit : plugin dispo dans le store
Page 1 sur 1 Le fuseau horaire est UTC+1 heure