Résumé :
Construire une image debian trixie (stable) ou debian forky (testing) standard pour une Raspberry Pi avec un processeur arm64 (Pi 3 4 5). Les images sont construites pour êtres directement utilisables dans un univers scolaire (collège) pour gérer les données météorologiques d'une station de mesure.
Motivations
Le but de cet article est de décrire la procédure technique permettant d'enrichir un système d'exploitation Debian "orthodoxe" (analogue à celui qui est installé sur un ordinateur ordinaire) et qui fonctionne sur une Raspberry Pi ARM-64. La motivation principale est de disposer d'une distribution standard augmentée de tous les logiciels nécessaires pour exploiter une station météorologique du commerce (TFA, Davis,...).
La seconde motivation est de proposer une explication de TOUT ce qui est fait pour enrichir le système à partir de l'image de base en évitant les commandes parfois perçues comme "magiques".
- Remerciements
Éric le Jan et Charles-Henri Eyraud.
- Téléchargement
source debian standard pour raspberryPi ARM64
- 1. Téléchargement de l'image et création de la micro-SD
- 1.1 Utilisation d'une image pré-construite
- 2. Premier démarrage
- 3. Configuration de l'environnement de la RaspberryPi Tremplin Met
- 4. Ajout du logiciel weewx pour l'interface météo
- 5. Ajout des cadrans interactifs
- 6. Installation du daemon systemd et modification de udev/rules.d
- 7. Modifications du fichier de configuration /home/weewx/weewx-data/weewx.conf
- 8. Synchronisation des données avec le serveur Tremplin
- 9. Installation et configuration d'un pare-feu
- 10. Clonage et mise à disposition
Lors du développement du projet "Météo et Climat tremplin pour l'enseignement des sciences et dès que l'utilisation d'objets connectés (RaspberryPi, Odroïd, Intel edison, Intel joule) a été entérinée, des images ont été construites au coup par coup pour soutenir les fonctions attribuées à chacun des objets connectés. Cet article présente l'enrichissement de l'image standard debian pour raspberryPi-3 ARM-64 afin de la rendre aisément opérationnelle avec les stations du dispositif "Tremplin des Sciences".
La procédure décrite ci-dessous a été réalisée à partir d'une machine linux Debian, si on ne dispose pas d'un tel ordinateur il est possible de réaliser ce travail à partir d'une distribution "live" sur une clef USB qui s'installe sur tout ordinateur sans toucher au système d'exploitation et aux données existantes. Pour conserver l'état du système ainsi créé on peut utiliser une distribution "persistante" voir Créer et utiliser une clef USB GNU/linux bootable persistante pour configurer une raspberry Pi.
L'utilisateur privilégié en fin de procédure s'appelle ens-ife dans les fichiers de configuration et on fournit une clef ssh pour éviter l'utilisation de mots de passe (un mot de passe de secours est toutefois prévu dans la configuration). L'utilisateur privilégié ens-ife est réservé aux gestionnaires du dispositif, un autre utilisateur privilégié localadmest créé pour fournir à un tiers responsable local de l'image les droits d'administration.
1. Téléchargement de l'image et création de la micro-SD
1.1 Utilisation d'une image pré-construite
L'équipe cloud.debian.org fournit des images debian pour un grand nombre de plateformes, y compris les raspberriesPi basées sur un processeur ARM-64. Plusieurs versions sont disponibles on choisira ici trixie.
Le téléchargement de l'image du jour : debian-13-generic-arm64-daily-20260318-2420.tar.xz fournit la dernière image créée. L'image est décompressée tar xvfJ debian-13-raspi-arm64-daily.tar.xz et fournit une image brute disk.raw qui peut être directement transférée sur la carte SD. Dans l'exemple ci-dessous la carte SD est sur /dev/sde.
mkdir DebianRaspi
cd DebianRaspi
wget https://cloud.debian.org/images/cloud/trixie/daily/20260318-2420/debian-13-raspi-arm64-daily-20260318-2420.tar.xz
tar xvfJ 20260318-2420/debian-13-raspi-arm64-daily-20260318-2420.tar.xz
sudo dd if=disk.raw of=/dev/sde bs=2K count=597500 status=progress
1.2 Construction de l'image à partir de la procédure sur salsa.debian.org
Nous avons eu des problèmes avec l'image pré-construite pour cloner et distribuer à partir d'elle une image enrichie pour les besoins du projet tremplin. On utilise la procédure du site salsa.debian.org
git clone https://salsa.debian.org/raspi-team/image-specs.git
cd image-specs
Ajouter les dépendances comme indiqué sur le site salsa.debian.org.
le processus se déroule en 3 étapes : * construction du fichier yaml à partir du Makefile * modification du fichier yaml * construction de l'image à partir du fichier yaml
1.2.1 Construction du fichier yaml à partir du Makefile
sudo make raspi_arm64_trixie.yaml
./generate-recipe.py arm64 trixie
ll raspi_arm64_trixie.yaml
-rw-r--r-- 1 root root 6,4K 28 mai 19:56 raspi_arm64_trixie.yaml
1.2.2 Modification du fichier yaml
Les modifications effectuées sont énumérées ci-dessous.
cp raspi_arm64_trixie.yaml rpi3-met-trixie64_26-05-26.yaml
jed rpi3-met-trixie64_26-05-28.yaml
22c22
< end: 100%
---
> end: 15500 MiB end: 50% #end: 100%
49a50
> - contrib
56,57c57,58
< deb http://deb.debian.org/debian trixie-updates main non-free-firmware
< deb http://security.debian.org/debian-security trixie-security main non-free-firmware
---
> deb http://deb.debian.org/debian trixie-updates main contrib non-free-firmware
> deb http://security.debian.org/debian-security trixie-security main contrib non-free-firmware
60c61
< deb http://deb.debian.org/debian trixie-backports main non-free-firmware
---
> deb http://deb.debian.org/debian trixie-backports main contrib non-free-firmware
86a88,90
> - console-data
> - console-setup
> - tzdata
1.2.3 construction de l'image à partir du fichier yaml
sudo vmdb2 --rootfs-tarball=rpi3-met-trixie64_6-05-30.tar.gz --output rpi3-met-trixie64_26-05-30.img rpi3-met-trixie64_26-05-30.yaml --log rpi3-met-trixie64_26-05-30.log
La construction de l'image prend une quinzaine de minutes avec une machine 16 processeurs (Intel(R) Xeon(R) W-2245 CPU @ 3.90GHz). Trois fichiers sont produits :
-rw-r--r-- 1 root root 2,5G 30 mai 11:11 rpi3-met-trixie64_26-05-30.img
-rw-r--r-- 1 root root 241K 30 mai 11:11 rpi3-met-trixie64_26-05-30.log
-rw-r--r-- 1 root root 330M 30 mai 11:11 rpi3-met-trixie64_6-05-30.tar.gz
Préparation des fichiers compressés et bmap pour faciliter la copie.
bmaptool create -o rpi3-met-trixie64_26-05-30.bmap rpi3-met-trixie64_26-05-30.img
7z a -txz rpi3-met-trixie64_26-05-30.img.xz rpi3-met-trixie64_26-05-30.img
1.3 Copie de l'image sur une carte SD
On utilise la commande bmaptool mais le transfert peut être efficacement fair avec la commande de base dd. (Ne pas utiliser cp !)
2. Premier démarrage
Insérer la carte SD dans la RaspberryPi et brancher. La raspi démarre et termine un certain nombre d'opérations de configuration, elle acquiert le réseau filaire (pas le WIFI qui n'est pas configuré). L'image est minimaliste mais totalement opérationnelle, la raspi est visible sur le réseau:
sudo nmap -sPn 192.168.10.0/24
.../...
Nmap scan report for 192.168.10.40
Host is up (0.00062s latency).
MAC Address: ##:##:##:##:##:## (Raspberry Pi Foundation)
.../...
Il est nécessaire de démarrer avec un clavier et un écran, on ne peut pas encore se connecter à distance, le user de base est root sans mot de passe.
2.1 Premières configuration de confort
Par défaut la sarpi est en anglais avec un clavier QWERTY, on effectue les manipulations suivantes :
apt update # si clavier AZERTY qpt updqte
apt upgrade # si clavier AZERTY qpt upgrqde
apt install console-data # si clavier AZERTY qpt instqll console)dqtq
# Clavier français
dpkg-reconfigure console-data # si clavier AZERTY dpkg)reconfigure console)dqtq
# Fuseau horaire Paris
dpkg-reconfigure tzdata
# Ajouter mdp _root_
passwd
# Ajouter compte administrateur
adduser tremplin
adduser tremplin sudo
apt install sudo
# si on veut `jed` plutôt que `nano`
apt install jed
# configurer ssh
nano /etc/ssh/sshd_config
# Modifier le port
systemctl restart ssh
2.1.1 Configuration de l'environnement du user tremplin
Connection depuis une machine de travail et ajout des fichiers de configuration personnels.
ssh tremplin@192.168.10.40 -p#####
mkdir .ssh
cat > .ssh/authorized_keys
# ajouter les clefs publiques
rm .bashrc
cat > .bashrc
# AJouter le .bashrc générique du projet
sudo su root
cd
cat > .bashrc
# AJouter le .bashrc du root du projet
2.1.2 Modification du nom
Nom de la machine :
sudo jed /etc/hostname
# remplacer par rpitremplin
sudo jed /etc/hosts
cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 rpitremplin
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
2.2 Modification des paramètres du système
Nom de l'interface filaire :
Par défaut cette image installe l'ancienne version de nommage des interfaces réseau (eth0 pour le filaire). Pour une modification immédiate il suffit de modifier la ligne de commande du fichier /boot/firmware/cmdline.txt et lui donner la valeur ci-dessous. Toutefois pour que cette valeur n'est pas prise par défaut et il faut refaire la modification après un update-upgrade.
sudo jed /boot/firmware/cmdline.txt
console=tty0 console=ttyS1,115200 root=PARTUUID=c236ba2e-d90d-47bb-ad8a-428f466557c9 rw fsck.repair=yes cma=64M rootwait
L'option net.ifnames=0 a été supprimée.
Choisir le nom de la raspberry, pour le projet ce sera rpitremplin
Nom des dépôts :
sudo jed /etc/apt/sources.list.d/debian.sources
#
Types: deb
URIs: http://debian.proxad.net/debian/
Suites: trixie
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://security.debian.org/debian-security/
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://debian.proxad.net/debian/
Suites: trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Types: deb
URIs: http://debian.proxad.net/debian/
Suites: trixie-proposed-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Second eépôt
sudo jed /etc/apt/sources.list.d/debian-backports.sources
#
Types: deb
URIs: http://debian.proxad.net/debian/
Suites: trixie-backports
Components: main contrib non-free
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
cd /etc/apt/
sudo mv sources.list sources.list.old
sudo apt update
2.3 Modification de la taille de la partition
L'image dispose d'une table de partitions MSDOS on utilise fdisk pour modifier la taille de la partition principale
sudo fdisk /dev/sdb
- taper p
Disque /dev/sde : 29,72 GiB, 31914983424 octets, 62333952 secteurs
Modèle de disque : SD/MMC
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0xa2e87f29
Périphérique Amorçage Début Fin Secteurs Taille Id Type
/dev/sde1 8192 1048575 1040384 508M c W95 FAT32 (LBA)
/dev/sde2 1048576 62333951 61285376 29,2G 83 Linux
- taper e
Commande (m pour l'aide) : e
Numéro de partition (1,2, 2 par défaut) :
Nouvelle <taille>{K,M,G,T,P} en octets ou <taille>S en secteurs (29,2G par défaut): 14,5G
La partition 2 a été redimensionnée.
- taper w
- puis
sudo resize2fs /dev/sde2
sudo resize2fs /dev/sde1
resize2fs 1.47.4 (6-Mar-2025)
Resizing the filesystem on /dev/sde1 to 6291456 (4k) blocks.
The filesystem on /dev/sde1 is now 6291456 (4k) blocks long.
2.4 Mode de classement des images
Le nom des images de raspberries crées pour le projet Tremplin est formé en juxtaposant les éléments suivants séparés par des tirets "-" et un "_" avant la date :
- modèle : rpi3, rpi3P (3 BPlus), rpi4 ou rpi5
- projet de rattachement : "Tremplin"
- fonction :
- dev pour la raspberry orientée codage et développement
- met pour la raspberry orientée pilotage de station météorologique
- distribution de debian utilisée
trixieou trixie64 au 01-01-26 - date : AAAA-MM-JJ
- extension type de fichier : conf img ou bmap
- (éventuellement extension indiquant la compression xz)
Ainsi l'mage du 30 mai 2026 pour une RaspberryPi3 en trixie 64 bits pour la météo a pour nom : rpi3-met-trixie64_26-05-30 avec les extensions bmap, img et conf.
3. Configuration de l'environnement de la RaspberryPi Tremplin Met
3.1 Configuration du réseau (ligne de commande)
Ce chapitre est réalisé en ligne de commande, avant d'activer l'interface graphique, par souci d'efficacité et d'économie de temps (ces manipulations sont aussi possibles ultérieurement depuis l'interface graphique). La configuration du réseau est une chose délicate car il existe beaucoup de solutions différentes dont les éléments constitutifs sont incompatibles si on tente de panacher deux solutions.
Nous avons choisi ici une voie minimaliste qui se configure et fonctionne en ligne de commande. Cela permet d'avoir un démarrage du réseau au boot que la connection soit filaire ou par wifi ; par conséquent il sera possible d'ajouter la RaspberryPi ainsi configurée dans un environnement existant proposant du DHCP sans qu'il soit nécessaire de connecter un clavier, une souris et un écran. On utilise :
* systemd-networkd
* wpa_supplicant
* wpagui (pour l'interface graphique)
La construction de base de l'image proposée ci-dessous utilise des nomss d'interfaces génériques : enx* et wlan0.
3.1.1 Connexion à l'interface filaire par défaut
Au premier démarrage la raspberry prend automatiquement le réseau filaire en utilisant networking. Les informations sont fournies par la commande :
sudo systemctl status networking
● networking.service - Raise network interfaces
Loaded: loaded (/usr/lib/systemd/system/networking.service; enabled; preset: enabled)
Active: active (exited) since Mon 2026-06-01 01:00:41 CEST; 2min 25s ago
Invocation: 7a9627a603d54c25ab159b6301bb1749
Docs: man:interfaces(5)
Process: 583 ExecStart=/usr/sbin/ifup -a --read-environment (code=exited, status=0/SUC>
Process: 695 ExecStart=/bin/sh -c if [ -f /run/network/restart-hotplug ]; then /usr/sb>
3.1.2 Configuration de l'interface filaire via netplan
On souhaite utiliser netplan et systemd-networkd + systemd-resolved configure netplan :
cd /etc/netplan
sudo cp 90-default.yaml 50-enxwired.yaml
sudo mv 90-default.yaml 90-default.stdyaml
sudo jed 50-enxwired.yaml
network:
version: 2
renderer: networkd
ethernets:
all-enx:
match:
name: enx*
dhcp4: true
dhcp4-overrides:
use-domains: true
dhcp6: true
dhcp6-overrides:
use-domains: true
sudo netplan generate
sudo netplan try
sudo netplan apply
#sudo netplan --debug apply
sudo systemctl status systemd-networkd
# On récupère les informations :
# Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled; preset: enabled)
# Configuring with /run/systemd/network/10-netplan-all-enx.network
sudo cat /run/systemd/network/10-netplan-all-enx.network
[Match]
Name=enx*
[Network]
DHCP=yes
LinkLocalAddressing=ipv6
[DHCP]
RouteMetric=100
UseMTU=true
UseDomains=true
3.1.3 Configuration de l'interface WIFI
Attention la RaspberryPi3 ne prend pas le wifi 5 GHz.Ajout des paquets nécessaires et configuration de wpasupplicant
sudo apt install rfkill wpasupplicant
sudo rfkill
ID TYPE DEVICE SOFT HARD
0 bluetooth hci0 unblocked unblocked
1 wlan phy0 unblocked unblocked
sudo su
wpa_passphrase votre-ssid votre-mot-de-passe >> /etc/wpa_supplicant/wpa_supplicant.conf
# enlever le mot de passe en clair du fichier `/etc/wpa_supplicant/wpa_supplicant.conf`
Ajouter un fichier de configuration dans /etc/netplan
cd /etc/netplan
sudo cat 60-wlan0wireless.yaml
network:
version: 2
renderer: networkd
wifis:
wlan0:
accept-ra: true
access-points:
"################":
password: "$$$$$$$$$$$$$$$$$"
dhcp4: true
dhcp6: true
Sudo chmod 600 60-wlan0wireless.yaml
sudo netplan generate
sudo netplan try
sudo netplan apply
#sudo netplan --debug apply
3.1.4 Détection de la RaspberryPi sur le réseau
Pour obtenir l'adresse IP de la raspberry, si le réseau n'est pas trop étendu, on peut utiliser la commande sudo nmap -sP -n ***.****.***.0/** la valeur ***.****.***.0/** représente le réseau sur lequel on se trouve, les valeurs peuvent être obtenues avec la commande ip addr ; si l'on dispose de l'adresse MAC de la Raspberry **:**:**:**:**:** on peut filtrer la commande ci-dessus avec l'adresse recherchée sudo nmap -sP -n ***.****.***.0/** | grep -e **:**:**:**:**:** -B 2
Une fois l'adresse obtenue se connecter via ssh ; ssh tremplin@***.****.***.***.
3.2 Ajout d'utilisateurs et gestion des droits
Lors de la création un seul utilisateur par défaut a été créé tremplin dans les scripts par défaut, dans notre projet cet utilisateur est l'administrateur à distance par les gestionnaires du projet et nous proposons de créer :
- un administrateur principal localadm
- un utilisateur qui gèrera l'accès à la station météo weewx
sudo adduser localadm
sudo adduser weewx
On affecte les groupes des utilisateurs avec les commande standard linux debian.L'utilisateur localadm doit disposer des droits d'administration et par commodité l'administrateur à distance doit accéder aux outilsweewx :
sudo adduser localadm sudo
sudo adduser tremplin weewx
Pour des raisons de sécurité l'utilisation de mots de passe est interdite et on impose l'utilisation de clefs ssh. Avant d'effectuer les opérations suivantes il est nécessaire d'ajouter les clefs de publiques de l'utilisateur.
mkdir .ssh
cat > .ssh/authorized_keys
# jouter les clés publiques
# sortir avec `Ctrl-D`
ensuite
sudo jed /etc/ssh/sshd_config
# dans le fichier de config.
PasswordAuthentication no
4. Ajout du logiciel weewx pour l'interface météo
Le logiciel weewx récupère les données de la station météorologique qui lui est connectée et fournit des pages web affichant les mesures réalisées.Une version à jour à la date de création de l'image est installée par défaut ou téléchargé depuis le site d'origine. télécharger les mises à jour et les installer au besoin. Après avoir créé le répertoire Logiciels s'il n'existe pas encore, on récupère ici à titre conservatoire une copie du paquet weewx.
Attention ! le logiciel weewx ne figure pas dans les dépôts debian par défaut, Il est nécessaire de rajouter un fichier de configuration /etc/apt/sources.list.d/weewx.sources (cf. plus loin)
Situation au 01-06-2026 :
Le paquet debian existe seulement en buster, il n'existe pas de version plus récente. On a donc deux alternatives soit installer le paquet dans une version obsolète, soit installer weewx à partir de git.
4.1 Installation du paquet debian (buster)
Il faut ajouter le serveur de paquets de weewx et ensuite installer le aquet weewx comme tout autre paquet.
wget -qO - https://weewx.com/keys.html | \ sudo gpg --dearmor --output /etc/apt/trusted.gpg.d/weewx.gpg echo "deb [arch=all] https://weewx.com/apt/python3 buster main" | \ sudo tee /etc/apt/sources.list.d/weewx.list sudo apt update sudo apt install weewx
Une autre possibiliyé si la précédente ne fonctionne pas est de télécharger directele paquet debian et de l'installer à la main.
wget https://weewx.com/downloads/released_versions/python3-weewx_5.2.0-1_all.deb sudo dpkg -i python3-weewx_5.2.0-1_all.deb sudo apt install python3-configobj python3-cheetah python3-pil python3-serial python3-usb python3-ephem sudo apt --fix-broken install
Même si l'installation se passe bien rien ne garantit un fonctionnement correct du fait de la différence de version. L'installation ne se fait pas dans un environnement virtuel ce qui simplifie beaucoup les choses mais oblige une gestion standard debian comme si le paquet était "original". Pour installer les extensions, voir ci-dessous comment les récupérer et ensuite :
sudo weectl extension install hfw-0.3.2.tar.gz sudo weectl extension install steelseries-2.7.6.tar.gz
Ces installations peuvent imposer l'installation de nombreuses dépendances.
4.2 Installation à partir de la version source sur git
le tutoriel se trouve ici.https://weewx.com/docs/5.2/quickstarts/git/
Avant d'installer weewx, l'administrateur doit installer quelques paquets debian.
4.2.1 Installation des paquets supplémentaires
sudo dpkg -l libfreetype6 wget gpg gcc libjpeg-tools libfreetype-dev libjpeg-dev
sudo apt install libfreetype6 wget gpg gcc libjpeg-tools libfreetype-dev libjpeg-dev
# En cas de problème de dépendances on peut utiliser aptitude pour avoir une aide à la résolution
weewx est écrit en python et il est aussi nécessaire d'installer un gestionnaire d'environnement virtuel python, poetry a été choisi. Vérifier la présence des paquets debian nécessaires et compléter les manquants :
# libfreetype-dev doit être installé et configuré avant l'installation de python3-pil
sudo dpkg -l python3-poetry python3-pil git libc6-dev zlib1g-dev libpython3-dev libffi-dev systemd-userdbd
sudo apt install python3-poetry python3-pil git libc6-dev zlib1g-dev libpython3-dev libffi-dev systemd-userdbd
# En cas de problème de dépendances on peut utiliser aptitude pour avoir une aide à la résolution
sudo aptitude install git libc6-dev zlib1g-dev libpython3-dev libffi-dev
Seulement si la situation se présente Du fait de l'évolution permanente du système, la situation peut être compliquée vis à vis des dépendances, en particulier si les packages-dev sont restés en version testing et non rajoutés dans la version stable qui est utilisée ici. Dans ce cas aptitude ne fournit pas de solution facile voir viable. Il faut alors fournir la possibilité d'installer des paquets de la version testing qui est en ce moment forky. Pour cela : * recopier /etc/apt/sources.list.d/debian.sources dans /etc/apt/sources.list.d/debian-forky.sources * remplacer trixie par forky dans ce fichier * rajouter dans le dossier /etc/apt/preferences.d un fichier distribOrder contenant les données suivantes :
Package: *
Pin: release n=trixie
Pin-Priority: 900
Package: *
Pin: release n=forky
Pin-Priority: 600
Package: *
Pin: release n=sid
Pin-Priority: 500
Refaire un update/ et reprendre l'installation.
4.2.2 Modification de la configuration
La gestion de la fonction udev a changé il est nécessaire que le groupe qui contrôle l'accès à la console via le bus USB soit un groupe système; d'où les modifications suivantes :
sudo apt install systemd-userdbd
sudo groupadd --system metstation
sudo adduser weewx metstation
sudo udevadm test /dev/bus/usb/001/004 | grep GROUP
4.2.3 Créer un environnement virtuel poetry puis installer les modules requis
Se connecter en tant que weewx et se placer dans le /home.
mkdir Station
cd Station
poetry init
This command will guide you through creating your pyproject.toml config.
Package name [weewx]:
Version [0.1.0]: 5.2
Description []:
Author [None, n to skip]: n
License []:
Compatible Python versions [>=3.13]:
Would you like to define your main dependencies interactively? (yes/no) [yes] no
Would you like to define your development dependencies interactively? (yes/no) [yes] no
Generated file
[project]
name = "weewx"
version = "5.2"
description = ""
authors = [
{name = "Your Name",email = "you@example.com"}
]
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
]
[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
Do you confirm generation? (yes/no) [yes]
Add necessary dependencies
```shell
poetry add setuptools pillow ct3 configobj pyserial pyusb ephem pymysql
Creating virtualenv weewx-########-py3.13 in /home/weewx/.cache/pypoetry/virtualenvs
Using version ^82.0.1 for setuptools
Using version ^12.2.0 for pillow
Using version ^3.4.0.post5 for ct3
Using version ^5.0.9 for configobj
Using version ^3.5 for pyserial
Using version ^1.3.1 for pyusb
Using version ^4.2.1 for ephem
Using version ^1.2.0 for pymysql
Updating dependencies
Resolving dependencies... (1.1s)
Package operations: 8 installs, 0 updates, 0 removals
- Installing configobj (5.0.9)
- Installing ct3 (3.4.0.post5)
- Installing ephem (4.2.1)
- Installing pillow (12.2.0)
- Installing pymysql (1.2.0)
- Installing pyserial (3.5)
- Installing pyusb (1.3.1)
- Installing setuptools (82.0.1)
Writing lock file
Télécharger le code depuis git. git clone https://github.com/weewx/weewx,
Création de la configuration pour la station
La commande à utiliser pour créer l'environnement de la station dispose de nombreuses options qui permettent de configurer finement la configuration de la station sans éditer le fichier de configuration /home/weewx/weewx-data/weewx.conf. La liste des options de la commande est fournie ci-dessous mais nous utiliserons la valeur par défaut pour configurer ensuite le fichier weewx-data/weewx.conf :
`poetry env activate`
python3 weewx/src/weectl.py station --help
usage: weectl station create [WEEWX-ROOT]
[--driver=DRIVER]
[--location=LOCATION]
[--altitude=ALTITUDE,(foot|meter)]
[--latitude=LATITUDE] [--longitude=LONGITUDE]
[--register=(y,n) [--station-url=URL]]
[--units=(us|metricwx|metric)]
[--skin-root=DIRECTORY]
[--sqlite-root=DIRECTORY]
[--html-root=DIRECTORY]
[--user-root=DIRECTORY]
[--examples-root=DIRECTORY]
[--no-prompt]
[--config=FILENAME]
[--dist-config=FILENAME]
[--dry-run]
weectl station reconfigure
[--driver=DRIVER]
[--location=LOCATION]
[--altitude=ALTITUDE,(foot|meter)]
[--latitude=LATITUDE] [--longitude=LONGITUDE]
[--register=(y,n) [--station-url=URL]]
[--units=(us|metricwx|metric)]
[--skin-root=DIRECTORY]
[--sqlite-root=DIRECTORY]
[--html-root=DIRECTORY]
[--user-root=DIRECTORY]
[--weewx-root=DIRECTORY]
[--no-backup]
[--no-prompt]
[--config=FILENAME]
[--dry-run]
weectl station upgrade
[--examples-root=DIRECTORY]
[--skin-root=DIRECTORY]
[--what ITEM [ITEM ...]
[--no-backup]
[--yes]
[--config=FILENAME]
[--dist-config=FILENAME]]
[--dry-run]
Manages the station data area, including the configuration file and skins.
options:
-h, --help show this help message and exit
Which action to take:
{create,reconfigure,upgrade}
create Create a new station data area, including a configuration file.
reconfigure Reconfigure an existing station configuration file.
upgrade Upgrade any combination of the examples, utility files,
configuration file, and skins.
```shell
python3 weewx/src/weectl.py station create
Creating configuration file /home/weewx/weewx-data/weewx.conf
Processing configuration file /home/weewx/weewx-data/weewx.conf
Give a description of the station. This will be used for the title of reports.
description [WeeWX station]: ENS de Lyon
Specify altitude, with units 'foot' or 'meter'. For example:
35, foot
12, meter
altitude [0, foot]: 165, meter
Specify latitude in decimal degrees, negative for south.
latitude [0.0]: 45.733088
Specify longitude in decimal degrees, negative for west.
longitude [0.0]: 4.832920
Choose a unit system for the reports. Later, you can modify
your choice, or choose a combination of units. Unit systems
include:
us (ºF, inHg, in, mph)
metricwx (ºC, mbar, mm, m/s)
metric (ºC, mbar, cm, km/h)
unit system [us]: metricwx
Choose a driver. Installed drivers include:
0) AcuRite (weewx.drivers.acurite)
1) CC3000 (weewx.drivers.cc3000)
2) FineOffsetUSB (weewx.drivers.fousb)
3) Simulator (weewx.drivers.simulator)
4) TE923 (weewx.drivers.te923)
5) Ultimeter (weewx.drivers.ultimeter)
6) Vantage (weewx.drivers.vantage)
7) WMR100 (weewx.drivers.wmr100)
8) WMR300 (weewx.drivers.wmr300)
9) WMR9x8 (weewx.drivers.wmr9x8)
10) WS1 (weewx.drivers.ws1)
11) WS23xx (weewx.drivers.ws23xx)
12) WS28xx (weewx.drivers.ws28xx)
driver [3]: 6
Specify the hardware interface, either 'serial' or 'ethernet'.
If the station is connected by serial, USB, or serial-to-USB
adapter, specify serial. Specify ethernet for stations with
WeatherLinkIP interface.
type [serial]:
Specify a port for stations with a serial interface, for
example /dev/ttyUSB0 or /dev/ttyS0.
port [/dev/ttyUSB0]:
You can register the station on weewx.com, where it will be included in a
map. If you choose to register, you will also need a unique URL to identify
the station (such as a website, or a WeatherUnderground link).
register this station (y/n)? [n]
Creating directory /home/weewx/weewx-data/skins
Copying new skin Rsync into /home/weewx/weewx-data/skins/Rsync
Copying new skin Standard into /home/weewx/weewx-data/skins/Standard
Copying new skin Ftp into /home/weewx/weewx-data/skins/Ftp
Copying new skin Seasons into /home/weewx/weewx-data/skins/Seasons
Copying new skin Smartphone into /home/weewx/weewx-data/skins/Smartphone
Copying new skin Mobile into /home/weewx/weewx-data/skins/Mobile
Copying examples into /home/weewx/weewx-data/examples
Creating a new 'user' directory at /home/weewx/weewx-data/bin/user
Copying utility files into /home/weewx/weewx-data/util
Copying script files into /home/weewx/weewx-data/scripts
Saving configuration file /home/weewx/weewx-data/weewx.conf
Sur le \home du user weewx il existe maintenant un dossier weewx-data qui contient la configuration du logiciel weewx pour notre station :
../weewx-data/
├── bin
│ └── user
│ ├── extensions.py
│ └── __init__.py
├── examples
│ ├── alarm.py
│ ├── basic
│ │ ├── changelog
│ │ ├── install.py
│ │ ├── readme.md
│ │ └── skins
│ │ └── Basic
│ │ ├── basic.css
│ │ ├── current.inc
│ │ ├── favicon.ico
│ │ ├── hilo.inc
│ │ ├── index.html.tmpl
│ │ ├── lang
│ │ │ ├── en.conf
│ │ │ └── fr.conf
│ │ └── skin.conf
│ ├── colorize
│ │ ├── colorize_1.py
│ │ ├── colorize_2.py
│ │ └── colorize_3.py
│ ├── fileparse
│ │ ├── bin
│ │ │ └── user
│ │ │ └── fileparse.py
│ │ ├── changelog
│ │ ├── install.py
│ │ └── readme.md
│ ├── lowBattery.py
│ ├── mem.py
│ ├── pmon
│ │ ├── bin
│ │ │ └── user
│ │ │ └── pmon.py
│ │ ├── changelog
│ │ ├── install.py
│ │ ├── readme.md
│ │ └── skins
│ │ └── pmon
│ │ ├── index.html.tmpl
│ │ └── skin.conf
│ ├── vaporpressure.py
│ └── xstats
│ ├── bin
│ │ └── user
│ │ └── xstats.py
│ ├── changelog
│ ├── install.py
│ ├── readme.txt
│ └── skins
│ └── xstats
│ ├── index.html.tmpl
│ └── skin.conf
├── scripts
│ └── setup-daemon.sh
├── skins
│ ├── Ftp
│ │ └── skin.conf
│ ├── Mobile
│ │ ├── favicon.ico
│ │ ├── index.html.tmpl
│ │ ├── lang
│ │ │ ├── de.conf
│ │ │ ├── en.conf
│ │ │ ├── nl.conf
│ │ │ └── no.conf
│ │ ├── mobile.css
│ │ └── skin.conf
│ ├── Rsync
│ │ └── skin.conf
│ ├── Seasons
│ │ ├── about.inc
│ │ ├── analytics.inc
│ │ ├── celestial.html.tmpl
│ │ ├── celestial.inc
│ │ ├── current.inc
│ │ ├── favicon.ico
│ │ ├── font
│ │ │ ├── Kanit-Bold.ttf
│ │ │ ├── Kanit-Regular.ttf
│ │ │ ├── license.txt
│ │ │ ├── OFL.txt
│ │ │ ├── OpenSans-Bold.ttf
│ │ │ ├── OpenSans-Regular.ttf
│ │ │ ├── OpenSans.woff
│ │ │ └── OpenSans.woff2
│ │ ├── hilo.inc
│ │ ├── identifier.inc
│ │ ├── index.html.tmpl
│ │ ├── lang
│ │ │ ├── ca.conf
│ │ │ ├── cz.conf
│ │ │ ├── de.conf
│ │ │ ├── en_AU.conf
│ │ │ ├── en_CA.conf
│ │ │ ├── en.conf
│ │ │ ├── en_GB.conf
│ │ │ ├── en_NZ.conf
│ │ │ ├── es.conf
│ │ │ ├── fi.conf
│ │ │ ├── fr.conf
│ │ │ ├── gr.conf
│ │ │ ├── it.conf
│ │ │ ├── nl.conf
│ │ │ ├── no.conf
│ │ │ ├── th.conf
│ │ │ ├── zh_CN.conf
│ │ │ └── zh.conf
│ │ ├── map.inc
│ │ ├── NOAA
│ │ │ ├── NOAA-%Y-%m.txt.tmpl
│ │ │ └── NOAA-%Y.txt.tmpl
│ │ ├── radar.inc
│ │ ├── rss.xml.tmpl
│ │ ├── satellite.inc
│ │ ├── seasons.css
│ │ ├── seasons.js
│ │ ├── sensors.inc
│ │ ├── skin.conf
│ │ ├── statistics.html.tmpl
│ │ ├── statistics.inc
│ │ ├── sunmoon.inc
│ │ ├── tabular.html.tmpl
│ │ ├── telemetry.html.tmpl
│ │ └── titlebar.inc
│ ├── Smartphone
│ │ ├── barometer.html.tmpl
│ │ ├── custom.js
│ │ ├── favicon.ico
│ │ ├── humidity.html.tmpl
│ │ ├── icons
│ │ │ ├── icon_ipad_x1.png
│ │ │ ├── icon_ipad_x2.png
│ │ │ ├── icon_iphone_x1.png
│ │ │ └── icon_iphone_x2.png
│ │ ├── index.html.tmpl
│ │ ├── lang
│ │ │ ├── de.conf
│ │ │ ├── en.conf
│ │ │ ├── nl.conf
│ │ │ └── no.conf
│ │ ├── rain.html.tmpl
│ │ ├── skin.conf
│ │ ├── temp.html.tmpl
│ │ └── wind.html.tmpl
│ └── Standard
│ ├── backgrounds
│ │ ├── band.gif
│ │ ├── butterfly.jpg
│ │ ├── drops.gif
│ │ ├── flower.jpg
│ │ ├── leaf.jpg
│ │ └── night.gif
│ ├── favicon.ico
│ ├── font
│ │ └── DejaVuSansMono-Bold.ttf
│ ├── index.html.tmpl
│ ├── lang
│ │ ├── de.conf
│ │ ├── en.conf
│ │ ├── fr.conf
│ │ ├── nl.conf
│ │ └── no.conf
│ ├── month.html.tmpl
│ ├── NOAA
│ │ ├── NOAA-%Y-%m.txt.tmpl
│ │ └── NOAA-%Y.txt.tmpl
│ ├── RSS
│ │ └── weewx_rss.xml.tmpl
│ ├── skin.conf
│ ├── smartphone
│ │ ├── barometer.html.tmpl
│ │ ├── custom.js
│ │ ├── humidity.html.tmpl
│ │ ├── icons
│ │ │ ├── icon_ipad_x1.png
│ │ │ ├── icon_ipad_x2.png
│ │ │ ├── icon_iphone_x1.png
│ │ │ └── icon_iphone_x2.png
│ │ ├── index.html.tmpl
│ │ ├── radar.html.tmpl
│ │ ├── rain.html.tmpl
│ │ ├── temp_outside.html.tmpl
│ │ └── wind.html.tmpl
│ ├── week.html.tmpl
│ ├── weewx.css
│ └── year.html.tmpl
├── util
│ ├── apache
│ │ └── weewx.conf
│ ├── default
│ │ └── weewx
│ ├── i18n
│ │ └── i18n-report
│ ├── import
│ │ ├── csv-example.conf
│ │ ├── cumulus-example.conf
│ │ ├── wd-example.conf
│ │ ├── weathercat-example.conf
│ │ └── wu-example.conf
│ ├── init.d
│ │ ├── weewx
│ │ ├── weewx.bsd
│ │ └── weewx-multi
│ ├── launchd
│ │ └── com.weewx.weewxd.plist
│ ├── logrotate.d
│ │ └── weewx
│ ├── logwatch
│ │ ├── conf
│ │ │ ├── logfiles
│ │ │ │ └── weewx.conf
│ │ │ └── services
│ │ │ └── weewx.conf
│ │ └── scripts
│ │ └── services
│ │ └── weewx
│ ├── newsyslog.d
│ │ └── weewx.conf
│ ├── nginx
│ │ └── weewx.conf
│ ├── rsyslog.d
│ │ └── weewx.conf
│ ├── solaris
│ │ └── weewx-smf.xml
│ ├── syslog.d
│ │ └── weewx.conf
│ ├── systemd
│ │ ├── weewx.service
│ │ └── weewx@.service
│ ├── tmpfiles.d
│ │ └── weewx.conf
│ └── udev
│ └── rules.d
│ └── weewx.rules
└── weewx.conf
66 directories, 175 files
On ajoute une base de données sqlite par defaut elle estinstallée dans /home/weewx/weewx-data/archive/ -> weewx.sdb
python3 weewx/src/weectl.py database create
5. Ajout des cadrans interactifs
Il est possible de proposer plusieurs modes d'affichage. Nous avons choisi d'ajouter ici un affichage par cadrans et un affichage par semaine ou mois téléchargeables depuis la forge github. Les deux ambiances graphiques (skins) qui sont utilisées ici pour afficher les données sont highcharts et Steel-Series. Elles sont intégrées sous la forme d'extensions du logiciel weewx en utilisant la procédure weectl.py extension.
Depuis le 01-06-2025 le dépôt de gjr80 a disparu les ressources ne sont plus accessibles, la procedure obsolète ci-dessous est conservée au cas où les dépôts seraient repris.
sudo su weewx
cd
mkdir -p Logiciels/Weewx/Skins
cd Logiciels/Weewx/Skins
wget -P . https://github.com/gjr80/weewx-highcharts/releases/download/v0.3.2/hfw-0.3.2.tar.gz
wget -P . https://github.com/gjr80/weewx-steelseries/releases/download/v2.7.6/steelseries-2.7.6.tar.gz
wget -P . https://github.com/gjr80/weewx-realtime_gauge-data/releases/download/v0.4.2/rtgd-0.4.2.tar.gz
sudo systemctl stop weewx
sudo weectl extension --install=hfw-0.3.2.tar.gz
sudo weectl extension --install=steelseries-2.7.6.tar.gz
sudo weectl extension --install=rtgd-0.4.2.tar.gz
cd /var/www/html/
sudo chown -R weewx.weewx weewx
cd weewx
sudo mkdir ss
sudo chown -R weewx.weewx ss
sudo mkdir seasons
sudo chown -R weewx.weewx seasons
Contournement : On utilise les dernières versions mises en ligne par gjr80 et recopiées depuis une station opérationnelle.
scp hfw-0.3.2.tar.gz steelseries-2.7.6.tar.gz weewx@192.168.###.###:/home/weewx/Logiciels/Weewx/Skins
python3 weewx/src/weectl.py extension --help usage: weectl extension list [--config=FILENAME]
weectl extension install (FILE|DIR|URL)
[--config=FILENAME]
[--dry-run] [--yes] [--verbosity=N]
weectl extension uninstall NAME
[--config=FILENAME]
[--dry-run] [--yes] [--verbosity=N]
Manages WeeWX extensions
options: -h, --help show this help message and exit
Which action to take: {list,install,uninstall} list List all installed extensions install Install an extension contained in FILE (such as pmon.tar.gz), directory (DIR), or from an URL. uninstall Uninstall an extension
Il est nécessaire de faire les installations en tant que weewx dans l'environnement virtuel
sudo su weewx
poetry env activate
python3 weewx/src/weectl.py extension install ../Logiciels/Weewx/Skins/hfw-0.3.2.tar.gz
python3 weewx/src/weectl.py extension install ../Logiciels/Weewx/Skins/steelseries-2.7.6.tar.gz
deactivate
exit
6. Installation du daemon systemd et modification de udev/rules.d
Les modifications sont à réaliser par un administrateur de la machine.
sudo cp /home/weewx/weewx-data/util/systemd/weewx.service /etc/systemd/system
Ajouter dans /etc/udev/rules.d un fichier de configuration permettant aux utilisateurs du groupe weewx d'acceder au port USB relié à la console de la station météo.
cat > /etc/udev/rules.d/40-usbweewx.rules
# make any te923 station connected via usb accessible to non-root
SUBSYSTEM=="usb", ATTRS{idVendor}=="1130", ATTRS{idProduct}=="6801", ACTION=="add", GROUP="weewx", MODE="0664"
# make any Vantage Pro2 station connected via usb accessible to non-root
#SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ACTION=="add", GROUP="weewx", MODE="0664"
7. Modifications du fichier de configuration /home/weewx/weewx-data/weewx.conf
Les éléments de configuration sont intégrés au fichier /home/weewx/weewx-data/weewx.conf parmi les modifications de configuration déjà effectuées. Il est nécessaire de modifier les paramètres intégrés automatiquement en fonctions des choix d'affichage personnalisés de chacun (notamment les unités). Les sections nouvellement installées à modifier sont les suivantes :
[StdReport]
[[SeasonsReport]]
[[SmartphoneReport]]
[[MobileReport]]
[[StandardReport]]
[[Highcharts]]
[[SteelSeries]]
[[RSYNC]]
[[RSYNC2]]
Voici la configuration opérationnelle :
debug = 0
log_success = True
log_failure = True
version = 5.3.1
[Station]
location = ENS de Lyon
latitude = 45.733088
longitude = 4.83292
altitude = 165, meter
station_type = Vantage
rain_year_start = 1
week_start = 6
[Vantage]
type = serial
port = /dev/ttyUSB0
host = 1.2.3.4
baudrate = 19200
tcp_port = 22222
tcp_send_delay = 0.5
loop_request = 1
iss_id = 1
timeout = 4
wait_before_retry = 1.2
max_tries = 4
model_type = 2
driver = weewx.drivers.vantage
[Simulator]
loop_interval = 2.5
mode = simulator
driver = weewx.drivers.simulator
[StdRESTful]
[[StationRegistry]]
register_this_station = False
[[AWEKAS]]
enable = false
username = replace_me
password = replace_me
[[CWOP]]
enable = false
station = replace_me
passcode = replace_me
[[PWSweather]]
enable = false
station = replace_me
password = replace_me
[[WOW]]
enable = false
station = replace_me
password = replace_me
[[WOW-BE]]
enable = false
station = replace_me
password = replace_me
[[Wunderground]]
enable = false
station = replace_me
password = replace_me
rapidfire = False
[StdReport]
SKIN_ROOT = skins
HTML_ROOT = /var/www/weewx/std
data_binding = wx_mariadb_extern_binding
[[SeasonsReport]]
skin = Seasons
enable = true
HTML_ROOT = /var/www/weewx/seasons
[[SmartphoneReport]]
skin = Smartphone
enable = false
HTML_ROOT = /var/www/weewx/smartphone
[[MobileReport]]
skin = Mobile
enable = false
HTML_ROOT = /var/www/weewx/mobile
[[StandardReport]]
skin = Standard
enable = true
HTML_ROOT = /var/www/weewx/standard
[[Highcharts]]
skin = Highcharts
[[[CheetahGenerator]]]
[[[[ToDate]]]]
[[[[[YearJSON]]]]]
stale_age = 3600
[[[Units]]]
[[[[Groups]]]]
group_altitude = meter
group_degree_day = degree_C_day
group_pressure = hPa
group_rain = mm
group_rainrate = mm_per_hour
group_speed = km_per_hour
group_speed2 = km_per_hour2
group_temperature = degree_C
[[[[StringFormats]]]]
centibar = %.0f
cm = %.2f
cm_per_hour = %.2f
degree_C = %.1f
degree_F = %.1f
degree_compass = %.0f
foot = %.0f
hPa = %.1f
inHg = %.3f
inch = %.2f
inch_per_hour = %.2f
km_per_hour = %.0f
km_per_hour2 = %.1f
knot = %.0f
knot2 = %.1f
mbar = %.1f
meter = %.0f
meter_per_second = %.1f
meter_per_second2 = %.1f
mile_per_hour = %.0f
mile_per_hour2 = %.1f
mm = %.1f
mmHg = %.1f
mm_per_hour = %.1f
percent = %.0f
uv_index = %.1f
volt = %.1f
watt_per_meter_squared = %.0f
NONE = N/A
[[[[Labels]]]]
centibar = cb
cm = cm
cm_per_hour = cm/hr
degree_C = ° C
degree_F = ° F
degree_compass = °
foot = feet
hPa = hPa
inHg = inHg
inch = in
inch_per_hour = in/hr
km_per_hour = km/hr
km_per_hour2 = km/hr
knot = knots
knot2 = knots
mbar = mbar
meter = meters
meter_per_second = m/s
meter_per_second2 = m/s
mile_per_hour = mph
mile_per_hour2 = mph
mm = mm
mmHg = mmHg
mm_per_hour = mm/hr
percent = %
uv_index = Index
volt = V
watt_per_meter_squared = W/m²
NONE = ""
[[[Extras]]]
[[[[MinRange]]]]
outTemp = 10, degree_C
windchill = 10, degree_C
barometer = 20, hPa
windSpeed = 10
rain = 5, mm
radiation = 500
UV = 16
[[[[WindRose]]]]
title = Wind Rose
source = windSpeed
period = 86400, 604800, month, year
aggregate_type = ""
aggregate_interval = ""
petals = 16
petal_colors = aqua, 0x0099FF, 0x0033FF, 0x009900, 0x00CC00, 0x33FF33, 0xCCFF00
speedfactor = 0.0, 0.1, 0.2, 0.3, 0.5, 0.7, 1.0
show_legend_title = True
show_band_percent = True
bullseye_percent = True
precision = 1
bullseye_size = 20
bullseye_color = 0xFFFACD
calm_limit = 0.5
[[SteelSeries]]
skin = ss
HTML_ROOT = /var/www/weewx/ss
[[[Units]]]
[[[[Groups]]]]
group_altitude = meter
group_pressure = hPa
group_rain = mm
group_rainRate = mm_per_hour
group_speed = km_per_hour
group_temperature = degree_C
[[[[StringFormats]]]]
degree_C = %.1f
degree_F = %.1f
degree_compass = %.0f
foot = %.0f
hPa = %.1f
inHg = %.3f
inch = %.2f
inch_per_hour = %.2f
km = %.1f
km_per_hour = %.0f
knot = %.0f
mbar = %.1f
meter = %.0f
meter_per_second = %.1f
mile = %.1f
mile_per_hour = %.0f
mm = %.1f
mmHg = %.1f
mm_per_hour = %.1f
percent = %.0f
uv_index = %.1f
watt_per_meter_squared = %.0f
[[FTP]]
skin = Ftp
enable = false
user = replace_me
password = replace_me
server = replace_me
path = replace_me
secure_ftp = False
port = 21
passive = 1
[[RSYNC]]
skin = Rsync
enable = true
HTML_ROOT = /var/www/weewx/ss
server = meteostations-tremplin.ens-lyon.fr
user = opendata
path = /opt/MeteoData/opendata/open-69colette
port = 25122
delete = 0
[[RSYNC2]]
skin = Rsync
enable = true
HTML_ROOT = /var/www/weewx/standard
server = meteostations-tremplin.ens-lyon.fr
user = opendata
path = /opt/MeteoData/opendata/open-69colettew
port = 25122
delete = 1
[[Defaults]]
lang = fr
unit_system = metricwx
[[[Units]]]
[[[[Groups]]]]
group_pressure = hPa
unused = unused
[[[[TimeFormats]]]]
unused = unused
[[[Labels]]]
[[[[Generic]]]]
unused = unused
[StdConvert]
target_unit = METRICWX
[StdCalibrate]
[[Corrections]]
foo = foo + 0.2
[StdQC]
[[MinMax]]
barometer = 880, 1100, hPa
pressure = 812, 1170, hPa
outTemp = -20, 50, degree_C
inTemp = 0, 50, degree_C
outHumidity = 0, 100
inHumidity = 0, 100
windSpeed = 0, 120, km_per_hour
rain = 0, 300, mm
[StdWXCalculate]
data_binding = wx_mariadb_extern_binding
[[Calculations]]
pressure = prefer_hardware
altimeter = prefer_hardware
appTemp = prefer_hardware
barometer = prefer_hardware
cloudbase = prefer_hardware
dewpoint = prefer_hardware
ET = prefer_hardware
heatindex = prefer_hardware
humidex = prefer_hardware
inDewpoint = prefer_hardware
maxSolarRad = prefer_hardware
rainRate = prefer_hardware
windchill = prefer_hardware
windrun = prefer_hardware
[StdTimeSynch]
clock_check = 14400
max_drift = 5
[StdArchive]
archive_interval = 600
record_generation = hardware
loop_hilo = True
data_binding = wx_mariadb_extern_binding
[DataBindings]
[[wx_binding]]
database = archive_sqlite
table_name = archive
manager = weewx.manager.DaySummaryManager
schema = weewx.schemas.wview_extended.schema
[[wx_mariadb_extern_binding]]
database = archive_mysql
table_name = archive
manager = weewx.manager.DaySummaryManager
schema = schemas.wview_extended.schema
[[wx_mariadblocal_binding]]
database = archive_mysql_local
database = archive_mysql_local
table_name = archive
manager = weewx.manager.DaySummaryManager
schema = schemas.wview_extended.schema
[Databases]
[[archive_sqlite]]
database_name = weewx.sdb
database_type = SQLite
[[archive_mysql]]
database_name = Clg69Longchambon
database_type = MySQL
[[archive_mysql_local]]
database_type = LocMySQL
database_name = localweewx
[DatabaseTypes]
[[SQLite]]
driver = weedb.sqlite
SQLITE_ROOT = archive
[[MySQL]]
driver = weedb.mysql
host = meteostations-tremplin.ens-lyon.fr
user = longchambon69
password = AChanger1$
port = 34107
[[LocMySQL]]
driver = weedb.mysql
host = localhost
user = user_schoelcher
password = AChanger1$
[Engine]
[[Services]]
prep_services = weewx.engine.StdTimeSynch
data_services = ,
process_services = weewx.engine.StdConvert, weewx.engine.StdCalibrate, weewx.engine.StdQC
, weewx.wxservices.StdWXCalculate
xtype_services = weewx.wxxtypes.StdWXXTypes, weewx.wxxtypes.StdPressureCooker, weewx.wxxt
ypes.StdRainRater, weewx.wxxtypes.StdDelta
archive_services = weewx.engine.StdArchive
restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.res
tx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdWOWBE, weewx.restx.StdA
WEKAS
report_services = weewx.engine.StdPrint, weewx.engine.StdReport
Les affichages améliorés sont maintenant disponibles dans le dossier /home/weewx/weewx-data/skins. Éditer le fichier /home/weewx/weewx-data/skins/ss/scripts/gauges.js et le modifier en fonction des paramètres locaux et des choix d'affichage.
weatherProgram : 6,
imgPathURL : '',
stationTimeout : 10, // set to twice archive interval, in minutes
showUvGauge : true, // false if there is no UV sensor
showSolarGauge : true, // false if there is no solar radiation sensor
showRoseGauge : false, // true if field WindRoseData is populated
8. Synchronisation des données avec le serveur Tremplin
Pour afficher les mesures en temps réel il est nécessaire de synchroniser la Raspberry Pi avec le serveur web des opendata, cela se fait en suivant les paramètres [[RSYNC]] de weewx.conf.
Pour permettre la connection au serveur il est nécessaire de déposer une clef privée dans le dossier .ssh et la clef publique correspondante sur le serveur.
En cas de besoin pour détecter la présence de la console sur le port usb installer :es usbutils sudo apt install usbutils.
9. Installation et configuration d'un pare-feu
La Raspberry va être exposée sur le net il est important d'être attentifs à la sécurité de cette machine. Une première méthode est de mettre en place un pare-feu mais cette opération est délicate et difficile à faire à la main; nous utiliserons donc un logiciel d'asssitance à la création de pare-feu nftables. Ce logiciel permet d'établir des règles de filtrage avec une syntaxe (relativement) intelligible dans un fichier de configuration, il se charge ensuite de construire et activer les règles de filtrage correspondant aux instructions de l'usager. L'installation du paquet se fait avec la procédure habituelle.
sudo apt install nftables
Par défaut le service est désactivé et le fichier de configuration totalement permissif. Pour activer nftables au démarrage par défaut:
sudo systemctl enable nftables.service
Le fichier de configuration se trouve ici. À titre d'exemple la configuration du pare-feu pour le projet tremplin est proposée ci-dessous afin de permettre le fonctionnement à minima du pare-feu. Il doit être configuré avec les paramètres locaux de l'usager, si la configuration ne correspond pas à l'environnement réseau de la Raspberry cette dernière peut devenir inaccessible ! Soyez prudents. En cas de problème il est toujours possible d'accéder au contenu de la microSD depuis une machine GNU/linux et de modifier le fichier de configuration; si vous êtes sous un autre système d'exploitation il est possible de démarrer votre ordinateur en utilisant une clef USB GNU/linux live qui fournit un ordinateur opérationnel sans rien toucher de ce qui est installé par exemple debian live.
Exemple de fichier de configuration nftables.conf (les *** doivent être remplacés par les valeurs du réseau local où est installée la _raspberryPi).
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
set ALLOWED_SSH {
type ipv4_addr
flags interval
# Institution : ***.***.***.0/24
# Individual : ***.***.***.***
# Internal : ***.***.***.0/24, ***.***.***.0/23
# outbound : ***.***.***.***
elements = {
***.***.***.0/24, \
***.***.***.***, \
***.***.***.0/24, ***.***.***.0/23, \
***.***.***.***
}
}
chain input {
type filter hook input priority 0;
policy drop;
# established/related connections
ct state established,related accept
# invalid connections
ct state invalid drop
# loopback interface
iif lo accept
# ICMP & IGMP
ip protocol icmp icmp type { echo-request, echo-reply, destination-unreachable, router-solicitation, router-advertisement, time-exceeded, parameter-problem } accept
ip protocol igmp accept
# SSH (port #####)
tcp dport ##### ip saddr @ALLOWED_SSH accept
# HTTP (ports 80, #####, #####:#####)
tcp dport { http, https } accept
# HTTPS (ports 443, #####)
tcp dport { https, ##### } accept
# mysql
tcp dport ##### accept
# email
tcp dport { 25, 587 } accept
}
chain forward {
type filter hook forward priority 0;
policy drop;
}
chain output {
type filter hook output priority 0;
policy accept;
}
}
10. Clonage et mise à disposition
Une fois que tous les programmes souhaités sont ajoutés et toutes les options configurées les images peuvent être diffusées sous forme binaire compressée, il suffit alors à tout usager qui souhaite se les approprier de téchager le fichier et le copier sur une micro-SD qui sera immédiatement opérationnelle. Éteindre la Raspberry pi et extraire la micro-SD puis l'insérer dans un ordinateur (dans le cas ci-dessous elle apparaît sur le device /dev/mmcblk0. Copier "bit à bit" le contenu de la micro-SD sur le disque dur de l'ordinateur avec les options de maîtrise des espaces vides et le contrôle de la taille; l'image proposée dans ce blog pouvant contenir dans une micro-SD de 24 Go. Pour faciliter la copie de l'image on propose de créer le fichier bmap correspondant et de la compresser (le logiciel bmaptools traite directement les images compressées ce qui minimise les temps de téléchargement et évite le temps de décompression). La nomenclature a été définie au chapitre 3.1.
sudo dd if=/dev/mmcblk0 of=rpi3-met-trixie64_2026-06-01.img bs=2K count=8400000 status=progress
bmaptool create -o rpi3-met-trixie64_2026-06-01.bmap rpi3-met-trixie64_2026-06-01.img
7z a -txz rpi3-met-trixie64_2026-06-01.img.xz rpi3-met-trixie64_2026-06-01.img
Les usagers devront télécharger les deux fichiers rpi3-met-trixie64_2026-06-01.img.xz et rpi3-met-trixie64_2026-06-01.bmap et utiliser ensuite bmaptool pour la recopier sur une micro-SD vierge :
sudo bmaptool copy rpi3-met-trixie64_2026-06-01.img.xz /dev/mmcblk0
Une fois la copie terminée la micro-SD est immédiatement opérationnelle.
Comments !