Afficher la meteo avec conky et python 3ème partie


 mer. 10 juillet 2013    Conky

Dans les deux premiers épisodes de ce tutoriel, nous avons créé un programme python récupérant les informations météo sur le site de wunderground, puis nous avons automatisé ce script afin qu'il se lance au démarrage de notre session. Il ne reste plus qu'à afficher les informations sur notre bureau.

Pour cela, nous allons devoir :

  • créer un conky météo (plusieurs en fait)
  • créer un petit programme bash de démarrage / arrêt du conky météo
  • créer les entrées de ce petit programme, dans le fichier menu.xml pour le menu openbox, et dans le fichier rc.xml pour les touches de raccourcis

Les icones

Je suis allé les chercher chez merlinthered sur devianart. Je les ai renommées en fonction du nom que je leur ai donné dans le programme python.

Le conky

Conky va nous permettre d'afficher sur le bureau les informations meteo contenu dans le fichier texte alimenté par le programme python

Tout d'abord, il faut installer conky. Sur Crunchbang, il est installé par défaut, sinon sudo apt-get install conky

Ensuite, nous allons réaliser non pas un mais quatre script conky, un par jour de prévision. Conky ne sait pas gérer les colonnes, à moins de bidouiller avec la commande ${goto}. Donc nous allons coller quatre conky pour réaliser une jolie présentation.

Voilà, à la suite, les quatre fichiers. Ces fichiers sont à copier dans le répertoire /home/monuser/.conky/ :

##############################################
# Paramètres
##############################################
background yes
use_xft yes
xftfont Walkway:size=9
xftalpha 1
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent yes
own_window_type desktop
own_window_hints undecorated,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 560 200
maximum_width 560
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
default_color #b5b5b5
alignment top_left ## on centre la fenêtre sur l'écran à l'ouverture
gap_x 30
gap_y 70
border_inner_margin 5 ## marge entre le texte et la bordure
border_outer_margin 5 ## marge entre la bordure et le bord de la fenêtre.
no_buffers yes
uppercase no
override_utf8_locale yes
##############################################
# Affichage
##############################################
TEXT
# D'abord, je place les images
${execp grep jour1_icone ~/tmp/meteo.txt | awk -F " " '{print "${image ~/images/icone_meteo/" $3 ".png -p 30,0 -s 128x128}"}'}

