From 15c15e94374f86fad744daef09ce16d8d961df40 Mon Sep 17 00:00:00 2001 From: LeonGaultier Date: Mon, 11 Sep 2017 19:13:46 +0000 Subject: [PATCH] 74_AMADDevice: add change temporary ttsMsg language, code clean git-svn-id: https://svn.fhem.de/fhem/trunk@15050 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/74_AMADDevice.pm | 228 +++++++++++++++++++++---------------- 2 files changed, 128 insertions(+), 101 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 02d91b546..b4ccfc252 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # 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. + - feature: 74_AMADDevice: add change temporary ttsMsg language, code clean - feature: 50_TelegramBot: new set cmd msgDelete - feature: 95_holiday: move holiday files from contrib to FHEM - feature: 31_Nello: updated to new api specifications diff --git a/fhem/FHEM/74_AMADDevice.pm b/fhem/FHEM/74_AMADDevice.pm index 372d40879..89bb497ff 100644 --- a/fhem/FHEM/74_AMADDevice.pm +++ b/fhem/FHEM/74_AMADDevice.pm @@ -58,7 +58,7 @@ eval "use Encode qw(encode encode_utf8);1" or $missingModul .= "Encode "; eval "use JSON;1" or $missingModul .= "JSON "; -my $modulversion = "4.0.8"; +my $modulversion = "4.0.9"; my $flowsetversion = "4.0.7"; @@ -77,6 +77,10 @@ sub AMADDevice_Set($$@); sub AMADDevice_Undef($$); sub AMADDevice_Parse($$); sub AMADDevice_statusRequest($); +sub AMADDevice_CreateVolumeValue($$@); +sub AMADDevice_CreateTtsMsgValue($@); +sub AMADDevice_CreateScreenValue($$); +sub AMADDevice_CreateChangeBtDeviceValue($$); @@ -445,73 +449,28 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'ttsmsg' ) { - - my $msg = join( " ", @args ); - my $speed = AttrVal( $name, "setTtsMsgSpeed", "1.0" ); - my $lang = AttrVal( $name, "setTtsMsgLang","de" ); - my $ttsmsgvol = AttrVal( $name, "setTtsMsgVol","none"); - - $uri = $host . ":" . $port . "/fhem-amad/setCommands/ttsMsg?message=".urlEncode($msg)."&msgspeed=".$speed."&msglang=".$lang."&msgvol=".$ttsmsgvol; - $method = "POST"; + my ($msg,$speed,$lang,$ttsmsgvol) = AMADDevice_CreateTtsMsgValue($hash,@args); + + $uri = $host . ":" . $port . "/fhem-amad/setCommands/ttsMsg?message=".urlEncode($msg)."&msgspeed=".$speed."&msglang=".$lang."&msgvol=".$ttsmsgvol; + $method = "POST"; } elsif( lc $cmd eq 'userflowstate' ) { - my $datas = join( " ", @args ); my ($flow,$state) = split( ":", $datas); - - $flow =~ s/\s/%20/g; - $uri = $host . ":" . $port . "/fhem-amad/setCommands/flowState?flowstate=".$state."&flowname=".$flow; + $uri = $host . ":" . $port . "/fhem-amad/setCommands/flowState?flowstate=".$state."&flowname=".urlEncode($flow); $method = "POST"; } elsif( lc $cmd eq 'volume' or $cmd eq 'mute' or $cmd =~ 'volume[Down|Up]' ) { + my $vol = AMADDevice_CreateVolumeValue($hash,$cmd,@args); - my $vol; - - if( $cmd eq 'volume' ) { - $vol = join( " ", @args ); - - if( $vol =~ /^\+(.*)/ or $vol =~ /^-(.*)/ ) { - - if( $vol =~ /^\+(.*)/ ) { - - $vol =~ s/^\+//g; - $vol = ReadingsVal( $name, "volume", 0 ) + $vol; - } - - elsif( $vol =~ /^-(.*)/ ) { - - $vol =~ s/^-//g; - printf $vol; - $vol = ReadingsVal( $name, "volume", 15 ) - $vol; - } - } - - } elsif( $cmd eq 'mute') { - if($args[0] eq 'on') { - $vol = 0; - readingsSingleUpdate($hash,'.volume',ReadingsVal($name,'volume',0),0); - } else { - $vol = ReadingsVal($name,'.volume',0); - } - - } elsif( $cmd =~ 'volume[Down|Up]') { - if( $cmd eq 'volumeUp' ) { - $vol = ReadingsVal( $name, "volume", 0 ) + AttrVal($name,'setVolUpDownStep',3); - } else { - $vol = ReadingsVal( $name, "volume", 0 ) - AttrVal($name,'setVolUpDownStep',3); - } - } - - $uri = $host . ":" . $port . "/fhem-amad/setCommands/setVolume?volume=$vol"; $method = "POST"; } elsif( lc $cmd eq 'volumenotification' ) { - my $vol = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/setNotifiVolume?notifivolume=$vol"; @@ -519,7 +478,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'volumeringsound' ) { - my $vol = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/setRingSoundVolume?ringsoundvolume=$vol"; @@ -527,7 +485,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd =~ /^media/ ) { - my $btn = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/multimediaControl?mplayer=".$cmd."&button=".$btn; @@ -535,7 +492,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'screenbrightness' ) { - my $bri = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/setBrightness?brightness=$bri"; @@ -543,26 +499,12 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'screen' ) { - my $mod = join( " ", @args ); - my $scot = AttrVal( $name, "setScreenOnForTimer", undef ); - $scot = 60 if( !$scot ); - if ($mod eq "on" || $mod eq "off") { - - $uri = $host . ":" . $port . "/fhem-amad/setCommands/setScreenOnOff?screen=".$mod."&screenontime=".$scot if ($mod eq "on" || $mod eq "off"); - $method = "POST"; - } - - elsif ($mod eq "lock" || $mod eq "unlock") { - - return "Please set \"setScreenlockPIN\" Attribut first" if( AttrVal( $name, "setScreenlockPIN", "none" ) eq "none" ); - my $PIN = AttrVal( $name, "setScreenlockPIN", undef ); - $PIN = AMADDevice_decrypt($PIN); - - $uri = $host . ":" . $port . "/fhem-amad/setCommands/screenlock?lockmod=".$mod."&lockPIN=".$PIN; - $method = "POST"; - } + $uri = AMADDevice_CreateScreenValue($hash,$mod); + return "Please set \"setScreenlockPIN\" Attribut first" + unless($uri ne 'NO PIN'); + $method = "POST"; } elsif( lc $cmd eq 'screenorientation' ) { @@ -574,13 +516,11 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'activatevoiceinput' ) { - $uri = $host . ":" . $port . "/fhem-amad/setCommands/setvoicecmd"; $method = "POST"; } elsif( lc $cmd eq 'screenfullscreen' ) { - my $mod = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/setScreenFullscreen?fullscreen=$mod"; @@ -589,7 +529,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'openurl' ) { - my $openurl = join( " ", @args ); my $browser = AttrVal( $name, "setOpenUrlBrowser", "com.android.chrome|com.google.android.apps.chrome.Main" ); my @browserapp = split( /\|/, $browser ); @@ -599,7 +538,6 @@ sub AMADDevice_Set($$@) { } elsif (lc $cmd eq 'nextalarmtime') { - my $value = join( " ", @args ); my @alarm = split( ":", $value ); @@ -608,7 +546,6 @@ sub AMADDevice_Set($$@) { } elsif (lc $cmd eq 'timer') { - my $timer = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/setTimer?minute=$timer"; @@ -622,7 +559,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'openapp' ) { - my $app = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/openApp?app=".$app; @@ -630,7 +566,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'nfc' ) { - my $mod = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/setnfc?nfc=".$mod; @@ -638,7 +573,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'system' ) { - my $systemcmd = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/systemcommand?syscmd=$systemcmd"; @@ -648,7 +582,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'donotdisturb' ) { - my $disturbmod = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/donotdisturb?disturbmod=$disturbmod"; @@ -656,7 +589,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'bluetooth' ) { - my $mod = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/setbluetooth?bluetooth=$mod"; @@ -664,7 +596,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'notifysndfile' ) { - my $notify = join( " ", @args ); my $filepath = AttrVal( $name, "setNotifySndFilePath", "/storage/emulated/0/Notifications/" ); @@ -673,20 +604,14 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'changetobtdevice' ) { - my $swToBtDevice = join( " ", @args ); - my @swToBtMac = split( /\|/, $swToBtDevice ); - my $btDevices = AttrVal( $name, "setBluetoothDevice", "none" ) if( AttrVal( $name, "setBluetoothDevice", "none" ) ne "none" ); - my @btDevice = split( ',', $btDevices ); - my @btDeviceOne = split( /\|/, $btDevice[0] ); - my @btDeviceTwo = split( /\|/, $btDevice[1] ); - $uri = $host . ":" . $port . "/fhem-amad/setCommands/setbtdevice?swToBtDeviceMac=".$swToBtMac[1]."&btDeviceOne=".$btDeviceOne[1]."&btDeviceTwo=".$btDeviceTwo[1]; + my ($swToBtMac,$btDeviceOne,$btDeviceTwo) = AMADDevice_CreateChangeBtDeviceValue($hash,$swToBtDevice); + $uri = $host . ":" . $port . "/fhem-amad/setCommands/setbtdevice?swToBtDeviceMac=".$swToBtMac."&btDeviceOne=".$btDeviceOne."&btDeviceTwo=".$btDeviceTwo; $method = "POST"; } elsif( lc $cmd eq 'clearnotificationbar' ) { - my $appname = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/clearnotificationbar?app=$appname"; @@ -706,7 +631,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'sendintent' ) { - my $intentstring = join( " ", @args ); my ( $action, $exkey1, $exval1, $exkey2, $exval2 ) = split( "[ \t][ \t]*", $intentstring ); $exkey1 = "" if( !$exkey1 ); @@ -719,7 +643,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'installflowsource' ) { - my $flowname = join( " ", @args ); $uri = $host . ":" . $port . "/fhem-amad/setCommands/installFlow?flowname=$flowname"; @@ -727,7 +650,6 @@ sub AMADDevice_Set($$@) { } elsif( lc $cmd eq 'opencall' ) { - my $string = join( " ", @args ); my ($callnumber, $time) = split( "[ \t][ \t]*", $string ); $time = "none" if( !$time ); @@ -757,11 +679,8 @@ sub AMADDevice_Set($$@) { elsif( lc $cmd eq 'sendsms' ) { my $string = join( " ", @args ); my ($smsmessage, $smsnumber) = split( "\\|", $string ); - - $smsmessage =~ s/%/%25/g; - $smsmessage =~ s/\s/%20/g; - $uri = $host . ":" . $port . "/fhem-amad/setCommands/sendSms?smsmessage=".$smsmessage."&smsnumber=".$smsnumber; + $uri = $host . ":" . $port . "/fhem-amad/setCommands/sendSms?smsmessage=".urlEncode($smsmessage)."&smsnumber=".$smsnumber; $method = "POST"; } else { @@ -885,6 +804,113 @@ sub AMADDevice_decrypt($) { return $decodedPIN; } +sub AMADDevice_CreateVolumeValue($$@) { + + my ($hash,$cmd,@args) = @_; + + my $name = $hash->{NAME}; + my $vol; + + + if( $cmd eq 'volume' ) { + $vol = join( " ", @args ); + + if( $vol =~ /^\+(.*)/ or $vol =~ /^-(.*)/ ) { + + if( $vol =~ /^\+(.*)/ ) { + + $vol =~ s/^\+//g; + $vol = ReadingsVal( $name, "volume", 0 ) + $vol; + } + + elsif( $vol =~ /^-(.*)/ ) { + + $vol =~ s/^-//g; + $vol = ReadingsVal( $name, "volume", 15 ) - $vol; + } + } + + } elsif( $cmd eq 'mute') { + if($args[0] eq 'on') { + $vol = 0; + readingsSingleUpdate($hash,'.volume',ReadingsVal($name,'volume',0),0); + } else { + $vol = ReadingsVal($name,'.volume',0); + } + + } elsif( $cmd =~ 'volume[Down|Up]') { + if( $cmd eq 'volumeUp' ) { + $vol = ReadingsVal( $name, "volume", 0 ) + AttrVal($name,'setVolUpDownStep',3); + } else { + $vol = ReadingsVal( $name, "volume", 0 ) - AttrVal($name,'setVolUpDownStep',3); + } + } + + return $vol; +} + +sub AMADDevice_CreateTtsMsgValue($@) { + + my ($hash,@args) = @_; + + my $name = $hash->{NAME}; + my $msg; + my $speed = AttrVal( $name, "setTtsMsgSpeed", "1.0" ); + my $lang = AttrVal( $name, "setTtsMsgLang","de" ); + my $ttsmsgvol = AttrVal( $name, "setTtsMsgVol","none"); + + + $msg = join( " ", @args ); + + unless($args[0] ne '&en;' and $args[0] ne '&de;') { + $lang = substr(splice(@args,0,1),1,2); + $msg = join( " ", @args ); + } + + return ($msg,$speed,$lang,$ttsmsgvol); +} + +sub AMADDevice_CreateScreenValue($$) { + + my ($hash,$mod) = @_; + + my $name = $hash->{NAME}; + my $scot = AttrVal( $name, "setScreenOnForTimer", undef ); + my $host = $hash->{HOST}; + my $port = $hash->{PORT}; + my $uri; + $scot = 60 if( !$scot ); + + if ($mod eq "on" or $mod eq "off") { + return ($host . ":" . $port . "/fhem-amad/setCommands/setScreenOnOff?screen=".$mod."&screenontime=".$scot); + } + + elsif ($mod eq "lock" or $mod eq "unlock") { + return "NO PIN" + unless( AttrVal( $name, "setScreenlockPIN", "none" ) ne "none" ); + my $PIN = AttrVal( $name, "setScreenlockPIN", undef ); + $PIN = AMADDevice_decrypt($PIN); + + return ($host . ":" . $port . "/fhem-amad/setCommands/screenlock?lockmod=".$mod."&lockPIN=".$PIN); + } +} + +sub AMADDevice_CreateChangeBtDeviceValue($$) { + + my ($hash,$swToBtDevice) = @_; + + my $name = $hash->{NAME}; + my @swToBtMac = split( /\|/, $swToBtDevice ); + my $btDevices = AttrVal( $name, "setBluetoothDevice", "none" ) if( AttrVal( $name, "setBluetoothDevice", "none" ) ne "none" ); + my @btDevice = split( ',', $btDevices ); + my @btDeviceOne = split( /\|/, $btDevice[0] ); + my @btDeviceTwo = split( /\|/, $btDevice[1] ); + + + return($swToBtMac[1],$btDeviceOne[1],$btDeviceTwo[1]); +} + + @@ -1020,7 +1046,7 @@ sub AMADDevice_decrypt($) {
  • startDaydream - start Daydream
  • statusRequest - Get a new status report of Android device. Not all readings can be updated using a statusRequest as some readings are only updated if the value of the reading changes.
  • timer - set a countdown timer in the "Clock" stock app. Only minutes are allowed as parameter.
  • -
  • ttsMsg - send a message which will be played as voice message
  • +
  • ttsMsg - send a message which will be played as voice message (to change laguage temporary set first character &en; or &de;)
  • userFlowState - set Flow/s active or inactive,set Nexus7Wohnzimmer Badezimmer:inactive vorheizen or set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive
  • vibrate - vibrate Android device
  • volume - set media volume. Works on internal speaker or, if connected, bluetooth speaker or speaker connected via stereo jack
  • @@ -1189,7 +1215,7 @@ sub AMADDevice_decrypt($) {
  • startDaydream - startet den Daydream
  • statusRequest - Fordert einen neuen Statusreport beim Device an. Es können nicht von allen Readings per statusRequest die Daten geholt werden. Einige wenige geben nur bei Statusänderung ihren Status wieder.
  • timer - setzt einen Timer innerhalb der als Standard definierten ClockAPP auf dem Device. Es können nur Minuten angegeben werden.
  • -
  • ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird
  • +
  • ttsMsg - versendet eine Nachricht welche als Sprachnachricht ausgegeben wird (um die Sprache für diese eine Durchsage zu ändern setze vor Deinem eigentlichen Text &en; oder &de;)
  • userFlowState - aktiviert oder deaktiviert einen oder mehrere Flows,set Nexus7Wohnzimmer Badezimmer vorheizen:inactive oder set Nexus7Wohnzimmer Badezimmer vorheizen,Nachtlicht Steven:inactive
  • vibrate - lässt das Androidgerät vibrieren
  • volume - setzt die Medialautstärke. Entweder die internen Lautsprecher oder sofern angeschlossen die Bluetoothlautsprecher und per Klinkenstecker angeschlossene Lautsprecher, + oder - vor dem Wert reduziert die aktuelle Lautstärke um den Wert. Der maximale Sliderwert kann über das Attribut setVolMax geregelt werden.