Une station météo Raspberry Pi avec une interface web

Lorsque j’ai acheté mon premier Raspberry Pi il y a de ça 10 mois maintenant, je ne voulais m’en servir que pour faire du logiciel. A force de lecture sur différents sites et forum, l’électronique a commencé à me donner envie. Aujourd’hui, nous allons donc parcourir ensemble mon premier projet : une station météo avec sondes sans fil.

meteoAlors pourquoi une station météo. C’est certainement le projet le plus courant et le moins original que l’on puisse trouver ! Chacun y va de son système de capture, de ses sondes, de son stockage. Mais le principe reste le même : savoir combien il fait dans votre maison/appartement et/ou à l’extérieur.

J’ai donc défini mon besoin :

  • Mesurer la température extérieure et intérieure
  • Les sondes doivent communiquer sans fil. Pas question pour Madame de voir passer des fils dans tous les sens juste pour avoir des °C affichés.

Ma recherche m’a amené sur ce post, très bien fait et qui est utilisé à 90% pour ma station météo avec le Raspberry Pi. Les composants sont simples à utiliser, certes un peu cher mais pour un ultra novice comme moi, ça aide à se rassurer dans ces premiers pas. Voici donc ce que j’ai commandé chez Ciseco :

  • 3 x XRF wireless RF radio UART RS232 serial data module XBee shape (29.70£ les trois)
  • 2 x Sensor – Temperature XRF development sensor – THERMISTOR (14.16£ les deux)
  • 1 x Slice of pi – add on for Raspberry PI (3.25£ l’unité)

On arrive donc à une somme de 47.11£, plus 10£ de frais de port et la mauvaise surprise la TVA à ajouter qui s’élève à 11.42£. Un total de 68.53£ soit 80€. Ouch. Je trouve ça un peu cher pour seulement deux sondes mais j’étais quasi certain d’arriver au bout !

Voici ce à quoi je voulais arriver :

 

Une fois le matériel reçu, il a fallu

  • assembler la carte principale Slice Of Pi : toutes les infos ici
  • configurer chaque émetteur XRF : toutes les infos ici
  • assembler les sondes et les configurer pour communiquer : toutes les infos ici

Les premiers essais ont affiché les températures. Un grand succés en soi ! 🙂

Premiers essais d'affichage avec la station météo Rapsberry Pi

Premiers essais d’affichage avec la station météo Rapsberry Pi

L’étape suivante a été l’automatisation de la récupération. Pour ça un script Python (une première aussi) tourne en boucle pour scanner l’arrivée des températures. Le script est disponible ici. Il charge toutes les infos (y compris le niveau de la batterie) dans une base de données SQLite (toujours une première pour moi habitué à Oracle ou jBase).

Le stockage des données étant en cours, il reste la représentation de ces informations dans quelque chose de pas trop neuneu. Pas mal de choix possibles mais je suis parti sur une simple interface web avec les framework bootstrap et highcharts pour rendre cette station météo Raspberry Pi un peu plus sexy.

Le serveur Web est un grand classique avec NGinx avec un support PHP (tutoriel pour l’installer sur cette page). La configuration du site qui est sur le port 80 chez moi est la suivante :

server {
  listen 80;
  root /var/www;
  index index.php;
  server_name localhost;
  location / {
    try_files $uri $uri/ /index.php;
  }
  location ~ \.php$ {
  fastcgi_pass unix:/var/run/php5-fpm.sock;
  fastcgi_index index.php;
  include fastcgi_params;
 }
}

Le site web en lui même ne contient qu’une seule page. Les graphiques en haut, l’éphéméride et les mesures en bas. J’ai essayé de le rendre générique donc l’ajout d’une nouvelle sonde, dès qu’elle est insérée dans la table Emetteurs de votre base, elle doit apparaitre sous les graphiques.

Enfin l’éphéméride. Pour ça je vais chercher la page d’accueil de Météo France pour récupérer la fête du jour, les horaires de lever et coucher du soleil et de la lune. Le tout via un script Python exécuté tous les jours à 2h du matin via crontab (télécharger le script)

Une évolution possible serait d’ajouter une zone pour les prévisions mais c’était pas le but initial.

[EDIT] C’était pas le but initial mais je suis quand même en train d’ajouter les informations de Open Weather sur un nouveau graphique 🙂

