diff --git a/fhem/CHANGED b/fhem/CHANGED
index dac32e777..40cc35324 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.
+ - bugfix: 49_SSCam(STRM): avoid possible warnings during shutdown/restart
- bugfix: 52_I2C_HDC1008: fix "temperature" (broken by change from Aug, 1st)
- feature: 49_SSCam: new attribute ptzNoCapPrePat
- feature: 60_Watches: control buttons,new attr hideButtons, controlButtonSize
diff --git a/fhem/FHEM/49_SSCam.pm b/fhem/FHEM/49_SSCam.pm
index ee76d2129..1f657c40a 100644
--- a/fhem/FHEM/49_SSCam.pm
+++ b/fhem/FHEM/49_SSCam.pm
@@ -159,6 +159,7 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
+ "9.6.1" => "13.08.2020 avoid warnings during FHEM shutdown/restart ",
"9.6.0" => "12.08.2020 new attribute ptzNoCapPrePat ",
"9.5.3" => "27.07.2020 fix warning: Use of uninitialized value in subroutine dereference at ... ",
"9.5.2" => "26.07.2020 more changes according PBP level 3, minor fixes ",
@@ -472,11 +473,6 @@ my $valZoom = ".++,+,stop,-,--."; # Inhalt des Setters "
#use vars qw($FW_room); # currently selected room
#use vars qw($FW_detail); # currently selected device for detail view
#use vars qw($FW_wname); # Web instance
-# sub FW_pH(@); # add href
-
-#sub SSChatBot_formString;
-#sub SSChatBot_addQueue($$$$$$$$);
-#sub SSChatBot_getapisites($);
#############################################################################################
# Hint Hash EN
@@ -799,14 +795,12 @@ sub delayedShutdown {
my $name = $hash->{NAME};
Log3($name, 2, "$name - Quit session due to shutdown ...");
- $hash->{HELPER}{ACTIVE} = "on"; # keine weiteren Aktionen erlauben
- logout($hash);
+
+ sessionOff($hash);
if($hash->{HELPER}{CACHEKEY}) {
cache($name, "c_destroy");
- }
-
- delete $data{SSCam}{$name}; # internen cache löschen
+ }
return 1;
}
@@ -833,6 +827,8 @@ sub Delete {
CommandDelete($hash->{CL},"$sgdev");
CommandDelete($hash->{CL},"TYPE=SSCamSTRM:FILTER=PARENT=$name"); # alle zugeordneten Streaming-Devices löschen falls vorhanden
+
+ delete $data{SSCam}{$name}; # internen Cache löschen
return;
}
@@ -922,7 +918,7 @@ sub Attr {
if($hash->{HELPER}{CACHEKEY}) {
cache($name, "c_destroy"); # CHI-Cache löschen/entfernen
} else {
- delete $data{SSCam}{$name}; # internen Cache löschen
+ delete $data{SSCam}{$name}; # internen Cache löschen
}
}
} else {
@@ -4109,9 +4105,9 @@ return;
# Session logout
###########################################################################
sub sessionOff {
- my ($hash) = @_;
- my $camname = $hash->{CAMNAME};
- my $name = $hash->{NAME};
+ my $hash = shift;
+ my $camname = $hash->{CAMNAME};
+ my $name = $hash->{NAME};
RemoveInternalTimer($hash, "FHEM::SSCam::sessionOff");
return if(IsDisabled($name));
@@ -8012,13 +8008,13 @@ return;
#
######################################################################################
sub streamDev { ## no critic 'complexity'
- my $paref = shift;
- my $camname = $paref->{linkparent};
- my $strmdev = $paref->{linkname};
- my $fmt = $paref->{linkmodel};
- my $omodel = $paref->{omodel};
- my $oname = $paref->{oname};
- my $ftui = $paref->{ftui};
+ my $paref = shift;
+ my $camname = $paref->{linkparent};
+ my $strmdev = $paref->{linkname};
+ my $fmt = $paref->{linkmodel};
+ my $omodel = $paref->{omodel};
+ my $oname = $paref->{oname};
+ my $ftui = $paref->{ftui};
my $hash = $defs{$camname};
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
@@ -8235,16 +8231,15 @@ return $ret;
# Streaming Device Typ: mjpeg
sub _streamDevMJPEG { ## no critic 'complexity not used'
my $params = shift;
-
my $camname = $params->{camname};
my $strmdev = $params->{strmdev};
my $hash = $defs{$camname};
my $streamHash = $defs{$strmdev};
+ my $camid = $params->{camid} // return "";
+ my $sid = $params->{sid} // return "";
my $ftui = $params->{ftui};
- my $camid = $params->{camid};
my $proto = $params->{proto};
- my $sid = $params->{sid};
my $pws = $params->{pws};
my $ha = $params->{ha};
my $hb = $params->{hb};
diff --git a/fhem/FHEM/49_SSCamSTRM.pm b/fhem/FHEM/49_SSCamSTRM.pm
index c5e8effc0..606fe4346 100644
--- a/fhem/FHEM/49_SSCamSTRM.pm
+++ b/fhem/FHEM/49_SSCamSTRM.pm
@@ -91,6 +91,7 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
+ "2.14.5" => "12.08.2020 avoid loose of adoption after restart ",
"2.14.4" => "03.08.2020 fix check of ARG in RemoveInternalTimer in _setadoptForTimer sub (sometimes no switch back done) ",
"2.14.3" => "01.08.2020 verbose 5 log in _setadoptForTimer sub ",
"2.14.2" => "29.07.2020 fix: adoptTime accept not only integer values ",
@@ -232,7 +233,7 @@ sub Define {
explodeLinkData ($hash, $link, 1);
- $hash->{HELPER}{MODMETAABSENT} = 1 if($modMetaAbsent); # Modul Meta.pm nicht vorhanden
+ $hash->{HELPER}{MODMETAABSENT} = 1 if($modMetaAbsent); # Modul Meta.pm nicht vorhanden
# Versionsinformationen setzen
setVersionInfo($hash);
@@ -624,7 +625,7 @@ sub FwFn {
my $clink = ReadingsVal($name, "clientLink", "");
sofAdoptSubset ($hash);
- explodeLinkData ($hash, $clink, 0);
+ explodeLinkData ($hash, $clink, 0) if($init_done == 1);
# Beispielsyntax: "{$hash->{LINKFN}('$hash->{LINKPARENT}','$hash->{LINKNAME}','$hash->{LINKMODEL}')}";
diff --git a/fhem/contrib/DS_Starter/49_SSCam.pm b/fhem/contrib/DS_Starter/49_SSCam.pm
index b40e6846b..0007fce18 100644
--- a/fhem/contrib/DS_Starter/49_SSCam.pm
+++ b/fhem/contrib/DS_Starter/49_SSCam.pm
@@ -1,5 +1,5 @@
########################################################################################################################
-# $Id: 49_SSCam.pm 22481 2020-07-27 21:56:22Z DS_Starter $
+# $Id: 49_SSCam.pm 22592 2020-08-12 21:28:56Z DS_Starter $
#########################################################################################################################
# 49_SSCam.pm
#
@@ -159,7 +159,8 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
- "9.6.0" => "11.08.2020 new attribute ptzNoCapPrePat ",
+ "9.6.1" => "13.08.2020 avoid warnings during FHEM shutdown/restart ",
+ "9.6.0" => "12.08.2020 new attribute ptzNoCapPrePat ",
"9.5.3" => "27.07.2020 fix warning: Use of uninitialized value in subroutine dereference at ... ",
"9.5.2" => "26.07.2020 more changes according PBP level 3, minor fixes ",
"9.5.1" => "24.07.2020 set compatibility to 8.2.8, some changes according PBP level 3 ",
@@ -212,11 +213,13 @@ my %vNotesIntern = (
# Versions History extern
my %vNotesExtern = (
+ "9.6.0" => "12.08.2020 The new attribute 'ptzNoCapPrePat' is available. It's helpfull if your PTZ camera doesn't have the capability ".
+ "to deliver Presets and Patrols. Setting the attribute avoid error log messages in that case. ",
"9.5.0" => "15.07.2020 A new type 'master' supplements the possible createStreamDev command options. The streaming type ".
- "'master' cannot play back streams itself, but opens up new possibilities by flexibly accepting streams from ".
- "other defined streaming devices. ".
- "More information about the possibilities is described in this ".
- "Wiki article. ",
+ "'master' cannot play back streams itself, but opens up new possibilities by flexibly accepting streams from ".
+ "other defined streaming devices. ".
+ "More information about the possibilities is described in this ".
+ "Wiki article. ",
"9.3.0" => "25.06.2020 Cameras with zoom function can also be controlled by FHEM. With the setter \"setZoom\", the zoom in/out ".
"can be triggered in two steps. In the PTZ streaming device or FTUI, pushbuttons are provided for this purpose.",
"9.1.0" => "10.12.2019 With the new attribute \"snapChatTxt\" it is possible to send snapshots by the Synology Chat server. ".
@@ -234,7 +237,7 @@ my %vNotesExtern = (
"8.14.0" => "01.06.2019 In detailview are buttons provided to open the camera native setup screen or Synology Surveillance Station and the Synology Surveillance Station online help. ",
"8.12.0" => "25.03.2019 Delay FHEM shutdown as long as sessions are not terminated, but not longer than global attribute \"maxShutdownDelay\". ",
"8.11.0" => "25.02.2019 compatibility set to SVS version 8.2.3, Popup possible for streaming devices of type \"generic\", ".
- "support for \"genericStrmHtmlTag\" in streaming devices ",
+ "support for \"genericStrmHtmlTag\" in streaming devices ",
"8.10.0" => "15.02.2019 Possibility of send recordings by telegram is integrated as well as sending snapshots ",
"8.9.0" => "05.02.2019 A new streaming device type \"lastsnap\" was implemented. You can create such device with \"set ... createStreamDev lastsnap\". ".
"This streaming device shows the newest snapshot which was taken. ",
@@ -470,11 +473,6 @@ my $valZoom = ".++,+,stop,-,--."; # Inhalt des Setters "
#use vars qw($FW_room); # currently selected room
#use vars qw($FW_detail); # currently selected device for detail view
#use vars qw($FW_wname); # Web instance
-# sub FW_pH(@); # add href
-
-#sub SSChatBot_formString;
-#sub SSChatBot_addQueue($$$$$$$$);
-#sub SSChatBot_getapisites($);
#############################################################################################
# Hint Hash EN
@@ -797,14 +795,12 @@ sub delayedShutdown {
my $name = $hash->{NAME};
Log3($name, 2, "$name - Quit session due to shutdown ...");
- $hash->{HELPER}{ACTIVE} = "on"; # keine weiteren Aktionen erlauben
- logout($hash);
+
+ sessionOff($hash);
if($hash->{HELPER}{CACHEKEY}) {
cache($name, "c_destroy");
- }
-
- delete $data{SSCam}{$name}; # internen cache löschen
+ }
return 1;
}
@@ -831,6 +827,8 @@ sub Delete {
CommandDelete($hash->{CL},"$sgdev");
CommandDelete($hash->{CL},"TYPE=SSCamSTRM:FILTER=PARENT=$name"); # alle zugeordneten Streaming-Devices löschen falls vorhanden
+
+ delete $data{SSCam}{$name}; # internen Cache löschen
return;
}
@@ -920,7 +918,7 @@ sub Attr {
if($hash->{HELPER}{CACHEKEY}) {
cache($name, "c_destroy"); # CHI-Cache löschen/entfernen
} else {
- delete $data{SSCam}{$name}; # internen Cache löschen
+ delete $data{SSCam}{$name}; # internen Cache löschen
}
}
} else {
@@ -4107,9 +4105,9 @@ return;
# Session logout
###########################################################################
sub sessionOff {
- my ($hash) = @_;
- my $camname = $hash->{CAMNAME};
- my $name = $hash->{NAME};
+ my $hash = shift;
+ my $camname = $hash->{CAMNAME};
+ my $name = $hash->{NAME};
RemoveInternalTimer($hash, "FHEM::SSCam::sessionOff");
return if(IsDisabled($name));
@@ -8010,13 +8008,13 @@ return;
#
######################################################################################
sub streamDev { ## no critic 'complexity'
- my $paref = shift;
- my $camname = $paref->{linkparent};
- my $strmdev = $paref->{linkname};
- my $fmt = $paref->{linkmodel};
- my $omodel = $paref->{omodel};
- my $oname = $paref->{oname};
- my $ftui = $paref->{ftui};
+ my $paref = shift;
+ my $camname = $paref->{linkparent};
+ my $strmdev = $paref->{linkname};
+ my $fmt = $paref->{linkmodel};
+ my $omodel = $paref->{omodel};
+ my $oname = $paref->{oname};
+ my $ftui = $paref->{ftui};
my $hash = $defs{$camname};
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
@@ -8233,16 +8231,15 @@ return $ret;
# Streaming Device Typ: mjpeg
sub _streamDevMJPEG { ## no critic 'complexity not used'
my $params = shift;
-
my $camname = $params->{camname};
my $strmdev = $params->{strmdev};
my $hash = $defs{$camname};
my $streamHash = $defs{$strmdev};
+ my $camid = $params->{camid} // return "";
+ my $sid = $params->{sid} // return "";
my $ftui = $params->{ftui};
- my $camid = $params->{camid};
my $proto = $params->{proto};
- my $sid = $params->{sid};
my $pws = $params->{pws};
my $ha = $params->{ha};
my $hb = $params->{hb};
@@ -11437,12 +11434,12 @@ sub setVersionInfo {
if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) {
# META-Daten sind vorhanden
$modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SMAPortal}{META}}
- if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 49_SSCam.pm 22481 2020-07-27 21:56:22Z DS_Starter $ im Kopf komplett! vorhanden )
+ if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 49_SSCam.pm 22592 2020-08-12 21:28:56Z DS_Starter $ im Kopf komplett! vorhanden )
$modules{$type}{META}{x_version} =~ s/1\.1\.1/$v/gx;
} else {
$modules{$type}{META}{x_version} = $v;
}
- return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCam.pm 22481 2020-07-27 21:56:22Z DS_Starter $ im Kopf komplett! vorhanden )
+ return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCam.pm 22592 2020-08-12 21:28:56Z DS_Starter $ im Kopf komplett! vorhanden )
if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
# es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
# mit {->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
diff --git a/fhem/contrib/DS_Starter/49_SSCamSTRM.pm b/fhem/contrib/DS_Starter/49_SSCamSTRM.pm
index 1869c6d48..0915b010c 100644
--- a/fhem/contrib/DS_Starter/49_SSCamSTRM.pm
+++ b/fhem/contrib/DS_Starter/49_SSCamSTRM.pm
@@ -1,5 +1,5 @@
########################################################################################################################
-# $Id: 49_SSCamSTRM.pm 22446 2020-07-20 21:16:31Z DS_Starter $
+# $Id: 49_SSCamSTRM.pm 22534 2020-08-03 20:10:28Z DS_Starter $
#########################################################################################################################
# 49_SSCamSTRM.pm
#
@@ -47,6 +47,7 @@ BEGIN {
defs
devspec2array
FmtDateTime
+ init_done
InternalTimer
IsDisabled
Log3
@@ -90,6 +91,12 @@ BEGIN {
# Versions History intern
my %vNotesIntern = (
+ "2.14.5" => "12.08.2020 avoid loose of adoption after restart ",
+ "2.14.4" => "03.08.2020 fix check of ARG in RemoveInternalTimer in _setadoptForTimer sub (sometimes no switch back done) ",
+ "2.14.3" => "01.08.2020 verbose 5 log in _setadoptForTimer sub ",
+ "2.14.2" => "29.07.2020 fix: adoptTime accept not only integer values ",
+ "2.14.1" => "28.07.2020 switching time increases with each adoptForTimer command ",
+ "2.14.0" => "27.07.2020 new commands adoptForTimer and control command adoptTime ",
"2.13.1" => "21.07.2020 fix: set of values in attr adoptSubset is empty after restart, changes according level 3 PBP ",
"2.13.0" => "14.07.2020 integrate streamDev master ",
"2.12.0" => "28.06.2020 upgrade SSCam functions due to SSCam switch to packages ",
@@ -154,9 +161,11 @@ my %hvattr = ( # Has
);
my %hset = ( # Hash für Set-Funktion
- popupStream => { fn => "_setpopupStream" },
- adopt => { fn => "_setadopt" },
- reset => { fn => "_setreset" },
+ popupStream => { fn => "_setpopupStream" },
+ adopt => { fn => "_setadopt" },
+ adoptForTimer => { fn => "_setadoptForTimer" },
+ adoptTime => { fn => "_setAdoptTimer" },
+ reset => { fn => "_setreset" },
);
my %sdevs = (); # Hash der vorhandenen Streaming Devices
@@ -224,7 +233,7 @@ sub Define {
explodeLinkData ($hash, $link, 1);
- $hash->{HELPER}{MODMETAABSENT} = 1 if($modMetaAbsent); # Modul Meta.pm nicht vorhanden
+ $hash->{HELPER}{MODMETAABSENT} = 1 if($modMetaAbsent); # Modul Meta.pm nicht vorhanden
# Versionsinformationen setzen
setVersionInfo($hash);
@@ -304,12 +313,14 @@ sub Set {
$sd =~ s/\s+/#/gx;
my $rsd = $as;
- $rsd =~ s/#/ /g; ## no critic 'regular expression' # Regular expression without "/x" flag nicht anwenden !!!
+ $rsd =~ s/#/ /g; ## no critic 'regular expression' # Regular expression without "/x" flag nicht anwenden !!!
push my @ado, "adoptList:$rsd";
setReadings($hash, \@ado, 0);
$setlist = "Unknown argument $opt, choose one of ".
- "adopt:$sd "
+ "adopt:$sd ".
+ "adoptForTimer:$sd ".
+ "adoptTime "
;
}
@@ -323,8 +334,9 @@ sub Set {
no strict "refs"; ## no critic 'NoStrict'
if($hset{$opt}) {
- &{$hset{$opt}{fn}} (\%params) if(defined &{$hset{$opt}{fn}});
- return;
+ my $ret = "";
+ $ret = &{$hset{$opt}{fn}} (\%params) if(defined &{$hset{$opt}{fn}});
+ return $ret;
}
use strict "refs";
@@ -423,6 +435,84 @@ sub _setadopt { ## no critic "not used"
return;
}
+###############################################################
+# setter adopt-for-timer
+# schaltet für eine bestimmte Zeit auf das ausgewählte
+# Streaming Device und wieder auf das vorherige zurück
+###############################################################
+sub _setadoptForTimer { ## no critic "not used"
+ my $paref = shift;
+ my $hash = $paref->{hash};
+ my $name = $paref->{name};
+ my $opt = $paref->{opt};
+ my $odev = $paref->{odev}; # bisheriges adoptiertes Device (wird erst im InternalTimer gesetzt und verwendet)
+
+ return if(IsDisabled($name) || $init_done != 1);
+
+ my $sdev;
+ my $atime = ReadingsVal($name, "adoptTimer", 10);
+
+ if(!$odev) { # Step 1 -> erster Durchlauf ohne odef
+ $hash->{HELPER}{SWITCHED} = $hash->{LINKNAME} if(!$hash->{HELPER}{SWITCHED});
+ $paref->{odev} = $hash->{HELPER}{SWITCHED}; # bisheriges adoptiertes Device in %params aufnehmen, InternalTimer mitgeben
+
+ } else { # Step 2 -> zweiter Durchlauf mit odef gesetzt
+ my @a;
+ delete $hash->{HELPER}{SWITCHED};
+ $sdev = $odev eq $name ? "--reset--" : $odev;
+
+ push @a, $name;
+ push @a, $opt;
+ push @a, $sdev;
+
+ $paref->{aref} = \@a;
+ }
+
+ no strict "refs"; ## no critic 'NoStrict'
+ &{$hset{adopt}{fn}} ($paref);
+ use strict "refs";
+
+ Log3($name, 5, "$name - new => $hash->{LINKNAME}, odev => ".($odev // "")." , sdev => ".($sdev // "")." ,Helper SWITCHED => ".($hash->{HELPER}{SWITCHED} // "").", switch time => $atime");
+
+ if($odev) {
+ Log3($name, 4, qq{$name - Switched Stream Device back to "$sdev"});
+ return;
+ }
+
+ Log3($name, 4, qq{$name - Switched to Stream Device "$hash->{LINKNAME}" for $atime seconds});
+
+ RemoveInternalTimer($hash->{HELPER}{ARG}, "FHEM::SSCamSTRM::_setadoptForTimer");
+ $hash->{HELPER}{ARG} = $paref; # $paref ist Unikat !
+ InternalTimer(gettimeofday()+$atime, "FHEM::SSCamSTRM::_setadoptForTimer", $paref, 0);
+
+return;
+}
+
+################################################################
+# Setter adoptTimer
+# setzt die Schaltzeit für setter adoptForTimer
+################################################################
+sub _setAdoptTimer { ## no critic "not used"
+ my $paref = shift;
+ my $hash = $paref->{hash};
+ my $opt = $paref->{opt};
+ my $prop = $paref->{prop} // 0;
+
+ my $ret = "";
+ $ret = qq{The command "$opt" needs an integer as argument.} if($prop !~ /^[0-9]+?$/x);
+ return $ret if($ret);
+
+ delReadings ($hash, "adoptTimer");
+
+ if($prop) { # bei "0" wird das Reading nur gelöscht, nicht wieder gesetzt
+ my @r;
+ push @r, "adoptTimer:$prop";
+
+ setReadings($hash, \@r, 0);
+ }
+
+return;
+}
################################################################
# Setter reset
@@ -535,7 +625,7 @@ sub FwFn {
my $clink = ReadingsVal($name, "clientLink", "");
sofAdoptSubset ($hash);
- explodeLinkData ($hash, $clink, 0);
+ explodeLinkData ($hash, $clink, 0) if($init_done == 1);
# Beispielsyntax: "{$hash->{LINKFN}('$hash->{LINKPARENT}','$hash->{LINKNAME}','$hash->{LINKMODEL}')}";
@@ -667,12 +757,12 @@ sub setVersionInfo {
if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) {
# META-Daten sind vorhanden
$modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SSCamSTRM}{META}}
- if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 49_SSCamSTRM.pm 22446 2020-07-20 21:16:31Z DS_Starter $ im Kopf komplett! vorhanden )
+ if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 49_SSCamSTRM.pm 22534 2020-08-03 20:10:28Z DS_Starter $ im Kopf komplett! vorhanden )
$modules{$type}{META}{x_version} =~ s/1\.1\.1/$v/gx;
} else {
$modules{$type}{META}{x_version} = $v;
}
- return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCamSTRM.pm 22446 2020-07-20 21:16:31Z DS_Starter $ im Kopf komplett! vorhanden )
+ return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCamSTRM.pm 22534 2020-08-03 20:10:28Z DS_Starter $ im Kopf komplett! vorhanden )
if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
# es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
# mit {->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
@@ -736,29 +826,6 @@ sub streamAsHtml {
return $ret;
}
-################################################################
-# delete Readings
-# $rd = angegebenes Reading löschen
-################################################################
-sub delReadings {
- my $hash = shift;
- my $rd = shift;
- my $name = $hash->{NAME};
-
- my $bl = "state|parentState|adoptSubset"; # Blacklist
-
- if($rd) { # angegebenes Reading löschen wenn nicht im providerLevel enthalten
- readingsDelete($hash, $rd) if($rd !~ /$bl/x);
- return;
- }
-
- for my $key (keys %{$hash->{READINGS}}) {
- readingsDelete($hash, $key) if($key !~ /$bl/x);
- }
-
-return;
-}
-
################################################################
# Wertevorrat für adoptSubset generieren
################################################################
@@ -806,6 +873,30 @@ sub setReadings {
return;
}
+################################################################
+# delete Readings
+# $rd = angegebenes Reading löschen unabhängig vom
+# Inhalt der Blacklist
+################################################################
+sub delReadings {
+ my $hash = shift;
+ my $rd = shift;
+ my $name = $hash->{NAME};
+
+ my $bl = "state|parentState|adoptSubset|adoptTimer"; # Blacklist
+
+ if($rd) { # angegebenes Reading löschen
+ readingsDelete($hash, $rd);
+ return;
+ }
+
+ for my $key (keys %{$hash->{READINGS}}) {
+ readingsDelete($hash, $key) if($key !~ /$bl/x);
+ }
+
+return;
+}
+
################################################################
# liefert String aller Streamingdevices außer MODEL = master
# und füllt Hash %sdevs{Alias} = Devicename zu Auflösung
@@ -941,6 +1032,38 @@ return $ret;
Set
+
+
+ - adopt <Streaming device> (only valid if MODEL = master)
+
+ A Streaming Device of type master adopts the content of another defined Streaming Device.
+
+
+
+
+
+
+ - adoptForTimer <Streaming Device> (only valid if MODEL = master)
+
+ A Streaming Device of type master adopts the content of another defined Streaming Device
+ for a certain time.
+ The time is set with the command set <name> adoptTime.
+ (default: 10 seconds)
+
+
+
+
+
+
+ - adoptTime <seconds> (only valid if MODEL = master)
+
+ Setting of the switching time when temporarily taking over the content of another Streaming Device.
+ After the time has expired, playback is switched back to the previously set Streaming Device.
+ If no argument or "0" is given, the time specification is deleted and the default (10 seconds) is used.
+
+
+
+
- popupStream (only valid if MODEL != master)
@@ -953,14 +1076,6 @@ return $ret;
-
- - adopt <Streaming device> (only valid if MODEL = master)
-
- A Streaming Device of type master adopts the content of another defined Streaming Device.
-
-
-
-
@@ -1203,6 +1318,38 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
Set
+
+
+ - adopt <Streaming Device> (nur wenn MODEL = master)
+
+ Ein Streaming Device vom Type master übernimmt (adoptiert) den Content eines anderen definierten Streaming Devices.
+
+
+
+
+
+
+ - adoptForTimer <Streaming Device> (nur wenn MODEL = master)
+
+ Ein Streaming Device vom Type master übernimmt (adoptiert) den Content eines anderen definierten Streaming Devices
+ für eine bestimmte Zeit.
+ Die Zeit wird mit dem Kommando set <name> adoptTime eingestellt.
+ (default: 10 Sekunden)
+
+
+
+
+
+
+ - adoptTime <Sekunden> (nur wenn MODEL = master)
+
+ Einstellung der Schaltzeit bei temporärer Übernahme des Contents eines anderen Streaming Devices.
+ Nach Ablauf der Zeit wird die Wiedergabe auf das vorher eingestellte Streaming Device zurückgeschaltet.
+ Wird kein Argument oder "0" angegeben, wird die Zeitvorgabe gelöscht und der Standard (10 Sekunden) verwendet.
+
+
+
+
- popupStream [OK | <Sekunden>] (nur wenn MODEL != master)
@@ -1216,14 +1363,6 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
-
- - adopt <Streaming Device> (nur wenn MODEL = master)
-
- Ein Streaming Device vom Type master übernimmt (adoptiert) den Content eines anderen definierten Streaming Devices.
-
-
-
-