Meine Frau hat mich auf ein Problem aufmerksam gemacht, das wohl im Zusammenhang mit der DSGVO entstanden ist. Früher wurden wir an Geburtstage erinnert, weil diese in uinserem Telefon oder Web-Kalender von Google eingeblendet wurden. Also immer dann, wenn wir für einen Freund bei dessen Kontaktdaten einen Geburtstag hinterlegtt hatten, dann gab es im Google-Kalender einen Eintrag dazu. Praktisch wenn ma mal schnell gucken will, wer diesen Monat Geburtstag hat. Doch seit einiger Zeit geht das nicht mehr. Und anscheinend ist die Datenschutzgrundverordnung daran schuld.
Death by regulator
Mit ein wenig Suchen kommt man irgendwann zu dieser Seite die erklärt, wei man Geburtstagserinnerungen aus den Kontakten in den Kalender einblendet. Außer man befindet sich in Deutschland, denn dafür gibt es einen extra Hinweris:
Wichtig: Im Rahmen einer Vereinbarung mit einer deutschen Regulierungsbehörde ändern wir die Verarbeitung personenbezogener Daten. Daher ist diese Funktion möglicherweise gar nicht oder nur teilweise verfügbar.
Und genau das scheint passiert zu sein. Also um das mal zu rekaptiulieren:
- Der Geburtstag meines Kontaktes steht im entsprechenden Feld innerhalb von Google Contacts.
- Der Kalender und Contacts sind miteinander verknüpft
- Doch es ist nicht möglich, den Geburstag im Kalender anzuzeigen.
Wenn ich also Geburtstage im Kalender haben will, dann soll ich doch bitteschön für jeden Geburstag einen wiederholenden Kalendertermin anlegen. Das ist dann sozusagen der Rücksturz in die Steinzeit der IT als sogenannte „Datentypist:innen“ hauptberuflich Computerausdrucke abgetippt haben um die Daten von einem Format in ein anderes Format zu bekommen.
Das muss auch anders gehen
Hey, wir schreiben das Jahr 2024. Und mein Informatiker-Stolz weigert sich, das als „geht nicht“ zu akzepieren. Also habe ich mir eine Lösung gebastelt, allerdings explizit nicht für ein proprietäres System wie Google, sondern für Home Assistant der OpenSoruce ist.
Was brauche ich dazu:
Aus dem HACS (Home-Assistant-Community-Store) installieren wir die Anwendung „Anniversaries„. Diese wird über eine Liste an Geburtstagen im YAML-Format konfiguriert.
1 2 3 4 5 6 7 8 |
# Example configuration.yaml entry anniversaries: sensors: - name: Shakespeare's Birthday date: '1564-04-23' - name: Shakespeare's Wedding Anniversary date: '1582-11-27' |
So, und wie bekomme ich jetzt meine Daten da rein. Abtippen gilt nicht, wir wollen das ja automatisiert machen. Also rufen wir in Google die Seite auf, mit der wir die bei Google vorhandenene Daten runterladen können. Dort erst mal auf „Auswahl aufheben“ klicken und dann runterscrollen zu den Kontakten. Hier wählen wir das mit dem Häkchen als Exportquelle aus und mit dem Button wechseln wir vom vCard-Format zum CSV-Format.
Dann ganz unten auf „Nächster Schritt“ klicken und bestimmen, wo die Datei landen soll.
Am Ende habt ihr wahrscheinlich ein ZIP-Archiv mit den exportierten Daten. Wenn ihr das Enpackt sollte es unter irgendwo die CSV mit allen Kontakten geben. Die habe ich dann einfach ins lokale Verzeichnis gepackt und in contacts.csv umbenannt.
Dann kommt dieses schnell zusammengeschusterte Perl-Skript zum Einsatz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/usr/bin/perl -w use Text::CSV_XS; my @rows; # Read/parse CSV my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1 }); open my $fh, "<:encoding(utf8)", "contacts.csv" or die "contacts.csv: $!"; while (my $row = $csv->getline ($fh)) { if ($row->[13] ne '' && $row->[13] ne 'Birthday') { print " - name: $row->[0] "; if ($row->[2] ne '') { print "$row->[2] ";} print "$row->[3]\n"; print " date: '$row->[13]'\n"; } } close $fh; |
Diesees Skript liest die CSV-Datei die wir gerade aus Google geholt haben ein und macht daraus für alle Datensätze bei denen unter „Birthday“ was steht zwei Zeilen YAML-Code die dann in der ersten Zeile „- name: “ und den aus Vornamen, Middlename (so vorhanden) und Nachnamen zuisammengestzen namen. In der nächsten Zeile dann wie erforderlich „date:“ und das als Geburtstag hinterlegte Datum.
Das kann ich jetzt in eine Datei leiten, die dann im Editor öffnen und bei Geburstagen die in der Form „MM-DD“ hinterlegt sind noch schnell den vom Google-Export eingefüten “ –“ durch nix ersetzen. Dann kann man diese Daten in den Konfigruationseditor in Home Assistant kopieren, abspeichern und einmal Home-Assistant neu starten. Und schon hat man für zukünftige Geburtstage die Daten im Kalender von Home Assistant eingetragen.
Und natürlich kann ich für mein Home Assistant Dashboard auch eine Liste der Geburstage der nächsten 7 Tage anzeigen. Das sieht dann z.B. so aus:
Und da für jeden eingetragenen Geburstag ein „Sensor“ angelegt wird kann ich mir dann auch eine Automation basteln die mir z.B. bei den Leuten denen ich was schenken will einige Zeit vorher eine Nachricht schickt, dass ich noch ein Geschenk zu besorgen habe.
Und das zu implementieren ging jetzt wahrscheinlich sogar schneller als die Geburstage manuell von Google Contacts in den Google Kalender zu übertragen.