diff --git a/fhem/FHEM/72_FRITZBOX.pm b/fhem/FHEM/72_FRITZBOX.pm
index 414986141..3fdb128ff 100644
--- a/fhem/FHEM/72_FRITZBOX.pm
+++ b/fhem/FHEM/72_FRITZBOX.pm
@@ -48,6 +48,7 @@ sub FRITZBOX_Exec($$);
sub FRITZBOX_Send_Mail($@);
sub FRITZBOX_SetMOH($@);
sub FRITZBOX_Start_Radio($@);
+use URI::Escape;
our $telnet;
@@ -272,7 +273,7 @@ FRITZBOX_Set($$@)
{
if ( int @val == 2 && $val[0] =~ /^(1|2|3)$/ && $val[1] =~ /^(on|off)$/ )
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
my $state = $val[1];
$state =~ s/on/1/;
$state =~ s/off/0/;
@@ -284,14 +285,14 @@ FRITZBOX_Set($$@)
} elsif ( lc $cmd eq 'convertmoh') {
if (int @val > 0)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
return FRITZBOX_ConvertMOH $hash, @val;
}
} elsif ( lc $cmd eq 'convertringtone') {
if (int @val > 0)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
return FRITZBOX_ConvertRingTone $hash, @val;
}
@@ -310,14 +311,14 @@ FRITZBOX_Set($$@)
} elsif ( lc $cmd eq 'customerringtone') {
if (int @val > 0)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
return FRITZBOX_SetCustomerRingTone $hash, @val;
}
} elsif ( lc $cmd eq 'diversity') {
if ( int @val == 2 && defined( $hash->{READINGS}{"diversity".$val[0]} ) && $val[1] =~ /^(on|off)$/ )
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
my $state = $val[1];
$state =~ s/on/1/;
$state =~ s/off/0/;
@@ -329,7 +330,7 @@ FRITZBOX_Set($$@)
} elsif ( lc $cmd eq 'guestwlan') {
if (int @val == 1 && $val[0] =~ /^(on|off)$/)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
my $state = $val[0];
$state =~ s/on/1/;
$state =~ s/off/0/;
@@ -343,7 +344,7 @@ FRITZBOX_Set($$@)
{
if (int @val > 0)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
$resultStr = FRITZBOX_SetMOH $hash, @val;
unless ($resultStr)
{
@@ -359,14 +360,14 @@ FRITZBOX_Set($$@)
{
if (int @val > 0)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
FRITZBOX_Ring_Start $hash, @val;
return undef;
}
}
elsif ( lc $cmd eq 'sendmail')
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
FRITZBOX_Send_Mail $hash, @val;
return undef;
}
@@ -374,7 +375,7 @@ FRITZBOX_Set($$@)
{
if (int @val > 0)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
return FRITZBOX_Start_Radio $hash, @val;
}
}
@@ -382,7 +383,7 @@ FRITZBOX_Set($$@)
{
if ( int @val == 2 && defined( $hash->{READINGS}{"tam".$val[0]} ) && $val[1] =~ /^(on|off)$/ )
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
my $state = $val[1];
$state =~ s/on/1/;
$state =~ s/off/0/;
@@ -393,7 +394,7 @@ FRITZBOX_Set($$@)
}
elsif( lc $cmd eq 'update' )
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
$hash->{fhem}{LOCAL}=1;
FRITZBOX_Readout_Start($hash);
$hash->{fhem}{LOCAL}=0;
@@ -403,7 +404,7 @@ FRITZBOX_Set($$@)
{
if (int @val == 1 && $val[0] =~ /^(on|off)$/)
{
- Log3 $name, 3, "FRITZBOX $name: set $cmd ".join(" ", @val);
+ Log3 $name, 3, "FRITZBOX: set $name $cmd ".join(" ", @val);
my $state = $val[0];
$state =~ s/on/1/;
$state =~ s/off/0/;
@@ -1128,6 +1129,9 @@ sub FRITZBOX_SetMOH($@)
my @cmdArray;
my $result;
my $name = $hash->{NAME};
+ my $isTTS = 0;
+ my $uploadFile = '/var/tmp/moh_upload';
+ my $mohFile = '/var/tmp/fx_moh';
if (lc $type eq lc $mohtype[0] || $type eq "0")
{
@@ -1142,35 +1146,41 @@ sub FRITZBOX_SetMOH($@)
return "Error: Unvalid parameter '$type'" unless lc $type eq lc $mohtype[2] || $type eq "2";
# Load customer MOH file
+
+ my $inFile = join " ", @file;
my $uploadDir = AttrVal( $name, "defaultUploadDir", "" );
$uploadDir .= "/"
unless $uploadDir =~ /\/$|^$/;
- my $inFile = join " ", @file;
- $inFile = $uploadDir.$inFile
- unless $inFile =~ /^\//;
-
- return "Error: Please give a complete file path or define the attribute 'defaultUploadDir'"
- unless $inFile =~ /^\//;
-
- return "Error: Only MP3 files can be used for 'music on hold'."
- unless $inFile =~ /\.mp3$/i;
-
+ if ($inFile !~ /^say:/i)
+ {
+ $inFile = $uploadDir.$inFile
+ unless $inFile =~ /^\//;
+ return "Error: Please give a complete file path or define the attribute 'defaultUploadDir'"
+ unless $inFile =~ /^\//;
+ return "Error: Only MP3 files can be used for 'music on hold'."
+ unless $inFile =~ /\.mp3$/i;
+ }
+
$result = FRITZBOX_Open_Connection( $hash );
return "$name|0|$result"
if $result;
- my $uploadFile = '/var/tmp/moh_upload';
- my $mohFile = '/var/tmp/fx_moh';
push @cmdArray, '[ -f "'.$uploadFile.'" ] && rm "'.$uploadFile.'"';
push @cmdArray, '[ -f "'.$mohFile.'" ] && rm "'.$mohFile.'"';
- if ($inFile =~ /^(ftp|http):\/\//)
+ if ($inFile =~ /^say:/i)
+ {
+ FRITZBOX_Log $hash, 4, "Converting Text2Speech";
+ my $ttsText = $inFile;
+ $ttsText =~ s/^say:\s*//;
+ push @cmdArray, 'wget -U Mozilla -O "'.$uploadFile.'" "http://translate.google.com/translate_tts?tl=de&q='.uri_escape($ttsText).'"';
+ }
+ elsif ($inFile =~ /^(ftp|http):\/\//)
{
push @cmdArray, 'wget -O "'.$uploadFile.'" "'.$inFile.'"';
} else {
push @cmdArray, 'cp "'.$inFile.'" "'.$uploadFile.'"';
-
}
push @cmdArray, '[ -f "'.$uploadFile.'" ] && echo 1 || echo 0';
# Execute command array
@@ -1802,9 +1812,9 @@ sub FRITZBOX_fritztris($)
Switches the guest WLAN on or off.
-
set <name> moh <default|sound|customer> [<MP3FileIncludingPath>]
+ set <name> moh <default|sound|customer> [<MP3FileIncludingPath|say:Text>]
set <name> guestWLAN <on|off>
@@ -2043,9 +2053,10 @@ sub FRITZBOX_fritztris($)
Schaltet das Gäste-WLAN an oder aus.
set <name> moh <default|sound|customer> [<MP3DateiInklusivePfad>]
+ set <name> moh <default|sound|customer> [<MP3DateiInklusivePfad|say:Text>]