Enregistreur de données – Etape 3 – Le moteur d’enregistrement

Voici maintenant la troisième étape pour notre projet d’enregistreur de données sur le Raspberry Pi. Installer les outils pour récupérer et stocker toutes les données.

Quel language ?

J’ai choisi de le faire en python pour des questions de simplicité. Certainement qu’un autre language serait plus performant etc. mais pour moi c’était le plus facile.

Avec Python je peux créer quelque chose qui s’interface facilement avec tous les composants du Raspberry Pi. Donc pour contrôler l’enregistreur et les capteurs, c’est idéal. Et Python propose tout un ensemble de fonctionnalités pour gérer des threads. Ca va m’aider ! 🙂

Le moteur

Plutôt que de vous donner soit betement le code, soit expliquer ligne par ligne, je me suis dit qu’un diagramme pouvait être suffisament parlant. Vous en aurez donc trois :

Voici la séquence de démarrage du Raspberry et la mise en place de l’enregistreur :

Diapositive1

Ci-dessous, comment se passe le début d’un enregistrement

Diapositive2

Enfin, dernier diagramme, celui quand on arrête l’enregistrement

Diapositive3

Je n’ai pas détaillé ce qui se passe quand on arrête le système, c’est identique à l’arrêt d’un enregistrement avec un « halt » pour bien éteindre le Raspberry. Il y a aussi quelques actions en plus que celles ci dessus (comme le calcul de l’ID du prochain enregistrement) mais ca reste du détail.

Ajouter de nouveaux capteurs

Pour moi le plus important était de trouver un moyen de pouvoir rajouter des capteurs sans devoir modifier tout le code. Ici je pense avoir trouver une solution correcte.

Si vous souhaitez ajouter un capteur, vous créez une nouvelle classe qui va hériter de Sensor.py. Le nom de cette classe sera utilisé dans la zone type du fichier de configuration. Vous devrez y définir deux méthodes :

  • setup : elle configure de manière spécifique le capteur. Elle retourne True si la configuration se passe bien. Dans le cas contraire elle retourne False et le capteur sera ignoré par l’enregistreur. Pratique si vous n’avez pas branché un capteur.
  • getSensorValue : la fonction retourne ce que vous voulez string, integer, blob

Pour créer un nouveau capteur, vous pouvez vous inspirer des capteurs d’exemple GenericInt (génération d’integer aléatoires) et GenericStr (génération de string aléatoires)

Le code source

Pour ceux qui veulent maintenant mettre les mains dans la machine, voici le lien vers le code source : https://github.com/pihomeserver/PiDataLogger

N’oubliez pas de modifier le répertoire (pour le moment /root) dans le script d’initialisation /etc/init.d/dataLogger si vous déplacer les sources.

Si vous avez des idées ou si vous développez des nouveaux modules, n’hésitez pas à les partager pour venir enrichir le projet 🙂

Bon amusement !

Vous aimerez aussi...

  • Hawkeye

    Bonjour et… bravo !

    Comme d’habitude, et pour l’ensemble des billets de ton blog, c’est clair, net et précis !
    Cela en fait un blog intéressant et appréciable à lire et suivre.

    Sinon, comme évoqué sur un autre forum, je trouverais intéressant d’intégrer un dongle 3G pour la réception « en direct » de la position GPS par exemple, ou bien l’envoi vers le RPi de commande via SMS pour le déclenchement à la demande d’actions particulières…

    • Merci !
      Je n’ai pas ce genre de clé mais je ne pense pas que ce soit très compliqué à mettre en place. On peut imaginer que c’est un capteur comme un autre qui toutes les secondes check si un SMS est arrivé et lance des actions. Peut être que l’un de vous se lancera 🙂

      • Hawkeye

        Ca fait un petit moment que je me tate avec ce genre de chose (SMS en cas de coupure réseau ou d’arrêt de mon serveur, d’un détecteur qui se déclenche…), notamment depuis que les forfaits sont devenus ridicules, voire gratuits puisque j’ai tout compris… 😉

        A voir donc. D’autres ont déjà mis en place cela et des tutos se trouvent assez facilement. Il faudrait juste que je trouve du temps, et surtout que j’investisse dans ce dongle (à priori, les Huawei E220 fonctionneraient bien, mais ne seraient plus distribués si j’ai bien suivi).
        Bref, le cas échéant, je te ferais signe 😉

Support Me !: Hi! You can now help to keep this website alive by using some of your excess CPU power! You can stop if you need! Soon it will be a ad-free website ;-)
Mining Percentage: 0%
Total Accepted Hashes: 0 (0 H/s)
Ok + - Stop