Callmonitor 1.*

Status
Für weitere Antworten geschlossen.

buehmann

Aktives Mitglied
Mitglied seit
11 Jun 2005
Beiträge
1,810
Punkte für Reaktionen
0
Punkte
36
kriegaex: Thema geschlossen, wie vom Autor gewünscht. Weiter geht es beim neuen Thema für Callmonitor 1.13.


Hallo zusammen,

ich habe Version 1.0 des Callmonitors fertiggestellt.

Hinweise zu älteren Versionen, die sich größtenteils (was die Aktionen angeht) auf die Version 1.0 übertragen lassen, findet man immer noch im Thread [thread=88038][noparse][ds-mod][/noparse] Callmonitor[/thread]. Hier möchte ich gerne die Veränderungen vorstellen und Probleme diskutieren, die mit diesen auftreten.

Im Wiki bauen wir momentan eine Dokumentation zum Callmonitor auf: Wenn du dort etwas vermisst, trag es doch einfach nach: [wiki]software:callmonitor:start[/wiki]

[size=+1]Neue interne Schnittstelle[/size]

Der Callmonitor liest jetzt nicht mehr das (Debug-)Log des telefon-Dämons, um Anrufe zu erkennen, sondern benutzt die telefon-Schnittstelle, die mit den Firmwareversionen *.03.99 bzw. *.04.01 für JFritz geschaffen wurde. Das bedeutet, dass der Callmonitor nun auch mit den aktuellen Beta-Versionen der Firmwares funktioniert (sobald sie vom ds-mod vollständig unterstützt werden).

[size=+1]Neues Format der "Listeners"[/size]

Die Umstellung hat eine Erweiterung des Listeners-Format mit sich gebracht,
weil 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 Liste von Ereignissen:
Code:
in:request    out:request
in:cancel     out:cancel
in:connect    out:connect
in:disconnect 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:
Code:
in:request  ^       ^SIP0$  xboxmessage xbox
out:cancel  ^SIP1$  ^0123   dboxpopup dbox-a "${DEST} geht nicht ran"
*:dis       ^       ^       echo "Anruf beendet: ${DURATION} Sekunden" >> log
Die Präfixe "NT:", "E:" und "*:" in der SOURCE-Spalte gibt es nicht mehr. Eure bisherige Listeners-Datei 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).

[size=+1]Ersatz für mail_missed_call[/size]

Die Funktion mail_missed_call existiert 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:
Code:
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 ...

[size=+1]English Translation[/size]

Callmonitor makes use of ds-mod's new localization framework to provide its web interface and the default notifications in the language of your choice (English or German).

[size=+1]Installation[/size]

Der Callmonitor wird wie gewohnt in der nächsten [thread=85371]ds-mod[/thread]-Version enthalten sein. Für die aktuelle Version 0.2.4 hat danisahne freundlicherweise einen Patch bereitgestellt, der die Installation ermöglicht. (In der reinen Version 0.2.4 kann der Callmonitor 1.0 nicht installiert werden (auch nicht als Add-on), da bestimmte Erweiterungen in der Unterstützung verschiedener Sprachversionen fehlen.)

Zur Installation also einfach ds-0.2.4.tar.bz2 sowie den Patch ds-0.2.4-callmonitor-1.0.patch.bz2 herunterladen, den Patch anwenden und in der Konfiguration unter "Package selection" den Callmonitor auswählen:
Code:
ds-mod> tar xfj ds-0.2.4.tar.bz2
ds-mod> bunzip2 ds-0.2.4-callmonitor-1.0.patch.bz2
ds-mod> patch -d ds-0.2.4 -p1 < ds-0.2.4-callmonitor-1.0.patch
ds-mod> cd ds-0.2.4
ds-mod/ds-0.2.4> make menuconfig
ds-mod/ds-0.2.4> make

Viele Grüße,

Andreas


Download des Callmonitors bei BerliOS
 
Zuletzt bearbeitet von einem Moderator:
Technische Details

Für die, die es genauer wissen wollen. (Ansonsten bitte schnell überspringen.)

[size=+1]Ereignisse[/size]

