[Tuto] Un Raspberry qui vous donne la météo tout les matins !

Se lever le matin, et regarder la température et la météo de la journée pour savoir comment se sapper s’habiller, peu des fois prendre du temps selon notre connexion internet, et si on s’est levé en retard ou pas. Alors pourquoi ne pas avoir un petit assistant vocal qui nous le dicte le matin, à certaines heures exact, pendant que l’on se douche ou se prépare ? C’est ce que je vous propose aujourd’hui, avec ce pseudo assistant (pseudo, car on ne pourra rien lui demander. Rien d’autre que ce dont pourquoi il a était programmé, ça sera donc plutôt un bot) connecté au site de météo suisse prevision-meteo.ch.

La légende veut que ce bot utilisant le TTS (« text to speech« , synthèse vocal en français), a était créé par un Français pour une fois s’appelant Maxence Rose, blogeur sur le site YubiGeek. Vous pourrez bien entendu voir son article dans la source en bas de page. On va ici utiliser un Raspberry sous Raspbian pour ce tuto, mais vous pouvez bien entendu utiliser une toute autre plateforme sous Linux, car ce bot utilise tout simplement node.

Node, kézako ?

Grossièrement, on peut dire que Node est un langage informatique sortant des entrailles de Java Script, mais pour beaucoup plus de précision, et comprendre les fins fonds de Java, je vous invite à lire cet article très bien détaillé.

 

————————————————————

De quoi j’ai besoin ?

Pour créer ce bot, rien de plus simple ! Il vous suffira juste de disposer d’un Raspberry (ou un pc Linux) installer sous Raspbian, ou comme vous l’aurez compris, une toute autre version basée sur Linux. Si vous ne savez pas comment installer Raspbian sur le Raspberry, je vous invite à vous rendre sur mon précédent tutoriel Recalbox. Bien entendu, à la place de sélectionner Recalbox dans la liste d’OS, vous sélectionnerez Raspbian, et laisser l’installation se faire. Quand le message de fin s’affiche, appuyez sur OK, puis vous pouvez passer à l’étape supérieur pour la création de votre bot !

————————————————————

Maintenant, c’est parti !

 

Maintenant que vous savez que Node est un langage informatique, vous devez surement vous dire que je vais vous faire faire de la programmation.. Ben oui mais non. Je vous ai facilité la tâche au plus simple en vous mettant le fichier contenant le texte complet pour votre projet. Il ne vous reste plus qu’a le télécharger et le personnaliser, mais je vais bien entendu vous expliquer à quoi correspond chaque morceaux pour que vous sachiez où vous mettez les pieds !

 

  • Tout d’abord téléchargez ce fichier: meteo.js.
  • Mettez le dans une clé USB pour le copier/coller sur le bureau de votre Raspberry. Vous pouvez bien entendu le mettre dans un autre dossier prévu pour, c’est au choix.
  • Maintenant, ouvrez un terminal, et tapez la commande suivante:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo reboot

  • votre Raspberry va redémarrer. Une fois redémarré on ré-ouvre le terminal, et on tape la commande suivante qui va installer Node:

sudo aptitude nodejs npm

  • Une fois l’installation finie, tapez une par une chacune des lignes ci-dessous:

npm google-tts-api Le TTS  (Text To Speech) qui va permettre de traduire vos écris en voix, le lecteur en gros.
npm node-schedule Le planificateur, il va permettre de lancer « les tâches » dans le bon ordre.
npm play-sound Il va permettre de lire les fichier audio, pour que votre texte devienne voix !
npm request il va permettre de faire exécuter les tâches planifiées.

  • À partir de là, l’installation de Node est finie vous pouvez déjà lancer votre bot ! Mais avant ça il faut le personnalisé, et mettre un lecteur audio TTS grâce à cette ligne de commande:

sudo apt-get install alsa-utils mpg123

  • Voila, vous avez tout ce qu’il faut pour lancer votre bot, il ne manque plus qu’a le modifier ! Pour cela, ouvrez le fichier meteo.js télécharger précédemment.

Vous allez tomber sur un genre de bloc note donnant des écritures dans ce style:

Ce n’est pas très claire pour tout le monde en effet… Je vais donc vous décrire se charabia bloc par bloc.

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

var ville = 'Toulon';

Ici on déclare la variable ville, de valeur Toulon. Mettez à la place de Toulon le nom de votre ville, ou la grande ville la plus proche.

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);
});
};

Ici avec la première ligne on donne la parole au TTS, en dessous on lui indique la langue, ainsi que la vitesse de parole (vous l’aurez compris, on peut le faire parler chinois et en accélérer..)

 

