Überstunden-Tracking mit R und IFTTT

Der Europäische Gerichtshof will, dass Arbeitgeber die Arbeitszeit ihrer Mitarbeiter erfassen. Bis das eingeführt wird, behelfe ich mir selbst. Ein Urteil aus Luxemburg hat die Arbeitgeber ziemlich durchgeschüttelt. Der Europäische Gerichtshof hat entschieden, dass Arbeitgeber die Arbeitszeiten von ihren Angestellten systematisch erfassen müssen. Für die Arbeitgeber das Ende der flexiblen Arbeitszeiten und der Vertrauensarbeitszeit. Für die Angestellten aber wohl die Chance auf mehr Gesundheit. Denn Überstunden machen krank, hat zumindest eine Studie der Unis Halle-Wittenberg und Erlangen-Nürnberg für Angestellte im öffentlichen Dienst herausgefunden. Nicht nur deshalb, sondern vor allem, weil ich einen Überblick über meine Arbeitszeiten haben wollte, habe ich im Januar begonnen, zu tracken, wann ich meine Arbeit betrete, und wann ich sie verlasse. Das klappt gut, wenn man einen festen Ort hat, den man morgens betritt. Mein Handy erkennt, wann ich die Arbeit betrete und verlasse Ich nutze für mein Tracking IFTTT. Das steht für If This Then That eine Webseite, auf der die Nutzer verschiedene Webanwendungen zusammenbinden können. In meinem Fall benutze ich deren App auf meinem Handy mit einem sogenannten Geo-Fencing. Wie der Name andeutet, lege ich einen umzäunten Bereich fest, durch den eine Aktion ausgelöst wird, wenn ich ihn betrete oder verlasse. In meinem Fall schreibt die App dann die Uhrzeit und entered oder exited in ein Google Spreadsheet. So sieht das Google Spreadsheet mit den Rohdaten aus. Diese Apps könnte man selbst entwickeln. Bei IFTTT ist die Infrastruktur aber schon vorhanden. Und andere Entwickler haben diese Schnittstellen schon gebaut. Ich konnte sie also ganz einfach wiederverwenden. So sieht das Applet in IFTTT aus. Von den Daten zur Auswertung Die Daten laufen also seit Januar in das Spreadsheet ein. Doch ich wollte ja auch irgendwie davon profitieren, dass ich diese Daten erhebe. Meine Idee: Jeden Freitag bekomme ich eine Übersicht meiner Überstunden für die vergangene Woche per Mail geschickt. Zunächst habe ich ein Auswertungsskript geschrieben. Dafür nutze ich diese Bibliotheken in R: library("stringr") library("lubridate") library("dplyr") library("ggplot2") library("mailR") In meinem Workflow downloade ich die Daten aus dem Spreadsheet und arbeite dann mit ihnen weiter. Das geht ganz einfach mit einem Spreadsheet, das öffentlich gestellt wurde. Das kann man als CSV herunterladen: https://docs.google.com/spreadsheets/d/[ID zum Spreadsheet]/export?format=csv In R wandle ich die computer-ungeeignete Datumsangabe in ein Format um, mit dem ich weiterrechnen kann. Außerdem berechne ich Wochentag und Kalenderwoche: d %>% mutate(date = as.POSIXct(date, format = "%B %d, %Y at %I:%M%p"), week_number = isoweek(date), weekday_number = factor(weekdays(date, FALSE), levels = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"))) -> d Und dann gibtss auch schon erste Ergebnisse. Ich berechne für jeden Arbeitstag die Differenz zwischen den Soll- und Ist-Stunden. Weil ich 36,5 Stunden in der Woche arbeiten muss, komme ich auf 7,3 Stunden pro Tag (ohne Pausen). Das fasse ich dann nach KWs zusammen: d_distinct %>% arrange(date) %>% group_by(date(date)) %>% tidyr::spread(status, date) %>% mutate(working_hours = as.duration(interval(entered, exited))) %>% ungroup() %>% group_by(week_number) %>% summarize(no_workingdays = n(), sum_workinghours = sum(as.numeric(working_hours), na.rm = TRUE) / 3600, workingtime_todo = no_workingdays * 7.3, overtime = round(sum_workinghours - workingtime_todo, 2)) %>% arrange(week_number) Das Ergebnis sieht in R so aus: Die Wochenarbeitszeiten in R Mit zwei Filterbefehlen kann ich aus diesen Daten schon ein bisschen Text für meine Mail generieren: filter(week_number == max(d_results$week_number)) %>% select(overtime) %>% .[[1]] -> this_week_overtime berechnet mir, wie viele Überstunden ich in der vergangenen Woche gemacht habe. Mit einem if_else bekomme ich dann eine Aussage, welches Vorzeichen dieser Wert hat und kann daraus Worte generieren: over_under_time = if_else(this_week_overtime >= 0, "zu viel", "zu wenig") Das Ergebnis wird dann zu text_result zusammengebunden und ergibt den veränderbaren Text für meine Mail: text_result = paste0("Du hast in der vergangenen Arbeitswoche insgesamt ", round(abs(this_week_overtime), 2), " Stunden ", over_under_time, " gearbeitet.") Damit das ganze anschaulicher wird, gebe ich außerdem noch zwei Grafiken aus. Der E-Mailtext body_text selber ist eigentlich nur ein Zusammenfügen von Bruchstücken in HTML: body_text = paste0('<html>','<p>Hallo Benedict, <br>hier kommt dein freitägliches Arbeitszeitupdate.</p>', '<p>', text_result, '</p>', '<h3>So verteilen sich die Arbeitsstunden in dieser Woche:</h3><br>', '<img src="', here::here(), '/this_week.png", style = "width: 100%; height: auto"><br>', '<h3>So viele Überstunden gab es in den vergangenen Wochen</h3><br>', '<img src="', here::here(), '/last_weeks.png", style = "width: 100%; height: auto"><br>', '</html>') Mit der Bibliothek MailR verbinde ich mich dann mit meinem Mailaccount und schicke die Mail ab: send.mail(from = XXX, to = XXX, subject = "Arbeitszeiten", body = body_text, html = TRUE, inline = TRUE, smtp = list(host.name = "X", port = X, user.name = "X", passwd = "X", ssl = TRUE), authenticate = TRUE, send = TRUE) Das Ergebnis sieht dann auf dem Handy so aus: Screenshot aus der Arbeitszeiten-Mail auf dem Handy Der Beitrag Überstunden-Tracking mit R und IFTTT erschien zuerst auf Benedict Witzenberger.

