Bonjour à tous
Je fais appel à la communauté car j'ai un problème concernant la mise en commun de données entre 2 ordinateurs.
Concrètement, j'ai un Raspberry-Pi qui me permet de mesurer des paramètres ambiants à l'aide de différents capteurs (température, hygrométrie, pression atmosphérique, point de rosée). Un logiciel développé sur le RPI se charge des acquisitions à la fréquence d'une mesure toutes les 30s. Afin de pouvoir récupérer les valeurs via un programme en VB.NET qui tourne sur un PC, le programme sur le RPI met à jour un fichier .txt contenant les valeurs mesurées. Toutes les 30s, une ligne contenant l'heure et les 3 valeurs mesurées s'ajoute au fichier. Au delà d'une certaine taille (2Ko), le fichier est recréé, de manière à éviter la saturation dans le stockage du RPI.
Exemple d'un des fichiers correspondant à un capteur type DHT22 :
Temp, Hum, Rosee 14-03-2020 18h38m39s/25.3/32.5/7.6/
Temp, Hum, Rosee 14-03-2020 18h39m09s/25.3/32.4/7.6/
Temp, Hum, Rosee 14-03-2020 18h39m39s/25.3/32.4/7.6/
De ce coté, tout va bien, le fichier généré est mis à jour en permanence sans écueil. J'ai donné les droits d'accès au fichier à l'aide de Samba et tous les ordinateurs du réseau accèdent au fichier qui se met à jour. Une ouverture manuelle permet de visualiser le contenu à jour.
Coté PC, un programme en VB.NET va ouvrir le fichier stocké sur le RPI à raison d'une scrutation par minute. Vu que je fait des courbes sur 24h, cette valeur d'échantillonnage est suffisante. Je récupère la dernière ligne du fichier pour en récupérer les différentes données et les mettre en forme à l'aide d'un graphique.
Et c'est là que le bât blesse. Le programme ne récupère pas systématiquement pas la dernière version du fichier à jour. Lorsque je lance le programme, je récupère bien la dernière version du fichier stocké sur le RPI, mais après, l'ouverture du fichier à la dernière version devient complètement aléatoire. J'ai comme l'impression que le programme VB.NET conserve une version du fichier en mémoire et se "contente" d'ouvrir cette version et pas la version à jour physiquement disponible sur le RPI.
J'ai testé différentes méthodes pour ouvrir le fichier et récupérer le contenu, mais dans tous les cas, l’ouverture du fichier à jour est aléatoire. Lorsque je teste le programme en mode pas à pas, je n'ai aucun problème, le fichier à jour sur le RPI est bien traité. Dès que le programme tourne en continu (1 lecture à la minute !), la mise à jour des données ne s'effectue pas et je récupère des valeurs non à jour.
Méthode 1 :
Méthode 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 FSO = CreateObject("Scripting.FileSystemObject") TxtStream = FSO.OpenTextFile("\\RPI2_CAPTEURS\Documents\DHT22I.txt", 1) V_Param = TxtStream.ReadAll FSO = Nothing
Histoire de ne pas rester sur cet échec (qui sera résolu grâce à vous, je n'en doute pas), j'ai fait un test qui constitue non pas à ouvrir directement le fichier du RPI chaque minute, mais à le copier et à le coller sur le disque dur du PC sur lequel tourne le programme en VB.NET. La méthode pour ouvrir le fichier et récupérer le contenu est identique à l'action précédente, à part le chemin du fichier à ouvrir. J'ai juste intercalé quelques lignes de programme pour transférer le fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim SR As StreamReader = File.OpenText("\\RPI2_CAPTEURS\Documents\DHT22I.txt") Do Until SR.Peek = -1 V_Param = SR.ReadLine() Loop
Et là, aucun problème pour récupérer les données à jour, tout fonctionne à merveille.
Sur la courbe qui en résulte, voilà ce que ça donne. Pour la température et la pression atmo, on voit bien qu'avant 19h00, la mise à jour des valeurs est aléatoire. A 19h00, je modifie le programme qui consiste à transférer le fichier du RPI vers le PC. Et là, tout est bon.
PS : la courbe verte (point de rosée) provient d'un autre capteur qui est connecté directement sur le PC.
Voilà, mes explications sont un peu longues mais j'ai essayé de décrire aussi précisément que possible mon problème.
Merci de m'avoir lu et si vous avez une explication sur le problème posé, et surtout une solution, je suis à votre écoute.
Jean-Pierre
Partager