Prévision de pluie pour Domoticz

Météo France propose un service bien pratique et qui de nombreuses fois m’a prouvé son efficacité lors de sortie sportives : le fameux « Va t’il pleuvoir dans l’heure ». http://www.meteofrance.com/previsions-meteo-france/previsions-pluie

Ainsi vous saurez pour une ville donnée si vous avez la malchance de voir tomber la pluie dans l’heure qui suit et ainsi vous éviter un inutile arrosage du jardin ou une ballade humide.

A force de chercher j’ai trouvé l’API en question chez Météo France. :mrgreen:

Vous trouverez ici  une extension Chrome : https://github.com/liorzoue/ext-meteo affichant le fameux  » ‘Va-t-il pleuvoir dans l’heure ?' », merci à l’auteur liorzoue pour son travail et dont je reprends en fin d’article le message de prudence quand à l’utilisation de cette API.

 

L’API

  • Récupérer le code insee de votre ville ici  (ce n’est pas le code postal!) ajoutez y le chiffre 0 à la fin

sinon rendez vous ici avec le nom de votre ville tout au bout.

http://www.meteofrance.com/mf3-rpc-portlet/rest/lieu/facet/pluie/search/ma_ville_

avec XXX le nom ou le CP de votre ville

  • Récupérer les prévisions via url

http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/330210

la réponse est du JSON , je ne sais pas tout en lire mais l’essentiel est

 "niveauPluieText" : [ "De19h35 à 20h35 : Pas de précipitations" ],
{
  "idLieu" : "330210",
  "echeance" : "201604241935",
  "lastUpdate" : "19h25",
  "isAvailable" : true,
  "hasData" : true,
  "niveauPluieText" : [ "De19h35 à 20h35 : Pas de précipitations" ],
  "dataCadran" : [ {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  }, {
    "niveauPluieText" : "Pas de précipitations",
    "niveauPluie" : 1,
    "color" : "ffffff"
  } ]
}

Un script bash + un switch virtuel

Je vais donc créer un switch virtuel qui passera à ON que si de la pluie est annoncée, une notification est associée à ce passage à ON

Après interrogation du site web, récupérons donc le contenu de niveauPluieText par utilisation de JQ  jdont l’installation est expliquée ici, supprimons les caractères indésirables de texte horaire, de ‘[‘ ‘]’ et espaces.

Dans ce script changez vos ip de votre Domoticz et votre CODE INSEE.

Dans la ligne curl http://192.168…..’ modifiez idx=215 par votre idx de votre switch virtuel.

#!/bin/bash
pl=$(curl -s "http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/773800"|jq -r .niveauPluieText|cut -d ' ' -f7|tr -d '['|tr -d ']'|tr -d ' '|sed 's/ //g'|cut -d ' ' -f1)
#echo $pl
pluie=$(echo $pl|cut -d ' ' -f1)
#echo $pluie
case $pluie in 

 "Pas" )
 curl 'http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=215&switchcmd=Off&level=0' 
 echo "Pas de pluie" ;;
 "Précipitations" )
 curl 'http://192.168.1.81:8080/json.htm?type=command&param=switchlight&idx=215&switchcmd=On&level=0' 
 echo "Pluie Prevue" ;;

esac

Il faudra bien entendu lancer toutes les heures le script via crontab pour mettre à jour le widget

Attention !

L’extension utilise une API non documentée (à ma connaissance) de Météo France, cette extension peut donc cesser de fonctionner à tout moment. 🙂

Et hop, rangez vos parapluies

Pour toute question technique concernant cet article, veuillez utiliser les forum situés à https://easydomoticz.com/forum/
Posted in domoticz, scripts.

