Ce repo contient la totalité des codes nécessaire au projet birdPi. birdPi permet grâce à plusieurs raspberry et un serveur, de détécter des oiseaux, les enregistrer et envoyer les informations au serveurs. Le serveur permet ensuite d'accèder à une carte par une interface web. La carte montre les espèce ayant été détectée dans un intervalle de temps choisi par l'utilisateur, en cliquant, une pop-up apparaît : on peut alors voir les dates précises d'enregistrement, ainsi qu'écouter/télécharger l'audio.
Voici un recapitulatif des codes importants :
└── 📁birdPi
└── 📁pi # Dossier à mettre sur les Rasp
├── run_all.py # Fichier Python qui se charge de l'écoute, de l'analyse et de l'envoi des messages au serveur
├── cleaning_output.py # Script Python permettant de nettoyer la sortie .txt de BirdNET
├── launch.sh # Script Bash permettant de lancer le programme principal Python
├── setup.sh # Initialise le Pi pour l'écoute
├── default_conf.txt # Contient les paramètres de lancement du programme principal
├── birdpi.service # Service systemd
└── 📁outputs # Contient les fichiers produits localement
└── output.csv # Output nettoyée de BirdNET, un fichier .csv lisible
└── 📁server # Dossier à mettre dans les serveurs
├── listen.py # Script d'écoute sur LoRa, tourne en continu et met à jour birds.sqlite3
├── 📁.venv # Environnement virtuel Python
├── 📁api # Backend du serveur web
│ ├── db.py # Fonctions d'accès à la base de données
│ └── main.py # Endpoints FastAPI
├── 📁database # Contient la base de données SQLite
│ └── birds.sqlite3 # DB SQL stockant les oiseaux détectés, leur temps, et l’instant d’enregistrement
└── 📁frontend # Application web
├── app.js # Script principal de l’appli web
├── details.js # Gère l’ouverture des pop-ups
├── player.js # Gère la lecture audio
├── index.html # Front HTML principal
├── style.css # Feuille de style
└── rasp.json # DB des Raspberry installés et leur position géographique
├── .gitignore # Fichiers à ignorer par Git
└── README.md # Le fichier que vous lisez actuellement :)
Un serveur web uvicorn tourne sur une machine. En parallèle, un parc de Raspberry enregistre à une fréquence choisie. Lorsque le modèle BirdNET détecter un oiseau et son espèce, l'information est envoyé au serveur, il est donc ajouter à la DB pour être affiché sur la carte.
Déplacez le contenu du dossier server sur le serveur (en clonant dessus ou bien en utilisant un client SFTP, si vous n'en avez pas, FileZilla est excellent et gratuit :).
Vous pouvez ensuite executer le script d'installation :
chmod +x setup.sh
./setup.shIl se chargera (normalement) d'installer les dépendances nécessaire.
Vérifiez en premier lieu que l'IP en en-tête des ficher app.js et details.js correspondent bien à l'IP du serveur.
En suite, vous pouvez démarerrer le serveur en tapant la commande (depuis le dossier api) :
sudo uvicorn main:app --host 0.0.0.0 --port 80 &Vous pouvez maintenant accèder à l'interface web en tapant l'ip du serveur sur un navigateur !
Lors de la configuration des raspbeery (qui viendra après), vous allez être appelé à choisir un mot de passe. Il ne s'agit pas d'un mot de passe de session, mais du hash.
Dans rasp.json, si votre raspberry est nommé pi5, ajouté :
"pi5" : {
"lat": "latitude du rasp",
"lon": "longitude du rasp",
"mac": "addresse",
"secret_hash" : "hash"
}Vous pourrez trouver le hash dans /home/pi/birdPi/config/secret.hash.
Dans les deux cas, branchez votre rapsberry par ethernet, c'est beaucoup plus simple, il n'y a normalement pas besoin d'écran.
Déplacer tout le contenu du dossier pi dans le /home/pi/birdPi/.
Vous pouvez ensuite executer le script d'installation :
chmod +x setup.sh
./setup.shVous serez invité à choisir un nom pour le pi (sous la forme pi5, pi312478178961, ..., tant que c'est strictement supérieur à 0), et un mot de passe. IL NE S'AGIT PAS DU MOT DE PASSE DU PI, IL S'AGIT DU MOT DE PASSE DU HASH.
Mettez l'image sur une carte SD, soit avec RPI-imager (pas testé) soit avec la commande suivante :
sudo dd if=/chemin/vers/birdbian.img of=/dev/sdX bs=4m status=progress conv=fsyncATTENTION : la commande dd porte bien son surnom de disk destroyer, faite ATTENTION. Remplacer sdX par le nom de la partition de la carte SD. Elle peut être obtenue en faisant lsblk sous linux, ou bien diskutil list sous mac.
Si votre machine est encore vivante, il suffit de mettre la carte SD dans le raspberry, et l'allumer. Il faudra surement le reconfigurer, donc faite :
systemctl --user stop birdpi.service
cd /home/pi/birdPi
./setup.shConfigurez le rasp et redémarrez.
Les paramètres par défaut sont les suivant :
- User par défaut :
pi - Nom de machine par défaut :
pi1 - Mot de passe par défaut :
leszozyofondubrui
Le script se lance automatiquement au démarrage de la session grâce à un service systemd. Vous pouvez le stoppez quand vous voulez avec :
systemctl --user stop birdpi.service
Le script run_all.py dipose de 3 paramètres :
RECORD_SECONDS: Correspond à la durée des enregistrementsINTERVAL_SECONDS: Correspond au temps de pause entre les enregistrementsSERVER_IP: Correspond à l'ip du serveur Vous pouvez modifier ces paramètres dansdefault_conf.txt. Normalement, un service systemd lance le script au démarrage. Son fonctionnement est pour l'instant incertain, si le pi n'envoie rien, connecter vous en ssh et lancezlaunch.sh.
- Image custom Raspberry (maybe downloadable depuis le serveur ?)
- Ajout d'un raspberry depuis la plateform web