Script Python pour envoyer commande ASCII
TDupuy
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
TDupuy Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
TDupuy Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je débute en Python et dans le cadre de mon stage, je suis face à un problème, voilà la situation :
- Je suis sur Windows, connecté en SSH à une carte RaspberryPi.
- La carte a un HAT RS485 et est connectée à une station météo.
Diverses commandes ASCII permettent de communiquer avec cette station météo mais voici celle qui me permet d'obtenir les données : " 0R0 "
Les données ont cette forme à l'arrivée :
0R0,Dn=000D,Dm=000D,Dx=180D,Sn=000.0M,Sm=000.0M,Sx=000.2M,Ta=031.2C, Ua=045.4P,Pa=000995.1H,Rc=0001.6M,Sr=0000.8W,UV=00I,NX=056.4B,NI=052.4B,NS
=053.7B,PM2.5=0054.0U,PM10=0056.0U,Lux=000108L
Maintenant, voilà ce que je souhaite faire :
Créer un script qui permettrait :
- d'envoyer la commande 0R0 et lui donner les paramètres suivants :
'/dev/ttyS0',19200,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS,timeout=None
- d'afficher UNIQUEMENT la ligne commençant par 0R0 (pour éviter les lignes d'erreurs ou les informations peu importantes) (donc de 0R0 à Lux)
- modifier la structure du résultat ( par exemple pour TA qui correspond à la température, je souhaiterai que ce soit uniquement 31.2 d'affiché. Je voudrais aussi pouvoir faire un retour à la ligne après chaque type de donnée)
- stopper le programme une fois l'affichage de la totalité des données affichées à l'écran terminé.
Voilà, je sais que cela fait beaucoup mais je compte sur vous !
Merci d'avance !
je débute en Python et dans le cadre de mon stage, je suis face à un problème, voilà la situation :
- Je suis sur Windows, connecté en SSH à une carte RaspberryPi.
- La carte a un HAT RS485 et est connectée à une station météo.
Diverses commandes ASCII permettent de communiquer avec cette station météo mais voici celle qui me permet d'obtenir les données : " 0R0 "
Les données ont cette forme à l'arrivée :
0R0,Dn=000D,Dm=000D,Dx=180D,Sn=000.0M,Sm=000.0M,Sx=000.2M,Ta=031.2C, Ua=045.4P,Pa=000995.1H,Rc=0001.6M,Sr=0000.8W,UV=00I,NX=056.4B,NI=052.4B,NS
=053.7B,PM2.5=0054.0U,PM10=0056.0U,Lux=000108L
Maintenant, voilà ce que je souhaite faire :
Créer un script qui permettrait :
- d'envoyer la commande 0R0 et lui donner les paramètres suivants :
'/dev/ttyS0',19200,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE,bytesize=serial.EIGHTBITS,timeout=None
- d'afficher UNIQUEMENT la ligne commençant par 0R0 (pour éviter les lignes d'erreurs ou les informations peu importantes) (donc de 0R0 à Lux)
- modifier la structure du résultat ( par exemple pour TA qui correspond à la température, je souhaiterai que ce soit uniquement 31.2 d'affiché. Je voudrais aussi pouvoir faire un retour à la ligne après chaque type de donnée)
- stopper le programme une fois l'affichage de la totalité des données affichées à l'écran terminé.
Voilà, je sais que cela fait beaucoup mais je compte sur vous !
Merci d'avance !
A voir également:
- Script Python pour envoyer commande ASCII
- Code ascii - Guide
- Invite de commande - Guide
- Script vidéo youtube - Guide
- Commande terminal mac - Guide
- Citizen code python avis - Accueil - Outils
3 réponses
Bonjour,
Pourquoi ne pas avoir poser ces simples questions dans votre premier message plutôt que d'exposer tout ce que votre script doit faire sans préciser votre problème ?
Vous pouvez récupérer la ligne en découpant la chaine reçue aux retours à la ligne avec split puis en cherchant la ligne qui commence par 0R0.
Et pour modifier les données, vous pouvez les séparer en séparant au niveau des virgules puis vous pouvez modifier individuellement chaque donnée.
Pourquoi ne pas avoir poser ces simples questions dans votre premier message plutôt que d'exposer tout ce que votre script doit faire sans préciser votre problème ?
Vous pouvez récupérer la ligne en découpant la chaine reçue aux retours à la ligne avec split puis en cherchant la ligne qui commence par 0R0.
Et pour modifier les données, vous pouvez les séparer en séparant au niveau des virgules puis vous pouvez modifier individuellement chaque donnée.
Bonjour,
En stage, dis-tu ?
Donc...
CCM ne fait pas les exercices. Une aide peut être apportée si le demandeur montre le travail qu'il a déjà effectué.
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
En stage, dis-tu ?
Donc...
CCM ne fait pas les exercices. Une aide peut être apportée si le demandeur montre le travail qu'il a déjà effectué.
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
Ma question est juste de savoir s'il est possible de cibler une ligne précise avec un print et si on peut modifier une data qui arriverait après l'envoi de la commande 0R0.
Je ne suis pas là pour avoir le code complet servi sur un plateau, juste pour avoir ces réponses après c'est vrai que cette question est toujours dans le cadre de mon stage.
Je ne suis pas là pour avoir le code complet servi sur un plateau, juste pour avoir ces réponses après c'est vrai que cette question est toujours dans le cadre de mon stage.
Si j'ai mis les détails c'est pour pouvoir faire comprendre le script final voulu, l'objectif et connaître les différentes subtilités, rien de plus !
Voici ce que j'ai actuellement
La chose que je n'arrive pas à comprendre c'est comment manipuler ces valeurs données par 0R0 alors qu'on ne les a pas de base, comme un texte ou une date par exemple. Quand on a un texte à l'origine cela semble plutôt "facile" mais modifier le format d'une trame sans l'avoir au début, je ne vois pas comment faire.
Vous ne connaissez pas le texte exacte mais vous savez quelle forme il aura. Par exemple vous savez que toutes les données sont séparées par des virgules et que chaque élément est sous la forme variable=valeur.
Vous pouvez donc découper le texte au niveau des virgules puis couper chaque partie au niveau des égales. Vous pouvez ensuite traiter chaque valeur indépendament.
Encore une fois, vous ne savez pas quelles valeurs vous allez obtenir mais vous savez qu'elles auront toujours la même forme donc vous pouvez écrire un algorithme qui fonctionne quelle que soit la valeur.
Par exemple à priori la température se termine toujours par la lettre C que vous voulez enlever donc il vous suffit de retirer le dernier caractère de la chaine puis de convertir le reste en float.
Voici un code pour l'exemple :
Bon week-end à vous !
Cordialement