Quick'n'Dirty: SMS-Benachrichtigung bei eingehenden Anrufen

Ich glaub da wurde noch etwas nicht verstanden.
Ich versuch mal den Ablauf klarzustellen.

1. /var/flash/calllog ist ein Zeichenorientiertes Gerät (Char), sieht man mit: ls -la /var/flash/calllog
2. Es ist nur ein Zeiger auf einen Speicherbereich des Flashspeichers.
3. Mit folgenden Kommando wird die Funktionalität eingeschaltet: echo "" > /var/flash/calllog
4. Wurde 3. ausgeführt, wird bei einem Anruf folgende Datei versucht auszuführen: /var/calllog
5. /var/calllog kann ein Skript, oder ein Softlink zu einem Skript sein.
6. Erstelle mit vi /var/calllog diese und schreib mal rein: echo $@ # abspeichern nicht vergessen!
7. Existiert /var/calllog und wurde /var/flash/calllog mit dem echo Befehl aktiviert, lass die Konsole offen,
...und ruf dich mal an. schau dabei auf die Konsole.
Dann müsste dir klar werden, dass so ein Anruf deine Aktion nicht auslösen kann.
Oder zumindest, das /var/calllog noch ein paar Bedingungen anhand des Anrufs durchchecken sollte.
 
Zuletzt bearbeitet:
Hallo koyaanisqatsi!

warum die Logik unbedingt so sein muss, wie du sie beschreibst, leuchtet mir zwar nicht ein, aber ich nehme sie einfach so an und nun funktionieren alle Codes bei einem echten Anruf.

Vielen - vielen Dank hierfür!

Gruß
evin
 
Teste es einfach,
ist nicht meine Logik.

Wenn du das Skript nur in /var/flash/calllog,
mit nvi oder cat bringst,
aber /var/calllog nicht existiert,
gibt es eine Fehlermeldung.
(Wenn ein Anruf reinkommt)

Es sollte aber trotzdem funktionieren.
So ist es m.E. aber nicht gedacht.

Ich lass /var/flash/calllog leer, und benutze dann nur /var/calllog.
Das hat wirklich nur Vorteile (direktes editieren, kopieren oder verlinken).

Und meine calllog will ich dir auch nicht vorenthalten.
Bei mir ists ein Link auf ein Skript in nem USB Verzeichnis...
Code:
cd /var
# ls -AFlap --color=auto calllog # ;)
lrwxrwxrwx    1 root     root            38 Nov 30 23:29 calllog -> /var/media/NEW_LINK/openelec/notify.sh
...und das hier steht in...
notify.sh
Code:
#!/bin/sh
# Variablen
TIME=%A%t%X%t%d%t%B%t%Y%n
DATUM=$(date +${TIME})
METHOD='gui.shownotification'
TITLE="$1"
MESSAGE="$3"
IMAGE='/storage/.xbmc/addons/script.xbmc-pbx-addon/icon.png'
DISPLAYTIME=15000
PARAMS='{"title":"'${TITLE}'","message":"'${MESSAGE}'","image":"'${IMAGE}'","displaytime":'$DISPLAYTIME'}'
DATA='{"jsonrpc":"2.0","method":"'${METHOD}'","params":'${PARAMS}',"id":1}'
URL='http://BENUTZER:PASSWORT@openelec:80/jsonrpc'
# Kommando
TRY_IT=$(/var/media/NEW_LINK/curl -s -X POST -H "Accept: application/json" -H "Content-type: application/json" -d ${DATA} ${URL})
#DEBUG
echo -e  $DATUM"\n"$0":"$$"<-PID->"$! $#" Argumente\n1="$1"\n2="$2"\n3="$3"\n4="$4"\n5="$5"\n6="$6"\n7="$7"\n8="$8"\n9="$9"\nJSON:"$TRY_IT >> /var/media/NEW_LINK/woc.log
...erätst du was das wohl macht?

...think about ;)
 
Zuletzt bearbeitet:
Wenn du das Skript nur in /var/flash/calllog,
mit nvi oder cat bringst,
aber /var/calllog nicht existiert,
gibt es eine Fehlermeldung.
(Wenn ein Anruf reinkommt)

