Bei Anruf Action

Mit dem Telefon Openhab2 Items steuern

Eine Asterisk Telefonanlage als Gateway zwischen Telefon und Computer zu nutzen, ist die Idee dieses Projektes. Neben einer Openhab2 Installation, der asterisk Telefonanlage wird ein externer VoIP Account benötigt. Dieser Beitrag ist keine vollständige Installationsanleitung. Im Detail beschränkt er sich auf Abschnitte in den Konfigurationsdateien sip.conf und extension.conf des Asterisk Servers.

Die Idee:

Komponenten

Externer VoIP Account

Dieses Beispiel konfiguriert einen Sipgate Account. Dieser kann kostenlos eingerichtet werden. Gezahlt werden muss erst, wenn man über diesen Anschluß jemanden anruft, was wir hier nicht tun. Ruft man diesen Anschluß an, zahlt man über seinen Telefonanbieter. Es entstehen so keine Kosten bei sipgate.de.

Internes VoIP Telefon

Zu Testzwecken ist es günstig, auf seinem Smartphone eine VoIP Telefon App zu installieren. Mit dieser kann man im eigenen Netz direkt den Asterisk Server anrufen.

Asterisk Server

Die zwei wichtigen Konfigurationsdateien sind: sip.conf, extensions.conf

sip.conf

In der Datei sip.conf wird die Verbindung des intern laufenden asterisk Servers mit dem externen VoIP Anbieter sipgate.de konfiguriert. Die benötigten Parameter entstehen bei Einrichtung bei sipgate.de. Der 2. Abschnitt [2000] konfiguriert den internen VoIP Account für das Smartphone.

...
[sipgate-XXXXXXXXX]
        type=friend
        insecure=invite
        nat=force_rport
        username=XXXXXXXX
        fromuser=XXXXXXXX
        fromdomain=sipgate.de
        secret=XXXXXXXX
        host=sipgate.de
        qualify=yes
        canreinvite=no
        dtmfmode=rfc2833
        context=sipgate-in
        callbackextension=SIPID
        outboundproxy=sipgate.de
        trustrpid=yes
        sendrpid=no

[2000]
type=friend
secret=1234
host=dynamic
user=2000
context=from-intern
language=de
extensions.conf

In der extensions.conf werden die Anschlüsse konfiguriert, i.e. was passiert, wenn der asterisk Server einen Anruf entgegennimmt.

...
[sipgate-in]
;exten => SIPID,1,Dial(SIP/2000)
exten => SIPID,1,Answer()
exten => SIPID,2,Wait(2)
exten => SIPID,3,Authenticate(1234,j,0)         ; hier ausnahmsweise mit Priority-Jumping
                                                ; weil wir dem Anrufer noch sagen wollen,
                                                ; dass sein Passwort falsch ist
exten => SIPID,4,Goto(demo-menu,s,1)


[from-intern]
exten => 124,1,Answer()
exten => 124,2,Wait(2)
exten => 124,3,Authenticate(1234,j,0)           ; hier ausnahmsweise mit Priority-Jumping
                                                ; weil wir dem Anrufer noch sagen wollen,
                                                ; dass sein Passwort falsch ist
exten => 124,4,Goto(demo-menu,s,1)


[demo-menu]
exten => s,1,Answer()
   same => n(loop),Background(drueck-die-eins)
   same => n,WaitExten(3)
   same => n,Goto(s,loop)
 
exten => 1,1,Playback(you-entered)
   same => n,SayNumber(1)
   same => n,System(curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "ON" http://<openhab2-server>:8080/rest/items/DemoSwitch)
   same => n,Goto(s,loop)
 
exten => 2,1,Playback(you-entered)
   same => n,SayNumber(2)
   same => n,System(curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "OFF" http://<openhab2-server>:8080/rest/items/DemoSwitch)
   same => n,Goto(s,loop)

Der Einstiegspunkt ist sipgate-in. Die erste auskommentierte Zeile würde den Sipgate Anruf an das VoIP Smartphone weiterleiten und man könnte darüber telefonieren. In diesem Beispiel geht Asterisk selber ran. Im Anschluß wird der Pincode - hier 1234 - abgefragt. Dieser wird mit den Tasten des Telefons eingegeben. Ist der Code falsch, ist die Routine so selbständig, noch einmal zu fragen. Ist der Code richtig, springt man zum Menue demo-menu. Der zweite Block ist für Testzwecke aus dem internen Netz gedacht. Die anzurufende Nummer ist 124.

Im demo-menu wird im Hintergrund eine Musik eingespielt. In meinem Beispiel ein Ausschnitt aus dem Lied “Drück die 1” von Annett Louisan. Ich dachte, dass passt. Für private Zwecke ist das urheberrechtlich auch OK. Die Sounddatei muss in einem bestimmten Format vorliegen, wie man das macht, findet man hier. Die konvertierte Sounddatei findet asterisk bei mir im Verzeichnis /var/lib/asterisk/sounds/de/.

Nun reagiert das Menue auf die Eingabe der Zahlen 1 oder 2. Die Eingabe wird bestätigt durch eine Ansage, dass man die Zahl gedrückt hat. Die nachfolgende Anweisung bildet die Schnittstelle zum Openhab2 Server.

Asterisk kann mit der System Anweisung einen Shell Befehl ausführen. Der Openhab2 Server wird mit curl auf seiner REST Schnittstelle angesprochen. In diesem Bespeil wird der Zustand des Items “DemoSwitch” bei der Eingabe von 1 auf “on”, bei der Eingabe von 2 auf “off” gestellt. Ist am DemoSwitch ein Lampe angeschlossen, geht die Lampe bzw. aus.

Was fehlt ist die Rückkopplung, ob die Lampe auch wirklich angegangen ist. Dies müsste mit weiteren Asterisk-System Befehlen und Sprachansagen realisiert werden.