Türsprechanlage: Asterisk 13(Debian), Welltech ATA172plus, DCA 612-0

Freiheiter

Neuer User
Mitglied seit
22 Feb 2022
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo zusammen,

als eifriger Mitleser konnte ich mir aus diesem schönen Forum schon viele wertvolle Infos zusammensuchen, aber an einer Stelle komme ich nicht weiter und bitte um Eure Hilfe:

Die o.a. Kombination habe ich "fast" zum Funktionieren bekommen: der Welltech registriert sich an Asterisk, der DCA wählt die 51 wenn man den Klingelknopf drückt und der ATA nimmt den Anruf sofort (nicht erst nach 5 Sekunden) an. Der dialplan verteilt den Call an ein internes Telefon, ich kann den Call annehmen, dann den DCA über DTMF-Töne steuern (Türöffner...), alles bestens - bis hier. Ich lege auf. Der Logger sagt mir, dass Asterisk sein BYE an den ATA sendet. Aber: der ATA veranlasst den DCA nicht zum Auflegen. Unmittelbarer Effekt: man kann minutenlang nicht mehr an der Tür klingeln. Das kann ich so nicht lassen...

Die Anleitung des DCA sagt, man könnte #0 senden, "wenn TK-Anlage am Gesprächsende keinen Besetztton signalisiert."
Also versuche ich das hier:

; Türruf - der DCA wählt die 51, wenn geklingelt wird
exten => 51, 1, Dial(PJSIP/n510&PJSIP/maxwell4&PJSIP/maxwell3)
exten => 51, 2, Busy(5)
exten => 51, 3, Hangup()

Geht nicht - und auch im Log sehe ich nur den ersten Eintrag (den von Dial()):
Executing [51@internalsip:1] Dial("PJSIP/ata192plus-00000047", "PJSIP/n510&PJSIP/maxwell4&PJSIP/maxwell3") in new stack

Oder auch:
; Türruf - der DCA wählt die 51, wenn geklingelt wird
exten => 51, 1, Dial(PJSIP/n510&PJSIP/maxwell4&PJSIP/maxwell3)
exten => 51, 2, SendDTMF(#0)
exten => 51, 3, Hangup()

Ebenso ohne Erfolg - und ohne weiteren Logeintrag.

Ich mach hier bestimmt was simples falsch - aber was?
Vielen Dank im Voraus für Eure Hilfe - wenn ich fertig bin schreibe ich auch gerne mal eine Liste zusammen, wie man die anderen Fallstricke der o.a. Kombination umgeht.

Herzlichen Gruß!
Freiheiter
 
Zuletzt bearbeitet:
Kaum macht man's richtig, geht's: mir war schon verdächtig vorgekommen, dass Dial() immer brav geloggt wird, der Rest der extension aber nicht. Die Lösung ist einfach: Dial() beendet die Ausführung, obwohl man in den meisten Beispielen hintendran ein (damit wohl überflüssiges? dokumentarisches? paranoides?) Hangup() findet.

Wenn man nach dem Gespräch den Channel noch weiter bespielen will, braucht man die g-Option von Dial() (continuation):

; Türruf - der DCA wählt die 51, wenn geklingelt wird
exten => 51, 1, Dial(PJSIP/n510&PJSIP/maxwell4&PJSIP/maxwell3,,g)
exten => 51, 2, Busy(5)

Dann sieht man im Log auch...
Executing [51@internalsip:2] Busy("PJSIP/ata192plus-0000004e", "5") in new stack
... und - der ATA sendet das erhoffte Tuten an den DCA, der wiederum prompt auflegt und fürs nächste Klingeln bereit ist.

Meine Auerswald 5010 VoIP mitsamt dem ganzen internen ISDN-Kram steht damit ganz kurz vor der Rente :)

-- Zusammenführung Doppelpost gemäß Boardregeln by stoney

Doku bildet: Dialplan executing will continue if no requested channels can be called, or if the timeout expires.

Hangup() ist also schon nötig, für den Fall dass Dial() nirgends klingeln kann oder man ein timeout gesetzt hat welches abläuft.
 
Zuletzt bearbeitet von einem Moderator:
Moinsen


Normalerweise braucht es ja auch kein explizites Hangup(), weil das ja eigentlich die über Dial() vermittelten Personen/Geräte tun.
Viel wichtiger find ich die Möglichkeit, nach einem Dial() mit der h Extension noch was machen zu können.