zum Artikel gehen

Wann muss ein Arbeitgeber Überstunden bezahlen?

Das Bundesarbeitsgericht hat sich mit der Frage befasst, wann ein Arbeitgeber Überstunden vergüten muss ( BAG 5 AZR 517/09 ). Klage auf Bezahlung der Überstunden Im konkreten Fall hatte ein Arbeiternehmer gegen seinen Arbeitgeber auf Bezahlung der Übe

zum Artikel gehen

ECONDA bietet leistungsstarkes Server-Side-Tracking zusammen mit JENTIS

ECONDA und JENTIS haben einen neuen Konnektor entwickelt und ermöglichen nun ECONDA Analytics-Kund:innen den nahtlosen Zugang zum fortschrittlichen Server-Side-Tracking. The post ECONDA bietet leistungsstarkes Server-Side-Tracking zusammen mit JENTIS appe

zum Artikel gehen

Nackt

Ich sollte mich ausziehen. Viele Notfälle, sagte die Eine. Liegt am Vollmond, sagte die Andere. Hektische Handgriffe, konzentrierte Frauengesichter. Sie sehnten ein Ende der Überstunden herbei. Die Eine gab mir einen grünen Umhang, zog das Bändchen am Rüc

zum Artikel gehen

Create issues in Jira from Security Hub findings

AWS Security Hub allows you to get and manage an aggregated view of security findings in your AWS Accounts. Different companies require to have all findings tracked within their issue-tracking system, like Jira. Manual interaction is out, so let’s a

zum Artikel gehen

Active Agent: SwitchIn XXL Harmonisierung ermöglicht verbesserte Aussteuerung von programmatischen ATV-Kampagnen

Ab sofort stehen über die Active Agent DSP harmonisierte Spezifikationen für die Buchung  der Formate ‘SwitchIn XXL’ und ‘SwitchIn XXL Animated’ zu Verfügung. Hierdurch können mit nur einem Creative programmatische Addressable TV Kampagnen sowohl auf Inve

zum Artikel gehen