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@22430 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
44d6390e4b
commit
deceace66e
@ -7477,24 +7477,22 @@ sub roomRefresh {
|
|||||||
my @spgs = devspec2array("TYPE=SSCamSTRM"); # alle Streaming Devices !
|
my @spgs = devspec2array("TYPE=SSCamSTRM"); # alle Streaming Devices !
|
||||||
my @mstd = devspec2array("TYPE=SSCamSTRM:FILTER=MODEL=master"); # alle Streaming MODEL=master Devices
|
my @mstd = devspec2array("TYPE=SSCamSTRM:FILTER=MODEL=master"); # alle Streaming MODEL=master Devices
|
||||||
my $room = "";
|
my $room = "";
|
||||||
|
|
||||||
for my $sd (@spgs) {
|
for my $sd (@spgs) {
|
||||||
if($defs{$sd}{LINKPARENT} eq $name) {
|
if($defs{$sd}{LINKPARENT} eq $name) {
|
||||||
next if(IsDisabled($defs{$sd}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$sd}{FUUID});
|
next if(IsDisabled($defs{$sd}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$sd}{FUUID});
|
||||||
$fpr = AttrVal($defs{$sd}{NAME},"forcePageRefresh",0);
|
$fpr = AttrVal($defs{$sd}{NAME},"forcePageRefresh",0);
|
||||||
$room = AttrVal($defs{$sd}{NAME},"room","");
|
$room = AttrVal($defs{$sd}{NAME},"room","");
|
||||||
Log3($name, 4, "$name - roomRefresh - pagerefresh: $defs{$sd}{NAME}") if($fpr);
|
Log3($name, 4, qq{$name - roomRefresh - pagerefresh forced by $defs{$sd}{NAME}}) if($fpr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Page-Reload
|
# Page-Reload
|
||||||
if($pload && $room) {
|
if($pload && $room && !$fpr) {
|
||||||
if(!$fpr) {
|
# nur Räume mit dem SSCamSTRM-Device reloaden
|
||||||
# nur Räume mit dem SSCamSTRM-Device reloaden
|
my @rooms = split(",",$room);
|
||||||
my @rooms = split(",",$room);
|
for my $r (@rooms) {
|
||||||
for my $r (@rooms) {
|
{ 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) {
|
||||||
@ -7530,6 +7528,8 @@ sub roomRefresh {
|
|||||||
readingsBulkUpdate ($defs{$sm},"parentState", $st);
|
readingsBulkUpdate ($defs{$sm},"parentState", $st);
|
||||||
readingsBulkUpdate ($defs{$sm},"state", "updated");
|
readingsBulkUpdate ($defs{$sm},"state", "updated");
|
||||||
readingsEndUpdate ($defs{$sm}, 1);
|
readingsEndUpdate ($defs{$sm}, 1);
|
||||||
|
|
||||||
|
Log3($name, 4, "$name - roomRefresh - caller: $sp, Master: $sm updated");
|
||||||
}
|
}
|
||||||
|
|
||||||
Log3($name, 4, "$name - roomRefresh - caller: $sp, FUUID: $hash->{HELPER}{INFORM}");
|
Log3($name, 4, "$name - roomRefresh - caller: $sp, FUUID: $hash->{HELPER}{INFORM}");
|
||||||
@ -7627,6 +7627,14 @@ sub IsCapPIR { # hat K
|
|||||||
return $cap;
|
return $cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub IsModelMaster { # ist des Streamdevices MODEL=master
|
||||||
|
my $model = shift;
|
||||||
|
|
||||||
|
my $mm = $model eq "master" ? 1 : 0;
|
||||||
|
|
||||||
|
return $mm;
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# JSON Boolean Test und Mapping
|
# JSON Boolean Test und Mapping
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -8045,13 +8053,17 @@ return;
|
|||||||
# $camname = Name der Kamaera (Parent-Device)
|
# $camname = Name der Kamaera (Parent-Device)
|
||||||
# $strmdev = Name des Streaming-Devices
|
# $strmdev = Name des Streaming-Devices
|
||||||
# $fmt = Streaming Format (Vergleich auf "eq" !)
|
# $fmt = Streaming Format (Vergleich auf "eq" !)
|
||||||
|
# $omodel = originäres MODEL des Streaming Devices (wg. master)
|
||||||
|
# $oname = originäres NAME des Streaming Devices (wg. master)
|
||||||
#
|
#
|
||||||
######################################################################################
|
######################################################################################
|
||||||
sub streamDev { ## no critic 'complexity'
|
sub streamDev { ## no critic 'complexity'
|
||||||
my $paref = shift;
|
my $paref = shift;
|
||||||
my $camname = $paref->{linkparent};
|
my $camname = $paref->{linkparent};
|
||||||
my $strmdev = $paref->{linkname};
|
my $strmdev = $paref->{linkname};
|
||||||
my $fmt = $paref->{linkmodel};
|
my $fmt = $paref->{linkmodel};
|
||||||
|
my $omodel = $paref->{omodel};
|
||||||
|
my $oname = $paref->{oname};
|
||||||
my $ftui = $paref->{ftui};
|
my $ftui = $paref->{ftui};
|
||||||
|
|
||||||
my $hash = $defs{$camname};
|
my $hash = $defs{$camname};
|
||||||
@ -8232,7 +8244,7 @@ sub streamDev { ## no critic 'comp
|
|||||||
$ret .= '<tbody>';
|
$ret .= '<tbody>';
|
||||||
$ret .= '<tr class="odd">';
|
$ret .= '<tr class="odd">';
|
||||||
|
|
||||||
my $ismm = FHEM::SSCamSTRM::IsModelMaster($streamHash); # prüfen ob Streaming Dev ist MODEL = master
|
my $ismm = IsModelMaster($omodel); # prüfen ob Streaming Dev ist MODEL = master
|
||||||
|
|
||||||
if(!$ismm && (!$StmKey || ReadingsVal($camname, "Availability", "") ne "enabled" || IsDisabled($camname))) {
|
if(!$ismm && (!$StmKey || ReadingsVal($camname, "Availability", "") ne "enabled" || IsDisabled($camname))) {
|
||||||
# Ausgabe bei Fehler
|
# Ausgabe bei Fehler
|
||||||
|
@ -266,9 +266,15 @@ sub Set {
|
|||||||
"popupStream "
|
"popupStream "
|
||||||
;
|
;
|
||||||
} else {
|
} else {
|
||||||
my $sd = allStreamDevs();
|
my $sd = "--reset--,".allStreamDevs();
|
||||||
|
my $rsd = $sd;
|
||||||
|
$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 ".
|
$setlist = "Unknown argument $opt, choose one of ".
|
||||||
"adoptFrom:--reset--,$sd "
|
"adoptFrom:$sd "
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,17 +308,17 @@ 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--") {
|
if($prop eq "--reset--") {
|
||||||
CommandSet(undef, "$name reset");
|
CommandSet(undef, "$name reset");
|
||||||
return;
|
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 instead of "$strmd"} if(!$valid);
|
||||||
|
|
||||||
# Übernahme der Readings
|
# Übernahme der Readings
|
||||||
my @r;
|
my @r;
|
||||||
@ -329,12 +335,13 @@ sub Set {
|
|||||||
push @r, "clientLink:$link";
|
push @r, "clientLink:$link";
|
||||||
|
|
||||||
if(@r) {
|
if(@r) {
|
||||||
setReadings($hash, \@r, 0);
|
setReadings($hash, \@r, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $camname = $hash->{LINKPARENT};
|
my $camname = $hash->{LINKPARENT};
|
||||||
$defs{$camname}{HELPER}{INFORM} = $hash->{FUUID};
|
$defs{$camname}{HELPER}{INFORM} = $hash->{FUUID};
|
||||||
FHEM::SSCam::roomRefresh ("$camname,1,0,0");
|
|
||||||
|
InternalTimer(gettimeofday()+1.5, "FHEM::SSCam::roomRefresh", "$camname,0,0,0", 0);
|
||||||
|
|
||||||
} elsif ($opt eq "reset") {
|
} elsif ($opt eq "reset") {
|
||||||
delReadings($hash);
|
delReadings($hash);
|
||||||
@ -344,11 +351,12 @@ sub Set {
|
|||||||
push @r, "parentState:initialized";
|
push @r, "parentState:initialized";
|
||||||
push @r, "state:initialized";
|
push @r, "state:initialized";
|
||||||
|
|
||||||
setReadings($hash, \@r, 0);
|
setReadings($hash, \@r, 1);
|
||||||
|
|
||||||
my $camname = $hash->{LINKPARENT};
|
my $camname = $hash->{LINKPARENT};
|
||||||
$defs{$camname}{HELPER}{INFORM} = $hash->{FUUID};
|
$defs{$camname}{HELPER}{INFORM} = $hash->{FUUID};
|
||||||
FHEM::SSCam::roomRefresh ("$camname,1,0,0");
|
|
||||||
|
InternalTimer(gettimeofday()+1.5, "FHEM::SSCam::roomRefresh", "$camname,0,0,0", 0);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return "$setlist";
|
return "$setlist";
|
||||||
@ -431,6 +439,8 @@ sub FwFn {
|
|||||||
my %pars = ( linkparent => $hash->{LINKPARENT},
|
my %pars = ( linkparent => $hash->{LINKPARENT},
|
||||||
linkname => $hash->{LINKNAME},
|
linkname => $hash->{LINKNAME},
|
||||||
linkmodel => $hash->{LINKMODEL},
|
linkmodel => $hash->{LINKMODEL},
|
||||||
|
omodel => $hash->{MODEL},
|
||||||
|
oname => $hash->{NAME},
|
||||||
ftui => $ftui
|
ftui => $ftui
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -590,6 +600,8 @@ sub streamAsHtml {
|
|||||||
my %pars = ( linkparent => $hash->{LINKPARENT},
|
my %pars = ( linkparent => $hash->{LINKPARENT},
|
||||||
linkname => $hash->{LINKNAME},
|
linkname => $hash->{LINKNAME},
|
||||||
linkmodel => $hash->{LINKMODEL},
|
linkmodel => $hash->{LINKMODEL},
|
||||||
|
omodel => $hash->{MODEL},
|
||||||
|
oname => $hash->{NAME},
|
||||||
ftui => $ftui
|
ftui => $ftui
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -679,17 +691,22 @@ sub allStreamDevs {
|
|||||||
undef %sdevs;
|
undef %sdevs;
|
||||||
|
|
||||||
my @strmdevs = devspec2array("TYPE=SSCamSTRM:FILTER=MODEL!=master"); # Liste Streaming devices außer MODEL = master
|
my @strmdevs = devspec2array("TYPE=SSCamSTRM:FILTER=MODEL!=master"); # Liste Streaming devices außer MODEL = master
|
||||||
for my $d (@strmdevs) {
|
for my $da (@strmdevs) {
|
||||||
next if(!$defs{$d});
|
next if(!$defs{$da});
|
||||||
my $alias = AttrVal($d, "alias", $d);
|
my $alias = AttrVal($da, "alias", $da);
|
||||||
$alias =~ s/\s+/#/gx;
|
$alias =~ s/\s+/#/gx;
|
||||||
$sdevs{$alias} = "$d";
|
$sdevs{$alias} = "$da";
|
||||||
}
|
}
|
||||||
|
|
||||||
for my $a (sort keys %sdevs) {
|
for my $a (sort keys %sdevs) {
|
||||||
$sd .= "," if($sd);
|
$sd .= "," if($sd);
|
||||||
$sd .= $a;
|
$sd .= $a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for my $d (@strmdevs) { # Devicenamen zusätzlich als Schlüssel speichern damit set <> adoptFrom ohne Widget funktioniert
|
||||||
|
next if(!$defs{$d});
|
||||||
|
$sdevs{$d} = "$d";
|
||||||
|
}
|
||||||
|
|
||||||
return $sd;
|
return $sd;
|
||||||
}
|
}
|
||||||
@ -726,7 +743,7 @@ sub sDevsWidget {
|
|||||||
|
|
||||||
if($valAdopts) {
|
if($valAdopts) {
|
||||||
$ret .= "<tr>";
|
$ret .= "<tr>";
|
||||||
$ret .= "<td>Adopt: </td><td>$Adopts</td>";
|
$ret .= "<td>Streaming Device: </td><td>$Adopts</td>";
|
||||||
$ret .= "</tr>";
|
$ret .= "</tr>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user