2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

96_SIP.pm: dont use TTS if mp3 file already exists

git-svn-id: https://svn.fhem.de/fhem/trunk@15827 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Wzut 2018-01-08 18:36:07 +00:00
parent 90ad1744de
commit d2a02bc134

View File

@ -52,9 +52,10 @@ use IO::Socket;
use Socket; use Socket;
use Net::Domain qw(hostname hostfqdn); use Net::Domain qw(hostname hostfqdn);
use Blocking; # http://www.fhemwiki.de/wiki/Blocking_Call use Blocking; # http://www.fhemwiki.de/wiki/Blocking_Call
use Data::Dumper; #use Data::Dumper;
my $sip_version ="V1.75 / 31.12.17";
my $sip_version ="V1.76 / 08.01.18";
my $ua; # SIP user agent my $ua; # SIP user agent
my @fifo; my @fifo;
@ -820,7 +821,7 @@ sub SIP_Set($@)
shift @a; shift @a;
pop @a if ($force); # das & muss ggf. auch noch weg pop @a if ($force); # das & muss ggf. auch noch weg
pop @a if ($repeat); # das * muss ggf. auch weg pop @a if ($repeat); # das * muss ggf. auch weg
$a[0] = "t2s_name"; # ist egal wird eh verworfen $a[0] = "t2s_name";
$a[1] = "tts"; # Kommando des Set Befehls $a[1] = "tts"; # Kommando des Set Befehls
} }
@ -830,6 +831,18 @@ sub SIP_Set($@)
Log3 $name,4,"name, no valid text found in message : $msg"; Log3 $name,4,"name, no valid text found in message : $msg";
return "No message text after [!] found"; return "No message text after [!] found";
} }
# gibt es denn Text schon als mp3 ?
my $filename = SIP_check_T2S_File($hash,@a);
if($filename)
{
$cmd = "$name call $nr $ringtime $filename";
$cmd .= " *".$repeat if ($repeat);
$cmd .= " ".$force if ($force);
Log3 $name,5,"$name, set call new -> $cmd";
return CommandSet(undef,$cmd);
}
# die nächsten vier brauchen wir unbedingt fuer T2S # die nächsten vier brauchen wir unbedingt fuer T2S
$hash->{callnr} = $nr; $hash->{callnr} = $nr;
@ -1010,19 +1023,19 @@ sub SIP_ListenStart($)
$ua = undef; $ua = undef;
my $error = SIP_Register($hash,"listen_".AttrVal($name,"sip_listen","")); my $error = SIP_Register($hash,"listen_".AttrVal($name,"sip_listen",""));
return $name."|ListenRegister: $error" if ($error); return $name."|ListenRegister: $error" if ($error);
my $msg1 = AttrVal($name, "sip_audiofile_dtmf", ""); my $msg1 = AttrVal($name, "sip_audiofile_dtmf", "");
my $msg2 = AttrVal($name, "sip_audiofile_ok", ""); my $msg2 = AttrVal($name, "sip_audiofile_ok", "");
my $msg3 = AttrVal($name, "sip_audiofile_wfp", ""); my $msg3 = AttrVal($name, "sip_audiofile_wfp", "");
$msg1 = $hash->{audio1} if (defined($hash->{audio1}) && $msg1); $msg1 = SIP_check_file($hash,$hash->{audio1}) if (defined($hash->{audio1}));
$msg1 = SIP_check_file($hash,$msg1) if (!defined($hash->{audio1}) && $msg1);; $msg1 = SIP_check_file($hash,$msg1) if (!defined($hash->{audio1}) && $msg1);
$msg2 = $hash->{audio2} if (defined($hash->{audio2}) && $msg2); $msg2 = SIP_check_file($hash,$hash->{audio2}) if (defined($hash->{audio2}));
$msg2 = SIP_check_file($hash,$msg2) if (!defined($hash->{audio2}) && $msg2);; $msg2 = SIP_check_file($hash,$msg2) if (!defined($hash->{audio2}) && $msg2);
$msg3 = $hash->{audio3} if (defined($hash->{audio3}) && $msg3); $msg3 = SIP_check_file($hash,$hash->{audio3}) if (defined($hash->{audio3}));
$msg3 = SIP_check_file($hash,$msg3) if (!defined($hash->{audio3}) && $msg3);; $msg3 = SIP_check_file($hash,$msg3) if (!defined($hash->{audio3}) && $msg3);
Log3 $name,4,"$logname, using $msg1 for audio_dtmf" if ($msg1); Log3 $name,4,"$logname, using $msg1 for audio_dtmf" if ($msg1);
Log3 $name,4,"$logname, using $msg2 for audio_ok" if ($msg2); Log3 $name,4,"$logname, using $msg2 for audio_ok" if ($msg2);
@ -1408,18 +1421,30 @@ sub SIP_try_listen($)
if ($a[2] ne "-") if ($a[2] ne "-")
{ {
my $ret = SIP_create_T2S_File($hash,@a); # prüfen ob es schon eine passende mp3 Datei gibt
if ($ret) my $filename = SIP_check_T2S_File($hash,@a);
if (!$filename)
{ {
my $ret = SIP_create_T2S_File($hash,@a);
if ($ret)
{
delete $hash->{audio1} if defined($hash->{audio1}); delete $hash->{audio1} if defined($hash->{audio1});
delete $hash->{audio2} if defined($hash->{audio2}); delete $hash->{audio2} if defined($hash->{audio2});
delete $hash->{audio3} if defined($hash->{audio3}); delete $hash->{audio3} if defined($hash->{audio3});
return $ret; return $ret;
}
#starte die Überwachung von T2S
RemoveInternalTimer($hash);
InternalTimer(gettimeofday()+int(AttrVal($name,"T2S_Timeout",5)), "SIP_watchdog_T2S", $hash);
return undef;
}
else
{
Log3 $name, 4 , "$name, T2S not used $filename exits";
$hash->{audio1} = $filename if defined($hash->{audio1});
$hash->{audio2} = $filename if defined($hash->{audio2});
$hash->{audio3} = $filename if defined($hash->{audio3});
} }
#starte die Überwachung von T2S
RemoveInternalTimer($hash);
InternalTimer(gettimeofday()+int(AttrVal($name,"T2S_Timeout",5)), "SIP_watchdog_T2S", $hash);
return undef;
} }
@ -1665,6 +1690,7 @@ sub SIP_readPassword($)
return ""; return "";
} }
Log3 $name,5,"$logname, audio file $file found";
return $file; return $file;
} }
@ -1683,7 +1709,7 @@ sub SIP_readPassword($)
my $t2s_file = ReadingsVal($t2s_name,"lastFilename",undef); my $t2s_file = ReadingsVal($t2s_name,"lastFilename",undef);
Log3 $name,3,"$name, Reading lastFilename not found at device $t2s_name, are you using a old version ?" if !defined($t2s_file); Log3 $name,3,"$name, Reading lastFilename not found at device $t2s_name, are you using a old version ?" if !defined($t2s_file);
readingsSingleUpdate($t2s_hash,"lastFilename","",0); readingsSingleUpdate($t2s_hash,"lastFilename","",0);
my $ret = Text2Speech_Set($t2s_hash, @a); # na dann lege schon mal los my $ret = Text2Speech_Set($t2s_hash, @a); # na dann lege schon mal los
@ -1697,6 +1723,26 @@ sub SIP_readPassword($)
return undef; # alles klar return undef; # alles klar
} }
sub SIP_check_T2S_File($@)
{
my ($hash,@a) = @_;
my $name = $hash->{NAME};
my $t2s_name = AttrVal($hash->{NAME},"T2S_Device","");
return 0 if (!$t2s_name);
shift @a;
shift @a;
my $txt = join(" ",@a);
my $filename = (eval "use Digest::MD5;1") ? md5_hex("de|".$txt).".mp3" : "";
if ($filename)
{
my $file = AttrVal($t2s_name,"TTS_CacheFileDir", "cache"). "/".$filename;
Log3 $name,5,"$name, MD5: $txt -> $filename";
return $file if (-e $file);
}
Log3 $name,5,"$name, mp3 File file not found in cache";
return 0;
}
sub SIP_watchdog_T2S($) sub SIP_watchdog_T2S($)
{ {
my ($hash) = @_; my ($hash) = @_;