obwohl die Datei "/var/calllog" nicht vorhanden ist, bekomme ich keine Fehlermeldung. Wie gesagt, nur folgende Rückmeldung kommt dann raus (aber nur bei einem echten Anruf!):
Code:
Nov 30 13:48:40 telefon[626]: SIGCHLD received!
Das ist ja aber kein Fehler.
Fehler wird nur dann angezeigt, wenn die MSN nicht übereinstimmen.

Es sollte aber trotzdem funktionieren.
leider nicht. Es funktioniert nur mit dem manuellen Aufruf - mit dem Befehl
sh /var/flash/calllog "CID" "MSN" o. ä.

Ich lass /var/flash/calllog leer, und benutze dann nur /var/calllog.
Das hat wirklich nur Vorteile (direktes editieren, kopieren oder verlinken).
Wie ich bereits oben geschrieben habe, dankbar dir habe ich verstanden was für eine Logik von Fritz!Box gefordert wird, und habe dann genau so gemacht- also es funktioniert seit dem alles bestens (diesmal ach bei einem echten Anruf).

Und meine calllog will ich dir auch nicht vorenthalten.
...erätst du was das wohl macht?

Eingehende Anrufe auf irgendwelchem Gerät anzeigen, warte mal.... muss erstmals Tante Google fragen, was xbmc für ein Ding ist:
Auf einem deiner vielen Rechner hast du "XBMC Media Center" drauf und beim Zocken und Faulenzen willst du auf dem Laufenden sein ;)

Ich hab nicht mal "Windows Media Center" (ist ja in Windows Ultimate mit integriert) eingeschaltet. Es schein mir so alles sehr langweilig zu sein ;-), aber mit Freaks wie du sicherlich macht es dann Spaß dies und jenes auszuprobieren.
Filme brauch ich nicht, wobei für Fotos und vielleicht Kinderfilme für die Kinds wäre es ab und zu nicht schlecht. Oder für eine WebCam...
aber ich bin mit Windows ganz gut bedient und verwöhnt (klar, aufgrund der Lizenzen wird es dann bei mehreren Rechner sehr teuer, sodass frei Softwaren hier definitiv überlegend sind).

Schönes Wochenende

Gruß
evin
 
Zuletzt bearbeitet:
UPDATE:

Alte Vorgehensweise:
Das calllog Script in /var Verzeichnis ablegen und danach eine zweite calllog-Datei (welche auch leer sein darf) im var/flash Verzeichnis erstellen, damit bei einem Anruf das Script, das sich im /var Verzeichnis befindet, ausgeführt werden kann.
Z. B. mit folgendem Befehl eine leerere calllog-Datei erstellen:
echo "" > /var/flash/calllog


Eine zweite Datei muss doch nicht unbedingt erstellt werden: nach Neustart des Routers hat es sich bei mir gezeigt, dass das calllog-Script (abgelegt nur im /var/fash Verzeichnis) bei einem echten Anruf doch problemlos ausgeführt wird. Also keine zweite calllog-Datei befindet sich im /var Verzeichnis, oder sonstwoanders.

Anscheinend hat der Fritzi einfach rumgezickt. Aber nach dem das oben erwähnte Verfahren (laut dem Hinweis von @koyaanisqatsi) angewendet wurde, hat sich das Problem ohne Neustart gelöst.
Jedoch warum so umständlich, wenn es doch einfacher geht?
Also da Script wird ab nun einfach direkt in /var/flash abgelegt und es funktioniert alles auch bei einem Echten Anruf.
Auch nach einem Neustart ändert sich nichts und es funktioniert weiterhin.

Gruß
evin
 
Zuletzt bearbeitet:
Die Fehlermeldung der fehlenden /var/flash/calllog gab es in älteren Firmwareversionen.
Deswegen weiss ich ja überhaupt das die auch benutzt werden kann.
Wusstest du es?

Und Niemand hat etwas von unbedingt geschrieben.

