Raspberry Pi travaille à domicile enregistreur de temps


Mise en marche et arrêt de l'horloge par simple pression d'un bouton
travail à domicile enregistreur de temps avec Raspberry Pi

Appuyez sur le bouton pour activer/désactiver l'horloge

Au cours de l’année écoulée, j’ai eu l’occasion de travailler à domicile. Pour cela, j’ai dû tenir compte des heures que je travaille.

J’ai commencé par utiliser une feuille de calcul Excel et j’ai saisi manuellement les heures d’arrivée et de départ, ce qui s’est vite avéré assez fastidieux.

Pourquoi j’ai fait cela

Le problème du travail à domicile est en partie lié au suivi du temps de travail. Mes horaires de travail sont flexibles, je ne suis pas limité aux heures de bureau et j’aime en profiter.

Cela signifie que je travaille souvent pendant un certain temps, puis, par exemple, je promène le chien ou je vais nourrir les poules. Ou, s’il fait beau, je passe l’après-midi dans le jardin, puis je travaille le soir.

Il est donc difficile de savoir combien de temps je travaille pendant la journée. Ce qu’il me fallait, c’était un moyen facile d’enregistrer mon travail depuis chez moi.

J’ai un Raspberry Pi sur mon bureau qui fait tourner mon serveur web (pas ce site), et j’ai donc décidé de mettre en place une solution d’enregistrement du temps de travail en l’utilisant. Avec quelques éléments du kit de démarrage des projets Arduino de mes fils.


Matériel que j’utilise

  • Raspberry Pi 4 - 4 gb

Arduino Components

  • 450ohm resistor x3
  • 2 LED
  • Mini-bouton
  • Breadboard
  • Dupont connectors

Ce qu’il fait

En utilisant un script Python fonctionnant sur le Raspberry Pi, le dispositif utilise un bouton poussoir pour passer d’une LED rouge à une LED bleue (je n’avais pas de verte).

Lorsque les LEDs sont allumées, l’heure est enregistrée dans une feuille de calcul Excel.


Assemblage des éléments

J’ai commencé par construire un prototype de l’enregistreur de temps sur une planche à pain de taille moyenne. Une fois que j’ai été satisfait de son fonctionnement, le projet a été de réaliser une version en boîte avec un boîtier imprimé en 3d et des connexions soudées.

Les composants sont connectés à l’aide de fils Dupont, comme le montre le diagramme de frittage ci-dessous

fritzing schéma de câblage pour l'enregistreur de temps

Fritzing schéma de câblage


Le code

J’ai écrit un court script en python qui détecte l’appui sur un bouton et change l’état des LED. Lors de la commutation, l’heure est enregistrée dans un classeur Excel.

J’ai utilisé le openpyxl library pour interagir avec le classeur (que j’ai créé manuellement dans le dossier home sur le Raspberry Pi).

Le script saisit une heure de début, une heure de fin et un total pour la période de travail.


#Libraries
import RPi.GPIO as GPIO
from time import sleep
import datetime
from openpyxl import *

wb = load_workbook('hours.xlsx')
ws=wb["Sheet1"]
wcell=ws.cell(1,1)

#Set warnings off (optional)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
#Set Button and LED pins
Button = 23
LED = 24
LED2 = 18

row = ws.max_row +1

#Setup Button and LED
GPIO.setup(Button,GPIO.IN,pull_up_down=GPIO.PUD_UP)

GPIO.setup(LED,GPIO.OUT)
GPIO.setup(LED2,GPIO.OUT)

GPIO.output(LED,GPIO.LOW)
GPIO.output(LED2,GPIO.HIGH)




