Spaß mit VoIP an der Haustür

Das praktische – wenn man eine Türsprechanlage hat die VoIP beherrscht – ist, dass man damit viele tolle Spielereien umsetzen kann.

Unsere Türsprechanlage ist von 2n, einer tschechischen Firma die verhältnismäßig günstige VoIP Sprechanlagen am Markt hat. Vertrieben werden die Geräte von der deutschen Vertretung Keil Telecom. Gekauft habe ich aber, wie so vieles, bei Voltus.

Wie dem auch sei: Die Anlage war recht günstig und kann VoIP. Wenn nun ein Besucher vor der Haustür steht und „klingelt“, so wird über einen VoIP-Server (Asterisk) eine Telefonverbindung zu unserem im Wohnzimmer stehenden Telefon (ebenfalls ein VoIP Gerät) aufgebaut.

Nun gibt es drei Fälle die eintreten können:

  1. Keiner da …
    In diesem Fall würde die Sprechanlage nach Zeit x einfach aufgeben und dem vor der Tür stehenden mit einem Signalton signalisieren: „Da ging keiner ran. Ist wohl keiner da.
  2. Der Weg zur Tür ist kürzer als zum Telefon …
    Da wir kein „Treppenhaus“ haben das der Haustür vorgelagert ist, ist oftmals der Weg zur Tür kürzer als der zum Telefon. In diesem Fall klingelt es fleißig weiter bis der Timeout aus (1) eintritt. Das kann schnell nervig werden.
  3. Telefon ist greifbar …
    Es klingelt an der Tür –> Das Telefon klingelt. Man nimmt ab und kann mit einer DTMF-Folge die Tür öffnen (kann die 2n Anlage ab Werk).

Fall Nummer 1 tritt meist ein wenn ein Postbote vor der Tür steht. Die kommen für gewöhnlich zu solchen Zeiten wo keiner zuhause ist. In diesem Fall ist Asterisk so schlau und kann das Gespräch „weiterleiten“. D.h. nach aktuell 15sek (entspricht ca. 4x Klingelrufzeichen) bekommt der „vor der Tür stehende“ die Meldung „Bitte warten, sie werden verbunden…“ eingespielt. Im direkten Anschluss an diese Meldung wird das Gespräch zum Handy umgeleitet. In der „extensions.ael“ von Asteriskl sieht das dann so aus:

 1001 => {
     Dial(SIP/1001,15);
     switch ("${DIALSTATUS}") {
         case "BUSY":
         case "NOANSWER":
           Answer();
           MP3Player(/var/lib/asterisk/sounds/BitteHabenSieEinenMomendGeduldSieWerdenGleichVerbunden.mp3);
           Set(CALLERID(number)=123456789);
           Set(CALLERID(name)=491234567890); 
           Dial(SIP/01511234567890@sipgate);
           break;
         default:
           NoOp(was anderes);
     }
     NoOp(Fertig);
 }

 

Zur Erklärung:

Es wird 15 Sekunden lang Versucht die interne Nummer 1001 anzurufen. Im Fall von „BUSY“ oder „NOANSWER“ wird dann das Gespräch selbst angenommen und die Warte-Meldung abgespielt. Danach wird die Absender-Rufnummer auf eine andere Nummer, auf eine Festnetznummer geändert. Das Zauberwort ist hier „CLIP no screening“. Mein VoIP Anbieter (sipgate) beherrscht das. Dazu muss im ersten Schritt die sipgate-Nummer angegeben werden und in zweiten Schritt die neue Absenderrufnummer mit vorangestelltem „49“ definiert werden. Aber Achtung: Man muss wissen was man hier tut und man muss im „Besitz“ der neuen Absendernummer sein. Sonst kann es hier deftige Strafen hageln… Anschließend wird die Handynummer über sipgate angewählt. Fertig…

Egal wo man nun ist, man bekommt es mit wenn jemand zuhause klingelt. Mit ein paar weiteren Schnittstellen ist das Öffnen des Garagentüres um einen halben-Meter-Spalt, damit der Paketbote sein Paket los werden kann, nicht mehr allzu fern. Aktuell ist das noch Zukunftsmusik. Die Grundlagen sind aber bereits vorhanden.

