Arbeitszeiterfassung

  • 0 Antworten
  • Letztes Antwortdatum
G

Gummibaer_

Neues Mitglied
24
Da ich immer das Gefühl hatte das mein Chef hier und da mal ein parr Stunden verschwinden lässt, brauchte ich was um das nachzuprüfen.

Vorraussetzung für mich war das die Arbeitszeiten im Kalender hinterlegt werden (mit Tasker kein Problem).

Nun ging weiter unser Stempelsystem arbeitet im 5 min Intervall.

Sprich wer 9:00:59 sich noch einstempelt ist seit 9:00 Uhr da .. wer 9:01:00 sich einstempelt ist erst 9:05 da.. Gleiches gildet fürs ausstempel.
Wer 16:59:59 sich ausstempelt war für das System nur bis 16:55 anwesend.

Um das zu berechnen ist Tasker aber etwas mager ausgestattet.
Daher bin ich hier ein Umweg über ein kleines Shellscript gegangen was deutlich mehr Funktionen für die Zeitberechnung mit sich bringt.

Wird an das Shellscript nichts übergeben berechnet es die Unixzeit entsprechend der oben angegebennen Intervalle und spuckt diese dann aus.

Wird nun eine Unixzeit übergeben berechnet es die Differenz in Minuten und berechnet vor wie vielen Minuten man sich eingestempelt hat.

Hier ist mir ein kleiner Bug in Tasker aufgefallen das man immer eine Minute mehr bei der Startzeit eingeben muss um auf die selbe Startzeit zu kommen.

Die "Calendar Insert" Aktion in Tasker möchte es in folgenden Format
<Beginn ab jetzt in Minuten> / <Dauer in Minuten>
Der Beginn kann nur Vorsilbenwechsel auch negativ sein und damit in der Vergangenheit liegen.

Lange Rede kurzer Sinn ich löse den Task "Arbeitszeit Erfassung" mit einem NFC Tag aus ( Dieser ein und wieder ausstempelt )

Dadran wird das Profil "Zeiterfassung" gestartet bzw gestoppt.

Code:
############ Profil Zeiterfassung ############

Profile: Zeiterfassung (82)
State: Variable Value [ Name:%Arbeitszeit Op:Matches Value:1 ]
Enter: Anon (86)
A1: Run Shell [ Command:sh /mnt/extSdCard/Tasker/format.sh Timeout (Seconds):0 Use Root:Off Store Result In:%ftimes ]
A2: Variable Set [ Name:%ArbeitszeitBeginn To:%ftimes Do Maths:Off Append:Off ]
Exit: Anon (87)
A1: Run Shell [ Command:sh /mnt/extSdCard/Tasker/format.sh %ArbeitszeitBeginn Timeout (Seconds):0 Use Root:Off Store Result In:%ftimes ]
A2: Calendar Insert [ In / For (Minutes):%ftimes Calendar:Google:Arbeitszeiten Title:Arbeitszeit Description: Location: Available:Off All Day:Off ]
A3: Variable Clear [ Name:%ArbeitszeitBeginn Pattern Matching:Off ]

############ Task Arbeitszeit Erfassung ###############

Arbeitszeit Erfassung (89)
A1: If [ %Arbeitszeit ~ 0 ]
A2: Variable Set [ Name:%Arbeitszeit To:1 Do Maths:Off Append:Off ]
A3: Else
A4: Variable Set [ Name:%Arbeitszeit To:0 Do Maths:Off Append:Off ]
A5: End If 

############ Shellscript format.sh ############

#!/bin/sh

Timevar=`date +'%H:%M:%S %s'`
Stamp=`echo "$Timevar"| sed -r 's/^..:..:...(.+)/\1/g'`
Hours=`echo "$Timevar"| sed -r 's/^(.+):..:.*/\1/g'`
Min=`echo "$Timevar"| sed -r 's/^..:(.+):.*/\1/g'`
Secs=`echo "$Timevar"| sed -r 's/.*:(.+) .*/\1/g'`
MinPart1=`echo "$Min"| sed -r 's/(.)./\1/g'`
MinPart2=`echo "$Min"| sed -r 's/.(.)/\1/g'`

if [ $MinPart2 -ge 0 -a $MinPart2 -le 4 ]; then
Minnew=${MinPart1}0
elif [ $MinPart2 -ge 5 -a $MinPart2 -le 9 ]; then
Minnew=${MinPart1}5
fi

Dif1=$(((Min*60)+Secs))
Dif2=$(((Minnew*60)+Secs))
differenz=$((Dif2-Dif1))
NewStamp=$((Stamp + differenz))
NewStamp=`echo "$NewStamp"| sed -r 's/(.+)..$/\100/g'`

if [ $# -eq 0 ]; then 
    echo ${NewStamp}
else
    oldctime=`echo $1`
    diffSec=$((oldctime - NewStamp))
    if [ $diffSec -lt 0 ]; then abs=-1; else abs=1; fi
    Timediff=$((diffSec / 60 * abs))
    
    vormin=$((((Stamp - oldctime)/60+1)*-1))
    echo "${vormin} / ${Timediff}"
fi
Bitte drauf achten das Shellscript muss mit dem Unix Zeilenende versehen sein und nicht mit dem Dos Zeilenende (gibt sonst Probleme).

So wird die erfasste Zeit schön in den Kalender eingetragen.
Ich werde Wohl für Windows bei gelegenheit ein kleines Programm zum errechnen der Gesammt,- Monats- und Tagesarbeitszeit erstellen und dies vielleicht hier anhängen.
 

Ähnliche Themen

W
  • wurstmitsenf
Antworten
5
Aufrufe
1.288
oggy
O
Zurück
Oben Unten