Türklingel mit pjsip im Eigenbau - Probleme mit DTMF

Hallo Allerseits,

ich bin ganz neu hier und habe schon ein Problem / bzw. eine Frage.
Wir setzen jetzt seit ca. einer Woche die Moybdick ein und sind auch sehr zu frieden. (Bis auf ein kleines Problem mit dem NTP).

Da wir von einer Agfeo Anlage auf die IP-Welt umgestiegen sind haben wir das Problem die Türklingel und den Türöffner in die IP-Umgebung einzubinden.
In diesem Fall geht es nicht um das Intercom (sprechen) sondern rein um das Signalisieren des Türgong und des Betätigen des Türöffners.

Als endgültige Lösung, soll in Zukunft eine Lösung von Baudisch her, das ist allerdings gerade nicht im Budget und würde größere Umbauerbeiten an der Türe mit sich bringen.

Es sollte also eine Interims-Lösung her. Türklingel und Türöffner lagen ja bereits an der Agfeo an. (Beides über Potentialfreie Kontakte).
Nach kurzer Recherche habe ich das Projekt DoorPi ausfindig gemacht. Es basiert auf einem Raspberry Pi (RPI) mit pjsip und etwas python-Background.
Also kurzer Hand das herumliegende RPI genommen, die nötigen Pakete darauf installiert, pjsip kompiliert und eine Schaltung mit gebaut, die den Anschluss der Türe an die GPIO des RPI ermöglicht. (wenn Interesse dazu besteht, kann ich gerne mal dazu berichten). Mit pjsip wäre auch ein richtiges Intercom möglich aber das RPI hat leider keinen Line In und die Türe keine Sprechstelle.