# Je place le texte
${color #b5b5b5}${voffset -30}${goto 260}${font size=12:bold}Aujourd'hui à ${execp grep Derniere_observation ~/tmp/meteo.txt | awk -F " " '{print $8}'} à Paris${font}
${voffset 10}${goto 240}Temp. actuelle : $alignr${execp grep Temperature ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${voffset 3}${goto 240}Temp. ressentie : $alignr${execp grep Ressentie ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${voffset 3}${goto 240}Proba. de précip. : $alignr${execp grep jour1_pop ~/tmp/meteo.txt | awk -F " " '{print $3}'}
${voffset 3}${goto 240}Vent : $alignr de ${execp grep Dir_vent ~/tmp/meteo.txt | awk -F " " '{print $3}'} à ${execp grep Vent ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${voffset 3}${goto 240}Pression atmos. : $alignr${execp grep Pression ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}${execp grep Tend_pres ~/tmp/meteo.txt | awk -F " " '{print " " $3}'}
${voffset 3}${goto 240}Humidité : $alignr${execp grep Humidite ~/tmp/meteo.txt | awk -F " " '{print $3}'}
${voffset 3}${goto 240}Visibilité : $alignr${execp grep Visibilite ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${font bold}${goto 50}${execp grep Meteo ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4 " " $5}'}${font}${goto 240}Indice UV : $alignr${execp grep Indice_UV ~/tmp/meteo.txt | awk -F " " '{print $3}'} ${font}
${voffset 3}${goto 240}Hauteur de précipitation : $alignr${execp grep jour1_hauteur_precip ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${font bold}${goto 50}${execp grep jour1_tempmax ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'} |  ${font}${execp grep jour1_tempmin ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}${goto 240}Hauteur de neige : $alignr${execp grep jour1_hauteur_neige ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${hr 2}
${voffset -40}

Télécharger conkyrc_meteo

##############################################
# Paramètres
##############################################
background yes
use_xft yes
xftfont Walkway:size=9
xftalpha 1
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent yes
own_window_type desktop
own_window_hints undecorated,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 180 200
maximum_width 180
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
default_color #b5b5b5
alignment top_left ## on centre la fenêtre sur l'écran à l'ouverture
gap_x 30
gap_y 320
border_inner_margin 5 ## marge entre le texte et la bordure
border_outer_margin 5 ## marge entre la bordure et le bord de la fenêtre.
no_buffers yes
uppercase no
override_utf8_locale yes
##############################################
# Affichage
##############################################
TEXT
# D'abord, je place les images
${execp grep jour2_icone ~/tmp/meteo.txt | awk -F " " '{print "${image ~/images/icone_meteo/" $3 ".png -p 58,10 -s 64x64}"}'}

# Je place le texte
${color #b5b5b5}$alignc${font bold}${voffset -40}${execp grep jour2_jour_sem ~/tmp/meteo.txt | awk -F " " '{print $3}'}
$alignc${voffset 70}${font bold}${execp grep jour2_conditions ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4 " " $5}'}
$alignc${font bold}${execp grep jour2_tempmax ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'} | ${font}${execp grep jour2_tempmin ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${voffset 10}Précip. % : $alignr${execp grep jour2_pop ~/tmp/meteo.txt | awk -F " " '{print $3}'}
Précip. h: $alignr${execp grep jour2_hauteur_precip ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
Neige : $alignr${execp grep jour2_hauteur_neige ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
Vent : ${alignr}de ${execp grep jour2_dir_vent ~/tmp/meteo.txt | awk -F " " '{print $3}'} à ${execp grep jour2_vent ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}

Télécharger conkyrc_meteo_jour2

##############################################
# Paramètres
##############################################
background yes
use_xft yes
xftfont Walkway:size=9
xftalpha 1
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent yes
own_window_type desktop
own_window_hints undecorated,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 180 200
maximum_width 180
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
default_color #b5b5b5
alignment top_left ## on centre la fenêtre sur l'écran à l'ouverture
gap_x 220
gap_y 320
border_inner_margin 5 ## marge entre le texte et la bordure
border_outer_margin 5 ## marge entre la bordure et le bord de la fenêtre.
no_buffers yes
uppercase no
override_utf8_locale yes
##############################################
# Affichage
##############################################
TEXT
# D'abord, je place les images
${execp grep jour3_icone ~/tmp/meteo.txt | awk -F " " '{print "${image ~/images/icone_meteo/" $3 ".png -p 58,10 -s 64x64}"}'}

# Je place le texte
${color #b5b5b5}$alignc${font bold}${voffset -40}${execp grep jour3_jour_sem ~/tmp/meteo.txt | awk -F " " '{print $3}'}
$alignc${voffset 70}${font bold}${execp grep jour3_conditions ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4 " " $5}'}
$alignc${font bold}${execp grep jour3_tempmax ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'} | ${font}${execp grep jour3_tempmin ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${voffset 10}Précip. % : $alignr${execp grep jour3_pop ~/tmp/meteo.txt | awk -F " " '{print $3}'}
Précip. h: $alignr${execp grep jour3_hauteur_precip ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
Neige : $alignr${execp grep jour3_hauteur_neige ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
Vent : ${alignr}de ${execp grep jour3_dir_vent ~/tmp/meteo.txt | awk -F " " '{print $3}'} à ${execp grep jour3_vent ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}

Télécharger conkyrc_meteo_jour3

##############################################
# Paramètres
##############################################
background yes
use_xft yes
xftfont Walkway:size=9
xftalpha 1
update_interval 1.0
total_run_times 0
own_window yes
own_window_transparent yes
own_window_type desktop
own_window_hints undecorated,sticky,skip_taskbar,skip_pager
double_buffer yes
minimum_size 180 200
maximum_width 180
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
default_color #b5b5b5
alignment top_left ## on centre la fenêtre sur l'écran à l'ouverture
gap_x 410
gap_y 320
border_inner_margin 5 ## marge entre le texte et la bordure
border_outer_margin 5 ## marge entre la bordure et le bord de la fenêtre.
no_buffers yes
uppercase no
override_utf8_locale yes
##############################################
# Affichage
##############################################
TEXT
# D'abord, je place les images
${execp grep jour4_icone ~/tmp/meteo.txt | awk -F " " '{print "${image ~/images/icone_meteo/" $3 ".png -p 58,10 -s 64x64}"}'}

# Je place le texte
${color #b5b5b5}$alignc${font bold}${voffset -40}${execp grep jour4_jour_sem ~/tmp/meteo.txt | awk -F " " '{print $3}'}
$alignc${voffset 70}${font bold}${execp grep jour4_conditions ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4 " " $5}'}
$alignc${font bold}${execp grep jour4_tempmax ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'} | ${font}${execp grep jour4_tempmin ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
${voffset 10}Précip. % : $alignr${execp grep jour4_pop ~/tmp/meteo.txt | awk -F " " '{print $3}'}
Précip. h: $alignr${execp grep jour4_hauteur_precip ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
Neige : $alignr${execp grep jour4_hauteur_neige ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}
Vent : ${alignr}de ${execp grep jour4_dir_vent ~/tmp/meteo.txt | awk -F " " '{print $3}'} à ${execp grep jour4_vent ~/tmp/meteo.txt | awk -F " " '{print $3 " " $4}'}

Télécharger conkyrc_meteo_jour4

Pour positionner les différentes informations, il faut jouer d'abord avec minimum_size, maximum_with, gap_x, gap_y pour les quatre fenêtres, puis avec alignr, alignc, goto et voffset pour le contenu de chacune des fenêtres.

La documentation conky est ici

L'astuce pour récupérer les infos, je l'ai trouvé sur ce forum, le même qui m'avait permis de créer le squelette du programme python. Tout tient dans la ligne suivante :

${execp grep jour2_icone ~/tmp/meteo.txt | awk -F " " '{print "${image ~/images/icone_meteo/" $3 ".png -p 58,10 -s 64x64}"}'}

Cela me permet d'aller récupérer dans le fichier meteo.txt le nom de l'icone et de l'afficher dans mon conky. Pour bien comprendre cette ligne, il faut connaître les commandes grep, awk et les tubes. Vous trouverez une saine lecture concernant les commandes unix chez framabook.

Nous voyons l'importance dans le programme python de ne pas générer de doublon dans le nom des informations, sinon cela interdit le bon fonctionnement de grep.

L'appel et la fermeture du conky météo

Je ne souhaite pas avoir en permanence les informations météo affichées sur mon bureau mais uniquement à la demande. Pour cela nous allons créer un petit programme de démarrage/arrêt du conky et créer des raccourcis dans le menu openbox et dans celui définissant les touches de raccourcis.

Le programme le voici :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/sh
# cliquer pour démarrer, cliquer pour arrêter

TEST=$(ps -ef | grep conky | grep meteo)

if [ "$TEST" != "" ]; then
    exec ps -ef | grep conky | grep meteo | awk '{print $2}'| xargs kill
else
    conky -c ~/.conky/.conkyrc_meteo
    conky -c ~/.conky/.conkyrc_meteo_jour2
    conky -c ~/.conky/.conkyrc_meteo_jour3
    conky -c ~/.conky/.conkyrc_meteo_jour4
exit
fi

Télécharger startstopmeteo.sh

Il ne reste plus qu'à créer une entrée dans le fichier menu.xml, par exemple comme ci :

<item label="Meteo">
    <action name="Execute">
        <command>
            startstopmeteo.sh
        </command>
    </action>
</item>

Et une entrée dans le fichier rc.xml pour les touches de raccourcis, comme cela :

<!-- Meteo -->
<keybind key="W-A-m">
  <action name="Execute">
    <command>~/bin/startstopmeteo.sh</command>
  </action>
</keybind>

Et voilà, c'est fini. Une météo en un clic !

Pour résumer, il vous faut :

  • s'inscrire sur le site de wunderground
  • créer un script python pour récupérer les informations de wunderground
  • le démoniser
  • le lancer au démarrage de l'ordinateur
  • récupérer de jolies icones
  • créer les conky
  • créer un script arret/relance des conky
  • créer les entrées pour ce script dans le menu et les touches de raccourcis