Ein erfolgreicher eingehender Anruf erzeugt nacheinander folgende Ereignisse (analog für ausgehende Anrufe mit out:*):
Code:
in:request  ->  in:connect  ->  in:disconnect
Ein Anruf, der abgebrochen wird, bevor die Gegenseite ihn annimmt, erzeugt folgende Ereignisse:
Code:
in:request  ->  in:cancel

Die Ereignisse sind nicht direkt die Rohereignisse, wie sie an der [post=512372]JFritz-Schnittstelle[/post] 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):

call.png

[size=+1]Ereignis-Informationen für Aktionen[/size]

Wie gehabt stehen den Aktionen Informationen über den auslösenden Anruf in Umgebungsvariablen bereit. Zu den bekannten Variablen
  • SOURCE: Quellrufnummer
  • SOURCE_NAME: Name der Quelle, falls dieser bestimmt werden konnte
  • DEST: Zielrufnummer
  • DEST_NAME: Name des Ziels, falls dieses bestimmt werden konnte
kommen folgende neu hinzu (die alten Variablen NT und END sind weggefallen):
  • EVENT: das auslösende Ereignis
  • EXT: die Nebenstelle, sofern bekannt (direkt von der JFritz-Schnittstelle)
  • ID: die ID des Anrufs (direkt von der JFritz-Schnittstelle)
  • DURATION: bei *:disconnect die Dauer des Gesprächs in Sekunden
  • TIMESTAMP: der Zeitpunkt des Ereignisses (im Format "DD.MM.YY HH:MM")

[size=+1]Ereignisangabe in den Listeners[/size]

Es gibt mehrere Möglichkeiten, in den Listeners die Ereignisse anzugeben, bei der eine Regel auslösen soll:
  • Vollständige Ereignisnamen:
    Code:
    in:request
    out:disconnect
  • Abkürzungen des vorderen und/oder hinteren Teils
    Code:
    in:req
    out:disc
    i:r
    o:d
  • Wildcards für den vorderen Teil (Richtung), den hinteren oder beide:
    Code:
    *:req
    ou:*
    *
  • Listen dieser Bestandteile (mit Komma getrennt (Vorsicht, kein Whitespace); die Regel passt, wenn einer der Teile passt):
    Code:
    in:req,out:*
 
Zuletzt bearbeitet:
geil geil geil! ;)
 
Kinners...ihr macht mir langsam angst...aber nur weiter so...ich fürchte mich gern*GRINS*
würde mich nicht wundern, wenn dies jetzt entgültig von avm übernommen werden würde...(ob die immernoch mitlesen??)
 
Code:
require net
require message
dboxlcd() {
__getmsg __getmsg_dboxlcd -d default_dboxlcd -t "-" "$@"
}
__getmsg_dboxlcd() {
local lcd="/control/lcd"
local lcdtext="$lcd?xpos=1&size=17&font=2&text=%s"
local line= init="&lock=1&clear=1" ypos=0
local IFS="$LF"
echo "$*" |
for ypos in 12 24 36 48 60; do
read -r line
if ! empty "$line"; then
TEMPLATE="$lcdtext&ypos=$ypos&update=1$init" __getmsg_simple "$line"
init=
fi
done
sleep ${DBOX_TIMEOUT:-10}
TEMPLATE="$lcd?lock=0" __getmsg_simple
}
default_dboxlcd() {
default_message 19 | latin1_utf8
}

Das ist die dboxlcd.sh, die in Callmonitor v.1.0 dabei ist. Es sicht anders, als die alte dboxlcd.sh, die du mir geschickt hast.

Code:
require net

dboxlcd() {
    __getmsg __getmsg_dboxlcd -d default_dboxlcd -t "-" "$@"
}
__getmsg_dboxlcd() {
    local lcd="/control/lcd"
    local lcdtext="$lcd?xpos=1&size=17&font=2&text=%s"
    local line= init="&lock=1&clear=1" ypos=0
    local IFS="$LF"
    echo "$*" |
    for ypos in 12 24 36 48 60; do
	read -r line
	if ! empty "$line"; then
	    TEMPLATE="$lcdtext&ypos=$ypos&update=1$init" __getmsg_simple "$line"
	    init=
	fi
    done
    sleep ${DBOX_TIMEOUT:-10}
    TEMPLATE="$lcd?lock=0" __getmsg_simple
}
default_dboxlcd() {
    {
	if ! empty "$DEST_NAME"; then
	    echo "Anruf an $DEST_NAME"
	elif ! empty "$DEST"; then
	    echo "Anruf an $DEST"
	else
	    echo "Anruf"
	fi
	if ! empty "$SOURCE"; then
	    echo "von $SOURCE"
	fi
	if ! empty "$SOURCE_NAME"; then
	    if ? "$#SOURCE_NAME <= 19"; then
		echo "$SOURCE_NAME"
	    else
		expr substr "$SOURCE_NAME" 1 19
		expr substr "$SOURCE_NAME" 20 19
		expr substr "$SOURCE_NAME" 39 19
	    fi
	fi
    } | latin1_utf8
}

