- Package: master/make/pkgs/callmonitor/
- Maintainer: -
Der Callmonitor ermöglicht es, bei eingehenden Anrufen auf einer FritzBox beliebige Aktionen auszuführen, abhängig davon, wer wen anruft. Beliebt sind das Senden von Benachrichtigungen an verschiedenste Arten von "Boxen" (TV/Sat-Receiver, Spielekonsolen, PCs) oder das Aufwecken von Geräten (Wake on LAN).
Dabei kann über eine Rückwärtssuche in Internet-Telefonbüchern oft auch der Name des Anrufers angezeigt werden.
Das Besondere an diesem Callmonitor (leider gibt es viele Projekte mit ähnlichem Namen) ist, dass er komplett auf der Fritzbox läuft; es ist also nicht nötig, weitere Rechner eingeschaltet zu haben.
Der Callmonitor ist als Paket im Rahmen von Freetz (Forum) realisiert, und kann bei dessen Installation einfach ausgewählt werden.
Das Callmonitor-Paket kann nicht als Addon-Paket installiert werden.
Bitte beachtet: Mit Freetz 1.1 können nur Callmonitor-Version bis 1.15 eingesetzt werden. Callmonitor 1.15.1 und höher benötigen Änderungen, die in Freetz 1.2 oder der Freetz-Entwicklerversion enthalten sind.
Zum Einbinden der aktuellsten Version aus der Entwicklerversion in Freetz 1.2 kann man so vorgehen (im Wurzelverzeichnis von Freetz):
svn switch http://svn.freetz.org/trunk/make/callmonitor/callmonitor.mk make/callmonitor/callmonitor.mk
Die Konfiguration des Callmonitors nimmt man sinnvollerweise in mehreren Schritten vor, die sich auf verschiedene Seiten im Web-Interface von Freetz verteilen:
- Basiskonfiguration durchführen (im Folgenden beschrieben)
- Listeners für bestimmte Aktionen definieren
- mit einem Testanruf die Konfiguration testen
Auf der Seite Pakete-Callmonitor des Web-Interfaces lassen sich einige grundlegende Einstellungen vornehmen.
Als erstes wählt man den Starttyp - normalerweise "Automatisch", da der Callmonitor sonst nach jedem Neustart der FritzBox per Hand gestartet werden muss. Sollte es Probleme geben, kann man noch zusätzlich die Debug-Ausgaben aktivieren, was jedoch normalerweise unnötig ist.
Der nächste Block bietet lediglich Links zu den Listeners und zur Durchführung von Testanrufen.
Im folgenden Block lassen sich die Standort-Angaben (Landes- und Ortsvorwahl) noch einmal überprüfen und über einen Link zum AVM-WebGUI auch anpassen. Es ist zu beachten, dass Änderungen der Landes- und/oder Ortsvorwahl erst auf der Callmonitor-Seite angezeigt werden, wenn der Callmonitor neu gestartet wurde.
So weit sind wir aber noch nicht, vorher sind noch die Einstellungen zur Rückwärtssuche im dritten Block zu überprüfen. Sie kann komplett deaktiviert werden, dafür ist die Checkbox vor "Rückwärtssuche durchführen bei" zuständig. Möchte man sie benutzen, kann der "Dienst für die Rückwärtssuche" ausgewählt werden, an den die Anfragen geschickt werden. Achtung: Diese Funktion setzt eine bestehende Internetverbindung voraus - es empfiehlt sich also irgendeine Art von always-on Flatrate für den Internetzugang zu verwenden (z.B. Volumentarif, komplette Flat).
Falls die Telefonnummer nicht gefunden werden kann (z.B. weil der Teilnehmer der Rückwärtssuche widersprochen hat), wird ersatzweise die Vorwahl bei dem dort ausgewählten Dienst nachgeschlagen. Dadurch kann zumindest der Ort angezeigt werden. Zum Schluss kann noch ausgewählt werden, ob die Ergebnisse der Rückwärtssuche dauerhaft im Telefonbuch (also im Flash der Box) oder flüchtig (d.h. bis zum Neustart) im Speicher abgelegt werden. Es ist auch möglich, die Zwischenspeicherung ganz abzuschalten. Dann wird die Rückwärtssuche immer wieder neu durchgeführt, selbst wenn dieselbe Rufnummer schon einmal nachgeschlagen wurde.
Die Einstellung "Vorwahl für lokale Rufnummern" wird benötigt, da im Ortsnetz nicht (immer) die Vorwahl mit übertragen wird. In aktuellen Versionen wird die Vorwahl automatisch aus den Einstellungen zur Internettelefonie übernommen (in der Weboberfläche von AVM).
Als nächstes müssen sogenannte Listeners definiert werden, die dann bei eingehenden Anrufen die gewünschte Aktion starten. Genaueres hierzu auf einer speziellen Seite für die Listeners.
Sind die Listeners einmal definiert, kann und sollte man sie mit einem Testanruf ausprobieren. Dafür kann man natürlich einen echten Anruf machen - allerdings hat man oft nicht die Möglichkeit, spezielle Regeln zu testen. Daher gibt es die Möglichkeit, einen Testanruf über das Web-Interface zu generieren.
Die Ausgaben des Testanrufs und ggf. die Debug-Meldungen (siehe oben, um das log zu sehen vorher in freetz-konfig diese option aktivieren um sie in das image einzubauen) geben in den meisten Fällen ausreichend Hinweise, warum die Aktion nicht ausgeführt wurde bzw. der Callmonitor nicht startet. Außerdem lohnt sich auch ein Blick auf die Wartungsseite - falls die Callmonitor-Schnittstelle deaktiviert ist, kann dieser auch nicht funktionieren. Einschalten mit einem Anruf der Fritzbox von einem angeschlossenem Telefon aus mit der Nummer: #965 kann helfen. Wenn das alles nicht weiterhilft, kann man auf der Forumsseite für Fragen und Diskussionen Unterstützung bekommen.
Die Listeners-Datei enthält eine Liste von Regeln, die festlegen, welche Aktionen unter welchen Bedingungen ausgeführt werden sollen.
Leerzeilen werden ignoriert, ebenso Zeilen, die mit # beginnen (das sind Kommentare).
Jede Regel steht in einer Zeile und besteht aus vier Angaben, die durch Leerraum getrennt in dieser Reihenfolge aufeinander folgen:
- Ereignis
- Quellrufnummer: Muster für SOURCE
- Zielrufnummer: Muster für DEST
- Aktion: Beliebiger Shell-Code
Die beiden Muster für SOURCE und DEST sind "extended regular expressions" (ERE), wie sie von egrep verstanden werden. Das Ereignis (ein-/ausgehender Anruf; Klingeln, Annahme, etc.) wird mit der unten angeführten Syntax angegeben.
Man kann negative Muster bei den Listeners verwenden, indem man ein
Ausrufezeichen voranstellt: !123
passt auf alle Nummern, die nicht
irgendwo 123 enthalten.
Beispiele:
Muster passt auf
---------------- ---------------------------------------------------------------------
`^` alle Nummern
`^034` Nummern, die mit 034 beginnen
`4563$` Nummern, die auf 4563 enden
`!^(045|0164)` Nummern, die **nicht** mit 045 oder 0164 beginnen
`^0123456$` nur genau die Nummer 0123456
`^04553...$` die Nummern, bei denen nach 04553 genau drei weitere Zeichen folgen
---------------- ---------------------------------------------------------------------
Alle Regeln werden parallel abgearbeitet; eine bestimmte Reihenfolge ist nicht garantiert.
Damit die Listeners über das Webinterface von Freetz bearbeitet werden können, muss dessen Sicherheitsstufe auf 0 gesetzt werden. Das ist nötig, da über die Listeners beliebiger Code ausgeführt werden kann.
Seit Version 1.0 des Callmonitors gilt folgendes Format für die Listeners, mit dem auf bis zu acht verschiedene Ereignisse unterschiedlich reagiert werden kann:
- *:request: Anruf kommt an (es klingelt)
- *:cancel: Anruf wurde abgebrochen, bevor eine Verbindung zustande kam (so kann man direkt auf "verpasste Anrufe" reagieren)
- *:connect: Verbindung beginnt
- *:disconnect: Verbindung wurde beendet
Dazu kommt die Unterscheidung zwischen
- in:*: eingehenden und
- out:*: ausgehenden Anrufen.
Das ergibt folgende Menge von Ereignissen:
| *:request *:cancel *:connect *:disconnect
----------- --------------- -------------- --------------- ------------------
| in:* in:request in:cancel in:connect in:disconnect
| out:* out:request out:cancel out:connect out:disconnect
----------- --------------- -------------- --------------- ------------------
Dazu passend haben die Listeners eine zusätzliche erste Spalte bekommen, in der (mit Hilfe von Abkürzungen und Wildcards) das gewünschte Ereignis angegeben werden kann, auf das die betreffende Regel reagieren soll:
in:request ^ ^1234$ xboxmessage xbox
in:cancel ^ ^ mailmessage -t [email protected]
out:cancel ^1234$ ^0123 dboxpopup dbox-a "${DEST} geht nicht ran"
*:dis ^ ^ echo "Anruf beendet: ${DURATION} Sekunden" >> log
Es kann mehrere Regeln geben, die auf dasselbe Ereignis passen.
Die Präfixe "NT:", "E:" und "*:" in der SOURCE-Spalte gibt es nicht mehr. Eure bisherige Listeners-Datei (vor Version 1.0) könnt ihr nicht einfach weiterverwenden. Der CallMonitor versucht aber, beim ersten Start eine grobe Konvertierung vorzunehmen, um euch den Umstieg zu erleichtern. Auf jeden Fall solltet ihr aber die Listeners nach der Umstellung einmal kontrollieren.
Die Spalten 2 und 3 in den Listeners sind weiterhin Muster (reguläre Ausdrücke) für Quell- und Zielrufnummer (SOURCE und DEST). Dabei ist jedoch zu beachten, dass in Spalte 2 bzw. 3 die MSNs, also die Internet-Rufnummern, anzugeben sind und nicht wie früher bspw. SIP0 oder SIP1.
Den Aktionen stehen Informationen über den auslösenden Anruf in
Umgebungsvariablen bereit. Sie werden in Shell-Scripten mit einem $
referenziert, also z.B. echo $SOURCE_NAME
.
Variable Inhalt | seit Version
----------------- -------------------------------------------------------------------------------------------------------------------------------------------- -----------------
EVENT das auslösende Ereignis 1.0
ID die ID des Anrufs (direkt von der Callmonitor-Schnittstelle) 1.0
UUID Global eindeutige ID für diesen Anruf (nicht für dieses Ereignis!) 1.20
TIMESTAMP der Zeitpunkt des Ereignisses (im Format "DD.MM.YY HH:MM") 1.0
SOURCE Quellrufnummer ---
SOURCE_DISP "anzeigefreundlichere" Variante von SOURCE (Landesvorwahl weg, Call-by-Call-Vorwahlen weg, etc.) 1.8
SOURCE_NAME Name der Quelle, falls dieser bestimmt werden konnte ---
SOURCE_ADDRESS Die Adresse (Straße, Stadt, Land) ist seit 1.12 separat verfügbar und nicht mehr in SOURCE_NAME enthalten 1.12
SOURCE_ENTRY Der ganze Telefonbucheintrag (entspricht dem SOURCE_NAME vor 1.12) 1.12
DEST Zielrufnummer ---
DEST_DISP "anzeigefreundlichere" Variante von DEST (Landesvorwahl weg, Call-by-Call-Vorwahlen weg, etc.) 1.8
DEST_NAME Name des Ziels, falls dieses bestimmt werden konnte ---
DEST_ADDRESS Die Adresse (Straße, Stadt, Land) ist seit 1.12 separat verfügbar und nicht mehr in DEST_NAME enthalten 1.12
DEST_ENTRY Der ganze Telefonbucheintrag (entspricht dem DEST_NAME vor 1.12) 1.12
EXT die Nebenstelle, sofern bekannt (direkt von der Callmonitor-Schnittstelle) 1.0
DURATION bei *:disconnect die Dauer des Gesprächs in Sekunden 1.0
PROVIDER Dienstleister, über den der Anruf abgewickelt wird ("POTS" für Festnetz oder "SIP0", "SIP1", ... für die verschiedenen SIP-Provider) 1.5
----------------- -------------------------------------------------------------------------------------------------------------------------------------------- -----------------
EXT kann auf einer FritzBox 7050 folgende numerische Werte haben (bei einem eingehenden Anruf liegt diese Information erst ab in:connect vor; vorher ist die Zuordnung ja nicht klar):
Wert Bedeutung
-------- ------------------
0 FON 1
1 FON 2
2 FON 3
3 Durchwahl
4 Fon S0
5 Fon/Fax PC
6 Anrufbeantworter
36 Data S0
37 Data PC
-------- ------------------
Zur Formatierung der Ausgaben stehen folgende Funktionen bereit:
seit Version 1.8:
-
f_duration: zur Darstellung von Zeitdauern als "hh:mm:ss"
f_duration <ZEIT_IN_SEKUNDEN> ZEIT_IN_SEKUNDEN: Zeit in Sekunden, z.B. $DURATION
Beispiel:
echo "Der Anruf dauerte $(f_duration $DURATION)"
führt zu einer Ausgabe
Der Anruf dauerte 1:05:03
falls DURATION den Wert 3903 hat.
Als nützlich kann sich auch die Konstante $LF erweisen, die einen Zeilenumbruch enthält (line feed):
dboxmessage foo.bar "Zeile 1${LF}Zeile 2"
Es gibt mehrere Möglichkeiten, in den Listeners die Ereignisse anzugeben, bei der eine Regel auslösen soll:
-
Vollständige Ereignisnamen:
in:request out:disconnect
-
Abkürzungen des vorderen und/oder hinteren Teils:
in:req out:disc i:r o:d
-
Wildcards für den vorderen Teil (Richtung), den hinteren oder beide:
*:req ou:* *
-
Listen dieser Bestandteile (mit Komma getrennt (Vorsicht, kein Whitespace); die Regel passt, wenn einer der Teile passt):
in:req,out:*
Verpasster Anruf (in:cancel) mailmessage an mehrere Email Adressen versenden:
in:cancel ^ ^ mailmessage -t [email protected],[email protected]
Von einer bestimmten Rufnummer (0401234567) eine festgelegte Rufnummer (0401234568) anrufen und den PC über WOL (Wake on Lan) einschalten:
in:request ^0401234567 ^0401234568 ether-wake -i eth0 00:13:DE:01:A4:DE
Benachrichtigungen über Dreambox mit Enigma2 auf Fernseher anzeigen:
in:request ^ ^ dream2message --user=root --pass=dreambox 192.168.178.104
Benachrichtigung per Email bei Faxempfang:
in:disconnect ^ 0401234567$ mailmessage -s "Faxeingang von $SOURCE"
Ein erfolgreicher eingehender Anruf erzeugt nacheinander folgende
Ereignisse (analog für ausgehende Anrufe mit out:*
):
- in:request
- in:connect
- in:disconnect
Ein Anruf, der abgebrochen wird, bevor die Gegenseite ihn annimmt, erzeugt folgende Ereignisse:
- in:request
- in:cancel
Die Ereignisse sind nicht direkt die Rohereignisse, wie sie an der
JFritz-Schnittstelle (Port 1012) sichtbar sind, sondern entstehen aus
diesen (bei gleicher ID) mit Hilfe eines endlichen Automaten (an den
Kanten sind oben die Eingangsereignisse angegeben, unten die
Ausgangsereignisse; das Ereignis in:accept
wird nur intern benutzt):
Aktionen werden anhand von Regeln ausgeführt, die in den sogenannten Listeners definiert sind. Dabei kann beliebiger der FritzBox bekannter Shell-Code (Programme/Befehle) ausgeführt werden. Die Aktionen müssen im Listener als Parameter übergeben werden (siehe Beispielbild unten für die Aktion dboxpopup), wobei Umgebungsvariablen mit Informationen über den auslösenden Anruf verwendet werden können.
Einige Standardfunktionen werden direkt vom callmonitor bereitgestellt und sind im Folgenden beschrieben. Mit dem Script callaction lassen sich alle Callmonitor-Aktionen von außerhalb (z.B. von der Kommandozeile zum Testen) aus aufrufen.
Wenn man in Verbindung mit checkmaild neu eingetroffene Emails auf
einem VDR ausgeben will, kann man das machen, indem man die Datei
/var/mod/etc/maillog.cfg
z.B. wie folgt anlegt:
#!/bin/sh
# neue Email empfangen
if [ "$1" = "0" ];
then
callaction vdr m741 "Am $6 um $7 Uhr schrieb $8: $9"
fi
Hintergrundinfos zur Datei maillog.cfg
und dem checkmaild Paket kann
man auch hier im Wiki unter checkmaild
nachlesen.
Benachrichtigungen sind dafür da, eingehende und/oder verpasste Anrufe über verschiedene Kommunikationswege und auf verschiedenen Geräten zu signalisieren.
Die vorgegebenen Standardtexte der Funktionen können an die eigenen Bedürfnisse angepasst werden.
Funktionen, die auf getmsg basieren:
- DGStation Relook 400S
- DBox
- DreamBox
- XBox
- Freecom MusicPal
Falls nötig, können beim Aufruf auch Passwörter und Benutzernamen angegeben werden.
Funktionen, die auf rawmsg basieren:
- SoundBridge von Roku
- VDR
- YACwiki}: Yet Another Caller ID Program
Benachrichtung auf ganz anderem Wege:
- mailmessage: Benachrichtigung per Mail
- Samsung TV: Benachrichtigung SOAP-Nachricht
- Snarl: Benachrichtigung für Snarl
- Wählhilfe: Ansprechen der Wählhilfe der FritzBox
- WOL}: Wake on LAN
- Fritz!Box-Konfiguration: WLAN, SIP, Portforwarding ein- und ausschalten
Mit den beiden Basisfunktionen getmsg und rawmsg können auf den Zielmaschinen nahezu beliebige Funktionen ausgeführt werden --- sofern sie dort entsprechend realisiert sind (Start über den Webserver oder Lauschen an einem TCP-Port).
- getmsg: HTTP-GET-Requests
- rawmsg: Nachrichten über "rohe" TCP-Verbindungen
- Aufruf: Hinweise zu Funktionsaufrufen
Auch andere, selbst-definierte Aktionen sind möglich:
- Selbst-definierte Aktionen
CallMon2: auf Windows und Linux laufendes Perl-Skript, http://zephyrsoftware.sf.net/ (dort genaue Informationen zum Einrichten des ganzen!)
Format:
<Rufnummer mit Vorwahl>` `<Name>(`;` <Adresse>)
Ergebnisse der Rückwärtssuche können hier gespeichert werden für schnelleren Zugriff in der Zukunft; natürlich können auch von Hand Nummer-Name-Paare eingetragen oder geändert werden
- 49er-Rufnummern (ohne 00, länger als 10 Zeichen) werden erkannt
- Name des Angerufenen steht zur Verfügung (vor allem für SIP0 bis SIP9); man kann die Zuordnung zu Namen im Telefonbuch (Callers) vornehmen, entweder direkt für SIP0 bis SIP9 oder für Adressen der Form "username@registrar" (das zweite hat den Vorteil, dass man im Telefonbuch nichts anpassen muss, wenn man seine SIP-Accounts in anderer Reihenfolge einträgt). Beim Start werden Kurznamen für alle Accounts generiert und als Vorgabe in die Callers eingetragen.
- Suchstrategie: Erst Nummer unverändert in den lokalen Telefonbüchern (Callers, AVM-Telefonbuch) nachschlagen, dann normalisieren (evtl. Orts- /Landesvorwahl davor; SIP[0-9] wird zu username@registrar) und noch einmal lokal probieren. Dann erst über Rückwärtssuche im Internet probieren.
Die Funktion getmsg
sendet eine Benachrichtigung, indem sie diese per
HTTP GET an einen Webserver schickt. Es ist möglich, die URL (nur Pfad +
Query-String, also den Teil hinter dem Host-Namen) mit
printf-Templates)
anzugeben. Im einfachsten Fall bedeutet dies, dass die Stelle in der
URL, an der die Nachricht eingesetzt werden soll, mit %s
markiert
wird. getmsg
sorgt selbst für die richtige Kodierung der Nachrichten
(URL Encoding).
Usage: getmsg [OPTION]... <HOST> <url-template> [<message>]...
getmsg [OPTION]... -t <url-template> <host> [<message>]...
Send a message in a simple HTTP GET request.
-t, --template=FORMAT use this printf-style template to build the URL,
all following messages are URL-encoded and filled
into this template
-d, --default=CODE default for first parameter (eval'ed later)
-p, --port=PORT use a special target port (default 80)
-w, --timeout=SECONDS set connect timeout (default 3)
-v, --virtual=VIRT use a different virtual host (default HOST)
-U, --user=USER user for basic authorization
-P, --password=PASS password for basic authorization
--help show this help
Die folgenden Funktionen basieren auf getmsg
und unterstützen daher
dieselben Optionen. Passend für den entsprechenden Empfänger sind
URL-Template (-t
), die Standard-Nachricht (-d
) und der Port (-p
)
schon vorbelegt.
*:* ^ ^ getmsg 192.168.0.111 -p 222 -t "/home/phone?event=%s&id=%s&time=%s&source=%s&source_name=%s&destination=%s&destination_name=%s&extension=%s&duration=%s&provider=%s" "${EVENT}" "${ID}" "${TIMESTAMP}" "${SOURCE}" "${SOURCE_NAME}" "${DEST}" "${DEST_NAME}" "${EXT}" "${DURATION}" "${PROVIDER}"
Das obere Beispiel bewirkt einen GET-Aufruf an http://192.168.0.111:222/home/phone mit allen relevanten Daten im Query-String.
dboxmessage (default_dboxmessage)
dboxpopup (default_dboxpopup)
Die Funktion unterscheiden sich nur darin, ob die angezeigte Nachricht von alleine nach einiger Zeit verschwindet oder explizit bestätigt werden muss.
default_dboxmessage und default_dboxpopup haben die Funktion default_dbox als gemeinsame Grundlage.
dboxlcd (default_dboxlcd)
Stellt eine Nachricht auf dem LCD der DBox dar.
Wenn ihr ein Enigma Image auf eurer Box habt und im Popup vor dem eigentlichen Text ein "popup=" oder "nmsg=" erscheint, so könnt ihr wie bei der Dreambox folgenden Befehl nutzen:
dreammessage (default_dreammessage)
Die aus dem Webinterface von AVM bekannte Wählhilfe steht hier als Funktion zur Verfügung (seit Callmonitor 1.1).
dial NUMMER [PORT]
Das erste Argument ist die zu wählende Nummer, das zweite (optional) der Port (1, 2, 3, 50, 51, ...), natürlich ohne die eckigen Klammern.
Die Ports 1 bis 3 sind die analogen Telefonen, 50 alle ISDN-Telefone, ab 51 die einzelnen ISDN-Telefone.
Auflegen ist auch möglich (seit Callmonitor 1.5):
hangup [PORT]
Eigene Aktionen können als Shell-Funktionen in einer oder mehreren
Dateien /tmp/flash/callmonitor/actions.local.d/*.sh
abgelegt werden.
(Es können so auch Standard-Funktionen überschrieben werden, z.B.
default_message()
)
Natürlich können auch beliebige externe Programme aufgerufen werden.
Alle Aktionen, die auf getmsg
basieren, verstehen folgende Optionen,
mit denen man Benutzername und Passwort für das Webinterface der Zielbox
angeben kann:
-U USERNAME
--user USERNAME
-P PASSWORD
--password PASSWORD
Außerdem können die Daten in einer Kurzschreibweise direkt beim Hostnamen angegeben werden:
USERNAME:PASSWORD@HOST:PORT
Also zum Beispiel:
dboxmessage john:secret@mydbox
Das bewirkt das gleiche wie
dboxmessage --user=john --password=secret mydbox
oder
dboxmessage -U john -P secret mydbox
Oder falls die D-Box auf einem anderen als dem Standardport lauscht:
dboxmessage john:secret@mydbox:3818
dboxmessage --user=john --password=secret --port=3818 mydbox
Version 1.15.1 enthält die neue Aktion musicalpalmessage, mit der man Nachrichten auf dem Display eines MusicPals von Freecom darstellen kann. Es werden maximal zwei Zeilen unterstützt; die Anzeigedauer (standardmäßig 25 Sekunden) kann über die Umgebungsvariable MUSICPAL_TIMEOUT verändert werden. Für den Fall, dass die Anzeige vorher freigegeben werden soll, steht die Aktion musicalpalclear bereit.
Einige Beispiele:
# Standardnachricht, Benutzername und Passwort "admin"
musicpalmessage musicpal.domain.my
# eigene Nachricht mit zwei Zeilen, andere Zugangsdaten
musicpalmessage --user="root" --password="secret" musicpal.domain.my "Wichtiger Anruf${LF}von ${SOURCE}!"
# alternative Syntax
musicpalmessage root:[email protected] "Wichtiger Anruf${LF}von ${SOURCE}"
# Nachricht löschen
musicpalclear musicpal.domain.my
Zum Anpassen der Standardnachricht kann die Shell-Funktion
default_musicpalmessage
überschrieben werden.
Die Roku SoundBridge kann auf ihrem Display Nachrichten darstellen. Seit Callmonitor 1.12.4 stehen drei Funktionen zur Ansteuerung zur Verfügung:
sbmessage
(default_sbmessage)
Zur Anzeige einer statischen Nachricht. Mit der Umgebungsvariable
SB_TIMEOUT
kann die Dauer der Anzeige bestimmt werden.
sbmarquee
(default_sbmarquee)
Zur Anzeige eines Lauftexts. Mit der Umgebungsvariable SB_TIMES
kann
festgelegt werden, wie oft die Nachricht wiederholt werden soll.
sbxmessage
(default_sbxmessage)
Zur Anzeige einer statischen, mehrzeiligen Nachricht. Mit der Umgebungsvariable SB_TIMEOUT kann die Dauer der Anzeige bestimmt werden.
VDR: Video Disk Recorder, http://www.cadsoft.de/vdr/
vdr [OPTION]... [MESSAGE]
(default_vdr)
Die Funktion samsung
verschickt eine Benachrichtigung über einen
Telefonanruf mit Hilfe der SOAP-Methode an ein Samsung TV:
samsung {IP des TV}
Also z.B.:
samsung 192.168.178.19
Es werden der Anrufer-Name (sofern im Telefonbuch oder in den Callers eingetragen, ansonsten die Telefonnummer), die angerufene Nummer, sowie Datum und Uhrzeit angezeigt. Die Länge der darstellbaren Zeichen hängt vom Inhalt ab. Wenn nicht mehr Text angezeigt werden kann (z.B. bei Adresszusätzen in den Callers), wird er am Ende abgeschnitten, so dass er mit "..." endet.
Der Listener-Eintrag im Callmonitor kann dazu z.B. so aussehen:
in:request ^ ^ samsung tv
Zum Testen kann man folgendes direkt vom Terminal der Fritzbox ausführen:
callaction samsung tv
Die Funktion samsung_text
verschickt eine Nachricht mit Hilfe der
SOAP-Methode an ein Samsung TV, z.B.:
echo "Hello, world!" | callaction samsung_text 192.168.178.19 \
--from="Absender" --from-number="069 123456" \
--to-number="089 987654" --to="Empfänger" \
--date="2010-05-21" --time="21:56:00"
Analog zum obigen Beispiel werden hier Anrufer-Name und dessen Telefonnummer, Empfänger-Name und dessen Telefonnummer sowie Datum und Uhrzeit angezeigt. D.h. die Nachricht wird mit derselben Methode (SOAP) wie bei der Benachrichtigung über einen Telefonanruf verschickt, zzgl. der o.g. Daten.
Snarl ist ähnlich wie Growl, welches einigen vielleicht bekannt ist, ist ein Benachrichtigungs-Programm ("notification"), welches im Hintergrund läuft und von verschiedenen Programmen etc. angesprochen werden kann. Vorteil ist, dass man so benutzerdefinierte, systemweit einheitliche Benachrichtigungen erhält.
Snarl verwendet ein eigenes Protokoll, welches sich SNP (Snarl Network Protocol) nennt.
Mittels "rawmsg" wird an eine IP (Port 9887) im Netzwerk, an dem Snarl wiederum selbst lauschen muss, eine Nachricht gesendet. Snarl zeigt diese vom Callmonitor über SNP übermittelte Benachrichtigung dann an.
Also z. B. so:
echo -n "type=SNP#?version=1.0#?action=notification#?title=Anruf#?text=${SOURCE}#?timeout=20"$'\r\n' | nc IP 9887
(buehmann hat in diesem Thread gezeigt, wie es geht. Danke!)
Der Listener-Eintrag im Callmonitor kann dazu z.B. so aussehen:
in:request ^ ^ echo -n "type=SNP#?version=1.0#?action=notification#?title=eingehender Anruf#?text=von ${SOURCE} - ($SOURCE_NAME)${LF}für ${DEST_NAME} - (${DEST_DISP})${LF}#?timeout=20#?icon=C:\pic.png"$'\r\n' | nc 192.168.178.20 9887
So könnte eine Benachrichtung von Snarl dann aussehen. Die Angaben betreffend Anrufer, Rufnummer, Ereignis etc., lassen sich ja mittels des Callmonitor entsprechend anpassen bzw. erweitern.
Wichtig: "Curl" oder "getmsg" können [nicht] benutzt werden, diese sind nur für das HTTP (Protokoll) geeignet und funktionieren nicht mit dem SNP von Snarl.
Für diese Funktion muss das XBox Media Center (XBMC) laufen und dort unter Einstellungen → Netzwerk der Webserver aktiviert werden. Ggf. mit den Optionen (s.o.) Port, Username und Passwort übergeben. Das XBMC stellt die Nachricht dann in einem kleinen Fenster dar, das automatisch geschlossen wird.
xboxmessage (default_xboxmessage)
Die XBox erlaubt mit xboxmessage
keine Kommas in den Nachrichten. Der
Titel der Nachricht kann über die Umgebungsvariable
XBOX_CAPTION="Telefonanruf"
beeinflusst werden.
Anzeigedauer und Größe des Fensters können in der Datei
DialogKaiToast.xml
angepasst werden. Je nach gewähltem TV-Typ ist die
jeweilige Datei unter skin\Project Mayhem III\PAL\
oder
skin\Project Mayhem III\PAL16x9\
zuständig. Folgende Überarbeitung der
"PAL"-Datei erreicht ein brauchbares Ergebnis (nur geänderte Zeilen):
...
<coordinates>
<system>1</system>
<posx>275</posx>
<posy>420</posy>
</coordinates>
<animation effect="slide" time="5000" start="300,0">WindowOpen</animation>
<animation effect="slide" time="5000" end="300,0">WindowClose</animation>
...
<control>
<description>Popup Kai Toast Dialog Background</description>
...
<width>400</width>
<height>125</height>
...
<control>
<description>avatar</description>
...
<posx>40</posx>
<posy>25</posy>
...
<control>
<description>Caption Label</description>
...
<posx>46</posx>
<posy>30</posy>
<width>305</width>
...
<control>
<description>Description Button</description>
...
<posx>46</posx>
<posy>46</posy>
<width>305</width>
...
Es gibt außerdem einen
Python-Script,
das eine CallerID-Anzeige auf der Xbox ermöglicht. Dann kann die
Nachricht mit der Funktion yac
an die XBox gesendet werden. Das Script
ist auch im Script
xbmcfritz
enthalten, das zusätzlich die Anruferliste der FritzBox auf der XBox
darstellen kann.
YAC: Yet Another Caller ID Program, http://sunflowerhead.com/software/yac/
Syntax:
yac <IP>
IP IP des Rechners, auf dem der YAC-Listener läuft
Der Aufruf von Funktionen, die auf getmsg oder rawmsg basieren, sieht immer so aus:
foomessage [OPTION]... <host> [<message>]...
Der einfachste und am meisten genutzte Fall ist dementsprechend
foomessage <host>
Als Optionen können alle Optionen verwendet werden, die auch getmsg bzw. rawmsg verstehen.
Die Standard-Nachricht wird generell von einer Funktion mit der
Namenskonvention default_foomessage
erzeugt und kann so einfach
überschrieben wird.
Bei den Funktionen können eventuell Umgebungsvariablen verwendet werden.
Diese werden vor dem Funktionsaufruf gesetzt. Der Callmonitor sorgt
automatisch für die Kodierung der Umgebungsvariablen, die Text enthalten
(z.B. XBOX_CAPTION
und DREAM_CAPTION
). Man kann also einfach
FOO_CAPTION="Dies ist der zu 100% richtige Titel" foomessage <host>
schreiben, ohne sich Gedanken über Kodierungen (URL- oder printf-) machen zu müssen.
Mit der Aktion config
aus der config.sh
(seit Callmonitor 1.8)
lassen sich einige Funktionen in der Konfiguration der FritzBox
umstellen.
Das Portforwarding kann aktiviert und deaktiviert werden.
Syntax:
config forward <NUMMER> <on|off|toggle>
NUMMER Nummer des Portforwardings (beginnend bei 1)
on|off|toggle an- bzw. abschalten des Portforwardings: an, aus,
an-/abschalten des Forwardings abhängig der bereits
erfolgten Einstellung
Beispiele:
config forward 1 on # 1. Portforwarding aktivieren
config forward 3 off # 3. Portforwarding deaktivieren
config forward 5 toggle # 5. Portforwarding an-/abschalten
Das WLAN kann aktiviert und deaktiviert werden.
Syntax:
config wlan [2.4|5|guest] <on|off>
2.4|5 gewünschtes Frequenzband: 2,4 oder 5 GHz
guest Gast-WLAN schalten (seit Version 1.20.1)
on|off an- bzw. abschalten des WLANs
Fehlt die Angabe des Frequenzbandes, werden beide geschaltet, aber nur das 2,4er abgefragt.
Beispiele:
config wlan off # WLAN aus
config wlan on # WLAN an
config wlan 2.4 off # WLAN im 2,4-GHz-Band aus
config wlan 5 on # 5-GHz-WLAN an
DECT kann aktiviert und deaktiviert werden.
Syntax:
config dect <on|off>
on|off an- bzw. abschalten der DECT-Hardware
Beispiele:
config dect off # DECT aus
config dect on # DECT an
Die SIP-Accounts können aktiviert und deaktiviert werden.
Syntax:
config sip <NUMMER> <on|off>
NUMMER Nummer des SIP-Accounts (beginnend bei 1)
on|off an- bzw. abschalten des SIP-Accounts
Beispiele:
config sip 4 on # 4. SIP-Account aktivieren
config sip 2 off # 2. SIP-Account deaktivieren
(De-)Aktivierung der Rufumleitungen. (Seit Version 1.8.2) Unterstützt werden momentan nur Rufumleitungen des Typs "Anrufe von Rufnummer xy", nicht aber "Alle Anrufe an Fon X".
Syntax
config diversion <NUMMER> <on|off>
NUMMER Nummer der Rufumleitung (beginnend bei 1)
on|off an- bzw. abschalten der Rufumleitung
(seit Version 1.9.1)
Einfach beim config-Aufruf den Wert weglassen:
config sip 2
config diversion 1
config forward 3
config wlan
Ausgabe ist einer der Werte "on", "off" oder "error" (wenn z.B. die Wahlregel nicht existiert).
In neueren Firmware-Versionen ist der Callmonitor nicht unbedingt erforderlich, um die Funktionen anzuzeigen oder zu ändern. Alternativ lassen sich diese mit dem ctlmgr_ctl von AVM bearbeiten.
dreammessage [user[:password]@]host[:port] ["Alternative Nachricht"]
Wie zu sehen ist, ist "host" (also Rechnername oder IP-Adresse) der
einzige Pflichtparameter. Damit die Nachricht aber auch wirklich
ankommt, muss die Authentifizierung berücksichtigt werden. Eine Lösung
ist es, wie beigefügter Screenshot aufzeigt, das Abschalten der
Nachrichten-Authentifizierung auf der Box selbst. Wer das nicht will,
dem bleibt zur Zeit nur, user:password@
vor den Host zu setzen - was
dann allerdings bei den Listeners im Klartext angezeigt wird.
dreammessage
kennt ein Standard-Nachrichten-Template, was
normalerweise verwendet wird. Wer die Nachricht lieber selbst
formatieren will, findet bei den Listeners eine Liste mit
verwendbaren Platzhaltern für Telefonnummer, Zeilenumbrüche, usw.
Desweiteren gibt es drei Umgebungsvariablen, die das Verhalten von
dreammessage
beeinflussen. Sie sind hier in einem typischen Aufruf mit
ihren Standardwerten gezeigt:
DREAM_TIMEOUT=10 DREAM_CAPTION="Telefonanruf" DREAM_ICON=1 dreammessage box1
Befindet sich die zu benachrichtigende Dreambox im StandBy, werden die Nachrichten solange zwischengespeichert, bis sie wieder aus selbigem aufwacht. An und für sich ganz nett - nur wenn man sie gerade mal ein paar Tage nicht benutzt hat, und dann nach dem Anschalten erstmal hunderte von "verpassten" Anrufen zu sehen bekommt. Daher wäre es für manchen sicher praktisch, würden die Nachrichten nur dann (und zwar sofort) zugestellt, wenn die Dreambox sich zum Zeitpunkt des Anrufes nicht im StandBy befindet - während andernfalls die Benachrichtigung komplett unterbliebe.
Glücklicherweise ist das machbar (getestet mit DM600, DM 7000 und DM7020). Auf folgende Weise lässt sich nämlich der Status ermitteln:
# keine Passwort-Authentifizierung aktiv:
standby=`wget -O- "http://dreambox/cgi-bin/status" | awk '/Standby/' | sed -e 's/<[^>]*>//g'`
# mit Passwort-Authentifizierung:
standby=`wget -O- --http-user=root --http-passwd=dreambox "http://dreambox/cgi-bin/status" | awk '/Standby/' | sed -e 's/<[^>]*>//g'`
Je nachdem, ob das WebIF für Passwort-Authentifizierung konfiguriert ist
oder nicht, kann man also die entsprechende Variante nutzen. Das
busybox-wget unterstützt allerdings keine Authentifizierung. Daher muss
beim Bauen von freetz das Paket 'wget' installiert werden. Die
Variable $standby
ist anschließend entweder mit STANDBY:ON
oder
STANDBY:OFF
belegt. Für unsere Benachrichtigungs-Aktion können wir uns
das wie folgt nutzbar machen:
[ "$(wget -O- "http://dreambox/cgi-bin/status" | awk '/Standby/' | sed -e 's/<[^>]*>//g')" = "Standby:OFF" ] && DREAM_TIMEOUT=10 dreammessage dreambox "${SOURCE_DISP} ruft an.${LF}${SOURCE_NAME}"
wobei natürlich dreambox mit dem Hostnamen bzw. der IP-Adresse der Dreambox ersetzt, sowie ggf. die Passwort-Authentifizierung mit eingebaut werden muss.
Quelle: IPPF Thread
dream2message (default_dream2message)
DREAM_TIMEOUT
und DREAM_ICON
werden auch hier unterstützt.
Beispiel für ein Popup das nur den Namen (sofern in der Callers vorhanden) und die Telefonnummer des Anrufers anzeigt:
in:request ^ ^ dream2message 192.168.178.25 "${SOURCE_NAME} ${SOURCE} ruft an."
Die Funktion mailmessage
verschickt eine E-Mail mit Hilfe der Daten,
die für den Push-Service eingerichtet sind (falls man nicht beim Aufruf
etwas anderes befiehlt (mailer-Optionen)). Der Push-Service selbst kann
ruhig ausgeschaltet bleiben, wichtig sind die Einstellungen für
Adressen, Mailserver & Co. Beispiele zum Einsatz in Listeners:
mailmessage
mailmessage -t [email protected]
mailmessage -s "Oh, oh ... ($SOURCE)"
-
Mailadressen, Servereinstellungen, Passwörter & Co. werden aus der Konfiguration des Push Service der FritzBox übernommen. Einzelne Teile können durch Optionen überschrieben werden (im Beispiel zum Beispiel die Zieladresse mit
-t
). -
Die Optionen werden an
mail
durchgereicht; diese wiederum größtenteils anmailer
. Deswegen können folgende Optionen verwendet werden:-s STRING - Subject. ("FRITZ!Box") -f STRING - From. (NULL) -t STRING - To. (NULL) -m STRING - mailserver. (NULL) -a STRING - authname. (NULL) -w STRING - passwd. (NULL) -d STRING - attachment. (NULL) -i STRING - inline attachment. (NULL)
-
Zur Anpassung der Mails: siehe
mail_subject
undmail_body
inmail.sh
(zum Überschreiben am besten/tmp/flash/callmonitor/actions.local.d/
verwenden, siehe Anpassen der Benachrichtigungstexte).
mail
ist ein Skript, um Mails bei Mailserverfehlern
zwischenzuspeichern und erneut zu schicken (alle Parameter und
Attachments werden gepackt in /var/spool/mail/
abgelegt).
- Es wird von der Aktion mailmessage verwendet.
- Ihr solltet regelmäßig (mit cron) ein
mail process
ausführen, um evtl. wartende Mail zu versenden. mail
gehört streng genommen nicht unbedingt zum Callmonitor, weil auch andere Dienste es brauchen könnten; vielleicht wird in Zukunft mal ein eigenes Paket daraus.
Die Funktion mail_missed_call
existiert seit Version 1.0 nicht mehr.
An ihre Stelle tritt eine allgemeine Benachrichtigungsfunktion per
E-Mail (mailmessage
), die (auch) in Kombination mit dem Ereignis
in:cancel
genutzt werden kann, um bei verpassten Anrufen eine Mail zu
verschicken:
in:cancel ^ ^ mailmessage
Das schöne ist, dass die Mail sofort rausgeschickt wird, wenn der Gesprächspartner aufgibt; es gibt keine Wartezeit von einer Minute mehr wie in den Vorversionen. Außerdem kann jetzt zuverlässiger bestimmt werden, wann ein Anruf verpasst wurde.
Aber natürlich kann man sich so auch per Mail über alle eingehenden Anrufe informieren lassen, oder über alle ausgehenden an eine bestimmte Nummer oder oder oder ...
Die DGStation Relook
400S unterstützt nur die Anzeige
einer kurzen Zeile ohne Umlaute. Die Anzeigedauer kann über die
Umgebungsvariable RELOOK_TIMEOUT
beeinflusst werden (in Sekunden).
relookmessage (default_relookmessage)
Beispiel für Benutzung mit veränderter Anzeigedauer (25 Sekunden):
RELOOK_TIMEOUT=25 relookmessage 192.168.34.56
Usage: rawmsg [OPTION]... <HOST> <template> [<param>]...
rawmsg [OPTION]... -t <template> <host> [<param>]...
Send a message over a plain TCP connection.
-t, --template=FORMAT use this printf-style template to build the message,
all following parameters are filled in
-d, --default=CODE default for first parameter (eval'ed later)
-p, --port=PORT use a special target port (default 80)
-w, --timeout=SECONDS set connect timeout (default 3)
--help show this help
Die folgenden Funktionen basieren auf rawmsg
und unterstützen daher
dieselben Optionen. Passend für den entsprechenden Empfänger sind
URL-Template (-t
), die Standard-Nachricht (-d
) und der Port (-p
)
schon vorbelegt.
Zum Aufwecken eines Rechners im LAN --- sofern der Rechner dies generell
unterstützt --- dient das in Freetz
vorhandene Programm ether-wake
. Zur Benutzung sei auf dessen
Online-Hilfe verwiesen:
Usage: ether-wake [-b] [-i iface] [-p aa:bb:cc:dd[:ee:ff]] MAC
Send a magic packet to wake up sleeping machines.
MAC must be a station address (00:11:22:33:44:55) or
a hostname with a known 'ethers' entry.
Options:
-b Send wake-up packet to the broadcast address
-i iface Use interface ifname instead of the default "eth0"
-p pass Append the four or six byte password PW to the packet
Die Wartungsseite im Web-Interface ermöglicht folgendes:
- Telefonbuch aufräumen: Sortiert die Einträge im Telefonbuch und entfernt Leerzeilen.
- SIP-Update durchführen: Erstellt Standardeinträge im Telefonbuch für neu angelegte Internetrufnummern.
- Callmonitor-Schnittstelle (Port 1012) (de)aktivieren: Aktiviert bzw. deaktiviert die Callmonitor-Schnittstelle an Port 1012. Der Callmonitor funktioniert nur mit aktivierter Schnittstelle.
Die Wartungsseite findet man im Freetz Webinterface unter Extras ⇒ Wartung.
Die Rückwärtssuche wird in der Basiskonfiguration des Callmonitors eingestellt. Sie wird bei einem der folgenden Dienste durchgeführt:
- http://telefonbuch.de/
- http://inverssuche.de/
- http://goyellow.de/
- http://11880.com/
- http://www.dasoertliche.de/
- http://tel.search.ch/
- http://www.das-telefonbuch.at/
- http://www.anywho.com/
Optional kann eine zusätzliche Suche bei Google nach dem Ortsnetz des Anrufers durchgeführt werden. Das Ergebnis dieser Suche wird nur verwendet, wenn die volle Rückwärtssuche kein Ergebnis liefert.
- Bei ausgehenden Anrufen wird für die angerufene Nummer ggf. eine Anfrage durchgeführt, nicht für die eigene.
- Rückwärtssuche mit dauerhaftem (im Flash), flüchtigen (im RAM) oder ohne Caching möglich
Nachdem die Listeners definiert sind, empfiehlt es sich, sie auf korrekte Funktion zu testen. Da man nicht immer jede Konfiguration mit echten Anrufen testen kann, gibt es eine Seite im Web-Interface, die Anrufe simuliert. Dabei klingeln keine Telefone, es wird lediglich dem CallMonitor ein Anruf vorgetäuscht, den er wie einen echten Anruf behandelt.
Die Maske sollte weitgehend selbsterklärend sein. Unter "Ereignis" kann man einstellen, welches Ereignis simuliert werden soll. Die Quellrufnummer ist diejenige, von der dieses Ereignis ausgeht und die Zielrufnummer diejenige, die das Ziel des Ereignisses ist. Man gibt jeweils ein Ereignis mit Rufnummern ein, die zu einem in den Listeners definierten Muster passen. Nach einem Klick auf "Testanruf" sollte der Callmonitor nun die zu diesem Listener-Eintrag gehörende Aktion ausführen. Im Webinterface werden die Debug-Informationen des Callmonitors angezeigt, die bei einer eventuellen Fehlersuche helfen.
- Kann ich das Ergebnis der Rückwärtssuche auch auf meinem DECT-Telefon sehen?
Nein. Es gibt momentan keine bekannte Möglichkeit, in die Anrufsignalisierung über DECT einzugreifen.
Um den Inhalt einer Benachrichtigung an die eigenenen Bedürfnisse anpassen, gibt es folgenden Weg:
- Verzeichnis
/tmp/flash/callmonitor/actions.local.d
erstellen - darin eine Datei
foobar.sh
anlegen (oder irgendetwas anderes mit Endung.sh
) - dorthinein nur die zu überschreibende Funktion kopieren (z.B.
mail_body() { ... }
) und anpassen (oder nur Variablen setzen wie z.B.RELOOK_TIMEOUT
) modsave flash
aufrufen, um die Datei im Flash zu sichern- Callmonitor neustarten
Bei den meisten Aktionen ist eine Funktion
default_foomessage
vorgesehen, die die Standardnachricht für diesen
Typ Aktion erzeugt; diese Funktion kann also einfach überschrieben
werden. Bei mailmessage mail gibt es z.B.
mail_subject
und mail_body
; bei anderen Aktionen hilft nur ein Blick
in den Quelltext (oder eine Nachfrage), solange bis deren Funktionen
auch im Wiki beschrieben sind.