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.