Fall Nummer 2 ist der wohl häufigste Fall. Zumindest bei uns… Aber dieses Problem lässt sich „smart“ lösen: Unsere Haustür hat, wie alle Fenster im Haus, einen Reed-Kontakt: Öffnet man die Tür, wird ein Kontakt ausgelöst, welchen ich am KNX-Bus mitbekomme.

Damit lässt sich prima das Klingeln der Türsprechanlage beenden. Folgendes Linux-Script hilft dabei:

#!/bin/sh
eibd -d -i -u ipt:192.168.2.3
echo "entering loop..."
while true; do
 grouplisten local:/tmp/eib 3/5/1 | grep -m 0 "Write from .*: 01"
 echo "doing hangup ..."
 /opt/hangupHaustür.sh
 echo "next ..."
 sleep 2;
done

Zuerst wird der „eib-daemon“, kurz „eibd“ gestartet. Die angegebene IP ist dann logischerweise die vom KNX-IP-Router. Dann wird in einer Endlosschleife die Gruppenadresse „3/5/1“ abgehört. Dieses Kommando würde bei jedem Schreibzugriff auf die Gruppenadresse ausgeben werd geschrieben hat und was er geschrieben hat. Zum Beispiel:

Write from 1.1.255: 01

Jedesmal wenn die Haustüre sich öffnet, wird eine „1“ gesendet, die dann als Hexadezimal „01“ ausgegeben wird. Die Ausgabe wird dann zum grep Kommando „gepiped“, wo nach der eben genannten Zeichenfolge gesucht wird. Die Absenderadresse ist mit einem Wildcard-Platzhalter versehen. „-m 0“ gibt an, dass nach einem einzigen Vorkommen die Pipe und alles was dran hängt (grouplisten …) beendet wird.

Kurzum: Es geht drum zu erkennen dass die Haustüre geöffnet wird.

Im nächsten Schritt wird das Script zum Abbrechen des Anrufs aufgerufen. Danach wird 2sek geschlafen und dann wieder auf das Öffnen der Türe gewartet.

Das Script zum Abbrechen des Anrufs sieht wie folgt aus:

#!/bin/sh
NUMBER=1000
CHANNEL=`/usr/sbin/asterisk -rx "core show channels" | grep "SIP/$NUMBER-" | grep "Ringing" | cut -f1 -d" "`
if [ -n "$CHANNEL" ]
then
 echo "Will hangug ringing channel '$CHANNEL'"
 /usr/sbin/asterisk -rx "channel request hangup $CHANNEL"
else
 echo "Channel with number $NUMBER is not ringing. No hangup required."
fi

Die Haustürsprechanlage hat die Rufnummer 1000. Zuerst wird Asterisk über das „CLI“ (Command Line Interface) nach den aktuellen „Channels“ gefragt. Hier wird gelistet welche Nummer gerade telefoniert, anruft oder sonst was treibt. Die Ausgabe sieht ungefiltert z.B. so aus:

Channel Location State Application(Data)
SIP/1000-0000000f 1003@intern:1 Ring Dial(SIP/1001)
SIP/1001-0000000e 1003@intern:1 Ringing AppDial((Outgoing Line))
2 active channels
1 active call
8 calls processed

Die Ausgabe wird wieder „gegrept“. Wir suchen nach der Zeichenfolge „SIP/1000-“ und weiter nach der Zeichenfolge „Ring“. Und aus der entsprechenden Zeile nehmen wir dann die Spalte Nummer 1. Damit wird dann Asterisk gefüttert um den Anruf zu beenden. Wird kein Channel gefunden der im „Ring“ Zustand ist, wird einfach nichts getan.

Ergebnis: Wird die Haustür geöffnet und der Anruf ist noch im Zustand „es klingelt noch“, dann wird der Anruf abgebrochen.

Fall Nummer 3 muss ich glaub nicht weiter ausführen…

Sobald die Garage anständig „elektrifiziert“ und „knx-ifiziert“ ist, wird für den Fall Nummer 2 noch die Steuerung des Garagentors implementiert… Dazu dann später mehr.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.