Natürlich kannst du das so machen.
Bleibt doch Jeden selbst überlassen ob er die Möglichkeit nutzt,
die nicht resetfete /var/calllog,
oder den resetfesten Zeiger in /var/flash/calllog.

Manche Leute cat'en auch ihre Skripte aus /var/flash/debug.cfg nach /var/calllog.
Dann sind sie auch resetfest.

test.sh
Code:
#! /bin/sh
# Skripterstellung aus einem Skript heraus.
/bin/cat << EOT > /var/calllog
echo -e "\${0}"': '"\${\$}"' <-PID-ARGS-> '"\${!}" "\${#}"'\n'"\${@}"
EOT
...allerdings müssen die Dollarzeichen bei sowas maskiert werden (mit dem Backslash),
sonst werden nichtexistierende Variableninhalte ("") statt die Symbole übertragen.

Oder es wird einfach in der debug.cfg das Kommando für die Linkerstellung ausgeführt.
Doch muss sichergestellt sein, dass das USB Laufwerk schon eingebunden ist.
Dieses ist bei der cat Methode logischerweise nicht nötig.

Wie du siehst, kann das bei Jeden sehr individuell ablaufen,
so muss auch mal erlaubt sein nachzufragen: "Wie machst du das genau?"

...so ist Linux nunmal.
 
Zuletzt bearbeitet:
Gruß koyaa...

> so muss auch mal erlaubt sein nachzufragen: "Wie machst du das genau?"

Ich habe mir in shell:sendto (unter Windows also) eine Verknüpfung zu einem Verzeichnis auf dem USB-Stick (welcher als USB-Speicher am Router hängt) angelegt. Das Verzeichnis lautet genau: \\fritz.box\USB2-0-FlashDisk-01\FRITZ\calllog
Jedes mal, wenn ich mir ein Skript mit Notepad++ angepasst habe, sende ich es einfach über das Kontextmenü direkt an den USB-Stick. Danach gebe ich in der Konsole nur einen einzigen Befehl wie folgt und fertig ist die Sache:
Code:
cat /var/media/ftp/USB2-0-FlashDisk-01/FRITZ/calllog/calllog > /var/flash/calllog
Allerding warum der Router in den letzten Tagen sich so stur verweigert hat bei einem echten Anruf das Skript aus dem /var/flash Verzeichnis auszuführen, bleibt mir immer noch ein Rätsel. Erst nachdem ich die von dir beschriebene Logik eingesetzt habe, hat es auf Anhieb funktioniert. ABER so bin ich mit dem Eindruck geblieben, dass es so immer zwingend sein muss, bis ich heute früher festgestellt habe, dass nach einem Neustart es doch auch einfach klassisch geht (bzw. wo gäbe es da Nachteile?).

PS: an Administratoren: mit dem erweiterten Editor hier im Forum zu schreiben ist sehr mühsam! Extrem langsam, jede zweite Buchstabe wird verschluckt, sodass ich wie ein Opa langsam schreiben muss.

Gruß
evin
 
Zuletzt bearbeitet:
Ein klassischer, ich nenn es mal, Anfängerfehler, ist:
Oft wird nicht verstanden, das der Inhalt von /var/flash keine "normalen" Dateien enthält.
Sondern eben diese ominösen "Char" (Zeichenorientierte) Gerätedateien.
Diese müssen sonderbehandelt werden.
Passiert ein "Unfall" und ist einer dieser Dateien "umgewandelt" worden, in eine Textdatei zum Beispiel, funktioniert der Zeiger nicht mehr.
Nach einem Reboot der Box werden aber einige dieser Zeiger auf Vorhandensein geprüft und gegebenenfalls neu angelegt.
Code:
# cd /etc/init.d
# grep -H "mknod /var/flash/" *
S78-aha:mknod /var/flash/ahastat.cfg c ${tffs_major} $((0xe3))
S78-aha:mknod /var/flash/ahausr.cfg c ${tffs_major} $((0xe2))
S78-aha:mknod /var/flash/aha.cfg c ${tffs_major} $((0xe1))
rc.tail.sh:mknod /var/flash/debug.cfg c $tffs_major $((0x62))
...aber eben nicht alle!
Dann kann schonmal was unerwartetes passieren.

