Utilisez votre Raspberry Pi comme enregistreur de données


  • FrançaisFrançais


  • L’enregistrement des données peut être effectué pour diverses raisons. Dans un article précédent, j’ai écrit sur la façon dont je surveille la consommation d’électricité de mon foyer. La plate-forme Raspberry Pi est parfaitement adaptée à de telles applications car elle permet la communication avec de nombreux types de capteurs analogiques et numériques. Cet article montre comment enregistrer la température du processeur d’un Raspberry Pi et créer un rapport basé sur une feuille de calcul à la demande. L’enregistrement de la température du processeur ne nécessitera aucune carte ou capteur supplémentaire.

    Même sans Raspberry Pi, vous pouvez suivre les étapes décrites ici si vous remplacez les parties spécifiques du code.

    Installer

    Le code est basé sur Pythonique, une façade de programmation Python graphique. Le moyen le plus simple de démarrer avec Pythonic est de télécharger et de flasher le Image Raspberry Pi. Si vous n’avez pas de Raspberry Pi, utilisez l’une des autres méthodes d’installation mentionnées sur la page GitHub (par exemple, Docker ou Pip).

    Une fois installé, connectez le Raspberry Pi au réseau local. Ensuite, ouvrez l’interface graphique Web dans un navigateur en accédant à http://pythonicrpi:7000/.

    Vous devriez maintenant voir l’écran suivant :

    Télécharger et décompresser l’exemple disponible sur GitHub. L’archive se compose de plusieurs types de fichiers.

    Utilisez le bouton marqué en vert pour télécharger le current_config.jsonavec le bouton marqué en jaune téléchargez le fichier XLSX et le reste *.py des dossiers.

    Vous devriez avoir cette configuration devant vous après avoir téléchargé les fichiers :

    Mise en œuvre

    L’application peut être séparée en deux parties logiques : la journalisation et la génération de rapports. Les deux parties fonctionnent indépendamment l’une de l’autre.

    Enregistrement

    La partie supérieure de la configuration peut être résumée comme la configuration de la journalisation :

    Eléments concernés :

    • Planificateur manuel – 0x0412dbdc: Déclenche les éléments connectés au démarrage (ou manuellement).
    • Créer une table – 0x6ce104a4: Assemble une requête SQL qui crée la table de travail (si elle n’existe pas déjà).
    • Planificateur – 0x557616c2: Déclenche l’élément suivant toutes les 5 secondes.
    • Acquisition de données – 0x0e7b8360: Ici, nous collectons la température du CPU et assemblons une requête SQL.
    • SQLite – 0x196f9a6e : Représente une base de données SQLite, accepte les requêtes SQL.

    je vais regarder de plus près Acquisition de données – 0x0e7b8360. Ouvrez l’éditeur Web intégré (serveur de code) en accédant à http://pythonicrpi:8000/. Vous pouvez voir tous les éléments liés *.py fichiers dans le volet de gauche. le L’acquisition des données l’élément est basé sur le type Tuyau générique. Ouvrez le fichier avec l’identifiant associé :

    generic_pipe_0x0e7b8360.py

    Dans cet élément, responsable de la lecture de la température du CPU, vous pouvez décommenter les lignes de code selon que vous l’exécutez sur un Raspberry Pi ou non.

    Le code ci-dessus produit une requête SQL qui insère une ligne dans la table ma table contenant l’horodatage Unix en secondes et la température réelle du processeur (ou un nombre aléatoire). Le code est déclenché toutes les cinq secondes par l’élément précédent (Planificateur – 0x557616c2). La chaîne de requête SQL est transmise au serveur connecté SQLite – 0x196f9a6e élément, qui applique la requête à la base de données SQLite associée sur le système de fichiers. Le processus enregistre la température du CPU dans la base de données avec un taux d’échantillonnage de 1/5 échantillons par seconde.

    Génération de rapports

    Le réseau du bas génère un rapport sur demande :

    Eléments concernés :

    • Planificateur manuel – 0x7c840ba9: Active le bot Telegram connecté au démarrage (ou manuellement).
    • Télégramme – 0x2e4148e2: Bot Telegram qui sert d’interface pour demander et fournir des rapports.
    • GenericPipe – 0x2f78d74c: Assemble une requête SQL comprenant les données du rapport.
    • SQLite – 0x5617d487:
    • ReportGenerator – 0x13ad992a: Créez un rapport XLSX basé sur les données.

    L’exemple de code contient un modèle de feuille de calcul (report_template.xlsx) qui appartient également à cette configuration.

    Remarque : Pour faire fonctionner le bot Telegram, fournissez un jeton de bot Telegram pour communiquer avec le serveur. core.telegram.org décrit le processus de création d’un jeton de bot.

    L’élément Telegram génère une demande sous forme de chaîne Python lorsqu’un utilisateur demande un rapport. le GenericPipe – 0x2f78d74c l’élément qui reçoit la requête assemble une requête SQL qui est transmise au SQLite – 0x5617d487 élément. Les données réelles, qui sont lues sur la base de la requête SQL, sont maintenant envoyées au ReportGenerator- 0x13ad992a, que je vais regarder de plus près :

    generic_pipe_13ad992a.py

    def execute(self):

            path = Path.home() / 'Pythonic' / 'executables' / 'report_template.xlsx'

            try:
                    wb = load_workbook(path)
            except FileNotFoundError as e:
                    recordDone = Record(PythonicError(e), 'Template not found')
                    self.return_queue.put(recordDone)
                    con.close()
                    return
            except Exception as e:
                    recordDone = Record(PythonicError(e), 'Open log for details')
                    self.return_queue.put(recordDone)
                    con.close()
                    return

            datasheet = wb['Data']

            # create an iterator over the rows in the datasheet
            rows = datasheet.iter_rows(min_row=2, max_row=999, min_col=0, max_col=2)

    Dans la première partie, j’utilise le load_workbook() du openpyxl bibliothèque pour charger le modèle de feuille de calcul. S’il est chargé avec succès, j’acquiers une référence à la feuille réelle dans le Fiche de données variable. Ensuite, je crée un itérateur sur les lignes de la feuille de données, qui est stocké dans la variable Lignes.

            # Convert unix time [s] back into a datetime object, returns an iterator
            reportdata_dt = map(lambda rec: (datetime.datetime.fromtimestamp(rec[0]), rec[1]), self.inputData)
           
            # iterate till the first iterator is exhausted
            for (dt, val), (row_dt, row_val) in zip(reportdata_dt, rows):
                    row_dt.value = dt
                    row_val.value = val

            reportDate = datetime.datetime.now().strftime('%d_%b_%Y_%H_%M_%S')
            filename = 'report_{}.xlsx'.format(reportDate)
            filepath = Path.home() / 'Pythonic' / 'log' / filename
            wb.save(filepath)
            wb.close()
           
            recordDone = Record(filepath, 'Report saved under: {}'.format(filename))
            self.return_queue.put(recordDone)

    La dernière partie commence par la variable reportdata_dt: La variable contient un itérateur qui, lorsqu’il est utilisé, convertit l’horodatage Unix brut des données d’entrée de la base de données SQLite (self.inputdata) retour à un Python date-heure objet. Ensuite je Zip *: français la reportdata_dt itérateur avec le créé précédemment Lignes itérateur et itérer jusqu’à ce que le premier d’entre eux soit épuisé, ce qui devrait être reportdata_dt. Lors de l’itération, je remplis les colonnes de chaque ligne avec l’horodatage et la valeur. Dans la dernière étape, j’enregistre la feuille de calcul avec un nom de fichier composé de la date et de l’heure réelles et je transmets le nom de fichier au Télégramme – 0x2e4148e2 élément.

    le Télégramme – 0x2e4148e2 charge ensuite le fichier du disque dans la mémoire et l’envoie à l’utilisateur qui a demandé le rapport. Cette vidéo montre toute la procédure :

    Le rapport que l’utilisateur reçoit ressemble à ceci :

    Emballer

    Cet article montre comment convertir facilement le Raspberry Pi en enregistreur de données. La plate-forme Raspberry Pi vous permet d’interagir avec des capteurs de tout type, vous permettant de surveiller les valeurs physiques ainsi que les valeurs calculées. L’utilisation de feuilles de calcul comme base pour vos rapports vous offre une grande flexibilité et rend ces rapports très personnalisables. La bibliothèque openpyxl en combinaison avec Pythonic simplifie l’automatisation de ce processus.

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code