(modifié le 23 juin 2019 à 1:02)

J'utilise mon vélo au quotidien et l'air de la cuvette Grenobloise n'est pas toujours au top, c'est pourquoi tous les matins mon Raspberry Pi m'envoie un SMS avec la qualité de l'air et le taux de pollution.

Grâce à cette information je peux limiter mon effort physique et rouler doucement si l'air est chargé en particules fines.

Je vous partage mon script bash qui s'appuie sur l'API Atmo Auvergne Rhône-Alpes pour Grenoble (Atmo-Aura)

Qui est Atmo ?

La Fédération ATMO France est le réseau national des Associations Agréées de Surveillance de la Qualité de l’Air (AASQA), plus d'informations ici.

Il existe des déclinaisons de sites web par plaques régionales, chez moi c'est Atmo-Aura > Grenoble.

Atmo-Aura couvre les villes suivantes : Lyon, Grenoble, Saint-Étienne, Chambéry, Clermont-Ferrand, Annecy, Valence, Moulins, Aurillac, Le Puy-En-Velay, Bourg-en-Bresse, Privas.

Si vous êtes dans une de ces villes vous n'aurez qu'à utiliser mon script en modifiant simplement le code INSEE de votre commune (je vous explique ça plus loin).

Il se peut que tout ça fonctionne sur d'autres sites Atmo que Atmo-Aura en france mais je n'ai pas testé (précisez-le en commentaire).

Principe de fonctionnement

J'ai écrit un script en bash qui va renvoyer un qualificatif sur la qualité de l'air (bon, mauvais, etc) ainsi que le taux de pollution. De mon côté j'affiche ceci en pourcentage mais c'est clairement un abus de langage, c'est juste pour que ce soit plus parlant pour moi (il peut dépasser 100).

Voici un exemple de ce qui est retourné (voir capture) :

Air bon, pollution 40% (via API).

Chez moi ce script est appelé par un second qui se charge de l'expédition des SMS, voilà pourquoi mon script retourne une chaine de caractères. Je vous partagerai prochainement mon script d'envoi de SMS si cela vous intéresse ?

Au départ il n'existait pas d'API chez Atmo-Aura, j'avais donc écrit un script qui allait lire le code html d'un widget. Comme ce n'était pas propre je ne l'ai pas partagé mais je l'ajouterai sur mon GitHub, ça peut vous servir si la source de l'indice de pollution de votre ville ne propose pas d'API.

1 - Ouverture d'un compte Atmo

L'API Atmo-Aura est gratuite et non limitée (pour l'instant) en nombre d'appels mais l'enregistrement est obligatoire.

Décrivez votre besoin dans ce formulaire afin d'obtenir une clé API valide (instantané) : http://api.atmo-aura.fr/register

Pour ma part j'ai décrit mon projet :

Bonjour,

je souhaite développer un script afin de grapher la pollution dans mon installation domotique sous Domoticz (sur Raspberry Pi). En effet j'utilise le vélo tous les jours comme moyen de déplacement et mon installation me notifie tous les matins du taux de pollution avant le départ, pour savoir si je dois rouler doucement ou non en fonction des risques dans l'air.
Ce script sera diffusé sous licence Creative Commons au travers du site GitHub. Je ferai moins de 10 appels par jour sur l'API.

Cordialement

Mettez http://localhost comme URL si votre API n'est pas accessible publiquement.

2 - Récupération du script

Pour fonctionner mon script utilise JQ dont je vous ai déjà parlé, depuis le binaire est disponible dans les dépôts (tuto : manipuler du JSON en shell avec jq).

Installation pour Raspbian :

sudo apt-get install jq

▶️ Téléchargez le script qualiteAirAPI.sh (raw)

Rendez-le exécutable :

chmod +x qualiteAirAPI.sh

Éditez le script pour saisir les 2 variables :

  • APIKEY = clé API Atmo-Aura (32 caractères alphanumériques)
  • INSEEC = code INSEE de votre commune

Vous pouvez récupérer le code INSEE de votre commune sur ce site (aussi dispo sur wikipedia). A ne pas confondre avec le code postal, pour Grenoble c'est 38185.

Lancez le script, vous devriez obtenir le résultat suivant :

Air bon, pollution 40% (via API).

En cas d'erreur, le script vous indique si c'est l'URL ou la clé API (token) qui est en faute.

Complément grep

Pour ceux qui ne voudraient pas de jq voici une alternative de parsing avec grep et POSIX.

Pour récupérer l'indice de pollution (avant la virgule) :

echo $JSON | grep -Po '"valeur": "\K[[:digit:]]*' || (echo "ERREUR indice";exit 1)

Pour récupérer le qualificatif de pollution :

echo $JSON| grep -Po '"qualificatif": "\K[[:alpha:]]*' || (echo "ERREUR indice";exit 1)

Efficace n'est-ce pas ?

Enfin, sachez qu'il existe aussi jshon dans les dépôts, un outil similaire à jq :

echo $JSON| jshon -e indices -e valeur -u || (echo "ERREUR indice";exit 1)

echo $JSON| jshon -e indices -e qualificatif -u || (echo "ERREUR qualificatif";exit 1)

Problème: jshon ne sait pas arrondir ou afficher seulement les chiffres avant la virgule...

Conclusion

Comme d'habitude n'hésitez pas à améliorer le script avec un pull-request.

J'ai utilisé jq car c'est super pratique pour parser du JSON en bash, mais libre à vous de compliquer la chose 🙂

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter