[Gelöst] Über die extensions.conf einen Systembefehl absetzen

Rosen21

Neuer User
Mitglied seit
29 Sep 2019
Beiträge
3
Punkte für Reaktionen
0
Punkte
1
Hallo,
ich bin noch recht neu in der Materie.
Ich habe eine Türsprechanlage Dahua VTO2000a über einen asterisk server laufen. Meine Gespäche nehme ich an einen Fritzphone an. Das funktioniert auch alles wunderbar.
Nun möchte ich aber jetzt, wenn ich an mein Telefon gehe und die Haustür öffne (den Zahlencode abfrage) einen Befehl absetzten und diesen mir auf mein KNX senden,wenn die Tür geöffnet wird. Dazu wollte ich das Programm knxd/knxtool verwenden. Dies habe ich auch erfolgreich eingrichtet und kann Befehle an mein KNX senden. Aber ich bekomme es nicht hin, aus den asterisk raus einen Befehl abzusetzen, bzw. weiß ich nicht ob der überhaupt abgearbeitet wird. Wie kann ich dies prüfen?
Ich habe mir zur Vorlage diese Anleitung genommen, um meine extensions.conf für das knx anzusteuern. Link
Meine extensions.conf sieht so aus.
Code:
exten => 101,1,Set(CALLERID(num)=101)
exten => 101,n,Ringing()
exten => 101,n,Answer()
exten => 101,n,Dial(SIP/23@videodoorgateway,30,m)
exten => 101,n,Hangup()

exten => 999,1,System('groupswrite ip:localhost 1/2/5 1')
Ich habe es auch schon mit der kompletten Pfadangabe versucht. Hat vielleicht jemand eine Idee was ich falsch mache?
Gruß
Rosen21
 
Aber ich bekomme es nicht hin, aus den asterisk raus einen Befehl abzusetzen, bzw. weiß ich nicht ob der überhaupt abgearbeitet wird. Wie kann ich dies prüfen?


Prüfung mit NoOp() für die entsprechende Variable und 'pjsip set logger on' über CLI

Falls Du System verwenden willst findet hier hier Einiges:

Ich denke es müsste
System(/usr/local/bin/groupswrite "ip:localhost 1/2/5 1")
oder wo auch immer sich das Executable befindet, heißen. Apostroph im Dialplan sind, IIRC, problematisch.
 
Zuletzt bearbeitet:
Moinsen


SHELL() ist auf jeden Fall besser als System(), da die Ausgaben des Shellskripts* oder Linuxprogramm in Asterisk ausgegeben/vearbeitet werden können.
( Auch eine Fehlermeldung ;) )

Beispiel für die Umwandlung von ${EPOCH} in lesbare Zeitangabe mittels date zeigt auch die direkte Anwendung in Verbose() ohne Verwendung einer Variable ( SET() )...
Code:
dialplan add extension 333,1,verbose(${SHELL("date --date=@${EPOCH}")}) into osmc replace
...hier wird der gesamte Kommandostring in Gänsefüßchen gesetzt, damit das für date notwendige @ plus der zu verarbeitenden Daten ( ${EPOCH} ) richtig übergeben wird.
Mit den einfachen 'Hochkommata', oder ohne "Gänsefüßchen" funktioniert** das Beispiel nicht.
Obiges Beispiel wird mit dialplan save übrigens so...
exten => 333,1,verbose(${SHELL(date --date=@${EPOCH})})
...in die extensions.conf geschrieben.


* Im Skript mit: echo "Habe fertig"
...zum Beispiel ;)

** Es erscheint die date Hilfe ( Usage Ausgabe ), da date nichts mit den Daten anfangen kann
 
Zuletzt bearbeitet:
Hallo Danke für eure antworten,

ich habe dass mit dem echo versucht aber nicht hinbekommen. Ich habe dann noch ein bsschen im Forum gestöbert und bin dann über folgenden Artikel gestoßen: https://www.ip-phone-forum.de/threads/shell-skript-ausführen-mit-system-ohne-funktion.271918/page-2
Ich habe es dann geschafft mein Script über die Asterisk Konsole aufzurufen, aber über die extensions.conf klappt es nicht. Kann ich irgendwo sehen was er da hat bzw. macht. Wenn ja, wo kann ich dies einstellen?

Hier ist meine Konfiguaration:
extensions.conf
Code:
[general]
static=yes
writeprotect=no
DYNAMIC_FEATURES=door


[ausgehend]
exten => 101,1,Set(CALLERID(num)=101)
exten => 101,n,Ringing()
exten => 101,n,Answer()
exten => 101,n,Dial(Local/alle@tfe-zuhause,50,w)
same => n,set(__DYNAMIC_FEATURES=door)
exten => 101,n,Hangup()

[macro-door_knx]
exten => s,1,System(/var/lib/asterisk/bin/unlock-front-door.sh)


[tfe-zuhause]
exten => alle,1,Dial(SIP/23@videodoorgateway,50,w)
exten => alle,n,Hangup()

[default]
include => ausgehend

features.conf
Code:
door => 999,callee,Macro,door_knx

Ich verwende diese Asterisk Version 16.2.1.
Muss ich noch irgendetwas einstellen damit, dass Skript aufgerufen wird?

Ich habe es jetzt hinbekommen. Ich musste den Aufruf für die Dynamic features weiter oben ausführen. Der wurd davor nicht gesetzt. Ich weiß aber nicht, warum das so ist?

Code:
[general]
static=yes
writeprotect=no
DYNAMIC_FEATURES=door


[ausgehend]
exten => 101,1,Set(CALLERID(num)=101)
same => 2,Set(__DYNAMIC_FEATURES=door)
exten => 101,n,Ringing()
exten => 101,n,Answer()
exten => 101,n,Dial(Local/alle@tfe-zuhause,50,w)
exten => 101,n,Hangup()


[macro-door_knx]
exten => s,1,ExecIf($["${CALLERID(num)}"!="8001"]?System(/var/lib/asterisk/bin/unlock-front-door.sh))


[tfe-zuhause]
exten => alle,1,Dial(SIP/23@videodoorgateway,50,w)
exten => alle,n,Hangup()

[default]
include => ausgehend

Danke für eure Unterstützung.
 
Zuletzt bearbeitet:
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.