Erweiterter callmonitor

Erkan schrieb:
Du meinst also auch dass das so passen müsste, oder? Ist es eigentlich egal, ob man TABS oder Leerzeichen als Spaltentrenner benutzt (bei ^ ^)?
Sieht gut aus (Tabs und Leerzeichen gehen beide). Ist die callmonitor.listeners auch wirklich geschrieben (cat /var/tmp/callmonitor.listeners) und der callmonitor gestartet (ps)? Wie du schon sagtest: Gehen wir mal das Einfachste der Reihe nach durch ... :)
 
Fehler gefunden!

Buehmann, ich habe Dir ja schon vor ein paar Tagen gesagt, dass ich ein $ in meinem Passwort habe ... die callmonitor.listeners sieht nun so aus:
Code:
#Quelle         Ziel            Aktion
^               ^               dreammessage --user='root' --password='' 192.168.178.10
^0170xxxxxx8    ^4xxxx1         etherwake
#192.168.178.26 dboxmessage
#192.168.178.26 dboxpopup
#[url]www.somwhere.net[/url] ownmessage [url]www.somewhere.net[/url]

Er schmeisst also mein Passwort komplett raus ... any idea?
 
Erkan schrieb:
Buehmann, ich habe Dir ja schon vor ein paar Tagen gesagt, dass ich ein $ in meinem Passwort habe ... Er schmeisst also mein Passwort komplett raus ... any idea?
Ahh, wie dumm, dass du den Teil der debug.cfg komplett ausge-x-t hattest ;-) Schreib einfach "cat <<'EOP' ..." oder "cat <<\EOP ..." statt "cat <<EOP ...", dann lässt die Shell die Finger von den Zeilen.
 
Na also ... geht doch!
Das war vielleicht eine schwere Geburt :)

Jetzt geht nur mein WOL nicht mehr ... wenn ich von meinem Handy, also 0170xxxxx8 auf die ISDN-Rufnummer 4xxx1 (kein SIP) rufe, soll mein Rechner aufgeweckt werden.

Ich habe wie vorher auch keine Ortsvorwahl drin:
^0170xxxxxx8 ^4xxxx1 etherwake

und natürlich

ETHERWAKES='xx:xx:xx:xx:xx:xx'

Geht aber nicht mehr ... warum?
 
Erkan schrieb:
^0170xxxxxx8 ^4xxxx1 etherwake
Die Funktion etherwake habe ich wegoptimiert; die Funktion, die ETHERWAKES auswertet heißt jetzt nur noch etherwakes (mit "s" am Ende), vorher gab's beide. So kann man immer noch spezielle etherwake-Aufrufe in die listeners schreiben, wenn man das möchte.
 
buehmann schrieb:
Erkan schrieb:
^0170xxxxxx8 ^4xxxx1 etherwake
Die Funktion etherwake habe ich wegoptimiert; die Funktion, die ETHERWAKES auswertet heißt jetzt nur noch etherwakes (mit "s" am Ende), vorher gab's beide. So kann man immer noch spezielle etherwake-Aufrufe in die listeners schreiben, wenn man das möchte.

Nun ja ... gehen tut es wieder. Was ist aber daran optimiert? Ich trage in der callmonitor.listeners die Quelle und das Ziel ein, sowie die Action etherwakes. In der debug.cfg wird dann über ETHERWAKES='xxxx' der zu weckende Rechner angegeben. Wo ist der Vorteil zu vorher?

Ich würde eine Optimierung sehen, wenn alles (wie auch bei den Messages) in der callmonitor.listeners explizit angegeben wird. Somit könnten verschiedene Rechner gezielt durch Quell- Zielrufnumnmer geweckt werden. So wie es jetzt ist kann ich ja nur alle oder keinen wecken .... wenn ich alles verstanden habe!?

Trotzdem vielen Dank für Deine Engelsgeduld (auch per PM) und danke für den geänderten callmonitor! Meine dream kann wieder ans WWW ;)
 
Erkan schrieb:
Was ist aber daran optimiert? Ich trage in der callmonitor.listeners die Quelle und das Ziel ein, sowie die Action etherwakes. In der debug.cfg wird dann über ETHERWAKES='xxxx' der zu weckende Rechner angegeben. Wo ist der Vorteil zu vorher?
Keiner, die Funktion etherwakes tut genau das gleiche wie vorher. Es gibt nur den alternativen Namen etherwake nicht mehr, weil der mit dem Namen des eigentlichen Programms, das einen einzelnen Rechner aufweckt, kollidiert. Insofern war das Wort "optimiert" nicht ganz passend.
Ich würde eine Optimierung sehen, wenn alles (wie auch bei den Messages) in der callmonitor.listeners explizit angegeben wird. Somit könnten verschiedene Rechner gezielt durch Quell- Zielrufnumnmer geweckt werden.
Klar, kannst du machen:
Code:
^08234   SIP    etherwake -i eth0 11:11:11:11:11:11
^01.*5$  ^4563  etherwake -i eth1 22:33:44:55:66:77
 
