[HowTo] Asterisk, Raspberry, Klingeleingang

ws65

Aktives Mitglied
Mitglied seit
23 Jan 2012
Beiträge
1,161
Punkte für Reaktionen
21
Punkte
38
möchte hier mein erstes Asterisk Project auf dem Raspberry pi 2 vorstellen.

geplant ist für irgendwann mal eine Sip Video Sprechanlage.
da Sip Video mit der Fritzbox ja nicht geht, hab ich mich mal an Asterisk heran gewagt.

ist eigentlich gar nicht so schwer!

eine minimal konfiguration war schnell gebastelt, und schon kommen neue Ideen.

nun mein kleines Project:
Türklingel am Raspberry, weiterleiten auf Asterisk, Telefone nach Wahl klingeln, Bild von der Ip Camera auf Android App.

die meißten Teile davon hab ich durch googln im Internet gefunden.
erst mal einen Taster (bei mir ist es ein Relais)an GPIO23 gebastelt.
Taster, Relais schaltet 3,3V auf GPI23, und ein Wiederstand 10KOhm von Minus auf GPIO23, damit ein stabiler Zustand garantiert ist.

Beispiel hier: https://www.elektronik-kompendium.de/sites/raspberry-pi/2006051.htm
GPIO Belegung: https://www.elektronik-kompendium.de/sites/raspberry-pi/1907101.htm

jetz die Abfrage des GPIO, hab im Internet versch. Anleitungen gefunden, Shell Scripte und Python Scripte.
die shell Scripte funktionieren bei mir nicht richtig, deshalb hab ich die Python Sripte für mich angepasst.

hab jetzt 2 die funktioniren, 1 x über sipcmd und 1 x Asterisk direkt aufrufen, find ich besser.
gpio23_abfragenSipcmd.py
PHP:
#!/usr/bin/env python
import os,time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_UP)
abgangsnummer = "606"
passwort = "PASSWORT"
anzeige = "Klingel"
ipAsterisk = "192.168.178.30"
zielnummer = "607"
dauer = 5

def anruf(abgangsnummer,passwort,anzeige,ipAsterisk,zielnummer,dauer):
    try:
        command = "sipcmd -a 'es klingelt an der Haustuer ' -P sip -p 5064 -u " + abgangsnummer
        command = command + " -c " + passwort
        command = command + " -w " + ipfritzbox
        command = command + " -x 'c" + zielnummer + "' &"
        os.system(command)
        time.sleep(dauer + 2)
        os.system('sudo killall sipcmd')
        time.sleep(2)
        os.system('sudo pkill -9 sipcmd')
    except:
        pass

try:
    while True:
        if GPIO.input(23) == GPIO.HIGH:
            anruf(abgangsnummer,passwort,anzeige,ipAsterisk,zielnummer,dauer)
            time.sleep(1)
            pass

und
gpio23_abfragenAsterisk.py
PHP:
#!/usr/bin/env python
import os,time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN, pull_up_down = GPIO.PUD_UP)

def anruf():
    try:
        os.system('asterisk -r -x "console dial 699"')
        time.sleep(7)
        os.system('asterisk -r -x "console hangup"')
        time.sleep(2)
    except:
        pass

try:
    while True:
        if GPIO.input(23) == GPIO.HIGH:
            anruf()
            time.sleep(1)
            pass

except KeyboardInterrupt:
    print "Ctrl-C - quit"

finally:
    GPIO.cleanup()


die Scripte hab ich im Verzeichnis /var/www liegen und mit chmod 777 gpio23* ausführbar gemacht.

in der extensions.con von Asterisk muss der Abschnit [defaults] angepasst werden.
in etwa so:
PHP:
[default]
exten => 699,1,Answer()
exten => 699,2,Set(CALLERID(NUM)="es klingelt an der Haustuer ")
exten => 699,3,Dial(SIP/607&SIP/603)
exten => 699,4,Hangup()]

und die richtigen Nummern müssen in der Sip.conf eingerichtet sein!

hab z.B auf der Nummer 607 die Android App Elcom Videofon eingerichtet.
wenn klingelt hab ich dann gleich ein Bild vom Eingang

ist noch keine Video Sprechanlage, aber für den Anfang reicht es.

Verbesserungs Vorschläge werden jederzeit gerne angenommen.
insbesondere das Python Sript doch mit einem Shell Sript ersetzen?
mal sehen wie groß die Belastung de Pi dadurch ist?
 
Kostenlos!

Statistik des Forums

Themen
248,854
Beiträge
2,302,935
Mitglieder
378,504
Neuestes Mitglied
Hallo61Hallo