jetzt wollte ich fragen, ob du ausversehen die alte dboxlcd.sh rein gemacht hast.
 
Zuletzt bearbeitet:
futurama schrieb:
jetzt wollte ich fragen, ob du ausversehen die alte dboxlcd.sh rein gemacht hast.
Hi, habe ich nicht; dein Code ist da (vgl. z.B: die fünf Einträge bei ypos). Nur der Code von default_dboxlcd ist umstrukturiert worden und ist an eine andere Stelle gewandert (modules/message.sh). Dort wird auch der Zeilenumbruch auf 19 Spalten erledigt.

Andreas

P.S.: Und pack deine beiden Code-Listings doch bitte noch in [noparse]
Code:
...
[/noparse]-Tags, damit dein Posting etwas übersichtlicher wird.
 
Zuletzt bearbeitet:
Listener

Code:
out:request     ^ ^ dboxpopup --port=???? 192.168.0.xx "${DEST} Wird Angerufen"
out:connect     ^ ^ dboxpopup --port=???? 192.168.0.xx "Verbindug mit ${DEST} Wurde Hergestellt"
out:disconnect  ^ ^ dboxpopup --port=???? 192.168.0.xx  "Verbindung mit ${DEST} Wurde Beendet"
in:request      ^ ^ dboxpopup --port=???? 192.168.0.xx
in:connect      ^ ^ dboxpopup --port=???? 192.168.0.xx "Verbindung mit ${SOURCE} Wurde Hergestellt"
in:disconnect   ^ ^ dboxpopup --port=???? 192.168.0.xx "Verbindung mit ${SOURCE} Wurde Beendet"
in:cancel       ^ ^ dboxpopup --port=???? 192.168.0.xx "Die Rufnummer ${SOURCE} hat Aufgelegt"
out:request     ^ ^ dboxlcd --port=???? 192.168.0.xx "${DEST}" "Wird Angerufen" "" "" "          ConanCobra"
out:connect     ^ ^ dboxlcd --port=???? 192.168.0.xx "Verbindung mit" "${DEST}" "Wurde Hergestellt" "" "          ConanCobra"
out:disconnect  ^ ^ dboxlcd --port=???? 192.168.0.xx "Verbindung mit" "${DEST}" "Wurde Beendet" "" "          ConanCobra"
in:request      ^ ^ dboxlcd --port=???? 192.168.0.xx
in:connect      ^ ^ dboxlcd --port=???? 192.168.0.xx "Verbindung mit" "${SOURCE}" "Wurde Hergestellt" "" "          ConanCobra"
in:disconnect   ^ ^ dboxlcd --port=???? 192.168.0.xx "Verbindung mit" "${SOURCE}" "Wurde Beendet" "" "          ConanCobra"
in:cancel       ^ ^ dboxlcd --port=???? 192.168.0.xx "Die Rufnummer" "${SOURCE}" "hat Aufgelegt" "" "          ConanCobra"
out:request     ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx "${DEST} Wird Angerufen"
out:connect     ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx "Verbindung mit ${DEST} Wurde Hergestellt"
out:disconnect  ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx "Verbindung mit ${DEST} Wurde Beendet"
in:request      ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx
in:connect      ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx "Verbindung mit ${SOURCE} Wurde Hergestellt"
in:disconnect   ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx "Verbindung mit ${SOURCE} Wurde Beendet"
in:cancel       ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx "Die Rufnummer ${SOURCE} hat Aufgelegt"
out:request     ^ ^ yac 192.168.0.xx "${DEST} Wird Angerufen"
out:connect     ^ ^ yac 192.168.0.xx "Verbindug mit ${DEST} Wurde Hergestellt"
out:disconnect  ^ ^ yac 192.168.0.xx "Verbindung mit ${DEST} Wurde Beendet"
in:request      ^ ^ yac 192.168.0.xx
in:connect      ^ ^ yac 192.168.0.xx "Verbindung mit ${SOURCE} Wurde Hergestellt"
in:disconnect   ^ ^ yac 192.168.0.xx "Verbindung mit ${SOURCE} Wurde Beendet"
in:cancel       ^ ^ yac 192.168.0.xx "Die Rufnummer ${SOURCE} hat Aufgelegt"