Übrigens, selbst nutz ich explizite Hangups für eine Whitelist.
Mittels ExecIf() kannste jede Dialplan Application/Function ausführen.
So nach dem Motto: Execif($[Bedingung]?Dial():Hangup())
...und wenn die Bedingung wahr ist und das Dial() erfolgte gibt es danach auch kein explizites Hangup() im Dialplan.
Trotzdem würde nach Beiden* die h Extension angesprungen werden.

Hast du mal ein explizites Hangup(16) oder 17 ausprobiert?
...wobei 16 = normal call end und 17 = cancel call entspricht.

* Dial() Verbindung durch Teilnehmer normal beendet und explizites Hangup()
 
Zuletzt bearbeitet:
Spannende Möglichkeiten, danke sehr! Ich sehe schon, da ist noch unglaublich viel Potential unter der Haube, ich werde mich aber ein Stückweit zu "keep it simple" zwingen (wenn ich das durchhalte).

EIn explizites Hangup(16) wäre wohl funktional identisch, denn im Log zeigt sich auch so eine 16. Auch diese Möglichkeit ist aber in anderem Kontext sicher spannend, danke für den Hinweis!

Letztlich ist der DCA halt ein Gerät aus ferner Vergangenheit, und ich kann mich erst mal damit arrangieren, darauf Rücksicht zu nehmen und ihm ein Retro-Tut-Tut-Tut zu servieren - jetzt, wo ich weiß dass/wie es bei Asterisk ganz einfach geht. Eigentlich wäre die richtige Lösung ja eine "richtige" VoIP-Gegensprechanlage, aber da scheue ich momentan noch vor zurück (Eingriff in die Fassade, Kosten, Kompatibilität des Öffners etc.)

Unter dem Strich steht ein Danke!


Nachtrag, falls das jemand mal wissen mag: beide obigen Möglichkeiten, den DCA zum Auflegen zu bringen, funktionieren. Eleganter ist aus meiner Sicht aber die DTMF-Methode, denn bei der Busy-Methode hört die Person an der Tür noch ca. 2 Sekunden Tut-Tut-Tut, bevor das Gespräch wirklich endet.
 
Zuletzt bearbeitet:
Viele Möglichkeiten, aber Alle sollten auf Zuverlässigkeit getestest werden, wenn im Dialplan benutzt.

Hab auch nochmal nachgedacht, die Verbindung kann mit den Dial() Flag für Anrufsdauer beendet werden.
...versuch macht kluch:
http://das-asterisk-buch.de/1.6/applications-dial.html schrieb:
Code:
L(x[:y][:z])
Begrenzt die Dauer des Anrufs auf x Millisekunden, wobei y Millisekunden vor Ablauf der festgesetzten Dauer und danach wiederholt alle z Millisekunden bis zum Anlauf der Frist eine Warnung signalisiert wird. Der x-Parameter muss angegeben werden, y und z sind optional. Die folgenden speziellen Variablen können ebenfalls gesetzt werden und stellen zusätzliche Kontrollmöglichkeiten zur Verfügung:
LIMIT_PLAYAUDIO_CALLER=yes|no
Gibt an, ob dem Anrufer Audiodateien vorgespielt werden sollen.
LIMIT_PLAYAUDIO_CALLEE=yes|no
Gibt an, ob dem Angerufenen Audiodateien vorgespielt werden sollen.
LIMIT_TIMEOUT_FILE=filename
Gibt an, welche Datei abgespielt werden soll, nachdem die Zeit abgelaufen ist.
LIMIT_CONNECT_FILE=filename
Gibt an, welche Datei zu Beginn des Anrufs abgespielt werden soll.
LIMIT_WARNING_FILE=filename
Gibt an, welche Datei gespielt werden soll, wenn der Parameter y angegeben ist.
Wenn das klappt stehen dir ne Menge Optionen für Audio zur Verfügung ;)
 
Falls diesen Thread mal jemand anhand der Stichwörter findet, schreibe ich mal ein paar "gotchas" rein, die ich überwinden musste um meine Siedle-Türsprechanlage mit "ihrem" DCA 612-0 schließlich über den Welltech ATA 172 plus zum Laufen zu bekommen.

Erstmal: warum überhaupt, und nicht gleich ne schicke neue VoIP-Türsprechanlage? Nun, die Dinger sind, wenn sie halbwegs nach was aussehen, aus meiner Sicht noch ziemlich teuer, an der Fassade rumbasteln wollte ich auch nur ungern, und dann wäre noch zu klären, wie der Türöffner zu bestromen ist (Relais über PoE zu speisen scheint kein Standard zu sein?!)

