Archive for the 'Computer' Category

Telefonnummern von ownCloud/Carddav in die Fritz!Box

01:21

Die Fritz!Box kann sich zwar mit z.B. Googlekonten verbinden, aber immer noch nicht via CardDAV (z.B.OwnCloud). Das ist sehr ärgerlich, da ich mein Googlekonto wegen der heutzutage üblichen Datenschnüffelei nicht mehr für persönliche Daten verwenden möchte.

Also habe ich ein Perl-Skript erstellt, welches eine CardDAV Datei einliest und in eine für die Fritz!Box verständliche Backupdatei übersetzt. Alle vorigen Einträge sind dann weg, aber das macht ja nichts, da ja die ownCloud der Master ist.

Das Skript ist sicher keine Meisterleistung moderner Programierkunst, aber zum einen habe ich schon lange kein Perl mehr programmiert, zum anderen brauchte ich einfach nur eine schnelle Lösung.

Das Skript basiert auf Text::vCard::Addressbook, die Installation war etwas ätzend, da diverse Abhängigkeiten aufgelöst werden mußten.

Als Schmankerl schreibe ich noch die Kontaktbilder in das Verzeichnis fonpix. Diese kann man dann ebenfalls auf die Fritz!Box kopieren (via NAS Funktion).

Für mich hat es seinen Zweck erfüllt, vielleicht mag es auch anderen nützlich sein.

#!/usr/bin/perl -w
use utf8;
use open ':std', ':encoding(UTF-8)';
use Text::vCard::Addressbook; # To read an existing address book file:
use strict;
use warnings;

my $fonpixdir='fonpix';

my $address_book = Text::vCard::Addressbook->new({ 
  'source_file'  => 'Contacts.vcf', 
});

unless(-e $fonpixdir) {
  mkdir($fonpixdir) || die;
}

my @allcards=();
foreach my $vcard ( $address_book->vcards() ) {
    my $vc='<contact><person><realName>'.$vcard->fullname().'</realName>';
    
    my $uid=$vcard->get({ 'node_type' => 'UID' });
    if(defined($uid)) {
        bless $uid, 'ARRAY';
        $vc.='<uniqueid>'. $uid->[0]->{'value'}."</uniqueid>\r\n";
      }


    my $img=$vcard->get({ 'node_type' => 'PHOTO' });
    if (defined $img) {
      my $imgtype='wtf';
      if($img->[0]->is_type('jpeg') || $img->[0]->is_type('image/jpeg')) {
        $imgtype='jpg';      
      }
      if($img->[0]->is_type('png')) {
        $imgtype='png';      
      }
    $vc.="<imageURL>file:///var/InternerSpeicher/FRITZ/fonpix/".$uid->[0]->{'value'}.".$imgtype</imageURL>";
    StoreImage($img,$uid->[0]->{'value'}.".$imgtype");
    }
    $vc.="</person>\r\n";


    my @tels = $vcard->get({ 'node_type' => 'tel' });
    if ($#tels >= 0) {
      $vc.='<telephony nid="'.(1+$#tels).'">';
      my $prio=1;
      my $id=0;
      foreach my $tel ( @tels ) {
        if(defined($tel)) {
          my $teltype="home";
          if($tel->is_type('cell')) {$teltype='mobile'}
          if($tel->is_type('work')) {$teltype='work'}
          $vc.='<number type="'.$teltype.'" prio="'.$prio.'" id="'.$id.'">'.$tel->value()."</number>\r\n";
          $id++;
          if($prio == 1) { $prio-- }
        }
      }
      $vc.="</telephony>\r\n";
    }
    $vc.='</contact>';
    push @allcards,$vc;
}

my $filename='FritzOut.xml';
open(my $out, '>', $filename) or die "Could not open file '$filename' $!";
print $out '<?xml version="1.0" encoding="utf-8"?><phonebooks><phonebook>';
print $out join ("\r\n",@allcards);
print $out '</phonebook></phonebooks>';
close($out);


sub StoreImage {
  my $img = shift;
  my $filename = shift;
  open (FH,">$fonpixdir/$filename") or die;
  binmode FH;
  print FH  $img->[0]->{'value'};
  close FH;
  return 0;
}

Thunderbird und owncloud

21:18

So eine Cloud ist schon nützlich, und wenn man selbst eine betreibt ist es besonders praktisch, wenn man seine Kontakte auf allen Geräten damit aktuell halten kann. So auch im Mailprogramm Thunderbird. In der ownCloud Dokumentation steht auch gut beschrieben wie man vorgehen muß, z.B. das Sogo Connector Add-On zu installieren. Aber trotz aller Konfigurationsversuche konnte ich das ownCloud Remoteadressbuch nicht zum synchronisieren bewegen. Es tat einfach nicht was es sollte, und das ohne irgendwelche Fehlermeldungen. Überraschend fand ich dabei auch, das es für die ownCloud Verbindung zwar eine URL wollte, aber keinen Benutzernamen oder Passwort. Beim weiter googeln fand ich dann im Github-Forum des Hinweis, das man auch das Lightning Add-On installieren muß. Das wird zwar offiziell eigentlich nur für den Kalender benötigt, aber offenbar ist es auch für die Kontaksynchronisation essenziell. Wie soll man denn da drauf kommen? Aber siehe da…jetzt funktioniert es.