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
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.
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.
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.
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.
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.
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