Ankündigung

Einklappen
Keine Ankündigung bisher.

Überallklingel oder wie lasse ich die Fritzbox Telefone klingeln Asterisk

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Überallklingel oder wie lasse ich die Fritzbox Telefone klingeln Asterisk

    Hallo,

    In Vorbereitung des Rückbaues einer alten Siedle Wechselsprechanlage habe ich mich damit beschäftigt, wie ich mit dem Klingeln an Hoftor und Haustür einen Anruf auf den Telefonen der Fritzbox auslösen kann und auch im Telefondisplay die richtige Klingel steht.

    Wir haben 2 Fritzboxen (eine pro Etage), die im LAN-Mesh sind. Telefonie ist auch im Mesh freigegeben. Alle DECT Telefone sind an beiden Basisstationen bekannt und an der jeweils besseren angemeldet. Wenn von allen DECT Telefonen an allen Basisstationen der Rufruf mit **9 durchgeführt wurde, kennen alle Fritzboxen alle DECT-Telefone und vergeben eine interne Telefonnummer. Somit kann man auch intern mit 2 DECT Telefonen ein internes Gespräch führen, auch wenn sie an unterschiedlichen DECT Basisstationen angemeldet sind.

    Die Klingeltaster habe ich übrigens mit einem potentialfreien KNX Binäreingang auf den Bus gebracht.

    Mit dem AVM-Plugin habe ich es nicht stabil hinbekommen. Auch habe ich nicht rausfinden können, wie ich die Quelle des "Anrufes" Hoftor oder Haustür ins Display des Telefones bekomme.

    Den Lösungsansatz habe ich hier gefunden. Die Idee ist, dass für jede Klingel eine SIP-Türsprechanlage in der Fritzbox angelegt und mit der SIP-Telefonanlage Asterisk in der Fritzbox registiert wird. Per Script werden die SIP-Telefonanlage angesprochen und führen einen Anruf auf Telefonen aus.


    Wie geht es:
    • An der Fritzbox (dem Mesh-Master) werden 2 IP-Türsprechanlagen mit interner Telefonnummer angelegt. Bei mit die <620> und <622>. Die Benutzernamen und Passwörter notieren. Den entsprechenden Klingelton kann man auch in der Fritzbox definieren.
    • Desweiteren wird im Telefonbuch der Fritzbox eine Gruppe mit Telefonen erstellt, die Klingeln sollen. Diese Gruppe bekommt eine Kurzwahl. Bei mit die **702
    • Auf dem RPI wird die Software Asterisk (Soft-IP-Telefonanlage) installiert mit
      Code:
      sudo apt-get install asterisk
      Das ganze dauert nur wenige Minuten. Asterisk sollte danach automatisch gestartet sein.
    • Als ersten Test können wir uns mit der CLI Verbinden:
      Code:
      asterisk -vvvr
      Mit diesem Befehl gelangen wir in die Asterisk Befehlszeile. Wichtige Befehle innerhalb dieser Befehlszeile werden für uns erstmal folgende sein:
      • sip reload: Lädt die allgemeinen Einstellungen neu und baut eine Verbindung zum SIP Provider auf (nachdem er konfiguriert wurde)
      • sip show registry: Zeigt den Status der konfigurierten SIP Zugänge an
      • dialplan reload: Lädt den Wählplan neu. Muss nach jeder Änderung durchgeführt werden.
    • Die Konfiguration der Asterisk Telefonanlage findet vornehmlich in zwei Dateien statt:
      • /etc/asterisk/sip.conf
        Hier werden allgemeine Einstellungen sowie die SIP Zugänge konfiguriert
      • /etc/asterisk/extensions.conf
        Hier wird der Wählplan konfiguriert. Es wird also bestimmt wie ein- und ausgehende Anrufe zu behandeln sind.
    • In der sip.conf die beiden in der Fritzbox angelegten IP-Telefone registrieren. Mein Beispiel hängt an.
    • Das Auslösen von Anrufen mit Asterisk funktioniert über sogenannte Call-Dateien. Dabei handelt es sich um Textdateien, die Befehlsparameter für einen ausgehenden Anruf enthalten. Kopiert man sie in den Spooler-Ordner /var/spool/asterisk/outgoing, führt sie die Telefonanlage automatisch aus und löscht sie anschließend. Das Anklingeln einer Rufnummer benötigt vier Zeilen:
      • Channel: SIP/624/**9
        Application: Playback
        Data: /var/lib/asterisk/nothing
        WaitTime: 5
    Die erste Zeile legt das Protokoll, den Channel und die Zielrufnummer fest. Weil Asterisk keine Funktion besitzt, um ein Telefon nur anzuklingeln, bietet sich die Anwendung Playback an, die auch ohne Audiodatei arbeitet. Die WaitTime ist die Zeit in Sekunden, die Asterisk auf die Annahme des Gespräches wartet, bevor der Anruf abbricht.
    • Diese Dateien wurden mit einer Logik in shNG erzeugt. Bspw so:
      Code:
      #!/usr/bin/env python3
      	# asterisk_torklingel.py
      	
      	import time
      	import shutil
      	import os
      	import sys
      	
      	#Einstellungen
      	callfilepfad = "/home/smarthome/klingel.call" #Dateipfad in dem das Script die .call-Datei ablegt
      	sipkanal = "620" #Name des SIP-Kanals (in eckigen Klammern in der SIP.conf)
      	sipziel = "**702" #Ziel des Anrufes (Beispiel: **9 als Rundruf der Fritz!Box)
      	sipwartezeit = "10" #Wartezeit bevor wieder aufgelegt wird
      	
      	#Hier wird die .call-Datei zusammengebaut und abgespeichert
      	callfile = "Channel: SIP/" + sipkanal + "/" + sipziel + "\nApplication: Playback\nWaitTime:" + sipwartezeit + "\nData: /var/lib/asterisk/sounds/custom/play"
      	
      	cf = open(callfilepfad, "w")
      	cf.write(callfile)
      	cf.close()
      	###
      	
      	shutil.copyfile(callfilepfad,'/var/spool/asterisk/outgoing/anruf.call')
    • Die Logik wird dann bei Klingeln ausgelöst.
    Soweit erstmal von die eine grobe Beschreibung. Man kann dies noch erweitern und per Telefon bspw. den Türöffner betätigen. Das ist hier beschrieben.
    Bei Fragen könnt ihr Euch gern melden.
    Angehängte Dateien

    #2
    wäre ggf was für unser blog. hier geht der artikel vermutlich unter?

    Kommentar


      #3
      Wollte ich gerade auch schreiben. Blogeintrag wäre super! https://www.smarthomeng.de/blog

      Kommentar


        #4
        Zitat von Onkelandy Beitrag anzeigen
        Blogeintrag wäre super!
        Mach ich bei Gelegenheit.

        Kommentar


          #5
          Falls jemand per Zahlencode (im Beispiel *9 ) die Türe öffnen will oder sonst irgendwelche Aktionen ausführen will, kann er folgende Codeschnipsel probieren.

          Das Erzeugen des Anrufs muss etwas abgewandelt werden.

          Datei: anruf.call
          Code:
          Channel: SIP/621/**610
          WaitTime:15
          Context: haustuer
          Extension: 10
          Erklärung zu den ersten Zeilen findet ihr in Sisamiwe Beitrag.
          Beim Zustandekommen des Anrufs wird dann der Context "haustuer" mit der Extension "10" aufgerufen, die im folgendem definiert werden.

          Datei: extension.conf um folgenden Zeilen ergänzen
          Code:
          [haustuer]
          exten => 10,1,Answer()
          exten => 10,n,WaitExten(5)
          exten => 10,n,Hangup()
          exten => *9,1,System(/usr/local/bin/oeffner.sh)
          exten => i,1,Hangup()
          exten => t,1,Hangup()
          WaitExten(5) wartet 5 Sekunden auf eine Eingabe
          Die Zeile mit System(...) startet das Skript, wenn *9 eingeben wurde.
          Der Rest sollte sich selbst erklären.

          Ich nutze das zusammen mit einer IP-Kamera und einem Fritzfon, dass das Bild der Kamera anzeigt.

          Viele Grüße
          Stefan

          Kommentar


            #6
            Zitat von stoepf Beitrag anzeigen
            Die Zeile mit System(...) startet das Skript, wenn *9 eingeben wurde.
            Man kann anstatt ein Script aufzurufen auch über eibd bzw. knxd auf den Bus schreiben und so die Telefoneingabe weiterverarbeiten. Im Beispiel unten ist der context "hoftoroeffner" mit der Extension "15" definiert. Wird innerhalb von 10sek abgenommen und "*9" gewählt, wird über groupwrite auf die GA 30/5/100 eine "1" gesendet
            Damit kann man dann bspw. den Summer via KNX betätigen.

            extensions.conf
            Code:
            [hoftoroeffner]
            exten => 15,1,answer()
            exten => 15,n,WaitExten(10)
            exten => 15,n,Hangup()
            exten => *9,1,system(groupwrite ip:127.0.0.1 30/5/100 1)
            exten => 15,n,Wait(1)
            exten => i,1,hangup()
            exten => t,1,hangup()

            Kommentar

            Lädt...
            X