Gammu

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Infrarotverbindung konfigurieren

  3. Bluetooth-Dienste einrichten

  4. Einen Editor öffnen

  5. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Installation
  2. Konfiguration
  3. Benutzung
    1. SMS versenden
    2. SMS abrufen
    3. Automatisierung
      1. Kalender -> Mobiltelefon
      2. SMS komfortabel über die Kommandozeile...
  4. Weblinks

Gammu 🇬🇧 (GNU All Mobile Management Utilities) ist eine Bibliothek um Mobiltelefone (vornehmlich Nokia) anzusprechen. Es ist möglich über Bluetooth, Infrarot oder Kabel Verbindung zu einem Handy aufzunehmen und Daten zu bearbeiten. Fast alles kann editiert werden: Telefonbuch, SMS, Kalender, Aufgaben. Eine graphische Oberfläche bietet das Programm Wammu oder KMobileTools, in diesem Artikel wird auf die Kommandozeilenversion eingegangen.

Achtung: Mobiltelefone mit der Symbian 60 Series 3rd Edition werden von Gammu nicht unterstützt! Bei diesen Telefonen sollte besser auf die Software series60-remote zurückgegriffen werden, die diese Telefone unterstützt.

Installation

Gammu befindet sich in den offiziellen Ubuntu-Paketquellen und kann über die Paketverwaltung installiert [1] werden.

Paketliste zum Kopieren:

sudo apt-get install gammu 

Oder mit apturl die Pakete installieren. Link: apt://gammu

Konfiguration

Vor der Konfiguration sollte man eine Verbindung mit dem Telefon vornehmen. Für Infrarot genügt das Aktivieren und Konfigurieren [2] der Infrarotverbindung im Handy und das Positionieren neben dem Infrarotanschluss am Rechner, Bluetooth muss ebenfalls aktiviert werden und das Handy gepaart werden [3], für eine Kabelverbindung muss dieses lediglich eingesteckt werden.

Die versteckte Konfigurationsdatei heißt .gammurc und befindet sich im Homeverzeichnis. Man öffnet sie einfach in einem Texteditor.[4] Der Minimalaufbau der Konfigurationsdatei ist unten beschrieben. Den exakten Aufbau erklärt Setting configuration file 🇬🇧 im Gammu Wiki. Hilfreich ist neben Connecting to phone 🇬🇧 im Gammu Wiki auch die Phone Database 🇬🇧 mit bekannten funktionierenden Konfigurationen.

[gammu]
port=Bluetooth-Addresse oder Pfad zum Geräteanschluss
connection=Verbindungstyp
model=auto (hier auto stehen lassen außer das Gerät wird nicht erkannt)
name=beliebiger Name

Benutzung

Man öffnet ein Terminal [5]. Um zu testen ob die Konfiguration funktioniert bietet sich folgender Befehl an:

gammu --identify 

Gammu sollte sich verbinden und nach kurzer Zeit Information über das Handy anzeigen.

SMS versenden

Folgender Skript-Einzeiler erlaubt das Versenden einer SMS durch direkten Aufruf im Terminal.[5] Der SMS-Text steht in "Anführungszeichen", --sendsms ist die Funktion zum SMS verschicken, TEXT ist ein Parameter für diese Funktion und 0123456789 ist die natürlich anzupassende Handy-Nummer des Empfängers.

echo "Hallo! Ich bin ein Gammu-Test." | gammu --sendsms TEXT 0123456789 

SMS abrufen

Man öffnet ein Terminal [5]. Dann gibt man folgenden Befehl ein, um alle empfangenen SMS abzurufen:

gammu --getallsms 

Automatisierung

Kalender -> Mobiltelefon

Mit folgendem Shell-Skript lässt ein Kalender von Computer auf das Handy übertragen.

1
2
3
4
5
6
7
#!/bin/bash

# Den Pfad zur Kalenderdatei im iCalendar-Format
CALFILE=/home/Benutzer/Desktop/Privat.ics

#Kalender und Aufgaben im Handy löschen, dann Kalenderdatei auf Gerät schreiben
gammu --restore $CALFILE -yes

SMS komfortabel über die Kommandozeile verschicken

