Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| documentation:architecture-technique:captation-des-donnees [2023/04/03 12:36] – baudryj | documentation:architecture-technique:captation-des-donnees [2023/04/03 12:47] (Version actuelle) – [Captation des données] baudryj | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Captation des données ====== | ====== Captation des données ====== | ||
| + | |||
| + | * Sensor port série | ||
| + | |||
| + | <code python> | ||
| + | import serial | ||
| + | import datetime | ||
| + | import os | ||
| + | import time | ||
| + | |||
| + | # Configuration du port série | ||
| + | port = "/ | ||
| + | baudrate = 9600 | ||
| + | timeout = 1 | ||
| + | |||
| + | # Ouvre la connexion au port série | ||
| + | try: | ||
| + | ser = serial.Serial(port, | ||
| + | except serial.SerialException as e: | ||
| + | print(f" | ||
| + | exit(1) | ||
| + | |||
| + | # Boucle principale | ||
| + | while True: | ||
| + | try: | ||
| + | # Lecture des données du port série | ||
| + | data = ser.readline().decode(' | ||
| + | |||
| + | # Si des données ont été reçues | ||
| + | if data: | ||
| + | # Obtention de la date et l' | ||
| + | now = datetime.datetime.now() | ||
| + | date_string = now.strftime(" | ||
| + | time_string = now.strftime(" | ||
| + | |||
| + | # Nom du fichier avec la date et l' | ||
| + | file_name = f" | ||
| + | |||
| + | # Vérifier si le dossier de destination existe, sinon le créer | ||
| + | if not os.path.exists("/ | ||
| + | os.makedirs("/ | ||
| + | |||
| + | # Ouverture du fichier en mode écriture | ||
| + | with open(f"/ | ||
| + | # Écriture des données dans le fichier | ||
| + | file.write(data + ' | ||
| + | |||
| + | # Attendre 1 seconde avant la prochaine lecture | ||
| + | time.sleep(1) | ||
| + | |||
| + | except serial.SerialException as e: | ||
| + | print(f" | ||
| + | ser.close() | ||
| + | exit(1) | ||
| + | |||
| + | except IOError as e: | ||
| + | print(f" | ||
| + | ser.close() | ||
| + | exit(1) | ||
| + | |||
| + | except Exception as e: | ||
| + | print(f" | ||
| + | ser.close() | ||
| + | exit(1) | ||
| + | |||
| + | </ | ||
| * Pour détecter si le port série ne reçoit plus de données pendant 20 secondes, vous pouvez utiliser un minuteur (timer) dans votre code Python. Voici un exemple de code qui utilise la bibliothèque time pour mesurer le temps écoulé depuis la dernière réception de données, et qui déclenche une action si ce temps dépasse 20 secondes : | * Pour détecter si le port série ne reçoit plus de données pendant 20 secondes, vous pouvez utiliser un minuteur (timer) dans votre code Python. Voici un exemple de code qui utilise la bibliothèque time pour mesurer le temps écoulé depuis la dernière réception de données, et qui déclenche une action si ce temps dépasse 20 secondes : | ||
| Ligne 38: | Ligne 103: | ||
| </ | </ | ||
| + | |||
| + | <code python> | ||
| + | import requests | ||
| + | import serial | ||
| + | import time | ||
| + | |||
| + | # Configuration du port série | ||
| + | port = "/ | ||
| + | baudrate = 9600 | ||
| + | timeout = 1 | ||
| + | |||
| + | # Configuration du webhook | ||
| + | webhook_url = " | ||
| + | webhook_timeout = 3 | ||
| + | |||
| + | # Ouvre la connexion au port série | ||
| + | try: | ||
| + | ser = serial.Serial(port, | ||
| + | except serial.SerialException as e: | ||
| + | print(f" | ||
| + | exit(1) | ||
| + | |||
| + | # Boucle principale | ||
| + | while True: | ||
| + | try: | ||
| + | # Lecture des données du port série | ||
| + | data = ser.readline().decode(' | ||
| + | |||
| + | # Faire quelque chose avec les données | ||
| + | |||
| + | # Envoyer les données au webhook | ||
| + | payload = {" | ||
| + | response = requests.post(webhook_url, | ||
| + | response.raise_for_status() | ||
| + | |||
| + | except requests.exceptions.Timeout: | ||
| + | print(f" | ||
| + | except requests.exceptions.RequestException as e: | ||
| + | print(f" | ||
| + | |||
| + | # Attendre 5 secondes avant de continuer | ||
| + | time.sleep(5) | ||
| + | </ | ||
| + | ===== Création d'un fichier de log ===== | ||
| + | |||
| + | <code python> | ||
| + | import serial | ||
| + | import logging | ||
| + | |||
| + | # Configuration du port série | ||
| + | port = "/ | ||
| + | baudrate = 9600 | ||
| + | timeout = 1 | ||
| + | |||
| + | # Configuration du logger | ||
| + | logging.basicConfig(filename=' | ||
| + | |||
| + | # Ouvre la connexion au port série | ||
| + | try: | ||
| + | ser = serial.Serial(port, | ||
| + | except serial.SerialException as e: | ||
| + | logging.error(f" | ||
| + | exit(1) | ||
| + | |||
| + | # Boucle principale | ||
| + | while True: | ||
| + | try: | ||
| + | # Lecture des données du port série | ||
| + | data = ser.readline().decode(' | ||
| + | |||
| + | # Faire quelque chose avec les données | ||
| + | |||
| + | except serial.SerialException as e: | ||
| + | logging.error(f" | ||
| + | exit(1) | ||
| + | </ | ||
| + | |||