Station météorologique avec Pywws sur Raspberry Pi


Niveau:3

Introduction:

Dans cet article, nous allons voir comment mettre votre station météo sur internet. J’ai une station météo compatible 1080 connectée au Raspberry Pi 3 via USB avec le système raspbian stretch lite. Nous utiliserons la version Python 3.5 avec Pywws

Ma station météo:

Ma station est une station WS1080 ou WH1080. Elle est appelée quelques fois « USB Touchscreen Wireless Weather Forecaster »

Spécifications:

Panneau de l’écran tactile
Affichage des températures intérieure et extérieure en °C ou °F
Affichage des taux d’humidité relative intérieur et extérieur
Affichage de la pression atmosphérique en inHg ou hPa (absolue ou relative)
Affichage détaillé de la pluviosité de la dernière heure, des dernières 24 heures, de la dernière semaine, du dernier mois et la totalité à partir de la dernière remise à zéro
Vitesse éolienne en mph, km/h, m/s, nœuds et degrés Beaufort
Affichage de la température apparente et du point de rosée
Prévisions météo à l’aide de symboles (ensoleillé, couvert, pluvieux)
Affichage de la tendance météo à l’aide d’une flèche
Prévision de temps orageux avec alarme
Alarme programmable
Relevé des valeurs minimale et maximale avec heure et date du relevé
Rétro-éclairage à LED lumineuse verte
Heure et date radioguidées à l’aide du signal DCF
Calendrier perpétuel
Fuseau horaire programmable
Passage à l’heure d’été/d’hiver automatique
Montage mural ou pose libre
réception instantanée synchronisée
Port USB pour connexion PC

Unité extérieur:

Portée de transmission: ± 150m (circonstances idéales)
Fréquence: 868MHz
Plage de température: -40°C ~ 65°C
Résolution: 0.1°C
Plage de mesure du taux d’humidité: 10% ~ 99% RH
Plage d’affichage de la pluviosité: 0 ~ 9999mm
Résolution: 0.1mm (volume < 1000mm), 1mm (volume > 1000mm)
Vitesse éolienne: 0 ~ 160km/h
Intervalle de mesure: 48 sec
Indice IP: IPX3
Alimentation: 2 piles 1.5V type R6 (LR6C, non incl.)
Dimensions: Ø 20 x 570mm

Unité d’intérieur:

Intervalle de mesure pression atmosphérique/température: 48s
Plage de température: 0°C ~ 60°C
Résolution: 0.1°C
Plage de mesure du taux d’humidité: 10% ~ 99% RH
Précision taux d’humidité: 1%
Plage de mesure de la pression atmosphérique: 919hPa ~ 1080hPa
Résolution/précision: 0.1hPa/1.5hPa
Durée de l’alarme: 120 sec
Alimentation: 3 piles 1.5V type R6 (LR6C, non incl.)
Dimensions: 233 x 145 x 33 mm

Installation du programme pywws:

Le programme permet de lire les données de la station météo via le port USB, de générer les fichiers de données et de créer des courbes.

Installation des dépendances
Pywws étant écrit en Python, il comporte quelques dépendances qui doivent être installées sur le Raspberry Pi .

Dans un premier temps, nous allons mettre à jour notre système Raspbian:

Si vous êtes en connexion SSH vous pouvez faire un copier puis un coller avec un clique droit de la souris.

Taper les commandes:

sudo apt-get update 
sudo apt-get upgrade

Maintenant, installez les dépendances pour python et gnuplot pour pouvoir dessiner des graphiques avec pywws.

sudo apt-get install python3-pip python3-dev python3-usb gnuplot

Une fois tous les logiciels requis installés, vous pouvez installer pywws.

sudo pip3 install pywws

Une fois l’installation terminée, branchez votre station météo interne sur le Raspberry Pi  via USB. Maintenant, vous pouvez tester pour vous assurer que la station dialogue avec la station météo.

sudo pywws-testweatherstation

Configuration de Pywws:

Configuration du temps de lecture de la station météo:

sudo pywws-setweatherstation -r 5

La valeur 5 correspond à 5 minutes.

Maintenant, configurez où sera enregistrer les données. J’ai choisi /home/pi/station/data/, mais ça pourrait être n’importe où.

mkdir /home/pi/station
mkdir /home/pi/station/data
mkdir /home/pi/station/tmp/

Création du fichier de configuration.

sudo python3 -m pywws.logdata -vvv ~/station/data

Vous pouvez avoir des messages d’erreurs, ce n’est pas grave.

Ensuite aller dans le répertoire /home/station/data et ouvrer le fichier weather.ini pour le configurer. Pour cela, j’utilise WinSCP et notePad++.

Et entrer votre modèle de station météo.

Réitérer la commande.

sudo python3 -m pywws.logdata -vvv ~/station/data

Vous devriez ne plus avoir d’erreur.

Voici les informations de mon fichier weather.ini avec les chemins des templates

