[Tuto] Mobile-Alerts

La récupération des informations en extraction du HTML des infos capteurs ne marche plus !
Par contre tous mes capteurs sont désormais visible par l’API, contrairement à avant. Je rappelle du coup mon ancien tuto pour ceux que ça intéresse :

Si vous voulez récupérer les données de vos capteurs Mobile-Alerts, voici un petit tuto :

Ajoutez un équipement Mobile Alert dans le plugin Script. Mettez lui une actualisation toutes les 5 minutes (si on interroge trop les capteurs le service se bloque) avec */5 * * * * dans Auto actualisation Cron (correction : finalement ça marche bien toutes les minutes, le blocage est après 3 appels en 1 minutes du même capteur).
Créez une commande info pour récupérer les données d’un capteur, de type script, exemple pour une girouette (remplacer 999999999999999 par l’id dans les paramètres de l’app Android et XXXXXXXXX par l’id du capteur) :

curl  --fail --silent --show-error -H "Content-Type: application/json" -X POST -d'{"deviceids":"XXXXXXXXXX","phoneid":"999999999999999"}' https://www.data199.com/api/pv1/device/lastmeasurement > /tmp/girouette 2>/tmp/girouetterr
sleep 5
rm /tmp/GirouetteSuccess
cat /tmp/girouette|jq '.success' > /tmp/GirouetteSuccess
if [ -e /tmp/GirouetteSuccess ]
then
  	cat /tmp/girouette|jq '.devices[].measurement.wg' > /tmp/GirouetteRafale
  	cat /tmp/girouette|jq '.devices[].measurement.ws' > /tmp/GirouetteVent
  	cat /tmp/girouette|jq '.devices[].measurement.wd' > /tmp/GirouetteDirection
  	cat /tmp/GirouetteSuccess
else
	echo 'ko' 
fi

Il ne reste plus qu’à créer autant de commande info que de valeur à récupérer, exemple pour récupérer la vitesse du vent créer une commande avec comme script :

cat /tmp/GirouetteVent

Vous trouverez la description des valeurs des capteurs dans :

Le plus simple est de se connecter en rsh au Jeedom et de lancer la commande curl sans les redirections (> et 2>) pour voir les données du capteur.

Y’a sans doute mieux comme programmation, mais ça marche nickel !

Voili !

Hello Banane63,

Merci pour ce tuto, il a l’air bien mais je suis « un peu court » pour les script.
J’ai bien compris qu’il y avait une partie « qui on va interroger » en déclarant les ID mais la parti "quoi demandé, je suis un perdu dans la doc…
Concrètement, j’ai une passerelle (MA10000) qui est relier à un panel qui synthétise capteur Intérieur et un autre extérieur. (comme en PJ)

J’ai cru comprendre qu’il fallait une requête « cat » par valeurs.
Mais après, je ne sais pas comment faire…HELP!

Slt @bertrandhuet
Tu peux aussi passer par un bloc code sur ta page, cela évite l’appel de l’Api…
Voir l’info ici merci à @laurent.da-col

Désolé je n’ai pas vu le message plus tôt…

If faut faire la commande curl sans la fin (avant le premier >) avec l’id du capteur récupéré dans l’app android.
Cela affiche un fichier json qui contient les données du capteur (exemple : « measurement.wg » est suivi de la vitesse des rafales)
Pour récupérer cette valeur j’utilise sur le fichier récupéré la commande jq ‹ .devices[].measurement.wg › qui renvoi la valeur, que je met dans un fichier /tmp/GirouetteRafale
cat /tmp/GirouetteRafale renvoie la valeur à Jeedom.

Il faut installer jq :
sudo apt update
sudo apt install -y jq

1 « J'aime »

Merci pour ce tuto
J’arrive bien à le faire fonctionner en ssh mais par le scrip jeedom j’ai inexorablement le message suivant dans lacrosserr : curl: (22) The requested URL returned error: 400

Est-ce en relation avec les droits de www-data ?

(et bonne année à tous)

Bonne année !

Je ne pense pas, tu a une réponse HTML 400 Bad request, erreur de syntaxe a priori.
La commande complète (en une seule ligne de commande) pour tester qui doit renvoyer une structure json à l’écran :

curl -H « Content-Type: application/json » -X POST -d’{« deviceids »:« XXXXXXXXXXXX »,« phoneid »:« XXXXXXXXXXXX »}’ https://www.data199.com/api/pv1/device/lastmeasurement

A noter que je n’arrive plus à récupérer les données de mon pluviomètre, y’a plus de « measurement », WTF ?

1 « J'aime »

J’ai vérifié la syntaxe.
Et j’ai bien progressé, j’ai maintenant une erreur 403 :wink:
« curl: (22) The requested URL returned error: 403 »