def action1(Button):
    state = GPIO.input(LED)
    now = datetime.datetime.now()
    global start
    global row
    if state:
        GPIO.output(LED,GPIO.LOW)
        GPIO.output(LED2,GPIO.HIGH)

        end = datetime.datetime.now()
        total = (end - start)
        wcell1=ws.cell(row,1)
        wcell1.value = now.strftime('%Y-%m-%d')

        wcell2=ws.cell(row,2)
        wcell2.value = now.strftime('%H:%M')

        wcell3=ws.cell(row,3)
        wcell3.value = ('OFF')

        wcell4=ws.cell(row,4)
        wcell4.value = total

        wb.save('hours.xlsx')

        row += 1
        print ("Clocked OFF")


    else:
        GPIO.output(LED,GPIO.HIGH)
        GPIO.output(LED2,GPIO.LOW)

        wcell1=ws.cell(row,1)
        wcell1.value = now.strftime('%Y-%m-%d')

        wcell2=ws.cell(row,2)
        wcell2.value = now.strftime('%H:%M')

        wcell3=ws.cell(row,3)
        wcell3.value = ('ON')

        start = datetime.datetime.now()

        wb.save('hours.xlsx')
        row += 1
        print ("Clocked ON")

GPIO.add_event_detect(Button, GPIO.BOTH, callback=action1,bouncetime=800)


print("Time Recording Started") 
try:
    while True:

        xx = 0

except KeyboardInterrupt:
    GPIO.cleanup()

print ("Time Recording Stopped")
print ("Cleaned Up GPIO's")



Mise en place et fonctionnement

Créez un script dans le répertoire home en utilisant votre éditeur préféré (j’ai utilisé l’IDE Thonney Python) et enregistrez-le sous le nom clockin.py

Installer LibreOffice sur Pi, s’il n’est pas déjà installé, et créer un classeur vide nommé hours.xlsx

Exécutez le script depuis le terminal en utilisant la commande suivante

python3 clockin.py

Le voyant rouge devrait s’allumer pour indiquer qu’il est en marche.

Lorsque le bouton est enfoncé, la LED bleue s’allume, la rouge s’éteint et l’heure est enregistrée dans le tableur.

La enregistreuse de temps Raspberry Pi en action

en marche

La mise en boîte

Le dispositif d’enregistrement du temps Raspberry Pi fonctionne comme je le souhaite, il est donc temps de le rendre plus professionnel.

Utilisation de SketchUp pour modéliser une simple boîte pour contenir le bouton et deux LED, avec un trou pour que les fils puissent entrer.

Modèle de croquis pour l'enregistreur de temps Raspberry Pi

Modèle 3D SketchUp

Les fichiers de conception et d’impression peuvent être trouvés sur Thingiverse

J’ai imprimé la boîte en PLA+ noir, car elle s’intègre bien à mon bureau. Le fichier STL a été découpé à l’aide du logiciel CURA. Le dessin doit être imprimé avec un support.

Une petite quantité de nettoyage est nécessaire après l’impression, en particulier autour de la zone d’encastrement des boutons


Souder les connexions

Toujours à l’aide de fils Dupont, soudez de façon permanente les composants de la boîte.

Soudage des composants de l'enregistreur de temps Raspberry Pi

Soudage des composants

La soudure des bornes à bouton est un peu compliquée, assurez-vous que les connexions sont bien étamées avant de les fixer


Sceller avec de la cire

Ajout d’un morceau de thermorétractable à la sortie de la boîte pour rassembler les fils et finition de l’ensemble en le remplissant de cire de bougie.

Remplir de cire la recorder du temps Raspberry Pi

Remplir de cire

L’ajout de la cire de bougie protège et maintient les connexions en place, tout en ajoutant du poids pour l’empêcher de bouger pendant l’utilisation

L'enregistreur de temps Raspberry Pi terminé, connecté et prêt

Connecté

L'enregistreur de temps Raspberry Pi terminé fonctionne

Horodaté

L'enregistreur de temps Raspberry Pi terminé

Au travail

A la fin de la journée

Quand j’ai fini ma journée, je retourne au terminal et je fais un “ctrl + c” pour m’arrêter et nettoyer les GPIO de Raspberry Pis. Je pourrais le laisser tourner, car le Raspberry Pi est toujours allumé, mais je préfère l’arrêter.

À la fin de la semaine, je copie la feuille de travail dans un autre classeur pour la formater et additionner mes heures de travail.

La bibliothèque openpyxl offre de nombreuses options pour formater et travailler avec les données. Cependant, je voulais que cela reste aussi simple que possible


Cette configuration est idéale pour suivre les heures de “travail à domicile”, bien mieux que la saisie manuelle des heures