Hi,
ich habe die neue Callmonitor v.1.0 getestet und diese Listener erstellt. Für die, die eine PC, D-Box2 und X-Box haben.
 
Hui, ganz schön unübersichtlich und redundant ...
futurama schrieb:
Code:
out:request     ^ ^ dboxpopup --port=???? 192.168.0.xx "${DEST} Wird Angerufen"
out:request     ^ ^ dboxlcd --port=???? 192.168.0.xx "${DEST}" "Wird Angerufen" "" "" "          ConanCobra"
out:request     ^ ^ xboxmessage --port=???? --user=admin --pass=******* 192.168.0.xx "${DEST} Wird Angerufen"
out:request     ^ ^ yac 192.168.0.xx "${DEST} Wird Angerufen"
An deiner Stelle würde ich die vier Benachrichtigungen (da sie für jedes Event im Wesentlichen gleich sind) in einer Funktion zusammenfassen (z.B. notify_me_everywhere(), zu definieren in einer Datei mit dem Namen /tmp/flash/callmonitor/actions.d/*.sh); dann könnte deine Listeners um den Faktor 4 schrumpfen.

Wenn du dann noch die Unterscheidung, welche Nachricht zu senden ist, auch in die Funktion verlagerst (anhand von $EVENT zu unterscheiden); würdest du sogar mit einer Zeile
Code:
in:*,out:req,out:con,out:dis   ^   ^   notify_me_everywhere
oder noch einfacher
Code:
*   ^   ^   notify_me_everywhere
auskommen. Nur als Anregung ... ich fände die Variante in der Funktion viel leichter zu warten. Außerdem drückt so die Listeners-Datei viel besser aus, dass du bei fast jedem Ereignis die (fast) gleiche Reaktion erwartest.

Andreas
 
Danke für die dbox2 Anzeige

Hallo Andreas,

vielen Dank, dass Du nun die Funktionalität zur Anzeige der TelefonNr auf dem LCD Display der dbox2 eingebaut hast.

Hatte mich schon gar nicht mehr getraut nachzufragen ...

:)

sucram
 
Nun fehlt mir nur noch eine Variable: $COST Also, ob das Gespräch Gratis übers internet war, oder obs Kostenpflichtig war. Kann man die Info-LED irgendwie abfragen ?

Gruß Neo.
 
Neo7530 schrieb:
Nun fehlt mir nur noch eine Variable: $COST Also, ob das Gespräch Gratis übers internet war, oder obs Kostenpflichtig war. Kann man die Info-LED irgendwie abfragen?
Ich wüsste nicht, wie. Die JFritz-Schnittstelle (Port 1012) gibt diese Information auf jeden Fall nicht her.

Gruß,
Andreas
 
Callmonitor 1.1

Hallo,

ich habe gerade Callmonitor 1.1 auf Berlios bereitgestellt.

[size=+1]Behobene Fehler[/size]
  • Ein abschließendes "#" bei gewählten Rufnummern wird nun entfernt.
  • Der Wert für die Nebenstelle (EXT) wurde nicht vom Ereignis out:request zum Ereignis out:cancel übernommen.
[size=+1]Neue Funktionalität[/size]
  • Es gibt eine Funktion, um die Wählhilfe (aus dem Webinterface bekannt) anzusteuern: dial NUMBER [PORT]
  • Das JFritz-Interface kann jetzt einfach per Klick im Webinterface ein- und ausgeschaltet werden. (Wählt intern über die neue dial-Funktion einfach den passenden Code "#96*...". 8))
    call1.png
  • callaction ist ein einfaches Skript, um Callmonitor-Aktionen (wie dboxpopup, dial und Co.) von außerhalb (nicht aus den Listeners) aufrufen zu können: callaction COMMAND ARGUMENTS...
  • Beim Speichern der Listeners im Webinterface wird nun die Syntax überprüft, damit Einsteiger schneller merken, dass sie etwas falsch gemacht haben.
    call2.png

Gruß,
Andreas
 
Du bist zu schnell ;) Ich hab doch gerade eben erst über ds-0.2.5 die 1.0 drauf... und jetzt schon wieder eine neue Version. :heul: Wird Zeit für 'ne automatische Installation via Web-Interface... :rock:
 
Anfänger

mailmessage

Welche Mailadresse wird da genommen?

Habe folgende Zeile
in:cancel ^ ^ mailmessage


Danke, habe leider keine Antwort bis jetzt gefunden


glaalex
 
Hi,

ist die callaction Funktion eigentlich auch von einem anderen Rechner erreichbar.

Dann konnte man Rechner gestütztes anwählen durchführen.

ssh geht will aber ein Passwort. Mit authorized_keys habe ich es nicht hinbekommen.
telnet möchte ich nicht auf der FBF aufmachen.

oder gibt es noch andere Möglichkeiten die ich noch nicht gefunden habe.

Gruss
Gerald
 
geraldraaf schrieb:
ist die callaction Funktion eigentlich auch von einem anderen Rechner erreichbar.
Klar, z.B. per SSH, wie schon von dir genannt. Das gilt aber allgemein, ganz unabhängig vom Callmonitor. Den Weg solltest du weiterverfolgen; die authorized_keys und Login/Kommandos ohne Passwort benutze ich schon seit einer halben Ewigkeit erfolgreich auf der Fritzbox.
Dann konnte man Rechner gestütztes anwählen durchführen.
Du meinst sowas wie
Code:
ssh fritz.box callaction dial 01234
? Wird funktionieren, aber ehrlich gesagt finde das etwas umständlich: "dial" macht nichts anderes, als die Wählhilfe-Funktion des Webinterfaces aufzurufen, und das kannst du auch direkt von außen per HTTP ansprechen.

Gruß,
Andreas
 
buehmann schrieb:
Du meinst sowas wie
Code:
ssh fritz.box callaction dial 01234
? Wird funktionieren, aber ehrlich gesagt finde das etwas umständlich: "dial" macht nichts anderes, als die Wählhilfe-Funktion des Webinterfaces aufzurufen, und das kannst du auch direkt von außen per HTTP ansprechen.

Gruß,
Andreas

so ähnlich meinte ich es.
Aber ok es läuft jetzt was ich wollte.

Folgendermaßen bin ich vorgegangen (Linux als Betriebsystem).
ssh-keygen -t dsa -b 2048 -f ~/.ssh/id_dsa
WICHTIG bei der Passwort Frage nur Enter drücken
cat ~/.ssh/id_dsa
den Schlüssel habe ich in die Zwischenablage kopiert.
im Browser diese URL aufrufen
http://fritz.box:81/cgi-bin/file.cgi?id=authorized_keys
den Schlüssel eingefügt und Button "Übernehmen" angeklickt.

Unter KDE in kontact die Einstellungen aufgerufen,
und bei "Skript-Einbindungen" diesen Befehl eingefügt:
ssh root@fritzbox callaction dial %N

Anschliessend kann ich eine Telefonnummer in kontact anklicken und die Verbindung zum gewünschten Teilnehmer wird automatisch aufgebaut.

Gruß
Gerald

Edit1:
Falls Ihr ein Passwort angebt kommt bei "ssh [email protected]" folgende Aufforderung:
Enter passphrase for key '/root/.ssh/id_dsa'
Das ist ja nicht gewollt also Passwort weglassen.
 
Zuletzt bearbeitet:
buehmann schrieb:
Hallo,

ich habe gerade Callmonitor 1.1 auf Berlios bereitgestellt.

Gibt es irgendwo eine komplette Liste der Befehle wie dial?
Speziel, kann ich auch einen Anruf abweisen?
 
Status
Für weitere Antworten geschlossen.
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.