From 34dd3c27f74bf20b6038b0ca1b4319d0b9940176 Mon Sep 17 00:00:00 2001 From: zap <> Date: Sun, 28 Jun 2020 15:47:41 +0000 Subject: [PATCH] FULLY: Accepts port in device definition git-svn-id: https://svn.fhem.de/fhem/trunk@22297 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/89_FULLY.pm | 61 ++++++++++++++++++++++--------------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 61db237fa..508fda383 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. + - change: 89_FULLY: Accepts port number in device definition - change: 93_DbRep: improve get <> versionNotes 2 - change: 76_SMAPortal: imptove cookie/login management - feature: 49_SSCam / 49_SSCamSTRM: new capability operate PTZ Zoom cameras diff --git a/fhem/FHEM/89_FULLY.pm b/fhem/FHEM/89_FULLY.pm index 3d195fbd8..8944df5a2 100755 --- a/fhem/FHEM/89_FULLY.pm +++ b/fhem/FHEM/89_FULLY.pm @@ -1,13 +1,13 @@ ############################################################################## # -# 89_FULLY.pm 1.40 +# 89_FULLY.pm 1.41 # # $Id$ # # Control Fully browser on Android tablets from FHEM. # Requires Fully App Plus license! # -# (c) 2019 by zap (zap01 t-online de) +# (c) 2020 by zap (zap01 t-online de) # ############################################################################## @@ -37,7 +37,7 @@ sub FULLY_ProcessDeviceInfo ($$); sub FULLY_UpdateReadings ($$); sub FULLY_Ping ($$); -my $FULLY_VERSION = "1.40"; +my $FULLY_VERSION = '1.41'; # Timeout for Fully requests my $FULLY_TIMEOUT = 5; @@ -99,6 +99,7 @@ sub FULLY_Define ($$) my ($hash, $a, $h) = @_; my $name = $hash->{NAME}; my $rc = 0; + my $host = ''; return "Usage: define devname [http|https]://IP_or_Hostname password [poll-interval]" if (@$a < 4); @@ -108,14 +109,22 @@ sub FULLY_Define ($$) if ($$a[2] =~ /^(https?):\/\/(.+)/) { $hash->{prot} = $1; - $hash->{host} = $2; + $host = $2; } else { $hash->{prot} = $FULLY_DEFAULT_PROT; - $hash->{host} = $$a[2]; + $host = $$a[2]; + } + + if ($host =~ /^([^:]+):([0-9]+)$/) { + $hash->{host} = $1; + $hash->{port} = $2; + } + else { + $hash->{host} = $host; + $hash->{port} = $FULLY_DEFAULT_PORT; } - $hash->{port} = $FULLY_DEFAULT_PORT; $hash->{version} = $FULLY_VERSION; $hash->{onForTimer} = 'off'; $hash->{fully}{password} = $$a[3]; @@ -266,8 +275,7 @@ sub FULLY_Set ($@) push (@c, $cmds{$opt}); } elsif ($opt eq 'on-for-timer') { - my $par = shift @$a; - $par = "forever" if (!defined ($par)); + my $par = shift @$a // "forever"; if ($par eq 'forever') { push (@c, "setBooleanSetting", "screenOn"); @@ -292,8 +300,7 @@ sub FULLY_Set ($@) $hash->{onForTimer} = $par; } elsif ($opt eq 'screenOffTimer') { - my $value = shift @$a; - return "Usage: set $name $opt {seconds}" if (!defined ($value)); + my $value = shift @$a // return "Usage: set $name $opt {seconds}"; push (@c, "setStringSetting"); push (@p, { "key" => "timeToScreenOffV2", "value" => "$value" }); } @@ -303,40 +310,34 @@ sub FULLY_Set ($@) push (@c, ($state eq 'start') ? "startScreensaver" : "stopScreensaver"); } elsif ($opt eq 'screenSaverTimer') { - my $value = shift @$a; - return "Usage: set $name $opt {seconds}" if (!defined ($value)); + my $value = shift @$a // return "Usage: set $name $opt {seconds}"; push (@c, "setStringSetting"); push (@p, { "key" => "timeToScreensaverV2", "value" => "$value" }); } elsif ($opt eq 'screenSaverURL') { - my $value = shift @$a; - return "Usage: set $name $opt {URL}" if (!defined ($value)); + my $value = shift @$a // return "Usage: set $name $opt {URL}"; push (@c, "setStringSetting"); push (@p, { "key" => "screensaverURL", "value" => "$value" }); } elsif ($opt eq 'startURL') { - my $value = shift @$a; - return "Usage: set $name $opt {URL}" if (!defined ($value)); + my $value = shift @$a // return "Usage: set $name $opt {URL}"; push (@c, "setStringSetting"); push (@p, { "key" => "startURL", "value" => "$value" }); } elsif ($opt eq 'brightness') { - my $value = shift @$a; - return "Usage: set $name brightness 0-255" if (!defined ($value)); + my $value = shift @$a // return "Usage: set $name brightness 0-255"; $value = 255 if ($value > 255); push (@c, "setStringSetting"); push (@p, { "key" => "screenBrightness", "value" => "$value" }); } elsif ($opt eq 'motionDetection') { - my $state = shift @$a; - return "Usage: set $name motionDetection { on | off }" if (!defined ($state)); + my $state = shift @$a // return "Usage: set $name motionDetection { on | off }"; my $value = $state eq 'on' ? 'true' : 'false'; push (@c, "setBooleanSetting"); push (@p, { "key" => "motionDetection", "value" => "$value" }); } elsif ($opt eq 'speak') { - my $text = shift @$a; - return 'Usage: set $name speak "{Text}"' if (!defined ($text)); + my $text = shift @$a // return 'Usage: set $name speak "{Text}"'; while ($text =~ /\[(.+):(.+)\]/) { my ($device, $reading) = ($1, $2); my $value = ReadingsVal ($device, $reading, ''); @@ -347,10 +348,9 @@ sub FULLY_Set ($@) push (@p, { "text" => "$enctext" }); } elsif ($opt eq 'playSound') { - my $url = shift @$a; + my $url = shift @$a // return "Usage: set $name playSound {url} [loop]"; my $loop = shift @$a; $loop = defined ($loop) ? 'true' : 'false'; - return "Usage: set $name playSound {url} [loop]" if (!defined ($url)); push (@c, "playSound"); push (@p, { "url" => "$url", "loop" => "$loop"}); } @@ -455,8 +455,8 @@ sub FULLY_Execute ($$$$) # Get attributes my $timeout = AttrVal ($name, 'requestTimeout', $FULLY_TIMEOUT); - my $repeatCommand = min (AttrVal ($name, 'repeatCommand', 0), 2); - my $ping = min (AttrVal ($name, 'pingBeforeCmd', 0), 2); + my $repeatCommand = minNum (AttrVal ($name, 'repeatCommand', 0), 2); + my $ping = minNum (AttrVal ($name, 'pingBeforeCmd', 0), 2); my $response = ''; my $url = $hash->{prot}.'://'.$hash->{host}.':'.$hash->{port}."/?cmd=$command"; @@ -493,8 +493,8 @@ sub FULLY_ExecuteNB ($$$$) # Get attributes my $timeout = AttrVal ($name, 'requestTimeout', $FULLY_TIMEOUT); - my $repeatCommand = min (AttrVal ($name, 'repeatCommand', 0), 2); - my $ping = min (AttrVal ($name, 'pingBeforeCmd', 0), 2); + my $repeatCommand = minNum (AttrVal ($name, 'repeatCommand', 0), 2); + my $ping = minNum (AttrVal ($name, 'pingBeforeCmd', 0), 2); my @urllist; my $nc = scalar (@$command); @@ -767,7 +767,7 @@ sub FULLY_Ping ($$) my $host = $hash->{host}; my $temp; - my $waitAfterPing = min (AttrVal ($name, 'waitAfterPing', 0), 2); + my $waitAfterPing = minNum (AttrVal ($name, 'waitAfterPing', 0), 2); my $os = $^O; Log3 $name, 4, "FULLY: [$name] Sending $count ping request(s) to tablet $host. OS=$os"; @@ -809,10 +809,11 @@ sub FULLY_Ping ($$) Define

    - define <name> FULLY [<Protocol>://]<HostOrIP> <password> [<poll-interval>] + define <name> FULLY [<Protocol>://]<HostOrIP>[:<Port>] <password> [<poll-interval>]

    The parameter password is the password set in Fully browser. Parameter Protocol is optional. Valid protocols are 'http' and 'https'. Default protocol is 'http'. + Default Port is 2323.