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:
parent
12f1bf7e73
commit
39bd161ec7
@ -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;
|
||||
|
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user