2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-01-31 18:59:33 +00:00

49_SSCam: contrib 9.5.0

git-svn-id: https://svn.fhem.de/fhem/trunk@22421 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2020-07-18 07:10:26 +00:00
parent 9fbe7999df
commit a788e1aa1c
2 changed files with 54 additions and 29 deletions

View File

@ -7463,18 +7463,20 @@ return ($hash,$success,$myjson);
sub roomRefresh { sub roomRefresh {
my ($hash,$pload,$lpoll_scm,$lpoll_strm) = @_; my ($hash,$pload,$lpoll_scm,$lpoll_strm) = @_;
my ($name,$st); my ($name,$st);
if (ref $hash ne "HASH")
{ if (ref $hash ne "HASH") {
($name,$pload,$lpoll_scm,$lpoll_strm) = split ",",$hash; ($name,$pload,$lpoll_scm,$lpoll_strm) = split ",",$hash;
$hash = $defs{$name}; $hash = $defs{$name};
} else { } else {
$name = $hash->{NAME}; $name = $hash->{NAME};
} }
my $fpr = 0; my $fpr = 0;
# SSCamSTRM-Device mit hinterlegter FUUID ($hash->{HELPER}{INFORM}) selektieren # SSCamSTRM-Device mit hinterlegter FUUID ($hash->{HELPER}{INFORM}) selektieren
my @spgs = devspec2array("TYPE=SSCamSTRM"); my @spgs = devspec2array("TYPE=SSCamSTRM");
my $room = ""; my $room = "";
for(@spgs) { for(@spgs) {
if($defs{$_}{PARENT} eq $name) { if($defs{$_}{PARENT} eq $name) {
next if(IsDisabled($defs{$_}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$_}{FUUID}); next if(IsDisabled($defs{$_}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$_}{FUUID});
@ -7494,6 +7496,7 @@ sub roomRefresh {
{ map { FW_directNotify("FILTER=room=$r", "#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") } { map { FW_directNotify("FILTER=room=$r", "#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
} }
} }
} elsif ($pload || $fpr) { } elsif ($pload || $fpr) {
# trifft zu bei Detailansicht oder im FLOORPLAN bzw. Dashboard oder wenn Seitenrefresh mit dem # trifft zu bei Detailansicht oder im FLOORPLAN bzw. Dashboard oder wenn Seitenrefresh mit dem
# SSCamSTRM-Attribut "forcePageRefresh" erzwungen wird # SSCamSTRM-Attribut "forcePageRefresh" erzwungen wird
@ -7509,18 +7512,20 @@ sub roomRefresh {
} }
# parentState des SSCamSTRM-Device updaten # parentState des SSCamSTRM-Device updaten
$st = ReadingsVal($name, "state", "initialized"); if($lpoll_strm) {
for(@spgs) { $st = ReadingsVal($name, "state", "initialized");
if($defs{$_}{PARENT} eq $name) { for(@spgs) {
next if(IsDisabled($defs{$_}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$_}{FUUID}); if($defs{$_}{PARENT} eq $name) {
next if(IsDisabled($defs{$_}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$_}{FUUID});
readingsBeginUpdate($defs{$_});
readingsBulkUpdate ($defs{$_},"parentState", $st); readingsBeginUpdate($defs{$_});
readingsBulkUpdate ($defs{$_},"state", "updated"); readingsBulkUpdate ($defs{$_},"parentState", $st);
readingsEndUpdate ($defs{$_}, 1); readingsBulkUpdate ($defs{$_},"state", "updated");
readingsEndUpdate ($defs{$_}, 1);
Log3($name, 4, "$name - roomRefresh - caller: $_, FUUID: $hash->{HELPER}{INFORM}");
delete $hash->{HELPER}{INFORM}; Log3($name, 4, "$name - roomRefresh - caller: $_, FUUID: $hash->{HELPER}{INFORM}");
delete $hash->{HELPER}{INFORM};
}
} }
} }
@ -9089,11 +9094,6 @@ sub composeGallery {
my ($alias,$dlink,$hb) = ("","",""); my ($alias,$dlink,$hb) = ("","","");
my ($cache,$imgdat,$imgTm); my ($cache,$imgdat,$imgTm);
# Kontext des SSCamSTRM-Devices speichern für roomRefresh
#$hash->{HELPER}{STRMDEV} = $strmdev; # Name des aufrufenden SSCamSTRM-Devices
#$hash->{HELPER}{STRMROOM} = $FW_room?$FW_room:""; # Raum aus dem das SSCamSTRM-Device die Funktion aufrief
#$hash->{HELPER}{STRMDETAIL} = $FW_detail?$FW_detail:""; # Name des SSCamSTRM-Devices (wenn Detailansicht)
if($strmdev) { if($strmdev) {
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
$uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices $uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices

View File

@ -42,6 +42,7 @@ BEGIN {
qw( qw(
AnalyzePerlCommand AnalyzePerlCommand
AttrVal AttrVal
CommandSet
data data
defs defs
devspec2array devspec2array
@ -267,8 +268,7 @@ sub Set {
} else { } else {
my $sd = allStreamDevs(); my $sd = allStreamDevs();
$setlist = "Unknown argument $opt, choose one of ". $setlist = "Unknown argument $opt, choose one of ".
"adoptFrom:$sd ". "adoptFrom:--reset--,$sd "
"reset:noArg "
; ;
} }
@ -303,11 +303,18 @@ sub Set {
} elsif ($opt eq "adoptFrom") { } elsif ($opt eq "adoptFrom") {
shift @a; shift @a; shift @a; shift @a;
$prop = join "#", @a; $prop = join "#", @a;
if($prop eq "--reset--") {
CommandSet(undef, "$name reset");
return;
}
my $strmd = $sdevs{"$prop"}; my $strmd = $sdevs{"$prop"};
my $valid = ($strmd && $defs{$strmd} && $defs{$strmd}{TYPE} eq "SSCamSTRM"); my $valid = ($strmd && $defs{$strmd} && $defs{$strmd}{TYPE} eq "SSCamSTRM");
return qq{The command "$opt" needs a valid SSCamSTRM device as argument} if(!$valid); return qq{The command "$opt" needs a valid SSCamSTRM device as argument} if(!$valid);
# Übernahme der Readings # Übernahme der Readings
my @r; my @r;
delReadings($hash); delReadings($hash);
@ -329,14 +336,30 @@ sub Set {
readingsBulkUpdate($hash, $rn, $rval); readingsBulkUpdate($hash, $rn, $rval);
} }
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 0);
} }
webRefresh($hash);
} elsif ($opt eq "reset") { } elsif ($opt eq "reset") {
delReadings($hash); delReadings($hash);
# $hash->{LINK} = $hash->{DEF};
explodeLinkData ($hash, $hash->{DEF}, 1); explodeLinkData ($hash, $hash->{DEF}, 1);
my @r;
push @r, "parentState:initialized";
push @r, "state:initialized";
readingsBeginUpdate($hash);
for my $elem (@r) {
my ($rn,$rval) = split ":", $elem, 2;
readingsBulkUpdate($hash, $rn, $rval);
}
readingsEndUpdate($hash, 0);
webRefresh($hash);
} else { } else {
return "$setlist"; return "$setlist";
} }
@ -615,12 +638,14 @@ sub delReadings {
my $bl = "state|parentState"; # Blacklist my $bl = "state|parentState"; # Blacklist
if($rd) { # angegebenes Reading löschen wenn nicht im providerLevel enthalten if($rd) { # angegebenes Reading löschen wenn nicht im providerLevel enthalten
delete($hash->{READINGS}{$rd}) if($rd !~ /$bl/x); # delete($hash->{READINGS}{$rd}) if($rd !~ /$bl/x);
readingsDelete($hash, $rd) if($rd !~ /$bl/x);
return; return;
} }
for my $key (keys %{$hash->{READINGS}}) { for my $key (keys %{$hash->{READINGS}}) {
delete($hash->{READINGS}{$key}) if($key !~ /$bl/x); # delete($hash->{READINGS}{$key}) if($key !~ /$bl/x);
readingsDelete($hash, $key) if($key !~ /$bl/x);
} }
return; return;
@ -664,7 +689,7 @@ sub sDevsWidget {
my $Adopts; my $Adopts;
my $ret = ""; my $ret = "";
my $cmdAdopt = "adoptFrom"; my $cmdAdopt = "adoptFrom";
my $valAdopts = allStreamDevs(); my $valAdopts = "--reset--,".allStreamDevs();
for my $fn (sort keys %{$data{webCmdFn}}) { for my $fn (sort keys %{$data{webCmdFn}}) {
next if($data{webCmdFn}{$fn} ne "FW_widgetFallbackFn"); next if($data{webCmdFn}{$fn} ne "FW_widgetFallbackFn");