Raspberry Pi : comment concevoir un bot qui dicte la météo chaque jour ?

Avatar de Yubigeek
Raspberry Pi : comment concevoir un bot qui dicte la météo chaque jour ?

Cette semaine a été remplie d’article pour votre Raspberry Pi, aujourd’hui on se penche sur un tutoriel pour la création d’un bot qui dicte la météo chez vous tous les matins.

Vous aurez besoin pour cela, d’un Raspberry Pi (RPi), et d’un haut-parleur que vous devrez brancher sur la carte mère du RPi, le haut-parleur du RPi n’étant pas assez puissant pour dicter quoi que ce soit.

Conception d’un bot qui dicte la météo

Pour commencer, créez vous un dossier dans votre répertoire de développement et créez-y un fichier que vous appellerez index.js par exemple.

Ensuite, installez les dépendances NodeJS suivantes :

  • google-tts-api : un « text-to-speech » pour faire parler votre compteur vocal
  • node-schedule : un planificateur de tâches pour exécuter les actions
  • play-sound : une dépendance nécessaire à l’exécution des fichiers audios
  • request : request est conçue pour être la manière la plus simple possible de faire des appels HTTP/HTTPS

Pour récupérer la météo, nous allons utiliser une API (Application Programming Interface, ou Interface de programmation) Suisse qui nous donnera la météo pour une ville souhaitée. Le résultat nous retournera différentes valeurs :

  • température minimum de la journée (en degré Celsius)
  • température maximum de la journée (en degré Celsius)
  • l’heure du levé du soleil
  • l’heure du couché du soleil
  • le jour exacte en Français (Lundi, Mardi, etc…)
  • la condition météo en moyenne pour la journée (pluvieux, ensoleillé, nuageux, etc…)
  • et tout un tas d’autres valeurs que nous n’utiliserons pas dans ce tutoriel

Commencez par inclure les dépendances dans votre projet, dans le fichier index.js, créé précédemment :

var request = require('request');var player = require('play-sound')(opts = {    player: "omxplayer"});var googleTTS = require('google-tts-api');var schedule = require('node-schedule');

On déclare une variable « ville » qui possède la valeur de votre ville en question, par exemple, ici, ça sera Marseille :

var ville = 'Marseille';

On doit à présent faire parler notre bot ! Pour cela nous allons utiliser une librairie de Google, le « text-to-speech » afin de transformer du texte en fichier audio, avec la même méthode utilisée pour Google Traduction.

var speak = function (text, callback) {// Nouvelle fonction speak avec text (string), et callback (fonction) en paramètres    googleTTS(text, 'fr', 1)    // On utilise googleTTS, qui prend en paramètre la variable text passée dans la fonction, puis la langue parlée, puis la vitesse de parole    .then(function (url) {    // La promesse nous retourne une fonction avec url comme argument        callback();        // On exécute la fonction callback (fonction de rappel)    }).catch(function (err) {        console.error(err.stack);        // Oups, une erreur !    });};

L’API que nous utiliserons est Suisse, son lien est : prevision-meteo.ch/services/json/Marseille.

Nous allons donc utiliser la dépendance « request » pour appeler cette page est récupérer du contenu JSON (plus facile à lire dans notre code) :

request({    // Instanciation de la dépendance "request"    method: 'GET',    // Méthode utilisée : GET    url: 'http://www.prevision-meteo.ch/services/json/' + ville,    // URL de l'API    headers: {        'cache-control': 'no-cache' // Pas de cache    }}, function (error, response, body) {    var b = JSON.parse(body);    // On parse/manipule le code retourné en JSON    var name = b.city_info.name; // Nom de la ville    var sunrise = b.city_info.sunrise; // Heure du levé du soleil    var sunset = b.city_info.sunset; // Heure du couché du soleil    var day_long = b.fcst_day_0.day_long; // Jour de la semaine en Français    var tmin = b.fcst_day_0.tmin; // Température minimum de la journée    var tmax = b.fcst_day_0.tmax; // Température maximum de la journée    var condition = b.fcst_day_0.condition; // Condition météo pour la journée    // Exécution du "text-to-speech"});

La méthode JSON.parse() « parse » (ou manipule) une chaîne de caractères en JSON et construit la valeur JavaScript ou l’objet décrit par cette chaîne. On peut éventuellement utiliser cette fonction avec un paramètre de modification permettant de traiter l’objet avant qu’il soit renvoyé.

Il faut ensuite faire parler le bot avec une série de fonction avec rappel (callback) :

speak("Bonjour, nous sommes " + day_long + ".", function () {    speak("Aujourd'hui, à " + name + ", le temps sera " + condition + " avec une température minimum de " + tmin + "° et une température maximum de " + tmax + "°.", function () {        speak("Le soleil se lèvera à " + sunrise + " et se couchera à " + sunset + ".", function () {            speak("Bonne journée à tous !", function () {                console.log('La météo a été récitée !');            });        });    });});

A vous de jouer, vous pouvez modifier à volonté ces phrases pour que votre bot soit le plus intelligent possible !

Il vous reste désormais à définir « node-schedule » pour qu’il exécute tout ce code à une heure précise de la journée, pour ma part, j’ai choisi 8h30 (l’heure à laquelle je suis levé).

schedule.scheduleJob('30 8 * * *', function () {    // Exécution du code avec "request"});

Résultat du code en entier

var request = require('request'); var player = require('play-sound')(opts = {}); var googleTTS = require('google-tts-api'); var schedule = require('node-schedule');  var ville = 'Marseille';  var speak = function (text, callback) {     googleTTS(text, 'fr', 1)         .then(function (url) {             player.play(url, function (err, stdout, stderr) {                 callback();             });         })         .catch(function (err) {             console.error(err.stack);         }); };  schedule.scheduleJob('30 8 * * *', function(){     request({         method: 'GET',         url: 'http://www.prevision-meteo.ch/services/json/' + ville,         headers: {             'cache-control': 'no-cache'         }     }, function (error, response, body) {         var b = JSON.parse(body);         var name = b.city_info.name;         var sunrise = b.city_info.sunrise;         var sunset = b.city_info.sunset;         var day_long = b.fcst_day_0.day_long;         var tmin = b.fcst_day_0.tmin;         var tmax = b.fcst_day_0.tmax;         var condition = b.fcst_day_0.condition;          speak("Bonjour, nous sommes " + day_long + ".", function () {             speak("Aujourd'hui, à " + name + ", le temps sera " + condition + " avec une température minimum de " + tmin + "° et une température maximum de " + tmax + "°.", function () {                 speak("Le soleil se lèvera à " + sunrise + " et se couchera à " + sunset + ".", function () {                     speak("Bonne journée à tous !", function () {                         console.log('La météo a été récitée !');                     });                 });             });         });     }); });

Si le son n’est pas déclenché à partir de la console Shell. Vous pouvez installer les “codecs audio” en saisissant ces commandes :

sudo apt-get update sudo apt-get install alsa-utils mpg123

Vous pouvez faire tourner ce programme aisément sur votre Raspberry Pi, ou un autre appareil.

Total
0
Shares
Laisser un commentaire
Previous Post
Raspberry Pi : un compteur d’abonné visuel pour les réseaux sociaux

Raspberry Pi : un compteur d’abonné visuel pour les réseaux sociaux

Next Post
PM2 : un gestionnaire de processus de production pour les applications NodeJS

PM2 : un gestionnaire de processus de production pour les applications NodeJS

Related Posts