HTTP 403 Forbidden indique qu’un serveur comprend la requête mais refuse de l’autoriser.

Pareil en executant sudo curl …

Une idée ?

Et si tu fais juste (en ligne de commande) :

curl https://www.data199.com/api/pv1/device/lastmeasurement

Ca doit répondre :

{
« Message »: « The requested resource does not support http method ‹ GET ›. »
}

oui, ça répond bien

{
« Message »: « The requested resource does not support http method ‹ GET ›. »

en mode commande et user jeedom

Bonjour à tous,

Après quelques recherches, je suis tombé sur ce forum. Je n’ai pas tout à fait compris ce qu’était Jeedom et plugin-script mais je pense qu’il y a des choses ici qui pourraient m’être utiles pour ce que je souhaite faire.

J’ai une passerelle Mobile-Alerts avec plusieurs capteurs (température, hygrométrie, pression, vent et pluviométrie). Je peux accéder aux valeurs de mes capteurs sur https://measurements.mobile-alerts.eu. J’aimerais pouvoir afficher ces informations météo sous forme de tableaux et graphiques à la manière de ce qui est fait sur infoclimat fr (ex : Charrin (Nièvre - France) | Relevés météo en temps réel - Infoclimat. Le site monitor.mobile-alerts.eu permet d’obtenir presque ce que je recherche mais il ne semble accepter que les capteurs de température et hygrométrie.

Est-il donc possible de récupérer les valeurs depuis la page measurements.mobile-alerts.eu pour les afficher sur un site web (ex page WordPress) à la manière de ce qui est fait sur infoclimat fr ? Existe-t-il des tutos ou des templates pour ça ?

Merci d’avance pour votre aide !

Voir ici : Extraction données de sondes Mobile-Alerts/La Crosse - #46 par laurent.da-col

Merci @laurent.da-col ! Ce code est à utiliser dans Jeedom ? Je ne comprends pas trop ce qu’est Jeedom en fait…

C’est un serveur domotique mais ce code est du PHP qui peut servir également en dehors de Jeedom pour extraire des informations de la page web measurements.mobile-alerts.eu

Jai passé ta requête (en changeant les << par des ") et j’ai le message :
« Message »: « IP address rejected »

Je me suis fait blacklisté ?

Merci ! Je vois, je vais essayer d’utiliser ce code.

Pas facile tout ça ! Je crois que je suis pas près d’avoir une page similaire à Infoclimat pour visualiser mes données… :grinning_face_with_smiling_eyes:

Pour essayer de comprendre le code PHP, si je veux simplement récupérer la valeur de mon premier capteur et l’afficher, le code devient quoi ?

Merci pour l’aide !

Pour commencer il faut que tu récupère les chemins xpath (cela ressemble à quelque chose comme /html/body/div[2]/div[1]/div/div/div[4]/h4, chrome et firefox permettent de récupérer cela facilement) des différentes mesures que tu souhaites extraire de ta page mobile alerts. Ensuite ce code PHP permet d’extraire les mesures :

Connexion et récupération de la page web mobile alerts :

$stream = stream_context_create(Array("http" => Array("method"  => "GET",
                                                      "header"  => "User-agent: PHP",
                                ))); 
$html = file_get_contents("https://measurements.mobile-alerts.eu/Home/SensorsOverview?phoneid=".$phoneid,false,$stream); 
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);

Extraction des valeurs :

$value=$xpath->query("/html/body/div[2]/div[1]/div/div/div[4]/h4")[0]->childNodes[0]->nodeValue;

etc...

$phoneid doit être remplacé par ton identifiant mobile alerts

Merci beaucoup !! J’arrive maintenant à récupérer des données.

À quoi sert les « ID de la commande » dans $tabmodules et cette partie du code :

if ($value!="---" && $value!="OFL") {

    cmd::byId($capteur_cmdid)->event($value);
    $scenario->setLog($module_title." (".($now_timestamp-$module_timestamp).") "."->".$value);

};

? Merci !

Cette partie du code est propre à Jeedom. Elle envoie chaque valeur extraite à une commande Jeedom identifiée par son ID.

Ok, je comprends, merci. Est-il possible à partir de ce code de récupérer les valeurs automatiquement afin de remplir une base de données ? Ou bien sais-tu si Mobile-Alerts peut donner un accès direct à la base de données d’origine (ce serait plus simple).

Sinon, en cliquant sur un capteur on a accès à un tableau avec les données de la journée. Est-il possible de récupérer tout ce tableau avec un script PHP ? Sur cette même page, il y a un bouton « Exporter comme fichier CSV ». Est-il possible d’accéder à ce bouton à partir d’un code PHP ? Cela pourrait être pratique pour récupérer automatiquement toutes les données.

Merci encore ! :slightly_smiling_face: