Wer auch immer eine Doorline als Türsprechanlage an einer Fritzbox betreibt und die Doorline auf "Direktannahme" eingestellt hat, kennt vermutlich das Problem der 30 Sekunden lang klingelnden Telefone.
Die IdeeWenn jemand an der Tür klingelt, klingeln die in der Fritzbox definierten Telefone und
- entweder gehe ich ans Telefon und höre wer da ist oder
- ich gehe zur Tür und die Telefone hören auf zu klingeln.
Das setzt voraus, dass es einen Türkontakt an der Haustür (bei mir Device HaustuerStatus) gibt.
ProblemDer Fritzbox Callmonitor sieht keine internen Anrufe. Die Betätigung der Türklingel geht also an FHEM vorbei. Ich habe versucht das Modul 96_SIP.pm zu nutzen (siehe https://forum.fhem.de/index.php/topic,40219.msg556323/topicseen.html#msg556323 (https://forum.fhem.de/index.php/topic,40219.msg556323/topicseen.html#msg556323)), der SIP Client ist aber nicht in der Lage einen eingehenden Anruf an FHEM weiterzuleiten. Viel probiert, ohne Erfolg, also braucht man einen anderen Ansatz: Asterisk.
Erster SchrittAsterisk installieren
FritzboxIn der Fritzbox muss ein neues Telefoniegerät vom Typ LAN/WLAN angelegt und ein Passwort vergeben werden. Das erzeugt ein neues internes Device im Bereich **62x, bei mir war's die 624.
AsteriskDer Pfad für die Config-Files ist z.B. /etc/asterisk
sip.conf (innerhalb der [general] Section) folgendes einfügen:
context=fritzbox
register => 624:passwort@192.168.0.1
624 ist die Nebenstelle
passwort das in der Fritzbox vergebene Passwort
192.168.0.1 die IP-Adresse der Fritzbox
Am Ende der
extensions.conf folgendes einfügen:
[fritzbox]
exten => s,1,Wait(1) ; Wait a second, just for fun
exten => s,n,Verbose(2,call from ${CALLERID(num)})
exten => s,n,System(/opt/bin/fhemsetring.pl ${CALLERID(num)})
exten => s,n,Wait(100) ; Wait a second, just for fun
exten => h,1,Log(VERBOSE,Caller ${CALLERID(all)} hung up.)
exten => h,n,System(/opt/bin/fhemsetring.pl none)
exten => h,n,Hangup()
/opt/bin/ ist mein Standard-Verzeichnis für Scripte
Testen kann man mit
asterisk -vvvc
Da kommt man nur mit <ctrl>C raus. Wenn asterisk als deamon gestartet ist kann man sich mittels rasterisk konnektieren. Dann geht auch 'exit'.
Im Verzeichnis /opt/bin/ die Script
fhemsetring.pl anlegen:
#!/usr/bin/perl -w
# in FHEM den Status der Tuerklingel auf 'ring' setzen
# Always use strict and warnings
use strict;
use warnings;
use Net::Telnet ();
# Declare all
my $callerid = shift;
my $machinename = "192.168.0.10";
my $t_net;
my @Result;
my $cmd;
# Start Code
$t_net = new Net::Telnet (Timeout => 60, Port => 7072 ) or die "Failed to create Telnet instance!";
$t_net->open($machinename);
$cmd = "";
if ( $callerid eq "none" ) {
$cmd = $cmd."set AsteriskCall624 listen; ";
} else {
$cmd = $cmd."set AsteriskCall624 ring; ";
}
$cmd = $cmd."setreading AsteriskCall624 caller $callerid; ";
$cmd = $cmd."exit";
@Result = $t_net->cmd($cmd);
Meine FHEM-Instanz ist unter der 192.168.0.10 zu erreichen.
In
FHEM ein Dummy-Device anlegen.
define AsteriskCall624 dummy
Der von der Script gesetzte state dieses Decices ist entweder 'ring' oder 'listen'; das Reading 'caller' ist die Nummer des Anrufers (intern oder extern).
Die Rufkette für die Türklingel wird in der Fritzbox um das neue Telefon erweitert, damit der Call erkannt wird..
Damit ist die Fritzbox nun grundsätzlich in der Lage den internen Anruf zu erkennen.
Telefonat heranholenDas Modul 96_SIP.pm kann zwar den eingehenden Anruf nicht erkennen, kann aber sehr wohl einen Anruf absetzen und ein Audio-File abspielen. Das geht z.B mit
set FritzSipClient call *09 5 /opt/fhem/www/images/Gong.wavAlso wird das Modul runtergeladen (siehe Seite 6 des Threads https://forum.fhem.de/index.php/topic,61071.0.html). Dort findet man auch Hinweise zur Erzeugung von Audio-Files im erforderlichen Codec. Das runtergeladene Modul nach /op/fhem/FHEM kopieren und in FHEM mittels relaod 96_sip.pm laden.
Für diesen SIP-Client wieder ein LAN/WLAN-Telefon in der Fritzbox einrichten. Ergab bei mir die Nebenstelle 620.
Dann in FHEM definieren
define FritzSipClient SIP 192.168.0.1 620 password
620 ist die Nebenstelle in der Fritzbox, password ist das in der Fritzbox für die 620 eingerichtete. Die restlichen Attribute müsst ihr prüfen und für Euer Umfeld setzen, sonst gibt's evtl. Probleme. Und das passende AudioFile muss angelegt werden: bei mir /opt/fhem/www/images/Gong.wav.
Jetzt fehlen noch ein paar Einträge in FHEM
define HaustuerStatusVar dummy
'HaustuerStatus' ist der Türkontakt der Haustür. **11 die Nebenstelle der Doorline.
define TuerklingelAus DOIF (([HaustuerStatus:state] eq "closed") and ([AsteriskCall624:state] eq "ring") and ([AsteriskCall624:caller] eq "**11"))
(set HaustuerStatusVar ring)
DOELSEIF
(([HaustuerStatus:state] eq "open") and ([HaustuerStatusVar:state] eq "ring"))
(set FritzSipClient call *09 5 /opt/fhem/www/images/Gong.wav; set HaustuerStatusVar on)
DOELSEIF
(([HaustuerStatus:state] eq "closed") and ([HaustuerStatusVar:state] eq "on"))
(set HaustuerStatusVar off)
Das war's.