Zwei hier vorgestellte Shell-Skripte sollen diesen Aufruf von Gammu etwas komfortabler gestalten. Das eine sendpersonalSMS.sh nimmt einfach einen Parameter der Form Name [069912346..] und den Inhalt der SMS in einem zweiten Parameter, schickt die SMS mit Gammu und speichert sie zum Archivieren in einer im Code definierten Textdatei ab. Das zweite Skript sendmassSMS.sh ist zum Versenden von einer SMS an viele Leute. In einer Text-Datei wird pro Zeile eine Telefonnummer wieder im Format Name [069912346..] angegeben und der Pfad zu dieser Datei wird als Parameter übergeben sowie der Inhalt der SMS.

Wenn der zweite Parameter (Inhalt der SMS) weg fällt, dann fragt das Script mit dem Tool Zenity in einem Dialog nach dem SMS-Inhalt. Absätze kann man dort leider keine Eingeben, aber sehr wohl aus der Zwischenablage einfügen (dh. SMS vorher in einem Editor schreiben).

sendpersonalSMS.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash

# 2009-01-29 lumbricus
# Script zum SMS-Versand mit Gammu
# Syntax zum Aufruf ueber Aufruf mit Parameter --help

# --- Parameter ---
maxchars=600    # Maximale Laenge von SMS
empfaenger=$1       # Pfad zur Datei mit den Nummern
text=$2         # Text der per SMS versendet werden soll
archivedatei='~/sent-with-gammu'

# ------------------

# Bekannte Probleme:
#   - bei SMS mit mehr als $maxchars gibts vielleicht seltsame Effekte (abgeschnitten?)
#   - 

# Gib Hilfetext aus...
if [ "$1" = '--help' ] || [ "$1" = "h" ] || [ "$1" = "help" ]
then
  echo 'sendpersonalSMS v0.1 - 2009-01-29 PR

sendpersonalSMS NUMMER [TEXT]

NUMMER		Emfpaenger-Nummer im Format: Name [0699123..]
		Achtung 0043699... geht nicht!
		es geht nur: +43699... oder 0699...	

TEXT		Inhalt der SMS
		Wenn nicht angegeben, fragt ein Dialog nach dem Text.
'
  echo  
  exit 0
fi

# Wenn Parameter $nummer keine Telefonnummer ist...
if ! (echo "$empfaenger"|egrep -q '\[[0-9+]+\]')
then
  echo "Keine gueltige Telefonnummer uebergeben."
  echo "Mehr mit '--help'."
  echo  
  exit 0
fi

# Wenn Parameter 2 leer ist, , dh. kein Text zum verschicken,
# frag nach dem Text...
if [ -z "$text" ]
then
  text=$(zenity --entry --title='Nachrichtentext eingeben' --text='Bitte Nachrichtentext eingeben:' --width=400)
  if [ -z "$text" ]; then
    echo 'Texteingabe und SMS-Versand abgebrochen.'
    echo 
    exit
  fi  
fi

echo "Versende die SMS, ${#text} Zeichen:"
echo "$text"
echo 
echo "Versende SMS an:"
echo "$empfaenger"
echo 
echo "Any key to continue or [Ctrl] + [C] to abort or '--help' for help."

# Lies ein Zeichen ein...
read -n 1
echo



# Zum archivieren der SMS inklussive Ergebnis von gammu...
#$(date +%F_%H.%M.%S)

# SMS + Datum in Logfile schreiben...
echo "[$(date '+%F %H:%M:%S')] -> $empfaenger" >> "$archivedatei"
echo "$text" >> "$archivedatei"
echo '------- Gammu-Result -------' >> "$archivedatei"


nummer=$(echo "$empfaenger"|egrep -o '\[[0-9+]+\]'|egrep -o '[0-9+]+')
	
# Verschicke die SMS...
echo
echo "$text"|gammu --sendsms TEXT $nummer -autolen $maxchars|tee -a "$archivedatei"


echo '----------------------------' >> "$archivedatei"
echo >> "$archivedatei"
echo >> "$archivedatei"


echo 
echo '...fertig!'
sendmassSMS.sh

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/bash

# 2009-01-29 lumbricus
# Script zum Massensms-Versand mit Gammu
# Syntax zum Aufruf ueber Aufruf mit Parameter --help

# --- Parameter ---
maxchars=600    # Maximale Laenge von SMS
delay=1         # Verzoegerung zwischen 2 versendeten SMS
list=$1         # Pfad zur Datei mit den Nummern
text=$2         # Text der per SMS versendet werden soll

