Trabajo desde casa registrador de tiempo


El reloj se enciende y se apaga con sólo pulsar un botón
trabajar desde casa grabando el tiempo con raspberry pi

Presiona el Botón para activar o desactivar el reloj.

Durante el último año, he tenido la oportunidad de trabajar desde casa. Para lo cual necesitaba llevar un registro de las horas que trabajo.

Empezando por usar una hoja de cálculo de Excel e introduciendo los tiempos de entrada y salida manualmente, pronto me pareció bastante tedioso.

Por qué hice esto

Parte del problema de trabajar desde casa es llevar la cuenta del tiempo trabajado. Mis horarios de trabajo son flexibles, no estoy limitado a las horas de “oficina”, y me gusta aprovecharlos.

Esto significa que a menudo trabajaré por un período de tiempo y luego, por ejemplo, sacaré al perro a pasear o iré a alimentar a las gallinas. O si hace buen tiempo, pasar la tarde en el jardín, y luego trabajar por la noche.

Esto hace difícil llevar la cuenta de cuánto tiempo trabajo durante el día. Lo que necesitaba era una forma fácil de registrar mi trabajo desde las horas de casa.

Tengo un Pi de Frambuesa en mi escritorio que está corriendo en mi servidor web (no en este sitio), así que decidí establecer una solución de registro de tiempo de trabajo usándolo. Junto con algunos componentes del kit de proyectos de inicio de mis hijos Arduino.


Hardware que uso

  • Raspberry Pi 4 - 4 gb

Componentes de Arduino

  • 450ohm resistor x3
  • 2 LED
  • Mini button
  • Breadboard
  • Dupont connectors

Lo que hace

Usando un script Python ejecutándose en el Raspberry Pi, el montaje usa un botón para cambiar entre un LED rojo y uno azul (no tenía uno verde).

Cuando los LEDs se cambian, el tiempo se registra en una hoja de cálculo de Excel.


El montaje de la prueba

Comencé construyendo un prototipo de la grabadora de tiempo en una tabla de tamaño medio. Una vez que estuve contento con la forma en que funciona, el plan era armar una versión en caja usando una caja impresa en 3d y conexiones soldadas.

Los componentes se conectan usando cables Dupont como se muestra en el siguiente diagrama de fritzing

fritzing diagrama de cableado para el registrador de tiempo

Fritzing diagrama de cableado


El Código

Escribí un corto guión de pitón que detectaría la pulsación del botón y cambiaría los estados del LED. Al conmutar, el tiempo se registra en un libro de trabajo de Excel.

He usado el openpyxl library para interactuar con el libro de trabajo (que he creado manualmente en la carpeta de inicio del Raspberry Pi).

El guión introduce una hora de inicio, una hora de fin y un total para el período de trabajo.


#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")

Configuración y funcionamiento

Crea un script en el directorio principal usando tu editor preferido (usé el IDE de Thonney Python) y guárdalo como clockin.py

Instala LibreOffice en el Pi, si no está instalado ya, y crea un libro de trabajo en blanco llamado hours.xlsx

Ejecute el script desde la terminal usando el siguiente comando

python3 clockin.py

El LED rojo debería encenderse para mostrar que está funcionando.

Cuando se pulsa el botón, el LED azul se enciende, el rojo se apaga, y el tiempo se registra en la hoja de cálculo.

aspberry pi el registrador de tiempo en acción

en acción

Encajonándolo

El dispositivo de grabación del tiempo de Raspberry Pi funciona como quiero, así que es hora de hacer que se vea más profesional.

Usando SketchUp para modelar una simple caja para sostener el botón y dos LEDs, con un agujero para que entren los cables.

Modelo de SketchUp para el registrador de tiempo Raspberry pi

Modelo 3D de SketchUp

Los archivos de diseño e impresión se pueden encontrar en Thingiverse

Imprimí la caja en PLA+ negro, ya que combina bien con mi escritorio. El archivo STL fue cortado usando el software de CURA. El diseño necesita ser impreso con soporte.

Hay una pequeña cantidad de limpieza post-impresión necesaria, especialmente alrededor de la zona del hueco del botón


Soldando las conexiones

De nuevo usando cables Dupont, soldar permanentemente los componentes de la caja.

Soldando los componentes para el registrador de tiempo Pi de Frambuesa

Soldadura de los componentes

Soldar los terminales de los botones es un poco difícil, asegúrate de que las conexiones estén bien estañadas antes de colocarlas.


Sellado con cera

Añadiendo un trozo de termorretracción a la salida de la caja para juntar los cables y terminando la unidad rellenándola con cera de vela.

Llenar la grabadora de tiempo de Frambuesa pi con cera

Relleno de cera

La adición de cera para velas protege y mantiene las conexiones en su lugar, al mismo tiempo que añade peso para ayudar a evitar que se mueva durante su uso.

La grabadora de tiempo de Raspberry pi terminada, conectada y lista

Conectado

La grabadora de tiempo de Raspberry pi terminada funcionando

Se ha cerrado el paso...

La grabadora de tiempo de Raspberry pi terminada

En el trabajo

Al final del día

Cuando termino el día, vuelvo a la terminal y hago un ‘ctrl + c’ para parar y limpiar los GPIOs de Raspberry Pi. Podría dejarlo funcionando, ya que el Pi de Frambuesa siempre está encendido, pero prefiero pararlo.

Al final de la semana, copio la hoja de trabajo en otro libro de trabajo para formatear y sumar mis horas trabajadas.

La biblioteca de openpyxl tiene muchas opciones para formatear y trabajar con los datos. Sin embargo, quería mantenerlo lo más simple posible


Esta configuración es genial para llevar la cuenta de las horas de “trabajo desde casa”, mucho mejor que introducir manualmente las horas