/StatIC-WeeWX

Script PHP pour générer un fichier texte pour le réseau StatIC de l'association Infoclimat à partir de WeeWX

Primary LanguagePHP

StatIC-WeeWX

Préambule

Description
Ce script permet de produire un fichier texte contenant les dernières données de votre station météo, afin de l'intégrer au réseau StatIC de l'association Infoclimat. Ce script est fait pour les stations fonctionnant sous le logiciel WeeWX, sur une base de données SQLite ou MySQL. Le réseau StatIC d'Infoclimat accepte à ce jour les stations Davis Instruments Vantage Pro 2 et Vantage Vue.

Système d'unités utilisé
Le script est capable de trouver automatiquement le système d'unités utilisé dans la BDD, et convertit les valeurs si nécessaires en système métrique. Il fonctionne avec les deux principaux types de bases de données supportés par WeeWX : SQLite (BDD par défaut) et MySQL.

Envoi FTP vers www.infoclimat.fr
Si le script détecte que le dernier enregistrement disponible en BDD est âgé de plus de 20 minutes, alors le fichier n'est pas envoyé sur le FTP d'Infoclimat. En clair, si WeeWX s'arrête pour une raison quelconque, le script arrête également d'envoyer le fichier à Infoclimat puisqu'il est identique.

Moyenne angulaire pour la direction du vent
La direction moyenne du vent sur 10 minutes nécessite de faire une moyenne angulaire, et non une moyenne "traditionnelle". La fonction utilisée pour la moyenne d'angles est inspirée de : https://gist.github.com/carloscabo/96e70853f1bb6b6a4d33e4c5c90c6cbb

Requis

  • Une station météo fonctionnant déjà avec Weewx
    • Cette installation de WeeWX (sur un Raspberry Pi, ou autre) peut stocker les données dans une base de données SQLite ou MySQL
    • Cette installation de WeeWX peut utiliser n'importe quel système d'unités, le script détectera l'unité et fera les conversions nécessaires
  • Un accès en ligne de commande à votre Raspberry Pi. Si vous avez installé WeeWX ce ne devrait pas être un souci
  • Un accès FTP sur Infoclimat (en faire la demande explicite lors de la demande d'intégration au réseau StatIC - les identifiants vous sont ensuite fournis par l'équipe)

Installation

Installation de git et php

Git est un logiciel permettant de cloner rapidement les deux fichiers nécessaires au fonctionnement de ce script. PHP (php-cli dans notre cas) va permettre d'exécuter le script. Il peut également être nécéssaire d'intaller le paquet php-sqlite3 ou php-mysqlsi vous utilisez une base de données SQLite ou MySQL sur votre instance de WeeWX

sudo apt update && sudo apt install git php-cli

Si utilisation de SQLite, ajouter :

sudo apt install php-sqlite3

Si utilisation de MySQL, ajouter :

sudo apt install php-mysql

Copie des fichiers

Se placer dans un premier temps dans le répertoire ou l'on veut copier le script, puis cloner le répertoire

cd /home/pi/
git clone https://github.com/AssociationInfoclimat/StatIC-WeeWX.git

Configuration

On peut maintenant se placer dans le répertoire du script afin de modifier le fichier de configuration.

cd StatIC-WeeWX
nano config.php

Tous les paramètres sont commentés directement dans le fichier.

❗ Attention ❗ Ne pas modifier le fichier static.php, toute la configuration se trouve dans le script config.php

Type de base de données

Le premier choix à faire est le type de base de données utilisé par votre instance de WeeWX.

Si vous utilisez une base de données SQLite, il faudra renseigner le paramètre de cette manière :

$db_type = "sqlite";

Si vous avez personnalisé votre instance de WeeWX pour pouvoir utiliser une base de données MySQL au lieu de SQLite, il faudra renseigner le paramètre de cette manière :

$db_type = "mysql";

Paramètres de connexion à la base de données

En fonction de votre choix précédent il va falloir renseigner différemment cette partie :

  • Si vous avez une base de données SQLite, il suffit d'indiquer l'emplacement du fichier SQLite, et le nom de la table principal. Pour ce dernier paramètre, il est probable que vous ne l'ayez pas changé et qu'il soit archive :
$db_file = "/var/lib/weewx/weewx.sdb";
$db_table_sqlite = "archive";

L'emplacement de ce fichier peut varier en fonction de votre méthode d'installation de WeeWX. Référer vous à la documentation d'installation de WeeWX.

  • Si vous avez une base de données MySQL, il va falloir renseigner les paramètres de connexion à la base :
$db_host = 'localhost';
$db_user = 'weewx';
$db_pass = 'passe';
$db_name = 'weewx';
$db_table_mysql = 'archive';
  • db_host : qui est l'adresse de l'hôte de la base de données. Probablement localhost si la base de données est hébergée sur votre Raspberry Pi
  • db_user : le nom d'utilisateur qui a accès à la BDD en lecture seule de préférence !
  • db_pass : le mot de passe de cet utilisateur ;
  • db_name : le nom de la base de données. Par défaut WeeWX la nomme weewx ;
  • db_table_mysql : Ici il s'agit du nom de la première table contenant tous les enregistrements. Par défaut WeeWX la nomme archive.