31 Comments

  1. Super, merci.

    Par contre ça n’a pas l’air de marcher avec la Côte d’Azur : Nice et Cagnes sur Mer ne renvoient rien de probant :

    {
      "idLieu" : "060880",
      "echeance" : null,
      "lastUpdate" : null,
      "isAvailable" : false,
      "hasData" : false,
      "niveauPluieText" : null,
      "dataCadran" : null
    }
  2. Oui en effet toutes les villes de France ne sont pas couvertes. j’ai rajouté cela dans l’article du blog.
    Mais dans le Sud il n’y a pas besoin de prévision de pluie, n’est ce pas ?

  3. super , merci

    je débute ; mais il ne manque pas une parenthèse de fin dans script ?

  4. Bonjour

    Il semblerait qu’il manque un bout de code à la fin de la ligne 2, non ?

    jerome

  5. Oui et il manquait aussi un bout de code , c’est corrigé
    Ahh les copier /coller !!

  6. Super merci !

    Toi perso,que fais tu comme action quand ton switch est on?

  7. M’envoyer une notification alors que je suis au boulot pour savoir si il fait beau chez moi pour l’apéro avec mes potes et acheter les bieres au passage,
    envoyer un message pour rentrer le linge
    Plus sérieusement ne pas déclencher l’arrosage du jardin à l’heure planifiée, savoir si il pleut pour faire ou pas la sortie running/vtt

  8. bon je vais faire mon boulet …

    le script fonctionne pour moi , mais pas avec crontab :

    0 * * * * ./domoticz/scripts/pluie.sh

     

    j’ai louper quelque chose ?

     

  9. Bonsoir,
    en tête du script tu as bien un !#/usr/bin/bash ?
    dans ta crontab supprime le .(point) devant le /domoticz
    avec ta syntaxe il se lance toutes les heures tout le temps

  10. Bonjour

    En tête de script  : #!/bin/bash  si je rajoute « usr » ça ne fonctionne plus .

    Si je lance le script via putty avec la commande ./pluie.sh : le script fonctionne le resultat est  » off »

    Si c’est le crontab qui lance le script, le résultat est « on »

     

  11. le chemin dans le !# doit etre celui vers bash pour ta distrib
    concernant la crontab : si les chemins sont les memes la réponse doit etre la meme , dans la crontab il faut le chemin complet /domoticz/scripts/pluie.sh

  12. bonjour,

    j’ai configuré mon domoticz avec le script et ça faisait 3 jours que j’attendais la pluie…

    et la je rentre du travail, il a plu mais j’ai rien dans mes logs.

    je me suis donc intéressée a ce qui figurait dans la page web meteo france et il y a bien un problème. en effet voici ce que j’ai ci-dessous

    j’ai essayé de comprendre le jq et cut mais c’est un peu compliqué. Je me dis qu’il serait peut être bien de rechercher plutôt sur les codes couleurs (qui sont visible sur la page web du site) ou sur la donnée « niveau de pluie » 1 (pour Pas de précipitations) – 2 (pour Précipitations faibles) – 3 (pour  Précipitations modérées) ou 4 (pour Précipitations fortes)

    peux tu m’aider?

    {
      "idLieu" : "141180",
      "echeance" : "201605181930",
      "lastUpdate" : "19h20",
      "isAvailable" : true,
      "hasData" : true,
      "niveauPluieText" : [ "De19h30 à 19h40 : Pas de précipitations", "De19h40 à 19h45 : Précipitations faibles", "De19h45 à 20h30 : Pas de précipitations" ],
      "dataCadran" : [ {
        "niveauPluieText" : "Pas de précipitations",
        "niveauPluie" : 1,
        "color" : "ffffff"
      }, {
        "niveauPluieText" : "Pas de précipitations",
        "niveauPluie" : 1,
        "color" : "ffffff"
      }, {
        "niveauPluieText" : "Précipitations faibles",
        "niveauPluie" : 2,
        "color" : "5ec5ed"
      }, {
        "niveauPluieText" : "Pas de précipitations",
        "niveauPluie" : 1,
        "color" : "ffffff"
    
    
  13. Bonsoir
    Aucun message ne s’affiche dans les logs
    Seul ton switch virtuel change d’état et ca en effet c’est dans les logs domoticz
    LE message Pas de Precipitations est bien plus simple a recuperer que les 1 – 2 – 3 dissemines dans les valeurs renvoyées
    As tu recupére le dernier script sur le blog (celui actuellement affcihé ) car il y avait un bug dans un précédent
    Ensuite dans le script tu peux mettre un echo $pluie pour voir si on recupere un bon message
    le $pluie doit contenir soit « Pas » soit « Préciptitations »
    et c’est cela qui active le switch virtuel

    Sinon tu as dans le forum un script Lua qui fait la mme chose avec des traces dans les logs
    https://easydomoticz.com/forum/viewtopic.php?f=10&t=1991

  14. Bonjour,

    Je ne comprends pas bien pourquoi j’obtiens cette erreur lorsque que je lance le script,

    Auriez-vous une solution …

    pi@raspberrypi:~$ sudo bash /home/pi/domoticz/scripts/pluie.sh
    /home/pi/domoticz/scripts/pluie.sh: ligne 6: erreur de syntaxe près du symbole inattendu « newline »
    'home/pi/domoticz/scripts/pluie.sh: ligne 6: `case $pluie in

     

  15. Bonsoir
    Ca ressemble à un fichier modifié depuis Windows et balancé sous Linux.
    Windows rajoute ses propres caractères de fin de ligne qui ne sont pas ceux de Linux
    Fait un coup de
    dos2unix /home/pi/domoticz/scripts/pluie.sh
    et ca devrait aller
    Sinon dans ton editeur de fichiers sous Windows, cherche qq part pour pouvoir écrire au format Linux , ou change d’editeur ou edite directement depuis ton Linux

  16. Merci merci merci, 🙂

    C’était effectivement par ce que je l’avais édité depuis Windows.

    J’ai une petite autre question qui me pose aussi un problème, je cherche à commander domoticz depuis l’IPX800 V4 de (GCE electronics).

    Et le &para de l’adresse est remplacer par un ¶ j’ai tenté de maitre &para l’adresse s’affiche bien mais domoticz n’a pas l’aire de recevoir l’info je pensais peut être changer l’adresse par &ppara

    Quand pensez-vous ?

  17. Bonsoir,

    Merci pour ce partage, par contre j’ai un petit problème le script fonctionne bien en le lançant manuellement mais ne fonctionne pas avec la crontab ni avec celle du compte pi ni avec root

    « * */1 * * * /home/pi/pluie.sh »

    J’ai activer les log et j’obtiens cela

    Sep  7 21:00:01 raspberrypi CRON[15853]: (root) CMD (/home/pi/pluie.sh)

    Sep  7 21:00:01 raspberrypi CRON[15846]: (CRON) info (No MTA installed, discarding output)

    Seriez-vous de quoi cela peut venir ?

    merci d’avance 🙂

  18. Hello
    oui
    par defaut crontab essaie d’envoyer par mail le resultat de ton puie.sh. cronatab cherhce un serveur mail qu’il ne trouve pas
    pour eviter cela ajoute cela au bout de ta ligne de crontab
    >/dev/null 2>&1
    ce qui a pour but de mettre les sorties du script à la poubelle cela devrait résoudre le probleme

  19. Bonjour,

    L’API est exploitée aussi par une petite extension Chrome : https://github.com/liorzoue/ext-meteo

    Et d’ailleurs, ça serait sympa de citer ses sources… Ou bien de penser à modifier le paragraphe « Attention » 🙂

  20. Bonjour,

    Lorsque je lance le script créé, j’obtiens une erreur que voici :

    pi@domo:~/domoticz/scripts $ ./pluie1h.sh
    {
    « message » : « Error sending switch command, check device/hardware ! »,
    « status » : « ERROR »,
    « title » : « SwitchLight »
    }
    Pas de pluie

    J’ai installé JQ, j’ai modifié le N°IDX dans les 2 lignes de Curl et changé les IP et bien remplacé l’ID de mon bled 🙂

    Pouvez vous m’aider svp ?

  21. Bonjour
    Je pense que tu as raté cela

    Dans la ligne curl http://192.168…..’ modifiez idx=215 par votre idx de votre switch virtuel.

    Et tu dois faire referece a un de mes switches à moi

  22. Bonjour,

    Nouveau dans la domotique et sur domoticz, je suis tombé sur cette page, et cette fonction m’intéresse beaucoup. Mais en plus d’avoir un switch virtuel me disant si il va pleuvoir dans l’heure, j’aimerai pouvoir avoir plus de detail, car pleuvoir dans 5 mn et 55mn, ce n’est pas la même chose ^^
    Je me suis donc plongé dans le code pour pouvoir obtenir ce que je veux. Je me suis servi au début de ta fonction pour pouvoir récupérer les résultats de la requête en JSON, mais au lieu de me concentrer sur la première partie du résultat, je me suis penché sur la seconde.
    En faisant plusieurs test, j’ai bien eu la confirmation que les 12 valeurs correspondaient bien au tranche de 5 mn sur une heure et que le niveauPluie de 1 à 4 correspond à  » pas de pluie » jusqu’à « pluie forte ».

    A partir de là, j’initialise un tableau et une boucle simple me permet de récupérer les valeurs, la valeur n me servant pour calculer le temps, 0 étant maintenant, puis multiple de 5 minutes ( le script n’est pas terminé)

    #!/bin/bash

    #pl=$(curl -s "http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/881960"|jq -r .niveauPluieText)
    pl=$(curl -s "http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/581650"|jq -r .dataCadran[].niveauPluie)
    echo $pl

    n=0
    precipitations[1]="Rien"
    precipitations[2]="faible"
    precipitations[3]="modérée"
    precipitations[4]="forte"
    for i in $pl
    do
    echo $n
    echo ${precipitations[$i]}
    let n++;
    done

    La ou je bloque, c’est comment exploité ensuite ces valeurs dans Domoticz, un simple switch ne me permet pas, je pense, de pouvoir lui injecter des valeur genre un message « il va pleuvoir dans n minutes ». Est ce que quelqu’sait comment on peut obtenir cela ?

  23. Bonsoir,

    J’ai parcouru le site en long et en large et j’ai trouvé un tuto sur les alertes, qui correspond pas mal , 4 niveaux de couleurs pour les pictos (dommage on peut pas mettre des soleils ou des nuages à la place des /!\ )

    du coup ça donne ça

    #!/bin/bash

    pl=$(curl -s « http://www.meteofrance.com/mf3-rpc-portlet/rest/pluie/940460″|jq -r .dataCadran[].niveauPluie)

    n=0
    precipitations[1]= »Rien »
    precipitations[2]= »faible »
    precipitations[3]= »modérée »
    precipitations[4]= »forte »

    n=0
    while read line
    do
    niveau=$line
    if [ $niveau -gt 1 ]
    then
    break
    fi
    let n++
    done < <( echo « $pl » )

    if [ $n -eq 0 ]
    then
    temps=maintenant
    else
    temps=$(($n * 5))
    fi

    # Construction du message d’alerte

    if [ $niveau -eq 1 ]
    then
    message=$(echo « Pas%20de%20pluie%20d’ici%20une%20heure »)
    else if [ $n -eq 0 ]
    then
    message=$(echo « Pluie%20$(echo ${precipitations[$niveau]})%20d’ici%205%20mn »)
    else
    message=$(echo « Pluie%20$(echo ${precipitations[$niveau]})%20dans%20$temps%20mn »)
    fi
    fi

    curl http://192.168.1.19:8080/json.htm?type=command\&param=udevice\&idx=10\&nvalue=${niveau}\&svalue= »$message »

    ça marche bien, lancé à la main, me reste plus qu’à le faire marcher dans la crontab ^^’ ce qui me pose encore 2-3 soucis…

  24. j’ai résolu mon pb de crontab (il fallait ajouter le path a l’interieur pour que les variables d’environnements soient prises en compte)

Comments are closed.