so, habe nun die callmonitor in callmonitor.sh umbenannt und zusammen mit der callmonitor.out in den Ordner add-on des mod57-m3 verschoben und mir ein image gebastelt...

debug.cfg:
Code:
^  ^  getmsg [url]www.xxx.net[/url]  '/call.php?called=%s&nr=%s&wer=fritzchen' "$CALLED" "$MSISDN"

und das kommt an meinem Server an:

Code:
/call.php?called=&nr=&wer=fritzchen

ist also alles leer... was mache ich falsch?


edit:
hab es hinbekommen, und zwar so:
debug.cfg
Code:
^ ^ getmsg rsdf.net '/call.php?nr='\$MSISDN'&called='\$CALLED'&wer=fritzchen'

edit2:
yac funktioniert
etherwake funktioniert
droptoggle funktioniert

alles bestens! Besten Dank für die tolle Arbeit!

Kann mir vielleicht noch jemand einen Tipp geben, wie ich jetzt zum Beispiel unerwünschte Anrufer daran hindern kann, mein Telefon klingeln zu lassen?
 
ist also alles leer... was mache ich falsch?
Vermutlich hast du das gleiche Problem wie Erkan, nämlich dass die Variablen schon vor dem Schreiben in die callmonitors.listeners expandiert werden (schau mal in die Datei, wenn du deine erste Variante verwendest). Ich habe oben gezeigt, wie man das verhindert.

Bei der zweiten Variante verhinderst du die Expansion durch die Backslashes; die direkte Einbettung in die URL ist aber eher ein Workaround, weil die korrekte Kodierung nicht mehr garantiert wird (bei diesen beiden Nummern sollte es allerdings keinen Unterschied machen; bei anderen Nachrichten schon).

yac funktioniert
etherwake funktioniert
droptoggle funktioniert
Super, danke für das Feedback.
 
ein Fehler ist mir aufgefallen:

in der Datei callmonitor Zeile 59 lautet der Wortlaut für die nicht vorhandene Rufnummer "ohne Rufnummer/CLIP" - das Leerzeichen nach ohne führt zu Fehlern in dem GET-Aufruf.

Das Leerzeichen habe ich folglich mit %20 ersetzt. Jetzt habe ich den komischen Erfolg, dass ich

keineufnummer/CLIP

geliefert bekomme... Wo ist das R hin?

Egal, wollte nur auf den Fehler hinweisen...
 
fritzchen schrieb:
in der Datei callmonitor lautet der Wortlaut für die nicht vorhandene Rufnummer "ohne Rufnummer/CLIP" - das Leerzeichen nach ohne führt zu Fehlern in dem GET-Aufruf.
Deswegen werden alle Nachrichten vor dem GET-Aufruf durch urlencode() geschickt. Und genau das (Leerzeichen und andere gefährliche Zeichen) war der Grund, das ich bei deiner zweiten Lösung von einem Workaround gesprochen habe, der nur manchmal funktioniert.

Das Leerzeichen habe ich folglich mit %20 ersetzt.
Mach das lieber nicht, sondern korrigier deinen Aufruf von getmsg.

Jetzt habe ich den komischen Erfolg, dass ich

keineufnummer/CLIP

geliefert bekomme... Wo ist das R hin?
Das erste Argument von getmsg nach der IP-Adresse ist ein Formatstring, der von printf interpretiert wird; deswegen wird "%20r" als Platzhalter angesehen und ersetzt (alle Platzhalter beginnen mit %, so auch %s in den anderen Beispielen). Wenn du ein literales % in die Ausgabe bekommen wolltest, müsstest du es verdoppeln (%%). Aber wie gesagt: Mach das lieber nicht, sondern beheb die Ursache für dein ursprüngliches Problem, anstatt jetzt an immer mehr selbsterzeugten Symptomen herumzudoktorn. ;-)
 
Moin!

So ein richtig toll funktionierender Callmonitor für die FBF ist so ziemlich das einzige was mir zu einer "rundum-zufrieden-FritzBox" noch fehlt.
Das ganze müßte aber MSN-abhängig passieren, da ich mir hier mit meinen Eltern einen ISDN-Anschluß teile.
Könntest du mal bitte ein Beispiel zeigen, in dem Anruf auf MSN1 nur auf Dbox1 und MSN2 nur auf Dbox2 erscheint. Wenn ich das richtig lese kann man mit deiner Version ja Called als Wert übergeben? Damit müßte das ja eigentlich möglich sein? Wäre super nett von dir, wenn du mal solch ein Beispiel zeigen könntest.