Vous pouvez renseigner les même paramètres de connexion que ceux de votre fichier de configuration de WeeWX, mais ce n'est pas recommandé car l'utilisateur weewx a les droits d'écritures sur la base. L'idéal est plutôt de créer un autre utilisateur avec seulement les droits de lecture sur la base de données (select). Cependant, cela fonctionnera aussi avec l'utilisateur weewx.

Timezone

A venir...

FTP Infoclimat

Cette partie concerne la configuration de la connexion au FTP de l'association Infoclimat. Ces identifiants sont à demander directement à l'équipe lors de la demande d'intégration de votre station.

$ftp_server = "ftp.infoclimat.fr";
$ftp_username = "user";
$ftp_password = "passe";

Informations d'enregistrement du fichier

Cette dernière partie de la configuration concerne le répertoire d'enregistrement du fichier texte dans votre Raspberry Pi. Il faut dans un premier temps donner un "ID" à votre station, qui viendra compléter le nom du fichier.

$id_station = "nice";

Avec l'exemple ci-dessus, le nom du fichier sera : StatIC_nice.

Il faut maintenant renseigner le répertoire d'enregistrement :

$folder = "/var/www/html/IC/";

Vous pouvez ici renseigner n'importe quel répertoire existant sur votre Raspberry Pi.

Test du script

Pour lancer le script en ligne de commande sans le mode debug :

php /home/pi/StatIC-WeeWX/static.php --debug=false

Pour lancer le script en ligne de commande et avec le mode debug (permettant notamment d'élucider certains problèmes liés au paramètre de timezone) :

php /home/pi/StatIC-WeeWX/static.php --debug=true

Automatisation

Pour automatiser le script dans un cron. Edition de la crontab :

crontab -e

Puis ajouter :

*/10 * * * * sleep 45 && php /home/pi/StatIC-WeeWX/static.php --debug=false

sleep 45 permet d'attendre 45 secondes avant de lancer le script, afin de laisser le temps à WeeWX de procéder à l'enregistrement en base de données du dernier relevé.

Mise à jour du script

Ce script peut subir des modifications, visant à apporter des correctifs de bugs, ou des améliorations pour une meilleure intégration de vos données sur le site Infoclimat.

Dans ce cas, si le script est modifié après que vous l'ayez installé, il faudra suivre la procédure ci-après pour profiter des dernières mises à jour. Cette manipulation permet de conserver une copie du fichier de configuration config.php.

Il faudra adapter les commandes suivantes à votre configuration (emplacement du script).

Se déplacer dans le répertoire parent du script :

cd /home/pi/

Puis déplacer l'actuel dossier vers un autre répertoire (dans le but de ne pas perdre le fichier de configuration) :

mv StatIC-WeeWX StatIC-WeeWX.old

Récupération de la nouvelle version du script :

git clone https://github.com/AssociationInfoclimat/StatIC-WeeWX.git

Copie de la sauvegarde du fichier de configuration config.php dans le nouveau répertoire :

cp StatIC-WeeWX.old/config.php StatIC-WeeWX/config.php

C'est tout, le script est de nouveau fonctionnel !

Changelog

  • V2.0 - 2018.11.01

    • Fusion des scripts pour SQLite et MySQL
    • Arrondi des UV et rayonnement solaire
    • Ajout de la fonction de détection auto de l'unité pour la partie MySQL
    • Ajout du cumul horaire pluie_cumul_1h
  • V2.1 - 2019.02.13

    • Correctif pour l'UV qui était trop arrondi
  • V2.2 - 2019.06.09

    • Correctif opérateur de comparaison (remplacement des == par ===)
    • Correctif du problème de vent lorsqu'égal à 0, qui était pris comme NULL au lieu de direction Nord
  • V2.3 - 2019.06.13

    • Correctif sur les requetes SQL pour constituer un tableau associatif plutôt qu'un index numérique (remplacement des $row[1] par $row['nomDeLaColonne']) => plus propre
    • Ajout de la procédure de MAJ dans le README
  • V2.4 - 2019.11.05

    • Correctif sur le tableau associatif pour la version SQLite --> la version 2.3 du script renvoyait systématiquement une erreur en utilisation avec SQLite.
  • V2.5 - 2020-05-09

    • Les calculs sur 10 minutes/1heure, etc. (>= $start AND <= $stop) n'incluent maintenant plus le $stop (strictement inférieur (<) à $stop). Evite la double comptabilisation d'un basculement d'auget intevenu par exemple à xxh00 ou xxh10 etc. (merci @Tempétueux98 et d'autres sur le forum IC pour le signalement)
    • Correctif sur la direction du vent moyen. Ne renvoi maintenant plus de valeur si la vitesse moyenne est égale à 0. (merci @Tempétueux98 sur le forum IC pour le signalement)