Deswegen ist es sicherer, wenn möglich, nicht direkt mit diesen Zeigern zu arbeiten.
Bei /var/calllog gibt es diese Möglichkeit.
 
da hast du sicherlich Recht und nehme es auf jeden Fall in Kenntnis so! Auch vielen Dank hierfür.
Da ich mich über die Funktion der einfachen Variante gefreut habe, wollte ich es gleich mitteilen (so nach dem Moto "wenn es geht, warum dann nicht").

> Sondern eben diese ominösen "Char" (Zeichenorientierte) Gerätedateien.
das sagt mir zwar alles nichts (ich bin auch ein purer Anfänger, was UNIX - Linux ... betrifft). Ich kenne nur die "Symbolische Verknüpfungen" und "Verzeichnisverbindungunden" in Windows (mklink /?).

> Diese müssen sonderbehandelt werden.
wie müssen diese sonderbehandelt werden, ein Beispiel?

> Passiert ein "Unfall" und ist einer dieser Dateien "umgewandelt" worden, in eine Textdatei zum Beispiel, funktioniert der Zeiger nicht mehr.
Und hier bin ich am meisten neugierig geworden, wie so ein Unfall an einem Gerät so von alleine vor sich hin passieren kann, außer dass der Anwender da fahrlässig handelt?

Meine laute Überlegungen sind natürlich nicht als Gegenargumente zu verstehen, sondern ich bin halt sehr neugierig geworden, da ich bisher /var/flash tatsächlich als normales Verzeichnis betrachtet habe und alles was ich dorthin ablege würde, wäre angeblich weiterhin eine normale Datei, so wie sie bei der Erstellung war.
Ich glaube für Lektüren hier richtig aufgehoben zu sein: http://de.wikipedia.org/wiki/Gerätedatei
Stimmt's?

Gruß
evin
 
Ein Beispiel:

Der Klassiker: cp mein_skript.sh /var/flash/calllog
...und schon ist das Zeichengerät weg, weil überschrieben mit einer Datei.
Bei einem Reboot der Box ist dann die Datei weg, und bei viel Pech, /var/flash/calllog auch.

Deswegen wird ge' echo 'tet oder ge' cat 'tet.
Dabei wird das Zeichenorientierte Gerät nicht gelöscht, sondern der Inhalt in den Speicher des Flash abgelegt.
Zum Editieren vorhandener Inhalte in diesen Zeigern gibt es einen sogenannten "Wrapper".
Der heisst nvi und ist auch ein Skript...
Code:
# cat /usr/bin/nvi
#! /bin/sh
if [ -z "$1" ] ; then
        echo "use: $0 <config-filename>"
        exit 1
fi
cat $1 >/var/nvi.tmp && vi /var/nvi.tmp && cat /var/nvi.tmp >$1
rm -f  /var/nvi.tmp
Wie du siehst, wird eine Temporäre Datei editiert, die nach Beenden/Abspeichern auch nur an die richtige Stelle ge' cat 'tet wird.
 
Zuletzt bearbeitet:
Na, dann beschreibe ich auch mal wie ich es mache.
Ich habe nur die Datei /var/flash/calllog.
Erstellen und ändern mache ich (wie auch bei der debug.cfg oder ar7.cfg) mit WinSCP, aber per SFTP, per SCP geht es nicht.
 
"Erstellen und ändern ... mit WinSCP"
WinSCP kann mknod?
...oder kopierst du gnadenlos den Zeiger kaputt?
 
Keine Ahnung, aber es geht und funktioniert...
und das schon seit Jahren...

Erstellen ist wahrscheinlich übertrieben. Ich öffne die Datei und kopiere den Inhalt rein,
aber ich kopiere sie auch mal komplett von c:.

Ich finde meine Variante ist die schnellste und unkomplizierteste.
Einfach im WinSCP auf die Datei gehen, Enter drücken und schon kann ich sie bearbeiten,
dann speichern und fertig bin ich. Nix mit "echo", "cat", "vi" oder "nvi".

