Création d'une image Debian stable (ou testing ou oldstable) pour Raspberry Pi arm64 pour la météo du dispositif Tremplin.

Par : @Gérard Vidal dans
Le : révisé le :
Tags : #RaspberryPi-64bit, #nano-ordinateur, #météorologie, #station météorologique, #debian, #trixie,
Linkedin Mail

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


Table des matières

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 trixie ou 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.


Webographie

  1. Site principal Raspberry Pi
  2. Scripts de création de l'image
  3. Image Debian Live
  4. Comment créer une clef USB bootable Debian
  5. nmcli authorization management
  6. nmcli examples
  7. wpa_cli configuration

Comments !