From 0973043db93818f994af8a6c31cd5fa23b8501c9 Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Fri, 14 Aug 2020 14:09:14 +0000 Subject: [PATCH] 49_SSCam(STRM): avoid possible warnings during FHEM shutdown/restart git-svn-id: https://svn.fhem.de/fhem/trunk@22598 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/49_SSCam.pm | 43 ++--- fhem/FHEM/49_SSCamSTRM.pm | 5 +- fhem/contrib/DS_Starter/49_SSCam.pm | 63 +++---- fhem/contrib/DS_Starter/49_SSCamSTRM.pm | 241 +++++++++++++++++++----- 5 files changed, 243 insertions(+), 110 deletions(-) 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. -
    • -
    -
    -