Natürlich muß der dropbear erst mal laufen.
 
Zuletzt bearbeitet:
Dann hast du auch nie via telnet und echo /var/flash/calllog mit echo aktivieren brauchen.
Sehr seltsam. Dann kann getrost alles was ich dazu geschrieben hab ignoriert werden.
Besser, weils ja peinlich ist, ich lösche alle meine dahingehenden Beiträge.
Stimmt ja alles garnicht.
Das ist echt deprimierend.
 
STOPP mal mit löschen, du hast da mehr Ahnung von Linux, bei mir ist das nur Versuch und Irrtum.

Nö, bei der /var/flash/calllog brauchte ich nie ein "echo", warscheinlich habe ich da gleich von c: kopiert, und WinSCP hat das richtig gemacht.
Bei einer jungfräulichen FB muß ich bei der debug.cfg das 1. mal ein "echo" machen, bevor ich sie öffnen kann.
Da habe ich es aber (beim 1. mal) noch nicht mit einem kopieren von c: probiert.

Ich bin ja jetzt erst durch deine Beiträge auf die Problematik aufmerksam geworden.
Aber das dies keine normalen Dateien sind war mir schon bekannt.

Ich habe mich nur immer gefreut, daß es für mich so einfach geht.

Wahrscheinlich ist WinSCP so schlau und erkennt das dies ein Zeiger ist und mach dann genau das richtige.
Glück für mich ;)
 
Zuletzt bearbeitet:
Das calllog-script ruft bei mir intern ein PHP-Skript auf, welches die eingehenden Anrufe in einer MySQL-Datenbank (inkl. Rufnummernprüfung bei Das Örtliche) protokolliert. Können auch ausgehende Anrufe irgendwie erfasst werden, die sind aktuell irgendwie außen vor?

Gruß Patrick
 
Irgendwie, mein Sichwort!
:rolleyes:

Ja, das sollte gehen, mit einer zweiten Fritz!Box im LAN, z.B. als Repeater oder als IP-Klient.
Voraussetzung dafür wäre:

Im Router:
1. Soviele LAN/WLAN Telefone als Registrar einrichten wie du Telefonnummern beim Anbieter hast.
2. Diese Nummern der Reihe nach (von Oben nach Unten) diesen Registraren zuweisen.

In der 2. Box (Repeater oder IP-Klient):
1. Soviele Internetnummern anlegen wie du Registrare im Router hast, selbe Nummer zuweisen und am Router Registrar mit eben dieser zugewiesenen Nummer anmelden/registrieren lassen.
2. Jetzt genauso viele LAN/WLAN Telefone einrichten und diesen diese Telefonnummern in der richtigen Reihenfolge zuweisen.

Ab jetzt benutzt du das /var/calllog im Repeater/IP-Klienten, der alle internen/exterrnen rein/rausgehenden Gespräche des Routers via /var/callog erfassen können sollte.
 
Aber die Telefone am Repeater sind doch auch wieder nur interne Teilnehmer die ausgehend nicht mittgeloggt werden?
 
Das müsste schonmal durchgetestet werden, mach ich gleich mal, weil ich schon so eine Konfig habe.
Jetzt hab ich Feierabend.
Also poste ich den Test in 2-3 Stunden.

...bis denne.

EDIT: "Aber die Telefone am Repeater sind doch auch wieder nur interne Teilnehmer die ausgehend nicht mittgeloggt werden?"

Da haste leider Recht, meine Lösung funktioniert so nicht. Also vergiss sie.
Hab aber mal wieder beim stöbern auf der Fritz!Box ein paar andere interessante Sachen gefunden.
Die sind aber mal wieder total Offtopic.
Deswegen hat das jetzt auch so lange gedauert.
:rolleyes:
 
Zuletzt bearbeitet:
Ich hab es jetzt anders gelöst. Ich nutze jetzt den Callmonitor von freetz, da kann ich auch die ausgehenden Anrufe mitprotokollieren lassen.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,067
Beiträge
2,245,470
Mitglieder
373,504
Neuestes Mitglied
andkel
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.