Also erst mal die konservative Lösung.

Den Welltech habe ich gewählt, weil er über PoE versorgt wird (ich mag keinen Netzteilzoo).

Nun zu den Gotchas:
1.) Inbetriebnahme: Der ATA ist als Gateway gedacht, hat also einen WAN-Port und einen LAN-Port. Nur über den WAN-Port nimmt er PoE an, am LAN-Port stellt er einen DHCP-Server. Also: PoE-Switch an WAN, und einen Laptop an den LAN-Port, dann kommt man ins Webconfig. Als Router kann man das Ding sowieso nicht mit gutem Gewissen betreiben (Firmware von 2015 bringe ich bestimmt nicht ans offene Internet), also erst mal unter NAT/LAN auf Bridgemode gestellt. WAN-seitig ans interne Netz angebunden holt sich das Kästchen seine IP via DHCP. Interessanterweise zeigt es standardmäßig auf dem "WAN"-Port sein Webconfig-Interface, so dass man also nur den einen Port für Strom und Webconfig braucht. So, damit läuft er schonmal.

2.) Der ATA mag nur den TCP-Transport, kein UDP. Im internen Netz soll es mir recht sein, also in der pjsip.conf:
[transport-tcp] type = transport protocol = tcp bind = 0.0.0.0
Natürlich muss auch der ATA selbst in die pjsip.conf und den Dialplan, hier gibt es keine (mir bekannten) Besonderheiten. Ich habe auf allow=alaw eingeschränkt.

3.) Unter SIP/Service im Webconfig trägt man seinen Asterisk ein, und der ATA verbindet sich dann auch - aber nur, wenn man ein (in Wahrheit gar nicht vorhandenes) Proxy einträgt. Ich habe Dasselbe eingetragen wie beim Domain server, das ging.

4.) Die Nummer, die der DCA beim Drücken des Klingelknopfs (entsprechend seiner eigenen Config) wählt, wird im Dialplan wunschgemäß auf die internen Telefone verteilt. Soweit noch nichts besonderes, aber: bei Tonwahl wartet der ATA normalerweise, ob nicht noch was nachkommt - 5 Sekunden, viel zu lange für jemanden, der an der Tür steht und nichts klingeln hört (der drückt mir die Klingel ein). Lösung: im ATA-Webconfig unter "Dial Plan Basic" eine "Dial Now Rule" für die Nummer eintragen, die der DCA wählt, dann geht es ohne große Verzögerung.

5.) Die Telefone, die angewählt werden, sollten einen spezifischen Klingelton abspielen, wenn statt einem externen Anruf die Tür dran ist. Das geht am einfachsten, wenn sie eine Nummer übergeben bekommen. Dies habe ich mit dem f-Parameter erzwungen, etwa so:
exten => 51, 2, Dial(PJSIP/Telefon1&PJSIP/Telefon2,,f(40)g)
Der DCA wählt die 51, und der f-Parameter sorgt dafür, dass die Gegenstellen sich von der 40 angerufen fühlen (so dass sie Dingdong machen statt trillillillili). Das "g" brauchen wir, damit das Skript weiterläuft, auch wenn jemand drangeht und das Gespräch endet (siehe oben)...

6.)
... denn das Skript muss weiterlaufen! Sonst merkt nach einem Gespräch mit der Tür der DCA nämlich nicht, dass das Gespräch zuende ist, so dass minutenlang niemand mehr klingeln kann. Der DCA hätte gern Besetztton, oder DTMF "#0", um das Gesprächsende zu registrieren. Also geht der Dialplan wie folgt weiter:
same => n, SendDTMF(#0) same => n, Hangup()
So klappt das dann mit dem Auflegen.

Info am Rande: lt. meinem PoE-Switch zieht der ATA ca. 3.5Watt. Mehr als meine Maxwell-Telefone, aber noch OK.

Fazit: es brauchte einiges an Gewurschtel, um die Steinzeittechnik einzubinden, aber jetzt klappt es wie gewünscht und bisher vollkommen zuverlässig.
 
Zuletzt bearbeitet:

Statistik des Forums

Themen
246,239
Beiträge
2,248,544
Mitglieder
373,805
Neuestes Mitglied
Clarenceswett
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.