2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 06:39:11 +00:00

BOSEST: support Audio Notification API

no more minidlna needed for TTS

git-svn-id: https://svn.fhem.de/fhem/trunk@15641 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
dominikkarall 2017-12-18 21:49:03 +00:00
parent 7f6af39315
commit 0b9ce9e805
2 changed files with 44 additions and 9 deletions

View File

@ -1,5 +1,8 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- feature: 98_BOSEST: support Audio Notification API for TTS
no more minidlna installation needed
only supported for up to 100 characters
- new: 97_PiXtendV2: New module to control a PiXtend V2 -S- board - new: 97_PiXtendV2: New module to control a PiXtend V2 -S- board
- change: 93_DbLog: V3.4.0, avoid output RUNNING_PID + args by "list device" - change: 93_DbLog: V3.4.0, avoid output RUNNING_PID + args by "list device"
- new: 50_MOBILEALERTSGW/51_MOBILEALERTS: New moduls for MobileAlerts - new: 50_MOBILEALERTSGW/51_MOBILEALERTS: New moduls for MobileAlerts

View File

@ -7,10 +7,14 @@
# FHEM module to communicate with BOSE SoundTouch system # FHEM module to communicate with BOSE SoundTouch system
# API as defined in BOSE SoundTouchAPI_WebServices_v1.0.1.pdf # API as defined in BOSE SoundTouchAPI_WebServices_v1.0.1.pdf
# #
# Version: 2.1.1 # Version: 2.2.0
# #
############################################################# #############################################################
# #
# v2.2.0 - 20171211
# - FEATURE: support new Audio Notification API for TTS (no more minidlna)
# - BUGFIX: fix warning about uninitialized value (thx@betateilchen!)
#
# v2.1.1 - 20170812 # v2.1.1 - 20170812
# - CHANGE: changed reading name type to model # - CHANGE: changed reading name type to model
# #
@ -334,7 +338,7 @@ sub BOSEST_Define($$) {
$hash->{helper}{supportedBassCmds} = ""; $hash->{helper}{supportedBassCmds} = "";
if (int(@a) < 3) { if (int(@a) < 3) {
Log3 $hash, 3, "BOSEST: BOSE SoundTouch v2.1.1"; Log3 $hash, 3, "BOSEST: BOSE SoundTouch v2.2.0";
#start discovery process 30s delayed #start discovery process 30s delayed
InternalTimer(gettimeofday()+30, "BOSEST_startDiscoveryProcess", $hash, 0); InternalTimer(gettimeofday()+30, "BOSEST_startDiscoveryProcess", $hash, 0);
@ -472,7 +476,7 @@ sub BOSEST_Set($@) {
BOSEST_on($hash); BOSEST_on($hash);
} elsif($workType eq "off") { } elsif($workType eq "off") {
BOSEST_off($hash); BOSEST_off($hash);
InternalTimer(gettimeofday()+2, "BOSEST_off", $hash, 0); InternalTimer(gettimeofday()+2, "BOSEST_off", $hash, 0);
} elsif($workType eq "nextTrack") { } elsif($workType eq "nextTrack") {
BOSEST_next($hash); BOSEST_next($hash);
} elsif($workType eq "prevTrack") { } elsif($workType eq "prevTrack") {
@ -484,13 +488,14 @@ sub BOSEST_Set($@) {
} elsif($workType eq "speak" or $workType eq "speakOff") { } elsif($workType eq "speak" or $workType eq "speakOff") {
return "BOSEST: speak requires quoted text as additional parameters" if(int(@params) < 1); return "BOSEST: speak requires quoted text as additional parameters" if(int(@params) < 1);
return "BOSEST: speak requires quoted text" if(substr($blankParams, 0, 1) ne "\""); return "BOSEST: speak requires quoted text" if(substr($blankParams, 0, 1) ne "\"");
if(AttrVal($hash->{NAME}, "ttsDirectory", "") eq "") { #set text (must be within quotes)
return "BOSEST: Please set ttsDirectory attribute first. my $text = $params[0];
if(length($text) > 100 and AttrVal($hash->{NAME}, "ttsDirectory", "") eq "") {
return "BOSEST: Text >100 characters => minidlna needed.
Please set ttsDirectory attribute first.
FHEM user needs permissions to write to that directory. FHEM user needs permissions to write to that directory.
It is also recommended to set ttsLanguage (default: en)."; It is also recommended to set ttsLanguage (default: en).";
} }
#set text (must be within quotes)
my $text = $params[0];
my $volume = ""; my $volume = "";
if(looks_like_number($params[1])) { if(looks_like_number($params[1])) {
#set volume (default current volume) #set volume (default current volume)
@ -1002,10 +1007,36 @@ sub BOSEST_speakChannel {
sub BOSEST_speak($$$$$) { sub BOSEST_speak($$$$$) {
my ($hash, $text, $volume, $lang, $stopAfterSpeak) = @_; my ($hash, $text, $volume, $lang, $stopAfterSpeak) = @_;
my $ttsDir = AttrVal($hash->{NAME}, "ttsDirectory", "");
$lang = AttrVal($hash->{NAME}, "ttsLanguage", "en") if($lang eq ""); $lang = AttrVal($hash->{NAME}, "ttsLanguage", "en") if($lang eq "");
$volume = AttrVal($hash->{NAME}, "ttsVolume", ReadingsVal($hash->{NAME}, "volume", 20)) if($volume eq ""); $volume = AttrVal($hash->{NAME}, "ttsVolume", ReadingsVal($hash->{NAME}, "volume", 20)) if($volume eq "");
if(length($text) < 100) {
my $uri_text = uri_escape($text);
my $translateUrl = "http://translate.google.com/translate_tts?ie=UTF-8&tl=$lang&client=tw-ob&q=$uri_text";
$translateUrl =~ s/\&/\&amp\;/g;
if(substr($volume, 0, 1) eq "+" or
substr($volume, 0, 1) eq "-") {
$volume = ReadingsVal($hash->{NAME}, "volume", 0) + $volume;
}
my $postXml = '<play_info><app_key>Ml7YGAI9JWjFhU7D348e86JPXtisddBa</app_key><url>'.$translateUrl.'</url><service>'.$text.'</service><volume>'.$volume.'</volume></play_info>';
if(BOSEST_HTTPPOST($hash, '/speaker', $postXml)) {
}
if(defined($stopAfterSpeak) && $stopAfterSpeak eq "1") {
$hash->{helper}{stateCheck}{enabled} = 1;
#after play the speaker changes contentItemItemName
$hash->{helper}{stateCheck}{actionContentItemItemName} = "";
$hash->{helper}{stateCheck}{function} = \&BOSEST_off;
}
return undef;
}
my $ttsDir = AttrVal($hash->{NAME}, "ttsDirectory", "");
my $sox = qx(which sox); my $sox = qx(which sox);
chomp $sox; chomp $sox;
@ -1185,6 +1216,7 @@ sub BOSEST_playMessage($$$$) {
sub BOSEST_deleteOldTTSFiles { sub BOSEST_deleteOldTTSFiles {
my ($hash) = @_; my ($hash) = @_;
my ($err, $val) = getKeyValue("BOSEST_tts_files"); my ($err, $val) = getKeyValue("BOSEST_tts_files");
return undef unless defined($val);
my @ttsFiles = split(",", $val); my @ttsFiles = split(",", $val);
my $ttsDir = AttrVal($hash->{NAME}, "ttsDirectory", ""); my $ttsDir = AttrVal($hash->{NAME}, "ttsDirectory", "");