Avec l'aide précieuse de merguez07 sans qui je n'aurai jamais pu avancer et qui a écrit un script universel qui devrait convenir à toutes les situations.
Le script a été corrigé (avec peine, ce sont mes premiers pas en php) pour tenir compte des noms de capteur contenant des caractères interdits en xml pour pouvoir utiliser les balises XPath, les éventuels commentaires qui perturbaient le code et complétés pour tenir compte, je pense de tous les capteurs compatibles Mobile Alerts.
Il se peut que votre cas soit particulier, dans ce cas, il suffit de nous donner votre ID pour compléter le code, mais il semble que l'ID de test Lacrosse comportait quasi tous les pièges !
NB: ça a l'air long comme ça, mais j'ai tenu à tout détailler, afin que ce soit accessible à tous; les moustachus pourront sauter des étapes ou aller directement au script (en fin de message)

Pourquoi Lacrosse
Parce qu'en capteurs de température extérieure, en capteurs météo, on n'a guère le choix : Les capteurs Z-Wave ne sont pas conçus pour les températures basses et la seule réelle alternative, Oregon, oblige à avoir un RFXcom ou un RFPlayer, non seulement onéreux si c'est la seule utilisation, mais limité au 433Mz, qui est limité légalement en puissance (10mw contre ... 500mw en 868 !!!) et n'a donc pas une portée compatible avec l'utilisation en extérieur.
D'autre part, si le RFPlayer permet en théorie le 868, les capteurs Lacrosse en sont pas supportés.
Lacrosse a donc les qualités suivantes pour ces utilisations
- 868 Mhz (portée 100m en extérieur)
- conso de piles ridicule, même en basse température
- plage de température de -40°+60° (sauf le thermomètre de base du kit -30+60)
- prix bas (en gros, la moitié d'un capteur Z-Wave)
- précision (testé avec plusieurs capteurs de température côte à côte)
- Intervalle de mesure : 7 mn
- Nombreux capteurs, notamment sonde de température/hygromètre compatible basse températures (même congélateur), anémomètre (vitesse, rafale, direction), hygromètre, moniteur de qualité de l'air, piscine, station météo...
Pourquoi Mobile Alerts
Mobile Alerts est la passerelle internet des capteurs Lacrosse compatibles (vos capteurs si vous en avez déjà doivent comporter un barcode 3D) elle est vendue soit en kit minimal (MA10001) avec un capteur de température, soit en kit plus complets (station météo diverses), la passerelle avec enregistrement de données est inutile, Eedomus le fera pour vous.
A noter qu'en kit minimal, elle coute dans les 50€ AVEC un capteur de température !
Cette petite passerelle est ultra facile à configurer : brancher en rj45 sur la box internet, quand le voyant vert indique qu'elle est connectée, chargez l'application smartphone et scanner un (les) barcodes de vos capteurs, c'est tout. La configuration se borne à renommer si vous le désirez, vos capteurs.
Pour la suite... notez votre ID (trouvée dans les paramètres de l'appli smartphone) pour l'accès aux données, il ne sera ensuite plus nécessaire d'utiliser l'appli smartphone qui pourra être en sommeil dans la liste de vos applis // vous pouvez même éteindre le téléphone, mais ne désinstallez pas l'appli, par contre, vous pouvez installer un capteur sur d'autres tel (ID)
On arrive au cœur du problème :
Comment récupérer les données Mobile Alerts
Visualisation des données
Directement sur la page Web Mobile Alerts nommée "Vos Capteurs", ici avec une adresse comportant votre ID
- Code : Tout sélectionner
https://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=XXXXXXXXXX
Vous pouvez essayer avec l'ID de test "météo" du "Huppertzberg" : 999515350787 qui comporte aussi des données de sonde "aquatique", des températures négatives, des données anémométriques pluviométrique, etc. c'est presque complet et remplis de pièges pour la capture, et vous pouvez tester immédiatement que cela fonctionne.
Insertion d'un script dans la Box Eedomus
La première opération sera d'insérer un script dans la box, nommé lacross.php pour pouvoir utiliser le capteur HTTP-Capteur, en effet l'appel direct de l'URL de la page Mobile Alerts ne peut pas fonctionner, ne s'agissant pas d'une page XML, ce script va donc créer un tout pet1t XML compatible avec l'interrogation XPath des données qu'on veut récupérer.
Il a été demandé carrément un plugin, peut être un jour, mais cela reviendrait juste à insérer le code de ce script dans le plugin HTTP-Capteur, le seul intérêt donc est pour l'utilisateur de juste visualiser que la récupération des données Mobile Alerts est possible, mais pour ceux qui lisent ce mot, cela ne sert à rien de plus.
Le script (encore merci à merguez07 qui en a écrit 99%) se trouve en fin de message, il faudra le mettre dans un fichier texte (ISO-8859-1 ou ANSI), et le nommer lacross.php et le mettre dans votre Box; le didacticiel Eedomus ici et quelques indications succinctes :
pour le codage texte : même notepad le permet (enregistrer sous, codage)
pour accéder à la page de scrip : en LOCAL ! et APRES s'être connecté au moins une fois à l'interface LOCALE (pour entrer Login/Pass qui resteront dans un cookie pour l'accès au dossier des script)
- Code : Tout sélectionner
https:// IP LOCALE de la box Eedomus /script
C'est possible de le faire en distant, via internet, des indications ici, sinon, attendez un autre didacticiel pour cette opération spécifique...
Le capteur "HTTP-Capteur"
Vous le trouverez dans Configuration/Ajouter ou supprimer un périphérique/Autre type de périphérique/Réseau
Faites "créer"
Configuration de base
Entrer comme d'hab, son nom personnalisé, son usage, la pièce, profitez en pour lui donner une icône personnalisée et on remplit les parties spécifiques :
type de données: en général nombre décimal, notez l'unité parmi °C, mm, km/h, %, ppm
ou texte pour les données de direction de vent
URL de la requête :
- Code : Tout sélectionner
http://localhost/script/?exec=lacross.php&phoneid=[VAR1]
[VAR1]: Votre ID
Configuration de l'XPath
La, il va falloir mettre la main à la pâte, mais c'est assez simple, il va falloir entrer "Tester" pour se retrouver sur la page de test XPath Eedomus, la valeur XPath par défaut n'a aucune importance (c'est celle de l'url test de cette page).
Après avoir cliqué sur "Tester" (celui de la page de test cette fois-ci); vous allez avoir un
ERREUR: Valeur lue vide
puisque la valeur XPath est mauvaise, mais par contre, dans Utilisez le résultat XML, vous voyez le code généré par le script lacross.php
Il faut :
1 - repérer le capteur, il encadre les ensembles de valeurs de sondes, exemple :
(les sondes peuvent avoir le même nom mais ne se trouvent pas sous le même capteur ou groupe de capteurs comme une centrale par exemple)
- Code : Tout sélectionner
<LACROSS>
<capteur1>
<sonde1>12.5</sonde1>
<sonde2>-0.5</sonde2>
</capteur1>
<capteur2>
<sonde1>22.5</sonde1>
</capteur2>
</LACROSS>
entrez dans la valeur XPath
- Code : Tout sélectionner
//nom du capteur/
par exemple
- Code : Tout sélectionner
//capteur1/
2 - puis repérer la valeur souhaitée sous ce capteur et indiquez son nom
exemple:
- Code : Tout sélectionner
//capteur1/sonde1
Testez et normalement, vous aurez la valeur qui s'affiche, vous pouvez donc recopier le XPath dans la page de configuration du HTTP-Capteur en face de XPath
Procédez par copier coller, parce que les balises sont parfois alambiquées et remplies de _ (pour rendre compatible leur nom avec les exigences XML)
Par exemple, avec l'ID du Huppertzberg donné plus haut, la valeur de rafale (exprimé en km/h dans la case "unité"), se fera avec l'appel suivant :
- Code : Tout sélectionner
//__anemometre_huppertzberg__482m_/rafale
Les fréquences de requête Lacrosse sont de 7 mn, on peut donc indiquer une valeur juste supérieure dans la configuration du capteur, mais il s'il est raisonnable d'indiquer 10' pour les rafales, 30' pour les températures ou 60' ou plus pour l'hygrométrie par exemple suffisent, afin de ne pas surcharger le travail de l'Eedomus.
Voila, il suffit de refaire l'opération pour toutes les valeurs souhaitées...
NB Une valeur de température extérieure sera bien sur disponible pour utiliser le thermostat virtuel Eedomus au cas ou vous l'auriez configuré avec un relevé de station météo avec un capteur du store.
Malheureusement, on ne peut pas avoir l'usage météo (un comble !) mais avec l'usage "Extérieur", cela fonctionne.
Voila le script (à nommer lacross.php):
- 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)*)-->#","",$result);
$xml = "<LACROSS>\n";
preg_match_all('/(?:(?:<h3>(?:\s*)<a href="(?:.*)">(.*)<\/a>(?:\s*)<\/h3>)|(?:<div class="sensor-component">(?:\s*)<h5>(.*)<\/h5>(?:\s*)<h4>(.*)<\/h4>(?:\s*)<\/div>))/', $result, $matches);
if(!isset($matches[3])) {
return;
}
$last_name = NULL;
foreach($matches[3] as $k => $m) {
if(($k != 0)&&($m == '')) {
$xml .= "</" . $last_name . ">\n";
}
if($m == '') {
$last_name = sdk_makeKey($matches[1][$k]);
$last_name = preg_replace("#^\d* *|\/|\(|\)#","_",$last_name);
$xml .= "<" . $last_name . ">\n";
continue;
}
$key = sdk_makeKey($matches[2][$k]);
$o = array(" C","%"," mm"," km/h"," ppm","Nord- ","Sud- ","Est- ","Ouest- ");
$r = array("","","","","","Nord-","Sud-","Est-","Ouest-");
$xml .= "<" . $key . ">" . str_replace($o, $r, $m) . "</" . $key . ">\n";
}
if(count($matches[3]) > 0) {
$xml .= "</" . $last_name . ">\n";
}
$xml .= "</LACROSS>";
echo $xml;
function sdk_makeKey($cle) {
$o = array("@"," ","é","è","ê","ë","à","á","ç","ú");
$r = array("_","_","e","e","e","e","a","a","c","u");
return str_replace($o, $r, strtolower($cle));
}
?>