...bye DonQ
 
Steht eigentlich schon im allerersten Post, hier jetzt für Dich abgewandelt:

Code:
#Quelle   Ziel    Aktion
^        ^12345   dboxpopup dbox1   #12345 durch die 1. MSN ersetzen
^        ^54321   dboxmessage dbox2 #54321 durch die 2. MSN ersetzen

Gruß,
Wichard
 
Danke Wichard,

Shame on me :oops:

Das SIP1$ hab ich irgendwie nicht richtig interpretiert, hätte da was mit MSN gestanden, wäre mir das sicher ins Auge gestochen. Werde das morgen mal ausprobieren.

...bye DonQ
 
buehmann schrieb:
Aber wie gesagt: Mach das lieber nicht, sondern beheb die Ursache für dein ursprüngliches Problem, anstatt jetzt an immer mehr selbsterzeugten Symptomen herumzudoktorn. ;-)

ok, ich gebe mich geläutert!

Mein Aufruf sieht nunmehr so aus:

Code:
^ ^ getmsg xyz.net '/call.php?nr=%s&called=%s&wer=fritzchen' "\$MSISDN" "\$CALLED"

ohne die "\" werden die Variablen nicht in die callmonitor.listeners geschrieben
 
brauche noch mal Hilfe:

ich würde gerne im meinem get-string die Uhrzeit der Fritzbox mitgeben. Dass man diese per "date" bekommt ist schon klar - aber wie bekomme ich die jeweils aktuell im den get-string?

Wahrscheinlich muss ich dann den callmonitor modifizieren?

Besten Dank im Voraus!
 
fritzchen schrieb:
ich würde gerne im meinem get-string die Uhrzeit der Fritzbox mitgeben. [...] Wahrscheinlich muss ich dann den callmonitor modifizieren?
Hallo Fritzchen, nein, brauchst du nicht. Du kannst bei den Kommandos in der callmonitor.listeners alles machen, was du willst, also auch date aufrufen (in meinem ersten Beitrag oben gab's schon so ein Beispiel), z.B. per "$(date)". Worauf du dann wieder achten musst, ist, dass das nicht zu früh (vor dem Schreiben in die Datei ausgewertet wird. Aber wie du das Dollarzeichen schützen kannst, weißt du ja schon. Hier mal dein Beispiel weitergesponnen:
Code:
cat <<EOP > /var/tmp/callmonitor.listeners
^ ^ getmsg xyz.net '/call.php?nr=%s&called=%s&wer=fritzchen&wann=%s' "\$MSISDN" "\$CALLED" "\$(date -Is)"
EOP
Noch einfacher (weil man auf keine Backslashes achten muss):
Code:
cat <<'EOP' > /var/tmp/callmonitor.listeners
^ ^ getmsg xyz.net '/call.php?nr=%s&called=%s&wer=fritzchen&wann=%s' "$MSISDN" "$CALLED" "$(date -Is)"
EOP
 
besten Dank, das funktioniert

ABER!

jetzt bekomme ich
Code:
/call.php?nr=0211xxx&called=2005-08-20T14%3a29%3a11%2b0200&wer=fritzchen&wann=

$CALLED wird folglich nicht ausgewertet... kann man nur zwei Variablen angeben????


EDIT:
Das Problem habe ich eingrenzen können:
Nur bei Anrufen auf das Festnetz (analog), wenn $CALLED also leer bleibt, tritt das oben beschriebene Problem auf...

bekommen wir da einen Workaround hin?


EDIT2:
hat sich erledigt. $CALLED kommt einfach als letzte Variable, dann ist es egal ob sie leer ist
 
bevor ich zu edit478 komme ein neuer thread:

mit der erweiterung des GET-Strings um die aktuelle Uhrzeit wollte ich diejenige Uhrzeit haben, die die Box als Eingangszeit in der Anrufliste abspeichert. Das klappt aber so nicht.

Meine Frage daher:
die vom Callmonitor mittels sed ausgewertete Zeile liefert am Anfang auch die Uhrzeit... kann die auch als Variable eingelesen werden, oder verstehe ich etwas falsch???

Leider bin ich nicht annähernd befähigt den callmonitor entsprechend zu erweitern, bin also für jeden Tipp dankbar!
 
Was bekommst Du denn stattdessen? Stört Dich jetzt, daß das Datum mitgeliefert wird? Wenn Du nur die Uhrzeit haben willst, kannst Du date z.B. wie folgt aufrufen:
Code:
date -Is +%H:%M:%S
 
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.