# ------------------


# Bekannte Probleme:
#   - bei SMS mit mehr als $maxchars gibts vielleicht seltsame Effekte (abgeschnitten?)
#   - 


# Gib Hilfetext aus...
if [ "$1" = '--help' ] || [ "$1" = "h" ] || [ "$1" = "help" ]
then
  echo 'sendmassSMS v0.1 - 2009-01-29 PR

sendmassSMS NUMMERLISTE [TEXT]

NUMMERLISTE		Textdatei mit Liste der Emfpaenger-Nummern.

			Pro Zeile eine Nummer im Format: Name oder so [1234...]
			Alles hinter einem "#" ist Kommentar.
				
			Achtung: 0043699... geht nicht!
			es geht nur: +43699... oder 0699...
	
TEXT			Inhalt der SMS
			Wenn nicht angegeben, fragt ein Dialog nach dem Text.
'
  echo  
  exit 0
fi

# Wenn Parameter 1 keine lesbare Datei ist...
if [ ! -r "$1" ]
then
  echo "Keine gueltige Nummerndatei uebergeben."
  echo "Der erste Parameter beim Aufruf des Scripts muss der Pfad zu einer"
  echo "Textdatei sein, die Empfaengernummern enthaelt. Mehr mit '--help'."
  echo  
  exit 0
fi

# Wenn Parameter 2 leer ist, , dh. kein Text zum verschicken,
# frag nach dem Text...
if [ -z "$text" ]
then
  text=$(zenity --entry --title='Nachrichtentext eingeben' --text='Bitte Nachrichtentext eingeben:' --width=400)
  
  # fuer weiter Versionen des Scripts:
  # Vorbelegung des Wertes mit --entry-text=asdf moeglich
  # so koennte ein Template vorgeschlagen werden, das auch in der Datei mit der
  # Nummerliste steht.
  if [ -z "$text" ];then
    echo 'Texteingabe und SMS-Versand ohne Aenderungen und Versand abgebrochen.'
    echo   
    exit
  fi  
fi

echo "Versende die SMS, ${#text} Zeichen:"
echo "$text"
echo 
echo "Versende SMS an:"
egrep -o '^[^#]*' $list
echo 
echo "Any key to continue or [Ctrl] + [C] to abort or '--help' for help."

# Lies ein Zeichen ein...
read -n 1
echo


# For-Schleife ginge auch, geht aber nicht Zeilen sondern Woerter durch...
# -> fuehrt nicht zu erwuenschtem Ergebnis.
#for empfaenger in `egrep -o '^[^#]*' list`; do
#do
#	echo $empfaenger
#done


# Zum archivieren der SMS inklussive Ergebnis von gammu...
logfilename=$list$(date +%F_%H.%M.%S)

# SMS + Datum in Logfile schreiben...
echo "[$(date '+%F %H:%M:%S')]" > "$logfilename"
echo "$text" >> "$logfilename"
echo '---' >> "$logfilename"

i=1
numberofsms=$(egrep -o '^[^#]*' $list|egrep -o '\[[0-9+]*\]'|egrep -o '[0-9+]*'|wc -l)

# Gehe die Textdatei $list Zeilweise durch, wobei alles nach '#'
# entfernt wird (Kommentar) und dann leere Zeilen nicht mehr dabei sind.
# Jeweils eine solche Kommentarbereinigte Zeile steht in $empfaenger...
egrep -o '^[^#]*' $list|while read empfaenger; do
	# Finde die Nummer in [  ] und speichere nachher nur die Nummer ohne [ ]
	nummer=$(echo $empfaenger|egrep -o '\[[0-9+]*\]'|egrep -o '[0-9+]*')
	
	# Wenn die $nummer nicht leer ist nach Entfernung von ungueltigen Zeichen
	# verschicke die SMS...
	if [ ! -z "$nummer" ]; then
		echo |tee -a $logfilename
		echo "Sende an $empfaenger... (Empfaenger $i von $numberofsms)"|tee -a "$logfilename"
	
		# Damit das Handy sich nicht ueberanstrengt... ;)
		# (Und man auch eine Chance bekommt abzubrechen)
		sleep $delay
		
		echo "$text"|gammu --sendsms TEXT $nummer -autolen $maxchars|tee -a "$logfilename"
		
		i=$(($i+1))
	fi
done 


echo 
echo '...fertig!'