[EDIT2] Le script de mise à jour de l’éphéméride a été refait grâce à Jimmy. Le nouveau layout de Météo France est maintenant géré. Merci à lui !

Voici le résultat (actuel) final :

Météo_Raspberry_Pi

La totalité du site est dans cette archive, y compris la base de donnée, un script d’initialisation, les scripts python et les images.

Petites remarques pour le moment :

  • Pas de mesure de pression atmosphérique ou d’humidité. Ca serait bien d’avoir ces informations en plus.
  • Besoin de se connecter pour avoir l’information. Une demande de Madame est d’avoir un écran quelque part qui affiche de suite l’information. Pour le moment je ne sais pas si ca sera possible avec la carte Slice Of Pi sur le Raspberry. C’est l’étape suivante 😉

Donc si vous avez vous aussi envie de vous lancer, n’hésitez pas 🙂 Pour l’instant c’est satisfaction totale à la maison 🙂

[EDIT] Les photos des sondes sont ici

Vous aimerez peut être aussi...

  • Pour l’humidité une sonde DHT22, pour la pression, une sonde BMP085.
    Faciles à monter sur le raspberry pi. Après, pour les monter en externe, ça va demander un poil plus de bricolage.

    Dans tous les cas, jolis projet.
    Mais ça manque de photos :p

    • Bonne remarque. Je vais faire des photos des sondes …en action ! 😉

  • ss814

    Bravo !
    J’suis en train de me rendre malade à ne pas avoir le budget pour me lancer dans de l’élec moi aussi, mais justement, pour ce qui est de l’écran; à petit budget, pourquoi ne pas prendre un écran pour voiture comme par exemple : http://www.amazon.com/dp/B0045IIZKU ?
    Il reste juste à afficher le rendu web sur l’écran avec un script au démarrage qui lancerait un serveur X puis qui chargerait une instance de firefox avec comme page d’accueil le localhost.

    • L’écran est une bonne idée. Ca rend juste la station plus volumineuse

  • Kilou

    Si tu cherches à récupérer des infos sur la météo ou les prévisions, regarde de ce côté là : http://openweathermap.org/

    • Wahou merci ! je connaissais pas et c’est génial je vais pouvoir ajouter des infos !
      Merci !

  • Blackmam3a

    J’ai parcouru ton script en diagonale ! Php gère très bien les dates (http://php.net/manual/fr/function.date.php), ce qui pourra alléger un peu ton code, et si tu veux avoir le nom des jours en français : setlocale (LC_ALL, « fr_FR »); (Il faut avoir les locals FR sur ton raspberry).

    Sinon super boulot !

    • J’ai galéré sur ce point et la solution m’énerve car avec les locales ca aurait été plus simple. Mais pas moyen avec mon installation July ne s’est jamais traduit en Juillet !

      • Blackmam3a

        Je l’utilise actuellement sur mon RPi et ça marche :).

        En premier regarde ce que te retourne setlocale (LC_ALL, « fr_FR »), si c’est false, c’est que tu n’a pas activé les locales sur ton RPi.

        Sous Arch, il faut allez dans le fichier /etc/locale.gen et décommenter les variables fr_FR.* et faire un locale-gen (pour les télécharger) si mes souvenirs sont bons.

        Je n’utilise pas debian mais ça doit être à peu près la même chose.

        • Possible effectivement que ca ne soit pas configuré. Sous Debian il y a un dpg-reconfigure ou un truc dans le genre à faire.
          Je regarde ça ce soir. Merci pour l’info

          • Blackmam3a

            Pas de soucis, très peu de personnes utilise setlocale() mais plutôt un tableau…

            Sinon pour dessiner des graphique, tu as plein de librairies JS pour le faire notamment Chart.js (pour éviter les requêtes externes au maximum).

          • J’aime bien highcharts qui assez performant et je pense pas trop lourd à charger. Et vu que c’est pour une utilisation locale …

  • Souti

    « Un total de 68.53£ soit 80€. Ouch. Je trouve ça un peu cher pour seulement deux sondes mais j’étais quasi certain d’arriver au bout ! »

    Je suis assez d’accord, ça me parait bcp trop élevé. Ce serait presque plus rentable d’acheter des rasbperry A et des sondes branchées sur les GPIO. Je caricature mais je pense que le parallèle est parlant.

    • Oui c’est certain que ca serait moins cher. Le XBee pour le sans fil sera un peu plus cher mais via GPIO on devrait vite economiser. Seul hic c’est que c’est bcp plus technique pour un débutant de se créer sa propre sonde sans fil. Je n’ai rien trouvé sur internet qui soit simple et compréhensible aussi bien en francais qu’en anglais. D’où cette solution qui pour moi convient très bien à ceux qui comme moi ne comprennent rien à l’électronique.
      Il faut reconnaitre qu’en dehors du prix et de la non évolutivité, leur boitier de température est top car il a le boitier, l’alimentation et la cartepour avoir unen sonde en 5 minutes.

      • Souti

        Excuses moi je me suis mal exprimé. La solution me semble tout a fait bien pensée et viable, mais je voulais surtout pointé du doigt le prix des composants qui me semble élevé par rapport à des composants plus « complets » a priori.

        Peut-être qu’il y a moyen de trouver les mêmes pour moins cher.

        A+
        PS : Je crois avoir lu tout tes articles et je les apprécie.

        • Y a pas de soucis. Je suis bien d’accord avec toi. Quand tu t’y connais un peu y a moyen. C’est le coté sans fil qui a l’air chaud à réaliser.

  • jed59

    Bravo, belle réalisation.

    Pourquoi avoir choisi les XRF wireless RF radio à la place des Transmetter/Receiver 433Mhz ? (fiabilité, portée, simplicité de développement, …).
    Quels est la portée des récepteurs intérieur et/ou extérieur, la durée de vie de la pile !

    J’ai hâte de voir les photos 🙂

    • Comme je l’explique dans l’article je n’y connais rien en électronique donc ce module est simple d’utilisation et à fabriquer. Pour la portée je crois que c’est 30m en intérieur et un peu plus de 90 en extérieur.
      Et pour la pile c’est un peu plus d’un an pour une mesure toutes les 5 minutes.

  • m2i

    A la place de sqlite, utilise rrdtool.
    Tes fichiers de données ne grossiront pas dans le temps.
    Moi j’ai 4 relevés sur 10 ans dans 3 Mo
    RRDtool existe pour plusieurs langages (dont python et php) et permet de faire les graphiques

  • Yamdar

    Bonjour,

    Merci pour cet article.

    J’ai mis en place en suivant entre autre cet article, 2 sondes chez moi.

    Je possède cependant un soucis et n’arrive pas à trouver la solution.

    Les 2 sondes me retournent des valeur différentes. dans une salle à 24°c , une des sonde me retourne un 24° environs et l’autre 27° mais varie enormement.

    Celle qui me donne du 24°c me répond une fois toutes les 6 valeurs, quelque chose de plus exotique comme 27°c puis redescends après sur le 24°c.

    suis-je le seul à avoir ce problème ?

    Comment faire pour étalloner ces sondes ? j’essaie de comprendre la fonction « aXXRNOM » qui est censé définir le 25° mais n’y parvient pas.

    Merci d’avance pour vos réponses.

    • Bonjour,
      Les variations sont vraiment étranges. La sonde n’a pas pris un coup lors de l’assemblage ? Je n’ai jamais fait l’étalonnage. Peut être avec l’aide du forum de chez ciseco …

  • Acilnos

    Bonjour,

    Merci pour ce site vraiment très instructif et ces articles sur le Pi bien conçus.

    Je travaille actuellement sur un projet domotique qui a pour but de remplacer le thermostat de mon chauffage. Ce que j’ai réussit à faire en suivant vos tutos. (récupération de la température+ un peu d’électronique pour le déclenchement ou non des chauffages).

    En voulant pousser un peu plus mon projet j’ai tenté de mettre un serveur web (nginx+sqlite) pour avoir un graphique tel que le votre. J’ai donc télécharger l’archive dispo sur cette page mais je bloque sur l’affichage du graphique qui apparemment n’est pas dans le code de la page index.php.

    Pouvez-vous m’aider sur ce point?

    Merci d’avance

    • Bonsoir,
      Est-ce qu’il y a moyen d’avoir les erreurs renvoyées par le serveur web ? C’est vrai que l’exemple n’est peut être pas évident à installer.

      • Acilnos

        Bonjour,

        Merci de m’aider 🙂

        Je n’ai pas d’erreur dans le navigateur, j’avais bien le carrousel mais aucun graphique à l’intérieur. je pense que la partie de code correspondant au script java de création des graph0 et graph1 est manquante dans l’archive.

        J’ai cependant réussi à avoir un graphique en examinant la doc highcharts mais j’ai des difficultés à exploiter les données dans le tableau créé par la fonction create_graphic.

        • C’est vrai que la manipulation des données dans HighCharts n’est pas évidente mais le résultat en vaut la peine ! 🙂

        • Benoit91

          Salut,

          Merci beaucoup pour ton site, j’ai quasiment terminé le projet 🙂
          le script monitor tourne bien, je récupère des données dans la base SQlite

          j’ai encore un problème avec le site web, le cadre s’affiche correctement mais aucune données ne s’affiche… quelqu’un peu m’aider ?

          merci d’avance pour vos commentaires 😉

          • Salut,
            Si tu peux regarder dans la console du naviguateur si y a des erreurs ? Sinon faire une page bete qui affiche le résultat d’une requete pour tester la connexion à la db

          • Benoit91

            Salut Chris,

            merci pour ta réponse rapide 🙂
            j’ai trouvé le problème, la connexion à la db était ok mais je n’avais pas modifié l’id de mes émetteurs dans la table Emetteurs…. du coup il n’y avait rien à afficher…
            maintenant ça affiche bien les données des capteurs, cool !

            j’ai encore un petit soucis de différences dans les heures de capture. Un exemple vaut mieux qu’un long discourt :
            il est 12h, la prise de mesure inscrit 11h dans la db, le site web affiche 13h sur le capteur et 14h sur le graphique…

            Mon ntp est bien configuré, mon locale linux est configuré en Fr

            une idée ?

          • Salut,
            Je pense qu’il doit y avoir une histoire de format d’enregistrement. Je viens de regarder et j’ai aussi des soucis de dates … L’heure de décalage de l’enregistrement doit être compensée à chaque étape ce qui fait que ca se décale d’heure en heure. Je vais regarder pour enregistrer des heures locales et non UTC ou GMT ou je sais pas quoi 🙂

  • Van den Bliek Jimmy

    J’ai modifié le script ephemeride.py pour récupérer les valeurs suite au changement de design du site MeteoFrance. Si cela peut intérésser quelqu’un, voici les lignes à modifier. La modification va de la première ligne m = re.search, jusqu’à la troisième ligne de ce genre.

    m = re.search(' Lever : (.+?) Coucher : (.+?) ', line)
    if m:
    SolLever = m.group(1)
    SolCoucher = m.group(2)
    m = re.search(' Lever : (.+?) Coucher : (.+?) ', line)
    if m:
    LuneLever = m.group(1)
    LuneCoucher = m.group(2)
    m = re.search('(.+?)', line)

  • Van den Bliek Jimmy

    Bonsoir, juste une petite question. N’étant pas un pro de l’utilisation de HighCharts, je voudrais savoir si il y a un moyen de stopper le carrousel automatique. Je voudrais simplement laisser les flèches droite et gauche mais ne plus avoir l’animation. Une idée? Merci.

    Jimmy

    • Salut,
      Ce n’est pas le carousel d’HighCharts mais celui de BootStrap. Pour le désactiver :
      $('#myCarousel').carousel({
      interval: false
      })

  • Darki03

    Bonsoir,

    Tout d’abord merci pour cette réalisation qui m’as permis de ne pas partir de zéro. J’ai adapté celle–ci pour fonctionner avec un capteur température et préssion BMP085 en I2C sur le rPI.

    Après avoir passer un peu de temps dans la configuration du site, tout fonctionne. Cependant au bout d’un certain temps la base sql devient de plus en plus volumineuse et chaue accès à l’interface web fait planter le script python qui tourne en tache de fond, dans le nohup.out je trouve l’erreur « Error database is locked ».

    Il semblerait que, du fait de la taille de la base, le script php mets plus de temps pour récupérer les données et que le script python accède en écriture à la base pendant ce temps d’ou un conflit (le script python se connecte à la base sql pour inscrire une valeur toutes les 30 secondes).

    N’avez vous pas remarquer ce problème ? ai-je raté quelque chose ?

    Peut-être faut il prévoir un script de nettoyage de la base ?

    D’avance merci.
    Darki

    • Bonjour
      Pas ce genre de soucis chez moi sauf une fois où la base était avec un lock. La taille de la base au bout de 6 mois est dans les 12mo je crois

  • Blabla51

    Bonjour,

    Voilà le problème soulevé, en effet, une base SQLite ne supporte qu’une seule et unique connexion à la base.

    Je ne suis que de passage, mais j’ai moi aussi développé une unité de domotique avec une base SQLite, mais j’ai un processus différents.
    Je m’explique: la base n’acceptant qu’une seule et unique connexion, afin d’éviter tout conflit, j’envoie une requête http au serveur en local, afin de faire le traitement des données en php, et de les envoyer dans la base de données grâce au serveur web (j’utilise Lighttpd personnellement)

  • Dalarwin

    Bonjour,
    Tout d’abord merci beaucoup pour tes articles qui m’ont bien aidé.

    Pour la partie récupération et stockage en base des valeurs de température, j’ai utilisé ton script python.
    Par contre je l’ai modifié pour fonctionner avec python3 et j’ai modifié la façon de gérer les dates et heures.

    Dans la console j’utilise localtime() pour afficher l’heure locale et pas UTC
    et dans la base de donnée je stock la valeur renvoyée par time() (nombre de seconde depuis 1970) car je trouve (ce n’est que mon avis) que c’est plus facile à manipuler ensuite.

    Si ça t’intéresse, je peux t’envoyer le code.

    Encore merci

    • Salut,

      Oui je suis preneur. J’ai corrigé ce problème sur l’interface de l’enregistreur mais pas sur la météo. Et effectivement le stockage en timestamp permet plus de manipulations (comme les tris).
      Merci de ton aide

  • Dalarwin

    J’ai mis les fichiers ici:
    https://owncloud.bjbteam.eu/public.php?service=files&t=04235e942e585ec46f8f3d1bf48c275d

    Pour la suite je vais essayer d’afficher tout ça sur un petit écran TFT directement branché sur le Pi.
    Je vous tiendrai au courant quand j’aurai réussi.

  • Paztrick Prud’homme

    Bonjour,
    Je suis peut être un peu en retard sur ce projet …
    Mais enfin j’ai quelques soucis dus surement à mon manque de compétences
    mes sondes fonctionnent bien mais l’affichage me pose problème !
    Quelle est la procédure pour démarrer le site web a partir de l’archive ?

    Merci

    • Bonjour,
      Il faut avoir Nginx installé, décompresser l’archive et mettre son contenu dans le root défini dans votre installation de Nginx. Avec ca il doit déjà y avoir un affichage. Pour alimenter la base SQlite c’est le script en python à la racine qui va récupérer du port série pour envoyer dans la base de données.

  • Paztrick Prud’homme

    nginx est installé et fonctionne, j’ai mis l’archive dans /var/www le script en python fonctionne aussi quoique je l’ai arrété un peu brutalement et je dois peut être le reconstruire.
    J’ai un écran blanc quand j’ouvre une fenêtre sur le raspberry avec quand même un titre du genre meteo raspberry pi .

    • Que donne la log de Nginx dans /var/log/nginx ? Est-ce que le PHP est bien installé avec php5-fpm ?

      • Paztrick Prud’homme

        php est installé mais j’ai un error log :

        2014/12/06 17:56:56 [error] 5494#0: *60 FastCGI sent in stderr: « PHP message: PH
        P Fatal error: Class ‘SQLite3’ not found in /var/www/index.php on line 235 » whi
        le reading response header from upstream, client: 192.168.1.39, server: localhos
        t, request: « GET / HTTP/1.1 », upstream: « fastcgi://unix:/var/run/php5-fpm.sock: »
        , host: « pitemp »
        2014/12/06 17:56:56 [error] 5494#0: *60 FastCGI sent in stderr: « PHP message: PH
        P Fatal error: Class ‘SQLite3’ not found in /var/www/index.php on line 235 » whi
        le reading response header from upstream, client: 192.168.1.39, server: localhos
        t, request: « GET /bootstrap/ico/favicon.png HTTP/1.1 », upstream: « fastcgi://unix
        :/var/run/php5-fpm.sock: », host: « pitemp »

        • Le package sqlite3 n’est pas installé. Regarde dans les instructions d’installation pour les paquets nécessaires

          • Paztrick Prud’homme

            Pourtant j’ai été capable de créé une base de donnée selon tes indications …

          • Pardon, mauvaise réponse : c’est le package php5-sqlite qui ne doit pas être installé.

          • Paztrick Prud’homme

            Merci , cette fois j’ai un écran , je suppose que maintenant il faut attendre que la base de donnée se remplisse pour avoir les températures qui s’affichent !!
            Encore merci pour ce projet intéressant.
            ( je n’ai pas trouvé php5-sqlite dans le tuto par contre )

          • Paztrick Prud’homme

            j’ai essayé de lancer monitor.py manuellement malheureusement !!!
            voila le résultat !
            INSERT INTO Mesures VALUES(‘YY’, 10.66, ‘2014-12-07 12:32:10.000’);
            Traceback (most recent call last):
            File « ./monitor.py », line 48, in
            except lite.Error, e:
            NameError: name ‘lite’ is not defined
            J’ai l’impression que rien n’est terminé !!
            j’ai aussi essayé de remplir la bd avec ce qui est défini dans le tuto !!
            ça ne marche pas non plus !!

          • Je m’en sers à la maison donc c’est bien terminé.
            J’ai mis à jour le script monitor.py. Il faut remplacer lite par sqlite3

  • Paztrick Prud’homme

    C’est moi a nouveau :
    Traceback (most recent call last):
    File « ./ephemeride.py », line 38, in
    sql_command = « INSERT INTO Ephemeride VALUES(‘ »+today+ »‘,' »+Fete+ »‘, ‘ »+SolLever+ »‘, ‘ »+SolCoucher+ »‘, ‘ »+LuneLever+ »‘, ‘ »+LuneCoucher+ »‘); »
    NameError: name ‘Fete’ is not defined
    J’ai essayé beaucoup de chose comme créer dans la base de donnée un record Ephemeride mais la je désespère de pouvoir définir Fete et la suite d’ailleurs ….;

    merci de ton aide éclairée

    • Météo France a (encore) changé le format du fichier d’index. J’ai bien une erreur mais pas sur la fête. Il faut revoir la recherche en Python dans le fichier téléchargé. Les expressions régulières ne trouvent pas de résultat donc les variables sont non définies.
      Pour résoudre les erreurs tu peux ajouter le bloc suivant avant l’ouverture du fichier index.html
      SolLever = ""
      SolCoucher = ""
      LuneLever = ""
      LuneCoucher = ""
      Fete = ""

      Mais pour les valeurs il faudra changer le script

  • Jérôme

    Bonjour
    je cherche un peu à faire la même que vous , à part que j’ai une sonde ds18b20 et une sonde dht. J’ai nginx, php et sqlite insatllés. J’ai une base de données qui récupère les mesures.J’aurai aimé un peu modifié votre index.php pour l’adapter à mes besoins. Mais je ne sais pas trop quoi modifier. Pourriez vous m’aider s’il vous plaît. Dois-je modifier d’autres fichiers. Merci d’avance.

    • Je suis en train de faire un système plus « modulable » avec des sondes sans fil mais ca n’est pas pour tout de suite qu’il va y avoir tous les articles pour le réaliser 😉
      Si vous souhaitez utiliser ce système, regardez dans les sources, il doit y avoir assez de commentaires pour en comprendre les grandes lignes mais attention, je n’ai pas de formation de développeur donc soyez indulgent 😉

  • Jérôme

    Merci pour votre réponse. Voulez-vous parler des sources du fichier index.php ? Merci d’avance
    Jer

    • Oui. Le fichier va lire les entrées dans la base SQLite pour en générer les graphiques. A voir si en ajoutant « simplement » vos mesures dans la table ‘Mesures’ cela suffira au niveau du rendu
      Mais tout se passe dans le fichier d’index.php. Les autres fichiers étant pour le template et quelques scripts (de mémoire)

  • jerome

    bonjour
    j’ai essayé d’utiliser votre code ephemeride en le modifiant un peu : https://drive.google.com/file/d/0B58x2helAgOdbTNpenBxUGFKcUE/view?usp=sharing

    j’obtiens cette erreur:

    File « ephemeride.py », line 32, in
    sql_command = « INSERT INTO Ephemeride VALUES(‘ »+today+ »‘, ‘ »+Fete+ »‘, ‘ »+SolLever+ »‘, ‘ »+SolCoucher+ »‘, ‘ »+LuneLever+ »‘, ‘ »+LuneCoucher+ »‘); »
    NameError: name ‘SolLever’ is not defined

    auriez vous une idée ?

    merci d’avance

    jerome