schedule.scheduleJob('54 17 * * *', function(){
request({

Ici schedule exécute le bot a une heure fixe de la journée, c’est à dire 17h45 (les heures et les minutes sont inversées), modifiez l’heure qui vous convient.

request({
method: 'GET',
url: 'http://www.prevision-meteo.ch/services/json/' + ville,
headers: {
'cache-control': 'no-cache'
}

Une fois la requête effectuée à l’heure demandée, le bot va donc se connecter à l’API du site prevision-meteo. ch avec la methode GET, et sans cache.

}, function (error, response, body) {
var b = JSON.parse(body);
var name = b.city_info.name; Va cité le nom de la ville
var sunrise = b.city_info.sunrise; heure de lever du soleil
var sunset = b.city_info.sunset; coucher du soleil
var day_long = b.fcst_day_0.day_long; jour de la semaine
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;  et enfin les conditions météorologique de la journée !

Comme vous le voyez, ici chaque variante décrira une information.

speak("Bonjour Guillaume, 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 !');
});
});
});
});
});
});

Ici vous avez la partie à personnaliser ! Vous pouvez modifier les phrases entre guillemet, pour y rajouter votre prénom, ou alors le nom de votre chat, ainsi que la fin de la phrase qui pourrait vous dire « bonne courage pour le boulot ! ». Et vous pouvez même continuer à le faire parler pour rien. Les possibilités sont infinies. Enfin, la dernière ligne vous indique ce que la console (le terminal) devra affichée une fois la météo énoncée. Si vous voyez la phrase entre guillemet dans le terminal, c’est que la météo a était annoncée !

Voila, il ne vous reste maintenant qu’à enregistrer le fichier (Fichier > Enregistrer), puis ouvrir le terminal, et à taper ces deux commandes:

cd Bureau à la place de Bureau, indiquez l’endroit où vous avez placé votre fichier météo.js Si vous ne l’avez pas mis sur le bureau
nodsjs meteo.js On demande enfin l’exécution de nodejs, puis du fichier meteo.js

Vous n’avez plus qu’à attendre l’heure indiquée dans le fichier ! Donc n’hésitez à mettre une heure proche pour faire vos essais !

source: Yubigeek

————————————————————

Les petites astuces !

  • Si vous avez lancé l’exécution du bot, que la console vous indique que la météo a était annoncée et que vous avez rien entendu, retentez l’installation du lecteur audio et redémarrer votre pi.
  • Après avoir tapé nodejs meteo.js un message d’erreur vous apparait ? Copier/coller votre code d’erreur dans les commentaires je ferais de mon mieux pour vous aider !
  • vous pouvez bien entendu connecter une enceinte Bluetooth (le RPI3 dispose du bluetooth)
  • Si vous souhaitez faire sortir le son sur l’analogique (prise Jack) pour ne pas laisser d’écran brancher en HDMI sur votre RPI, vous pouvez facilement changer de source faisant un clique droit sur le bouton de réglage du son, puis sélectionnez la source voulue !
  • Voici une petite idée de la personnalisation qu’on peut donner 🙂

————————————————————

 

 

5 commentaires sur “[Tuto] Un Raspberry qui vous donne la météo tout les matins !

  1. Bonjour,
    Peut-on sauvegarder le fichier son pour un upload sur un site web avec lecteur audio intégré ?
    Ensuite je pense qu’il est simple de lancer la commande dans un cron pour execution dupgm a heure fixe.
    Merci
    j’utilise weewx sur mon RPI et j’uploade les data sur un site web toutes les 5mn.
    Stéphane

  2. Bonjour ,

    j’ai du installer la verison 6.11.5 mais hj’ia un message d’erreur :
    au lancment de nodejs meteo.js :
    root@raspberrypi:~# nodejs /home/pi/meteo-vocale/meteo.js
    module.js:471
    throw err;
    ^

    Error: Cannot find module ‘request’
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object. (/home/pi/meteo-vocale/meteo.js:1:77)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

    si vous pouviez m’aider

    MErci !

    1. Re, En fait c’est bon il fallait faire plusieurs manips pour que les modules soient validés ( npm -init –yes puis npm install request –save )
      et aussi installer la bonne version de nodejs version 6.11.5
      le souci c’est que mon rpi2 est autonome (sans ecran , sans audio car il sert pour uploadé des données de station méteo
      Auriez-vous une solution pour redigirier la sortie audio dans un wav ou mp3 ?

      MErci

  3. Salut, Merci pour cet article !

    J’ai juste un petit probleme, le script se lance, mon enceinte est pairée avec mon rp zero , la connection fonctionne mais le script ne fais sortir aucun son, sait tu de qoi celaa pourrait venir ?

    Merci bien !
    Clem

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *