vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
По примеру [livejournal.com profile] tobotras. Так долго тормозил потому, что нужно было дождаться, пока выйдет версия gammu, которая поддерживает Nokia 3109c.

В чем отличия моего сетапа от тоботрасовского:
1. Я точно знаю, что rfcomm bind для работы gammu не нужен, и точно знаю куда класть PIN
2. Телефонов бэкапится пока два (мой и жены), но если вдруг в доме появятся еще, то прописать их тоже должно быть легко. Мне очень не понравилось то, что в варианте Бориса BT-адрес телефона должен быть записан в два места - в сам скрипт и в ~/.gammurc.
3. Bluetooth на телефонах обычно включен, а вот discoverability - хрен. Поэтому использовать для обнаружения телефона hcitool, как это делает Борис - нельзя.
4. Историю изменений записной книжки хочется хранить, используя для этого минимум места. Поэтому сбэкапленная база чекинится в RCS.
\
Поэтому я написал скрипт, который читает .gammurc, и проверяет наличие телефона, адрес которого там указан, посредством sdptool search DUN. Честно сказать, не пытался разбираться, какой именно профайл использует gammu (возможно - разный для разных типов соединения), но уж DUN-то на телефоне всяко есть.

Из-за необходимости парсить .gammurc скрипт написан на perl, а не на shell.


#!/usr/bin/perl
my $workdir="$ENV{HOME}/backup/phones";
my $config="$ENV{HOME}/.gammurc";
chdir $workdir or die "Cannot chdir to $workdir:$!\n";
# Читаем конфиг
open F,"<",$config or die "Cannot open .gammurc for user $ENV{LOGNAME}:$!\n";
my $section;
my $address;
my $comment;
my %phones=();
while (<F>) {
    $section = $1 if /\[\s*gammu(\w+)\s*\]/ ;
    $phones{$section}=$1 if /port\s*=\s*([0-9a-fA-F:]{17})\s*$/;
}
close F;
PHONE:
while (my($id,$address) = each %phones)  {
    print STDERR "checking phone $id btaddr $address\n";
    # Проверяем, что указанный телефон был сбэкаплен менее суток назад
    my $stamp= -M "phone$id.backup";
    next PHONE if (defined $stamp &&$stamp<1);
    # Проверяем, что указанный телефон виден по bluetooth
    my @data=`sdptool search --bdaddr $address DUN`;
    print join("\n",@data),"\n";
    next PHONE if !grep (/Channel/, @data);
    system "gammu $id backup phone$id.tmp -yes";
    system "iconv -f UCS-2BE -t utf-8 phone$id.tmp >phone$id.backup";
    unlink "phone$id.tmp" if $?>>8 == 0;
    system "ci -l -m. phone$id.backup";
}



Пользоваться этим так:
1. Настраиваем в .gammurc отдельную секцию c именем [gammuN] для каждого телефона
2. Запускаем какую-нибудь утилиту для ввода PIN (мой btpasskey или какой-нибудь bluez-gnome) и тестируем конфиг запуском gammu вручную. Заодно и pin запишется куда надо.
3. Запускаем скрипт вручную в первый раз. При первом чекине в RCS оно потребует ввести message со stdin.
Можно даже и ввести что-нибудь осмысленное. При последующих чекинах (при существующем файле ,v) вопросов уже не будет, опция -m в скрипт забита.
4. Прописываем скрипт в crontab, например каждые 15 минут.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

July 2025

S M T W T F S
  12345
6789 1011 12
13141516 17 1819
20212223 242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 26th, 2025 05:12 pm
Powered by Dreamwidth Studios