SIP-Client
SIP-Client | |
---|---|
Zweck / Funktion | |
SIP-Client für FHEM | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Hilfsmodul |
Modulname | 96_SIP.pm |
Ersteller | Wzut (Forum / Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Das Modul SIP ermöglicht die Entgegennahme (DTMF-Töne interpretieren, kontrollierte Annahme) sowie die Durchführung (Audiofile abspielen, DTMF-Töne senden) von Anrufen.
Voraussetzungen
FHEM-Server
Für den Remote-Zugang muss das Modul Net::SIP installiert sein; auf einem Raspberry Pi oder unter Ubuntu z. B. mit dem Befehl
sudo cpanm install Net::SIP
oder auch
sudo apt-get install libnet-sip-perl
SIP-Server
Der SIP-Client muss sich an einem SIP-Server anmelden (Fritzbox, Asterisk, VoIP-Provider). Auf dem SIP-Server, mit dem sich der Client konnektieren soll, muss ein User-Account vorhanden sein bzw. angelegt werden. In der Fritzbox muss z.B. ein neues Telefoniegerät vom Typ LAN/WLAN angelegt und ein Passwort vergeben werden. Das erzeugt ein neues internes Device im Bereich **62x, typischerweise die 620. Es sollte kontrolliert werden, ob bei den Anmeldeinformationen der Benutzername der Nebenstelle entspricht (z.B. 620) und ein Passwort eingetragen ist.
Installation
Erste Schritte
Spätestens nach einem 'update all' sollte das Modul 96_SIP.pm verfügbar sein.
Danach wird es im FHEM-Webinterface mittels
reload 96_SIP.pm
geladen.
Nun ist der SIP-Client als Device in FHEM anzulegen:
define <name> SIP
Anschließend sollten alle sip_Attribute geprüft und für die eigene Umgebung gesetzt werden.
mögliche Fehlermeldungen
Sollte schon bei define mySIP SIP
die Fehlermeldung kommen, dass dieses Modul nicht existiert, dann bitte 'update all' durchführen.
Anwendung
Define
define <name> SIP
Anschließend sollten alle sip_Attribute geprüft und für die eigene Umgebung gesetzt werden.
Siehe auch commandref
Attribute
- sip_audiofile
- Audiofile das nach dem Command fetch abgespielt wird. Das Audiofile muss mit folgendem Command erzeugt werden
- sox <file>.wav -t raw -r 8000 -c 1 -e a-law <file>.alaw
- da nur das raw audio format unterstützt wird.
- sip_listen
- Das Attribut bietet folgende Optionen
- - none: keine Aktion
- - dtmf: Beim FHEM-Start geht das Device automatisch in den Status listen und wartet auf DTMF-Anrufer.
- - wfp: Beim FHEM-Start geht das Device automatisch in den Status listen wait-fetch-play.
- sip_from
- Meine SIP-Client-Info. Default ist sip:620@fritz.box
- sip_ip
- Die IP-Addresse meines FHEM-Servers.
- sip_port
- Port der für den SIP-Client genutzt wird. Default ist 5060 und wird automatisch um 10 erhöht wenn der Port nicht frei ist.
- sip_registrar
- Hostname oder IP-Addresse des SIP-Servers mit dem sich der Client verbindet. Default ist fritz.box.
- sip_ringtime
- Klingelzeit für ausgehende Anrufe.
- sip_user
- User Name des SIP-Clients. Defualt ist 620.
- sip_waits
- ...
- sip_waittime
- Maximale Wartezeit des Commands listenwfp bis das Gespräch automatisch angenommen wird.
Siehe auch commandref
Set
Das Modul kennt derzeit folgende Commands
- set <name> reset
- Stoppt laufende listen-Prozess und initalisiert das Device.
- set <name> call <nummer> [<ringtime>] [<nachricht>]
- Startet einen Anruf an die angegebene Nummer.
- Optional kann die ringtime angegeben werden. Wird keine angegeben zieht das Attribut sip_ringtime. Default ist 10.
- Optional kann eine Nachricht in Form eines Audiofiles angegeben werden. Das File ist mit dem vollen Pfad oder dem relativen ab dem Verzeichnis mit fhem.pl anzugeben.
- set <name> listendtmf
- Der SIP-Client wird in einen Status versetzt in dem er automatisch Anrufe annimmt. Dem Anrufer wird der Ton wird als Echo zurückgespielt. Über die Eingabe von # gefolgt von 2 Zahlen und anschließendem Auflegen kann eine Zahl in das Reading dtmf übergeben werden. Voraussetzung: Das anrufende Telefon ist auf Tonwahl gestellt (DTMF).
- set <name> listenwfp
- Der SIP-Client wird in einen Status versetzt in dem er auf Anrufe wartet (wfp steht für wait-fetch-play). Erfolgt an Anruf an den Client, wechselt der Status zu ringing. Nun kann das Gespräch via set-Command fetch angenommen werden. Das als sip_audiofile angegebene File wird abgespielt. Anschließend wechselt der Status wieder zu listenwfp.
- set <name> ringing
- Internal use only (for now).
Readings
- caller: Die Rufnummer bzw. Info des aktuellen Anrufers. Default-Wert ist '-'.
- dtmf: Die via Tonwahl (DTMF) eingegebenen Zahlen.
- state: Der Status des Devices.
Anwendungsbeispiele
Anruf tätigen und Sound abspielen
- Den Anruf initiieren
set <device> call <nummer> [<dauer>] [<audiofile>]
- Die Default-Dauer beträgt 10 Sekunden.
- Wird kein Audiofile angegeben, wird nur die Verbindung hergestellt und nach der Anrufdauer wieder unterbrochen.
- Anmerkung: Das Audiofile muss das Format PCM/8000 haben.
- Der angerufene nimmt das Gespräch entgegen, das Audiofile wird abgespielt.
Anruf tätigen und DTMF-Töne senden
- Den Anruf initiieren
set <device> call <nummer><tatstenkombination>...
- Die Tastenkombination muss unmittelbar hinter der Zielnummer folgen, also z.B. **1,,#23
- Der angerufene nimmt das Gespräch entgegen, die Tonfolge abgespielt???
Auf Anruf warten und DTMF-Töne empfangen
- Der SIP-Client wird in den Listen-Modus versetzt.
set <device> listendtmf
- Die Nebenstelle des SIP-Clients wird von einem DTMF-fähigen Telefon aus angerufen.
- Wenn der SIP-Client das Gespräch angenommen hat betätigt man #, gefolgt von zwei Ziffern und legt dann wieder auf.
- Im Reading dtmf ist die zweistellige Zahl zu sehen.
Auf Anruf warten und kontrolliert annehmen
- Der SIP-Client wird in den Listen-Modus versetzt.
set <device> listenwfp
- Die Nebenstelle des SIP-Clients wird angerufen.
- Der Status des Devices wechselt auf ringing.
- Im Reading caller ist die Nummer bzw. die Info des Callers zu sehen.
- Soll der Anruf angenommen werden setze ich den Status des Devices mittels set auf fetch:
set <device> fetch
- Der SIP-Client nimmt den Anruf an und spielt das im Attribut sip_audiofile angegebene File ab.
- Der SIP-Client legt auf und geht wieder in den Status listenwfp.
Fritzbox + Doorline - Telefonklingeln beenden
Szenario: Als Türklingel ist eine Doorline im Einsatz die auf Direktannahme eingestellt ist. Klingelt jemand an der Tür, erfolgt ein 'Anruf' an die in der Rufgruppe definierten Telefone. Man kann den Anruf entgegennehmen, um zu hören wer an der Tür ist, bevor man die Tür öffnet. Geht man direkt zur Tür, klingeln die Telefone insgesamt 30 Sekunden lang bis sie verstummen. Hat man die Haustür mit einem Türkontakt versehen, hilft folgender Ansatz:
- Der SIP-Client wird in der Fritzbox in die Rufgruppe der Türklingel aufgenommen.
- Der SIP-Client wird in den Listen-Modus 'wait-fetch-play' versetzt (Die sip_waittime sollte größer als die Klingeldauer der Doorline sein).
set <device> listenwfp
- Klingelt jemand an der Tür, wird unter anderem die Nebenstelle des SIP-Clients angerufen.
- Der Status des Devices wechselt auf ringing.
- Über ein DOIF greift man die Kombination SIP-Client-Status 'ringing' und Haustürkontakt closed->open ab und
- setzt den Status des Devices mittels set auf fetch:
set <device> fetch
- Der SIP-Client nimmt den Anruf an und spielt das im Attribut sip_audiofile angegebene File ab.
- Die Telefone verstummen.
Bekannte Probleme / Fehlersuche
Fehler bei der Registrierung an der Fritzbox
Fritzbox
- Ist das Device für den SIP-Client in der Fritzbox unter Telefonie > Telefoniegräte gelistet?
- Geräteeinstellungen ändern: Ist für das Device unter 'Anmeldedaten' die Durchwahl als Benutzername angegeben?
- Ist der in dieser Ansicht angegebene 'Registrar' mit der im Attribut sip_registrar identisch? Im Zweifelsfalle die IP-Adresse statt 'fritz.box' verwenden.
- FitzOS ab 6.80: Wurde nach Definition des Gerätes an einem anderen bekannten Gerät der Bestätigungscode eingegeben?
FHEM
Attribute des Devices prüfen:
- Ist unter sip_from 'sip:620@fritz.box' mit der von der Fritzbox vergebene Durchwahl angegeben?
- Ist unter sip_user die von der Fritzbox vergebene Durchwahl angegeben?
- Ist unter sip_password das in der Fritzbox hinterlegte Passwort eingetragen?
- Ist unter sip_registrar die IP-Adresser der Fritzbox eingetragen?
- Ist unter sip_ip die IP-Adresse des FHEM-Servers eingetragen (z.B. 192.168.178.47 angeben, keine Adresse aus dem 127er-Segment)?
Links
- Forenthread alter Forum-Thread zu FB_SIP.pm und SIP.pm
- Forenthread Forum-Thread zu diesem Modul SIP