[config]
ws type = 1080
usb activity margin = 3.0
pressure offset = 3.2
logdata sync = 1
asynchronous = False
frequent writes = True
template encoding = iso-8859-1
gnuplot version = 4.2
gnuplot encoding = iso_8859_1
day end hour = 0
rain day threshold = 0.2

[paths]
work = /home/pi/station/tmp/
templates = /home/pi/station/templates/
graph_templates = /home/pi/station/graph_templates/
local_files = /home/pi/station/resultats/
datastoretype = filedata
modules = /root/weather/modules/

Mise en place des graphes et templates:

Les exemples sont dans le répertoires : /usr/local/lib/python3.5/dist-packages/pywws/examples

Copier l’ensemble des fichiers dans vos répertoires réceptifs. Ou cela que vous souhaitez utiliser.

Configurer la localisation.

sudo python3 -m pywws.localisation -t fr

Ajouter votre la langue au fichier weather.ini dans le paragraphe [config]

language = fr

Utilisation de pywws:

Si vous changez jours heure de fin de journée (day en hour) dans les paramètres de configuration, vous aurez besoin de retraiter toutes vos données météo. Vous pouvez le faire en exécutant la commande Reprocess.py. Cela peut etre utilise aussi pour la génération des données à partir des fichiers RAW.

sudo python3 -m pywws.reprocess ~/station/data

Lecture des données

sudo pywws-hourly -vvv ~/station/data

Utilisation des Graphiques  et modèles:

Voici mes modèles pour la réalisation des graphiques et de l’affichage des données.

Pour l’affichage des données de la dernière heure: 1hrs_fr.txt

Pour l’affichage des données des 6 derniers heures: 6hrs_fr.txt

Pour l’affichage des données des dernière 24 heures: 24hrs_fr.txt

Pour l’affichage des données de l’ensemble des mois: allmonths_fr.txt

Pour la création du graphique sur 24 heures : 24hrs.png.xml

Vous pouvez vous inspirer de mes modèles pour réaliser les vôtres.

Voici la mise à jour de me mon fichier weather.ini avec l’utilisation des modèles.

[logged]
services = []
text = ['PrevisionWP.txt','6hrs_fr.txt','24hrs_fr.txt','allmonths_fr.txt','1hrs_fr.txt']
plot = ['24hrs.png.xml']

Les fichiers issus des modèles seront dans le répertoire /home/pi/station/tmp/output.

Planification de la génération des fichiers:

J’utilise crontab pour l’exécution du logiciel périodiquement toute les 5 minutes. Taper la commande:

crontab -e

Et configurer comme ci-dessous:

*/5 * * * * sudo pywws-hourly -vvv ~/station/data

Mise en ligne:

Pour mettre en ligne vos données, vous devez faire une lecture des fichiers textes à l’intérieur de vos pages php. Pour cela, ajouter le code suivant:

<?php
require_once('data/6hrs.txt');
?>

Bien sûr, le chemin est différent en fonction de votre configuration.

Prévision du temps pour demain:

Aller sur le site http://weatherbyyou.com/
Télécharger les icônes : pywws_icons_Grzanka.zip. Décompresser l’archive et transférer les images sur votre site dans un répertoire. Exemple: /ws/data/icones.

Créer un modèle comme ci-dessous et le sauvegarder dans vos templates ( Prevision.txt):

#hourly#
#timezone local#
#roundtime True#
#jump -1#
#calc "ZambrettiCode(params, data)" "<p><img src=\"data/icones/%s.png\" title=\"Prevision\" alt=\"pas d image\" /></p>"#
#idx "<span>Calculer le %d/%m/%Y &agrave; %H:%M <small>%Z:</small></span></p>"#

Avec le chemin de vos icones. Et l’ajouter à votre fichier weather.ini pour la génération de la prévision.

Et l’intégrer dans votre page web.

 <?php
require_once('data/Prevision.txt');
?>

Lever et coucher du soleil:

Pour le téléchargement des deux images: 

Voici mon code en PHP:

<?php
$a = date(I);
if ( $a == 1) {
echo '<p class="Wp-Normal-P"><span class="Normal-C"><img src="/images/soleil.png" width="25" height="25"/>Lever du soleil à: ' .date_sunrise(time(), SUNFUNCS_RET_STRING, 48.86, 2.5, 90, 2);
echo '<img src="/images/lune.png" width="25" height="25"/>Coucher du soleil à: ' .date_sunset(time(), SUNFUNCS_RET_STRING, 48.86, 1.5, 90, 2);
}
if ( $a == 0) {
echo '<p class="Wp-Normal-P"><span class="Normal-C"><img src="/images/soleil.png" width="25" height="25"/>Lever du soleil à: ' .date_sunrise(time(), SUNFUNCS_RET_STRING, 48.86, 2.5, 90, 1);
echo '<img src="/images/lune.png" width="25" height="25"/>Coucher du soleil à: ' .date_sunset(time(), SUNFUNCS_RET_STRING, 48.86, 1.5, 90, 1);
}
?>

Vous devez entrer les bons chemins pour les répertoires et votre:

Latitude: 48.86 North
Longitude: 1.5 West
Zenith ~= 90
offset: +1 GMT