Als die Sache fertig war, zum Test schnell an die Fritz.Box via Sip angebunden. Funktioniert, prima. Ich Betätige die Klingel, der pjsip tätigt einen Anruf an die vorgegebene Nummer. Ich kann das Gespräch annehmen und mit einer vordefinierten DTMF-Taste (hier die #) die Türe öffnen.
Auch umgekehrt kein Problem, rufe ich pjsip von einer erlaubten Nummer an, nimmt pjsip automatisch ab und ich kann mit # die Türe öffnen.

Nächster Schritt war dann in der Mobydick ein Endgerät einzurichten und das pjsip entsprechend zu konfigurieren. Dem Endgerät einen Benutzer zugewiesen (leider geht so ein User der Lizenz “flöten” - gibts da eine andere Möglichkeit?). Eine Rufgruppe Türe angelegt, diese im pjsip eingetragen und der Gruppe Benutzer zugeordnet.
Ich drücke die Klingel und siehe da die definierten Gruppenmitglieder werden angerufen und können das “Gespräch” - man hört natürlich nichts - annehmen. Nur jetzt kommt das PROBLEM: Ich drücke die # und nichts passiert, auch im LOG von pjsip ist nichts zu sehen.
Dann von einem Telefon aus pjsip angerufen, dieses nimmt ab, ich drücke die # - funktioniert!
Dann habe ich die DTMF Taste noch umgeändert, geht funktioniert aber auch nicht.

Dann habe ich den Aufbau kurz mit einer virtuellen askozia auf dem Laptop getestet. Funktioniert in beide Richtungen.

Also Zusammengefasst mein Problem:
Wenn der Aufbau mit der Mobydick erfolgt habe ich das Problem, dass DTMF nicht funktioniert wenn der pjsip den Ruf aufbaut.
Wenn ein Telefon oder ein Softphone den ruft aufbaut, funktioniert es.

Ich weis leider nicht wo ich mit der Fehlersuche beginnen soll oder woran das liegen kann.
Hat jemand einen Tipp oder gar eine Lösung parat?

Vielen Dank und beste Grüße

Johannes

Hallo Johannes,

vielleicht spielt hier die Art wie der DTMF gehandhabt wird noch eine Rolle, siehe hierzu http://www.voip-info.org/wiki/view/SIP+DTMF+Signalling bzw. http://www.voip-info.org/wiki/view/Asterisk+sip+dtmfmode.
Die Option kannst du dann bei den SIP Optionen des peers eintragen.

Gruß
Markus

Hallo Markus,

sowas in der Richtung hatte ich mir auch schon gedacht. Hab auch schon auf dem Mobydick-webend unter Endgerät bei SIP-Optionen alle dtmfmode = durchgespielt.
Hat leider nicht gebracht. Wenn ich dtmfmode=inband setzte gehts in beide Richtungen nicht mehr.

Grüße und vielen Dank

Johannes

Hallo Johannes,

cooles Projekt!

Mach mal einen trace mit sipgrep. Das Tool ist direkt in der MobyDick verfügbar.
Einfach “sipgrep -d eth0” (oder eth1, je nachdem) und Deinen Test wiederholen. Am besten machst Du einen Mitschnitt pro Rufrichtung, vielleicht kannst Du durch den Vergleich etwas herausfinden…

Unser eigenes Softphone basiert im übrigen auch auf pjsip. Wir werden es demnächst im Quelltext und unter GPL auf github veröffentlichen, vielleicht kannst Du Dir da dann auch etwas abschauen.

Gruß,

Thomas

Servus Thomas,

Danke… machte halt auch spaß mal was zu “basteln”, vor allem lässt sich die Lösung für alles mögliche anwenden, quasi ein SIP Digital I/O.

Bin leider mit dem “sipgrep -d eth0” nicht wirklich weiter gekommen. Mir fehlt da aber auch das Know-how um es zu interpretieren.

Ich hab jetzt aber mal unter /etc/asterisk/logger.conf folgendes eingetragen: full => notice, warning, error, debug, verbose, dtmf, fax
Dann den Log mit tail -f /var/log/asterisk/full verfolgt.

Wenn der Call von einem Endgerät -> “Doorpi” aufgebaut wird, bekomme ich nichts von DTMF angezeigt.
Soweit ist das verstanden habe ist das so richtig, da ja DTMF nach rfc2833 als rtp Payload transportiert wird und rtp nur zwischen den Endpoints läuft.

Wenn der Call vom “Doorpi” -> Endgerät aufgebaut wird habe im “full log” folgende Einträge.
DTMF[11344][C-00000004] channel.c: DTMF begin ‘#’ received on SIP/jorues-0000000c
[Feb 27 22:23:40] DTMF[11344][C-00000004] channel.c: DTMF begin passthrough ‘#’ on SIP/telefon1-0000000c
[Feb 27 22:23:40] DTMF[11344][C-00000004] channel.c: DTMF end ‘#’ received on SIP/telefon1-0000000c, duration 200 ms
[Feb 27 22:23:40] DTMF[11344][C-00000004] channel.c: DTMF end accepted with begin ‘#’ on SIP/telefon1-0000000c
[Feb 27 22:23:40] DTMF[11344][C-00000004] channel.c: DTMF end passthrough ‘#’ on SIP/telefon1-0000000c

Es scheint mir so als ob der Asterisk sich da zwischen hängt. So tief stecke ich dann leider doch nicht in der Materie um das nachvollziehen zu können.

Jemand von euch vielleicht?

Vielen Dan kund Grüße

Johanne

Moin Johannes,

der DTMF Code wird hier zwar im Asterisk ausgewertet und kommt danach wohl nicht bei dem pjsip an. Wie Markus oben schon schrieb gibt es verschiedene DTMF Modes, diese kann man entweder Global oder per Peer schalten, siehe http://www.voip-info.org/wiki/view/Asterisk+sip+dtmfmode

Probier mal bitte folgendes aus:
Leg unter “Appliance > Systemeinstellungen” in “sys.asterisk.configure.sip.file” den Eintrag “dtmfmode” an und versuch dort zuerst den Wert “auto”, danach ggf. noch “info”. Wenn Du den Wert angelegt/geändert hast, musst Du noch per “Anwenden > Telefonie” die neue Konfiguration aktivieren. Alternativ spielst Du nur mit dem dtmfmode Deines Pi’s indem Du “dtmfmode=…” in die Optionen des Endgerätes einträgst.

Falls alles nichts hilft bräuchte ich den SIP Trace.

Gruß,

Thomas

Servus Thomas,

die DTMFMODE optionen hab ich jetzt in jeglicher Kombination durchgespielt, brachte leider keinen Erfolg. Bei “info” funktioniert es in beiden Richtungen nicht mehr.

Ich bin mir nicht ganz sicher ob ich vielleicht beim kompilieren von pjsip etwas falsch gemacht habe. Wobei es ja mit der “Konkurrenz” läuft.

Anbei mal die caps von sipgrep. IPs: MobyDick:192.168.20.3; Door:192.168.20.39; Client(Telefon auf OS X):192.168.20.13.

Vorgang: Call wird aufgebaut, ich drücke die #, warte ein bisschen und lege auf. fon2door funktioniert, door2fon funktioniert nicht.

/home/pfaffman/data/pascom.net/attachments/3/9/0/7/522.attach (8.2 KB)

Vielen Dank für deine Mühe und beste Grüße

Johannes