2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

49_SSCam: contrib 9.5.0

git-svn-id: https://svn.fhem.de/fhem/trunk@22417 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2020-07-17 10:58:15 +00:00
parent 12f1bf7e73
commit 39bd161ec7
2 changed files with 146 additions and 50 deletions

View File

@ -1439,7 +1439,11 @@ sub Set {
} else {
# Snaphash ist vorhanden und wird zur Ausgabe aufbereitet (Polling ist aktiv)
$hash->{HELPER}{SNAPLIMIT} = AttrVal($name,"snapGalleryNumber",$defSlim);
my $htmlCode = composeGallery($name);
my %pars = ( linkparent => $name,
linkname => '',
ftui => 0
);
my $htmlCode = composeGallery(\%pars);
for (my $k=1; (defined($hash->{HELPER}{CL}{$k})); $k++ ) {
if ($hash->{HELPER}{CL}{$k}->{COMP}) {
# CL zusammengestellt (Auslösung durch Notify)
@ -2006,7 +2010,11 @@ sub Get {
} else {
# Snaphash ist vorhanden und wird zur Ausgabe aufbereitet
$hash->{HELPER}{SNAPLIMIT} = AttrVal($name,"snapGalleryNumber",$defSlim);
my $htmlCode = composeGallery($name);
my %pars = ( linkparent => $name,
linkname => '',
ftui => 0
);
my $htmlCode = composeGallery(\%pars);
for (my $k=1; (defined($hash->{HELPER}{CL}{$k})); $k++ ) {
if ($hash->{HELPER}{CL}{$k}->{COMP}) {
# CL zusammengestellt (Auslösung durch Notify)
@ -2315,7 +2323,13 @@ sub FWdetailFn {
$ret .= $hash->{".setup"};
}
$hash->{".ptzhtml"} = ptzPanel($name,$name) if($hash->{".ptzhtml"} eq "");
my %pars = ( linkparent => $name,
linkname => $name,
linkmodel => '',
ftui => 0
);
$hash->{".ptzhtml"} = ptzPanel(\%pars) if($hash->{".ptzhtml"} eq "");
if($hash->{".ptzhtml"} ne "" && AttrVal($name,"ptzPanel_use",1)) {
$ret .= $hash->{".ptzhtml"};
@ -6305,8 +6319,12 @@ sub camOp_Parse {
}
# Direktausgabe Snaphash wenn nicht gepollt wird
if(!AttrVal($name, "snapGalleryBoost",0)) {
my $htmlCode = composeGallery($name);
if(!AttrVal($name, "snapGalleryBoost",0)) {
my %pars = ( linkparent => $name,
linkname => '',
ftui => 0
);
my $htmlCode = composeGallery(\%pars);
for (my $k=1; (defined($hash->{HELPER}{CL}{$k})); $k++ ) {
asyncOutput($hash->{HELPER}{CL}{$k},"$htmlCode");
@ -7742,7 +7760,11 @@ return ($ret);
# das generierte Widget und das weblink-Device ptzPanel_$name
###############################################################################
sub ptzPanel {
my ($name,$ptzcdev,$ptzcontrol,$ftui) = @_;
my $paref = shift;
my $name = $paref->{linkparent};
my $ptzcdev = $paref->{linkname};
my $ptzcontrol = $paref->{linkmodel};
my $ftui = $paref->{ftui};
my $hash = $defs{$name};
my $iconpath = AttrVal ("$name", "ptzPanel_iconPath", "www/images/sscam");
my $iconprefix = AttrVal ("$name", "ptzPanel_iconPrefix", "black_btn_" );
@ -8015,11 +8037,15 @@ return;
#
######################################################################################
sub streamDev { ## no critic 'complexity'
my ($camname,$strmdev,$fmt,$ftui) = @_;
my $paref = shift;
my $camname = $paref->{linkparent};
my $strmdev = $paref->{linkname};
my $fmt = $paref->{linkmodel};
my $ftui = $paref->{ftui};
my $hash = $defs{$camname};
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
my $uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices
$ftui = ($ftui && $ftui eq "ftui") ? 1 : 0;
my $hdrAlign = "center";
delete $streamHash->{HELPER}{STREAM};
@ -8308,7 +8334,12 @@ sub _streamDevMJPEG {
$ret .= "</td>";
if(AttrVal($camname,"ptzPanel_use",1)) {
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
my %pars = ( linkparent => $camname,
linkname => $strmdev,
linkmodel => '',
ftui => $ftui
);
my $ptz_ret = ptzPanel(\%pars);
if($ptz_ret) {
$ret .= "<td>$ptz_ret</td>";
}
@ -8473,7 +8504,12 @@ sub _streamDevGENERIC {
$ret .= "</td>";
if(AttrVal($camname,"ptzPanel_use",1)) {
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
my %pars = ( linkparent => $camname,
linkname => $strmdev,
linkmodel => '',
ftui => $ftui
);
my $ptz_ret = ptzPanel(\%pars);
if($ptz_ret) {
$ret .= "<td>$ptz_ret</td>";
}
@ -8559,7 +8595,12 @@ sub _streamDevHLS {
$ret .= "</td>";
if(AttrVal($camname,"ptzPanel_use",1)) {
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
my %pars = ( linkparent => $camname,
linkname => $strmdev,
linkmodel => '',
ftui => $ftui
);
my $ptz_ret = ptzPanel(\%pars);
if($ptz_ret) {
$ret .= "<td>$ptz_ret</td>";
}
@ -8695,7 +8736,12 @@ sub __switchedIMAGE {
$ret .= "</td>";
if(AttrVal($camname,"ptzPanel_use",1) && $hash->{HELPER}{RUNVIEW} =~ /live_fw/x) {
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
my %pars = ( linkparent => $camname,
linkname => $strmdev,
linkmodel => '',
ftui => $ftui
);
my $ptz_ret = ptzPanel(\%pars);
if($ptz_ret) {
$ret .= "<td>$ptz_ret</td>";
}
@ -8964,7 +9010,12 @@ sub __switchedHLS {
$ret .= "</td>";
if(AttrVal($camname,"ptzPanel_use",1)) {
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
my %pars = ( linkparent => $camname,
linkname => $strmdev,
linkmodel => '',
ftui => $ftui
);
my $ptz_ret = ptzPanel(\%pars);
if($ptz_ret) {
$ret .= "<td>$ptz_ret</td>";
}
@ -9024,7 +9075,10 @@ return $ret;
# Verwendung durch SSCamSTRM-Devices
###############################################################################
sub composeGallery {
my ($name,$strmdev,$model,$ftui) = @_;
my $paref = shift;
my $name = $paref->{linkparent};
my $strmdev = $paref->{linkname};
my $ftui = $paref->{ftui};
my $hash = $defs{$name};
my $camname = $hash->{CAMNAME};
my $sgc = AttrVal($name,"snapGalleryColumns",3); # Anzahl der Images in einer Tabellenzeile
@ -9033,7 +9087,6 @@ sub composeGallery {
my $limit = AttrVal($name,"snapGalleryNumber",3); # abgerufene Anzahl Snaps
my $totalcnt = $hash->{HELPER}{TOTALCNT}; # totale Anzahl Snaps
$limit = $totalcnt if ($limit > $totalcnt); # wenn weniger Snaps vorhanden sind als $limit -> Text in Anzeige korrigieren
$ftui = ($ftui && $ftui eq "ftui")?1:0;
my $uuid = "";
my $hdrAlign = "center";
my $lupt = ((ReadingsTimestamp($name,"LastSnapTime"," ") gt ReadingsTimestamp($name,"LastUpdateTime"," "))
@ -9122,7 +9175,7 @@ sub composeGallery {
# Ausgabetabelle erstellen
my $htmlCode;
# $htmlCode = "<html>";
$htmlCode = "<html>";
$htmlCode .= "<script type=\"text/javascript\" src=\"$ttjs\"></script>";
$htmlCode .= "<div class=\"makeTable wide\"; style=\"text-align:$hdrAlign\"> $header <br>";
$htmlCode .= '<table class="block wide internals" style="margin-left:auto;margin-right:auto">';
@ -9201,7 +9254,7 @@ sub composeGallery {
$htmlCode .= "</tbody>";
$htmlCode .= "</table>";
$htmlCode .= "</div>";
# $htmlCode .= "</html>";
$htmlCode .= "</html>";
undef $imgdat;
undef $imgTm;

View File

@ -193,7 +193,7 @@ sub Define {
$link = migrateFunc($hash,$link);
explodeDEF ($hash,$link);
explodeLinkData ($hash, $link, 1);
$hash->{HELPER}{MODMETAABSENT} = 1 if($modMetaAbsent); # Modul Meta.pm nicht vorhanden
$hash->{LINK} = $link;
@ -231,8 +231,8 @@ sub Rename {
my $old_name = shift;
my $hash = $defs{$new_name} // return;
$hash->{DEF} =~ s/\'$old_name\'/\'$new_name\'/xg;
$hash->{LINK} =~ s/\'$old_name\'/\'$new_name\'/xg;
$hash->{DEF} =~ s/\'$old_name\'/\'$new_name\'/xg;
explodeLinkData ($hash, $hash->{DEF}, 1);
return;
}
@ -242,8 +242,8 @@ sub Copy {
my $new_name = shift;
my $hash = $defs{$new_name} // return;
$hash->{DEF} =~ s/\'$old_name\'/\'$new_name\'/xg;
$hash->{LINK} =~ s/\'$old_name\'/\'$new_name\'/xg;
$hash->{DEF} =~ s/\'$old_name\'/\'$new_name\'/xg;
explodeLinkData ($hash, $hash->{DEF}, 1);
return;
}
@ -265,7 +265,7 @@ sub Set {
"popupStream "
;
} else {
my $sd = streamDevs();
my $sd = allStreamDevs();
$setlist = "Unknown argument $opt, choose one of ".
"adoptFrom:$sd ".
"reset:noArg "
@ -276,8 +276,6 @@ sub Set {
my $txt = FHEM::SSCam::getClHash($hash);
return $txt if($txt);
my $link = AnalyzePerlCommand(undef, $hash->{LINK});
# OK-Dialogbox oder Autoclose
my $temp = AttrVal($name, "popupStreamTo", $todef);
my $to = $prop // $temp;
@ -319,9 +317,9 @@ sub Set {
push @r, "$key:$val";
}
# Übernahme LINK
$hash->{LINK} = $defs{$strmd}{LINK};
readingsSingleUpdate($hash,"clientLink", $hash->{LINK}, 0);
# Übernahme Link-Parameter
my $link = "{$defs{$strmd}{LINKFN}('$defs{$strmd}{LINKPARENT}','$defs{$strmd}{LINKNAME}','$defs{$strmd}{LINKMODEL}')}";
readingsSingleUpdate($hash,"clientLink", $link, 0);
if(@r) {
readingsBeginUpdate($hash);
@ -409,11 +407,22 @@ sub FwFn {
$hash->{HELPER}{FW} = $FW_wname;
my $clink = ReadingsVal($name, "clientLink", "");
$hash->{LINK} = $clink if($clink);
my $link = $hash->{LINK};
$link = AnalyzePerlCommand(undef, $link) if($link =~ m/^{(.*)}$/xs);
explodeLinkData ($hash, $clink, 0);
# my $link = "{$hash->{LINKFN}('$hash->{LINKPARENT}','$hash->{LINKNAME}','$hash->{LINKMODEL}')}";
my $ftui = 0;
my $linkfn = $hash->{LINKFN};
my %pars = ( linkparent => $hash->{LINKPARENT},
linkname => $hash->{LINKNAME},
linkmodel => $hash->{LINKMODEL},
ftui => $ftui
);
no strict "refs"; ## no critic 'NoStrict'
my $html = &{$linkfn}(\%pars);
use strict "refs";
my $ret = "";
@ -432,7 +441,7 @@ sub FwFn {
}
} else {
$ret .= $link;
$ret .= $html;
$ret .= sDevsWidget($name) if(IsModelMaster($hash));
}
@ -442,21 +451,37 @@ sub FwFn {
Log3($name, 5, "$name - next start of autoRefresh: ".FmtDateTime(gettimeofday()+$al));
}
undef $link;
undef $html;
return $ret;
}
#############################################################################################
# Bestandteile des DEF auflösen
# Bestandteile des DEF (oder Link) auflösen
# $link = aufzulösender String
# $def = 1 -> es ist ein Shash->{DEF} Inhalt, 0 -> eine andere Quelle
#############################################################################################
sub explodeDEF {
sub explodeLinkData {
my $hash = shift;
my $link = shift;
my $def = shift;
my $arg = (split("[()]",$link))[1];
$arg =~ s/'//xg;
($hash->{PARENT},undef,$hash->{MODEL}) = split(",",$arg);
return if(!$link);
my ($fn,$arg) = split("[()]",$link);
$arg =~ s/'//xg;
$fn =~ s/{//xg;
if($def) {
($hash->{PARENT},$hash->{LINKNAME},$hash->{MODEL}) = split(",",$arg);
$hash->{LINKMODEL} = $hash->{MODEL};
$hash->{LINKPARENT} = $hash->{PARENT};
} else {
($hash->{LINKPARENT},$hash->{LINKNAME},$hash->{LINKMODEL}) = split(",",$arg);
}
$hash->{LINKFN} = $fn;
return;
}
@ -533,16 +558,33 @@ return;
# Grafik als HTML zurück liefern (z.B. für Widget)
################################################################
sub streamAsHtml {
my ($hash,$ftui) = @_;
my $name = $hash->{NAME};
my $link = $hash->{LINK};
my $hash = shift;
my $ftui = shift;
my $name = $hash->{NAME};
if ($ftui && $ftui eq "ftui") { # Aufruf aus TabletUI -> FW_cmd ersetzen gemäß FTUI Syntax
my $s = substr($link,0,length($link)-2);
$link = $s.",'$ftui')}";
if($ftui && $ftui eq "ftui") {
$ftui = 1;
} else {
$ftui = 0;
}
$link = AnalyzePerlCommand(undef, $link) if($link =~ m/^{(.*)}$/xs);
my $clink = ReadingsVal($name, "clientLink", "");
explodeLinkData ($hash, $clink, 0);
#my $link = "{$hash->{LINKFN}('$hash->{LINKPARENT}','$hash->{LINKNAME}','$hash->{LINKMODEL}')}";
#$link = "{$hash->{LINKFN}('$hash->{LINKPARENT}','$hash->{LINKNAME}','$hash->{LINKMODEL}','$ftui')}" if($ftui && $ftui eq "ftui"); # Aufruf aus TabletUI -> FW_cmd ersetzen gemäß FTUI Syntax
my $linkfn = $hash->{LINKFN};
my %pars = ( linkparent => $hash->{LINKPARENT},
linkname => $hash->{LINKNAME},
linkmodel => $hash->{LINKMODEL},
ftui => $ftui
);
no strict "refs"; ## no critic 'NoStrict'
my $html = &{$linkfn}(\%pars);
use strict "refs";
my $ret = "<html>";
if(IsDisabled($name)) {
@ -553,11 +595,12 @@ sub streamAsHtml {
}
} else {
$ret .= $link;
$ret .= $html;
}
$ret .= "</html>";
undef $link;
undef $html;
return $ret;
}
@ -592,7 +635,7 @@ return;
# (es wird Alias (wenn gesetzt) oder Devicename verwendet,
# Leerzeichen werden durch "#" ersetzt)
################################################################
sub streamDevs {
sub allStreamDevs {
my $sd = "";
undef %sdevs;
@ -623,7 +666,7 @@ sub sDevsWidget {
my $Adopts;
my $ret = "";
my $cmdAdopt = "adoptFrom";
my $valAdopts = streamDevs();
my $valAdopts = allStreamDevs();
for my $fn (sort keys %{$data{webCmdFn}}) {
next if($data{webCmdFn}{$fn} ne "FW_widgetFallbackFn");