mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
49_SSCam: contrib 9.4.3
git-svn-id: https://svn.fhem.de/fhem/trunk@22391 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
a511b09e31
commit
4e9b9c9b2c
@ -1,5 +1,5 @@
|
||||
########################################################################################################################
|
||||
# $Id: 49_SSCam.pm 22363 2020-07-06 21:38:30Z DS_Starter $
|
||||
# $Id: 49_SSCam.pm 22382 2020-07-10 20:25:50Z DS_Starter $
|
||||
#########################################################################################################################
|
||||
# 49_SSCam.pm
|
||||
#
|
||||
@ -156,7 +156,8 @@ BEGIN {
|
||||
|
||||
# Versions History intern
|
||||
my %vNotesIntern = (
|
||||
"9.4.2" => "10.07.2020 more changes according PBP level 3, headline PTZ Control ",
|
||||
"9.4.3" => "12.07.2020 streamDev refactored ",
|
||||
"9.4.2" => "11.07.2020 more changes according PBP level 3, headline PTZ Control, revised comref ",
|
||||
"9.4.1" => "05.07.2020 new Zoom icons ",
|
||||
"9.4.0" => "01.07.2020 switch to packages, much more changes according PBP ",
|
||||
"9.3.0" => "21.06.2020 SVS device 'inctive' if disabled, add zoom capability, much more internal code changes ",
|
||||
@ -473,6 +474,14 @@ my %zd = ( # Ha
|
||||
"--." => {dir => "out", sttime => 6, moveType => "Start", panimg => "Zoom_out_wide_w.png", }
|
||||
);
|
||||
|
||||
my %sdfn = ( # Funktionshash Streamingdevices
|
||||
"mjpeg" => {fn => "_streamDevMJPEG" },
|
||||
"lastsnap" => {fn => "_streamDevLASTSNAP" },
|
||||
"generic" => {fn => "_streamDevGENERIC" },
|
||||
"hls" => {fn => "_streamDevHLS" },
|
||||
"switched" => {fn => "_streamDevSWITCHED" },
|
||||
);
|
||||
|
||||
# Standardvariablen und Forward-Deklaration
|
||||
my $defSlim = 3; # default Anzahl der abzurufenden Schnappschüsse mit snapGallery
|
||||
my $defSnum = "1,2,3,4,5,6,7,8,9,10"; # mögliche Anzahl der abzurufenden Schnappschüsse mit snapGallery
|
||||
@ -485,8 +494,6 @@ my $valZoom = ".++,+,stop,-,--."; # Inhalt des Setters "
|
||||
#use vars qw($FW_detail); # currently selected device for detail view
|
||||
#use vars qw($FW_wname); # Web instance
|
||||
# sub FW_pH(@); # add href
|
||||
# use vars qw(%vHintsExt_en);
|
||||
# use vars qw(%vHintsExt_de);
|
||||
|
||||
#sub SSChatBot_formString;
|
||||
#sub SSChatBot_addQueue($$$$$$$$);
|
||||
@ -1201,8 +1208,8 @@ sub Set {
|
||||
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/x) {
|
||||
$spec =~ m/STRM:(.*)/ix; # Aufnahme durch SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
my ($inf) = $spec =~ m/STRM:(.*)/ix; # Aufnahme durch SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $inf;
|
||||
}
|
||||
|
||||
my $emtxt = AttrVal($name, "recEmailTxt", "");
|
||||
@ -7790,13 +7797,11 @@ sub ptzPanel {
|
||||
}
|
||||
$ptz_ret .= "</tr>\n";
|
||||
}
|
||||
# $ptz_ret .= "</table>";
|
||||
|
||||
### Zoom
|
||||
###############################
|
||||
if(IsCapZoom($hash)) { # wenn Zoom Eigenschaft
|
||||
|
||||
# $ptz_ret .= '<table class="rc_body defsize">';
|
||||
$ptz_ret .= "<tr>";
|
||||
$ptz_ret .= "<td style='text-align:center' colspan=10><hr /></td>";
|
||||
$ptz_ret .= "</tr>";
|
||||
@ -7818,12 +7823,17 @@ sub ptzPanel {
|
||||
$img = FW_makeImage($img, $cmd, "rc-button");
|
||||
|
||||
} else { # $FW_ME = URL-Pfad unter dem der FHEMWEB-Server via HTTP erreichbar ist, z.B. /fhem
|
||||
my $iPath = FW_iconPath($img);
|
||||
my $iPath = FW_iconPath($img); # automatisches Suchen der Icons im FHEMWEB iconPath
|
||||
if($iPath) {
|
||||
$iPath = "$FW_ME/$FW_icondir/$iPath";
|
||||
} else {
|
||||
$iPath = "$FW_ME/$iconpath/$img";
|
||||
}
|
||||
|
||||
if($ftui) {
|
||||
$img = "<img src=\"$FW_ME/$FW_icondir/$iPath\" height=\"$pbsf%\" width=\"$pbsf%\">";
|
||||
$img = "<img src=\"$iPath\" height=\"$pbsf%\" width=\"$pbsf%\">";
|
||||
} else {
|
||||
$img = "<img src=\"$FW_ME/$FW_icondir/$iPath\" height=\"$pbs%\" width=\"$pbs%\">";
|
||||
$img = "<img src=\"$iPath\" height=\"$pbs%\" width=\"$pbs%\">";
|
||||
}
|
||||
}
|
||||
|
||||
@ -7836,7 +7846,6 @@ sub ptzPanel {
|
||||
}
|
||||
|
||||
$ptz_ret .= "</tr>";
|
||||
# $ptz_ret .= "</table>";
|
||||
}
|
||||
|
||||
$ptz_ret .= "</table>";
|
||||
@ -7982,13 +7991,12 @@ return;
|
||||
#
|
||||
# $camname = Name der Kamaera (Parent-Device)
|
||||
# $strmdev = Name des Streaming-Devices
|
||||
# $fmt = Streaming Format
|
||||
# $fmt = Streaming Format (Vergleich auf "eq" !)
|
||||
#
|
||||
######################################################################################
|
||||
sub streamDev {
|
||||
my ($camname,$strmdev,$fmt,$ftui) = @_;
|
||||
my $hash = $defs{$camname};
|
||||
my $wltype = $hash->{HELPER}{WLTYPE};
|
||||
my $serveraddr = $hash->{SERVERADDR};
|
||||
my $serverport = $hash->{SERVERPORT};
|
||||
my $apivideostm = $hash->{HELPER}{APIVIDEOSTM};
|
||||
@ -8005,17 +8013,18 @@ sub streamDev {
|
||||
my $proto = $hash->{PROTOCOL};
|
||||
$ftui = ($ftui && $ftui eq "ftui") ? 1 : 0;
|
||||
my $hdrAlign = "center";
|
||||
my ($show,$cause,$ret,$link,$audiolink,$devWlink,$wlhash,$wlalias);
|
||||
|
||||
# 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)
|
||||
# $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)
|
||||
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
|
||||
my $uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices
|
||||
delete $streamHash->{HELPER}{STREAM};
|
||||
delete $streamHash->{HELPER}{STREAMACTIVE}; # Statusbit ob ein Stream aktiviert ist
|
||||
|
||||
my ($show,$cause,$ret);
|
||||
|
||||
# Definition Tasten
|
||||
my $imgblank = "<img src=\"$FW_ME/www/images/sscam/black_btn_CAMBLANK.png\">"; # nicht sichtbare Leertaste
|
||||
my $cmdstop = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname stopView STRM:$uuid')"; # Stream deaktivieren
|
||||
@ -8059,32 +8068,12 @@ sub streamDev {
|
||||
$cmdrefresh = "ftui.setFhemStatus('set $camname refresh STRM:$uuid')";
|
||||
}
|
||||
|
||||
my $ha = AttrVal($camname, "htmlattr", 'width="500" height="325"'); # HTML Attribute der Cam
|
||||
$ha = AttrVal($strmdev, "htmlattr", $ha); # htmlattr mit htmlattr Streaming-Device übersteuern
|
||||
if($ftui) {
|
||||
$ha = AttrVal($strmdev, "htmlattrFTUI", $ha); # wenn aus FTUI aufgerufen divers setzen
|
||||
}
|
||||
|
||||
my $hb = AttrVal($strmdev, "hideButtons", 0); # Drucktasten im Footer ausblenden ?
|
||||
my $hau = AttrVal($strmdev, "hideAudio", 0); # Audio Steuerblock im Footer ausblenden ?
|
||||
|
||||
my $pws = AttrVal($strmdev, "popupWindowSize", ""); # Größe eines Popups
|
||||
$pws =~ s/"//gx if($pws);
|
||||
|
||||
$show = $defs{$streamHash->{PARENT}}->{HELPER}{ACTSTRM} if($streamHash->{MODEL} =~ /switched/x);
|
||||
$show = $show ? "($show)" : "";
|
||||
|
||||
my $alias = AttrVal($strmdev, "alias", $strmdev); # Linktext als Aliasname oder Devicename setzen
|
||||
my $dlink = "<a href=\"/fhem?detail=$strmdev\">$alias</a>";
|
||||
$dlink = $alias if(AttrVal($strmdev, "noLink", 0)); # keine Links im Stream-Dev generieren
|
||||
|
||||
my $StmKey = ReadingsVal($camname,"StmKey",undef);
|
||||
|
||||
# Javascript Bibliothek für Tooltips (http://www.walterzorn.de/tooltip/tooltip.htm#download) und Texte
|
||||
my $calias = $hash->{CAMNAME}; # Alias der Kamera
|
||||
my $ttjs = "/fhem/pgm2/sscam_tooltip.js";
|
||||
my ($ttrefresh, $ttrecstart, $ttrecstop, $ttsnap, $ttcmdstop, $tthlsreact, $ttmjpegrun, $tthlsrun, $ttlrrun, $tth264run, $ttlmjpegrun, $ttlsnaprun);
|
||||
|
||||
# Hinweis Popups
|
||||
if(AttrVal("global","language","EN") =~ /EN/x) {
|
||||
$ttrefresh = $ttips_en{"ttrefresh"}; $ttrefresh =~ s/§NAME§/$calias/gx;
|
||||
$ttrecstart = $ttips_en{"ttrecstart"}; $ttrecstart =~ s/§NAME§/$calias/gx;
|
||||
@ -8113,6 +8102,85 @@ sub streamDev {
|
||||
$ttlsnaprun = $ttips_de{"ttlsnaprun"}; $ttlsnaprun =~ s/§NAME§/$calias/gx;
|
||||
}
|
||||
|
||||
my $ha = AttrVal($camname, "htmlattr", 'width="500" height="325"'); # HTML Attribute der Cam
|
||||
$ha = AttrVal($strmdev, "htmlattr", $ha); # htmlattr mit htmlattr Streaming-Device übersteuern
|
||||
$ha = AttrVal($strmdev, "htmlattrFTUI", $ha) if($ftui); # wenn aus FTUI aufgerufen divers setzen
|
||||
my $hb = AttrVal($strmdev, "hideButtons", 0); # Drucktasten im Footer ausblenden ?
|
||||
my $hau = AttrVal($strmdev, "hideAudio", 0); # Audio Steuerblock im Footer ausblenden ?
|
||||
my $pws = AttrVal($strmdev, "popupWindowSize", ""); # Größe eines Popups
|
||||
$pws =~ s/"//gx if($pws);
|
||||
|
||||
$show = $defs{$streamHash->{PARENT}}->{HELPER}{ACTSTRM} if($streamHash->{MODEL} =~ /switched/x);
|
||||
$show = $show ? "($show)" : "";
|
||||
|
||||
my $alias = AttrVal($strmdev, "alias", $strmdev); # Linktext als Aliasname oder Devicename setzen
|
||||
my $dlink = "<a href=\"/fhem?detail=$strmdev\">$alias</a>";
|
||||
$dlink = $alias if(AttrVal($strmdev, "noLink", 0)); # keine Links im Stream-Dev generieren
|
||||
|
||||
my $StmKey = ReadingsVal($camname,"StmKey",undef);
|
||||
|
||||
my %params = (
|
||||
camname => $camname,
|
||||
strmdev => $strmdev,
|
||||
ftui => $ftui,
|
||||
uuid => $uuid,
|
||||
ha => $ha,
|
||||
hb => $hb,
|
||||
hau => $hau,
|
||||
pws => $pws,
|
||||
serveraddr => $serveraddr,
|
||||
serverport => $serverport,
|
||||
apivideostm => $apivideostm,
|
||||
apivideostmpath => $apivideostmpath,
|
||||
apivideostmmaxver => $apivideostmmaxver,
|
||||
apiaudiostm => $apiaudiostm,
|
||||
apiaudiostmpath => $apiaudiostmpath,
|
||||
apiaudiostmmaxver => $apiaudiostmmaxver,
|
||||
apivideostms => $apivideostms,
|
||||
apivideostmspath => $apivideostmspath,
|
||||
apivideostmsmaxver => $apivideostmsmaxver,
|
||||
camid => $camid,
|
||||
sid => $sid,
|
||||
proto => $proto,
|
||||
cmdstop => $cmdstop,
|
||||
cmdhlsreact => $cmdhlsreact,
|
||||
cmdmjpegrun => $cmdmjpegrun,
|
||||
cmdhlsrun => $cmdhlsrun,
|
||||
cmdlrirun => $cmdlrirun,
|
||||
cmdlh264run => $cmdlh264run,
|
||||
cmdlmjpegrun => $cmdlmjpegrun,
|
||||
cmdlsnaprun => $cmdlsnaprun,
|
||||
cmdrecendless => $cmdrecendless,
|
||||
cmdrecstop => $cmdrecstop,
|
||||
cmddosnap => $cmddosnap,
|
||||
cmdrefresh => $cmdrefresh,
|
||||
imgblank => $imgblank,
|
||||
imgstop => $imgstop,
|
||||
imghlsreact => $imghlsreact,
|
||||
imgmjpegrun => $imgmjpegrun,
|
||||
imghlsrun => $imghlsrun,
|
||||
imglrirun => $imglrirun,
|
||||
imglh264run => $imglh264run,
|
||||
imglmjpegrun => $imglmjpegrun,
|
||||
imglsnaprun => $imglsnaprun,
|
||||
imgrecendless => $imgrecendless,
|
||||
imgrecstop => $imgrecstop,
|
||||
imgdosnap => $imgdosnap,
|
||||
imgrefresh => $imgrefresh,
|
||||
ttrefresh => $ttrefresh,
|
||||
ttrecstart => $ttrecstart,
|
||||
ttrecstop => $ttrecstop,
|
||||
ttsnap => $ttsnap,
|
||||
ttcmdstop => $ttcmdstop,
|
||||
tthlsreact => $tthlsreact,
|
||||
ttmjpegrun => $ttmjpegrun,
|
||||
tthlsrun => $tthlsrun,
|
||||
ttlrrun => $ttlrrun,
|
||||
tth264run => $tth264run,
|
||||
ttlmjpegrun => $ttlmjpegrun,
|
||||
ttlsnaprun => $ttlsnaprun,
|
||||
);
|
||||
|
||||
$ret = "";
|
||||
$ret .= "<script type=\"text/javascript\" src=\"$ttjs\"></script>";
|
||||
$ret .= '<table class="block wide internals" style="margin-left:auto;margin-right:auto">';
|
||||
@ -8137,9 +8205,67 @@ sub streamDev {
|
||||
return $ret;
|
||||
}
|
||||
|
||||
if ($fmt =~ /mjpeg/x) {
|
||||
# Streaming ausführen
|
||||
no strict "refs"; ## no critic 'NoStrict'
|
||||
if(defined &{$sdfn{$fmt}{fn}}) {
|
||||
$ret .= &{$sdfn{$fmt}{fn}} (\%params);
|
||||
} else {
|
||||
$cause = qq{Streaming of format "$fmt" is not supported};
|
||||
$ret .= "<td> <br> <b> $cause </b> <br><br></td>";
|
||||
}
|
||||
use strict "refs";
|
||||
|
||||
$ret .= '</tr>';
|
||||
$ret .= '</tbody>';
|
||||
$ret .= '</table>';
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
######################################################################################
|
||||
# Streaming Device Typ: mjpeg
|
||||
sub _streamDevMJPEG {
|
||||
my $params = shift;
|
||||
|
||||
my $camname = $params->{camname};
|
||||
my $strmdev = $params->{strmdev};
|
||||
|
||||
my $hash = $defs{$camname};
|
||||
my $streamHash = $defs{$strmdev};
|
||||
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};
|
||||
my $hau = $params->{hau};
|
||||
|
||||
my $serveraddr = $params->{serveraddr};
|
||||
my $serverport = $params->{serverport};
|
||||
my $apivideostms = $params->{apivideostms};
|
||||
my $apivideostmspath = $params->{apivideostmspath};
|
||||
my $apivideostmsmaxver = $params->{apivideostmsmaxver};
|
||||
my $apiaudiostm = $params->{apiaudiostm};
|
||||
my $apiaudiostmpath = $params->{apiaudiostmpath};
|
||||
my $apiaudiostmmaxver = $params->{apiaudiostmmaxver};
|
||||
|
||||
my $cmdrecendless = $params->{cmdrecendless};
|
||||
my $ttrecstart = $params->{ttrecstart};
|
||||
my $imgrecendless = $params->{imgrecendless};
|
||||
my $cmdrecstop = $params->{cmdrecstop};
|
||||
my $ttrecstop = $params->{ttrecstop};
|
||||
my $imgrecstop = $params->{imgrecstop};
|
||||
my $cmddosnap = $params->{cmddosnap};
|
||||
my $ttsnap = $params->{ttsnap};
|
||||
my $imgdosnap = $params->{imgdosnap};
|
||||
|
||||
my ($link,$audiolink);
|
||||
my $ret = "";
|
||||
|
||||
if(ReadingsVal($camname, "SVSversion", "8.2.3-5828") eq "8.2.3-5828" && ReadingsVal($camname, "CamVideoType", "") !~ /MJPEG/) {
|
||||
$ret .= "<td> <br> <b> Because SVS version 8.2.3-5828 is running you cannot see the MJPEG-Stream. Please upgrade to a higher SVS version ! </b> <br><br>";
|
||||
|
||||
} else {
|
||||
if($apivideostmsmaxver) {
|
||||
$link = "$proto://$serveraddr:$serverport/webapi/$apivideostmspath?api=$apivideostms&version=$apivideostmsmaxver&method=Stream&cameraId=$camid&format=mjpeg&_sid=$sid";
|
||||
@ -8184,10 +8310,36 @@ sub streamDev {
|
||||
$ret .= "<td></td>" if(AttrVal($camname,"ptzPanel_use",0));
|
||||
}
|
||||
|
||||
} elsif ($fmt =~ /lastsnap/x) {
|
||||
# $link = $hash->{HELPER}{".LASTSNAP"};
|
||||
Log3($strmdev, 4, "$strmdev - Link called: $link") if($link);
|
||||
undef $link;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
######################################################################################
|
||||
# Streaming Device Typ: lastsnap
|
||||
sub _streamDevLASTSNAP {
|
||||
my $params = shift;
|
||||
|
||||
my $camname = $params->{camname};
|
||||
my $strmdev = $params->{strmdev};
|
||||
|
||||
my $hash = $defs{$camname};
|
||||
my $streamHash = $defs{$strmdev};
|
||||
my $ftui = $params->{ftui};
|
||||
my $pws = $params->{pws};
|
||||
my $ha = $params->{ha};
|
||||
my $hb = $params->{hb};
|
||||
|
||||
my $cmddosnap = $params->{cmddosnap};
|
||||
my $ttsnap = $params->{ttsnap};
|
||||
my $imgdosnap = $params->{imgdosnap};
|
||||
|
||||
my ($link,$cause,$ret) = ("","","");
|
||||
|
||||
my $cache = cache($camname, "c_init"); # Cache initialisieren
|
||||
Log3($camname, 1, "$camname - Fall back to internal Cache due to preceding failure.") if(!$cache);
|
||||
|
||||
if(!$cache || $cache eq "internal" ) {
|
||||
$link = $data{SSCam}{$camname}{LASTSNAP};
|
||||
} else {
|
||||
@ -8195,25 +8347,67 @@ sub streamDev {
|
||||
}
|
||||
|
||||
my $gattr = (AttrVal($camname,"snapGallerySize","Icon") eq "Full") ? $ha : "";
|
||||
|
||||
if($link) {
|
||||
if(!$ftui) {
|
||||
$ret .= "<td><img src='data:image/jpeg;base64,$link' $gattr onClick=\"FW_okDialog('<img src=data:image/jpeg;base64,$link $pws>')\"><br>";
|
||||
} else {
|
||||
$ret .= "<td><img src='data:image/jpeg;base64,$link' $gattr><br>";
|
||||
}
|
||||
|
||||
if(!$hb) {
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
}
|
||||
|
||||
$ret .= "</td>";
|
||||
|
||||
$streamHash->{HELPER}{STREAM} = "<img src=data:image/jpeg;base64,$link $pws>"; # Stream für "get <SSCamSTRM-Device> popupStream" speichern
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
|
||||
} else {
|
||||
$cause = "no snapshot available to display";
|
||||
$cause = "kein Schnappschuss zur Anzeige vorhanden" if(AttrVal("global","language","EN") =~ /DE/ix);
|
||||
$ret .= "<td> <br> <b> $cause </b> <br><br></td>";
|
||||
}
|
||||
|
||||
} elsif ($fmt =~ /generic/x) {
|
||||
Log3($strmdev, 4, "$strmdev - Link called: $link") if($link);
|
||||
undef $link;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
######################################################################################
|
||||
# Streaming Device Typ: generic
|
||||
sub _streamDevGENERIC {
|
||||
my $params = shift;
|
||||
|
||||
my $camname = $params->{camname};
|
||||
my $strmdev = $params->{strmdev};
|
||||
|
||||
my $hash = $defs{$camname};
|
||||
my $streamHash = $defs{$strmdev};
|
||||
my $ftui = $params->{ftui};
|
||||
my $pws = $params->{pws};
|
||||
my $ha = $params->{ha};
|
||||
my $hb = $params->{hb};
|
||||
|
||||
my $cmdrefresh = $params->{cmdrefresh};
|
||||
my $cmdrecendless = $params->{cmdrecendless};
|
||||
my $cmdrecstop = $params->{cmdrecstop};
|
||||
my $cmddosnap = $params->{cmddosnap};
|
||||
|
||||
my $imgrecendless = $params->{imgrecendless};
|
||||
my $imgrecstop = $params->{imgrecstop};
|
||||
my $imgdosnap = $params->{imgdosnap};
|
||||
my $imgrefresh = $params->{imgrefresh};
|
||||
my $imgblank = $params->{imgblank};
|
||||
|
||||
my $ttrefresh = $params->{ttrefresh};
|
||||
my $ttsnap = $params->{ttsnap};
|
||||
my $ttrecstop = $params->{ttrecstop};
|
||||
my $ttrecstart = $params->{ttrecstart};
|
||||
|
||||
my $ret = "";
|
||||
my $htag = AttrVal( $strmdev, "genericStrmHtmlTag", AttrVal($camname, "genericStrmHtmlTag", "") );
|
||||
|
||||
if($htag =~ m/^\s*(.*)\s*$/s) {
|
||||
@ -8231,8 +8425,10 @@ sub streamDev {
|
||||
$ret .= '</div>';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
$ret .= "<td>";
|
||||
$ret .= "$htag";
|
||||
|
||||
if($htag) {
|
||||
# Popup-Tag um den Popup-Teil bereinigen
|
||||
my $ptag = $htag;
|
||||
@ -8243,21 +8439,25 @@ sub streamDev {
|
||||
$streamHash->{HELPER}{STREAM} =~ s/\s+/ /gx;
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1; # Statusbit wenn ein Stream aktiviert ist
|
||||
}
|
||||
|
||||
$ret .= "<br>";
|
||||
|
||||
Log3($strmdev, 4, "$strmdev - generic Stream params:\n$htag");
|
||||
|
||||
if(!$hb) {
|
||||
$ret .= "<a onClick=\"$cmdrefresh\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= $imgblank;
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") { # Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
} else { # Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
}
|
||||
$ret .= "</td>";
|
||||
|
||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
@ -8265,7 +8465,42 @@ sub streamDev {
|
||||
}
|
||||
}
|
||||
|
||||
} elsif ($fmt =~ /hls/x) {
|
||||
return $ret;
|
||||
}
|
||||
|
||||
######################################################################################
|
||||
# Streaming Device Typ: hls
|
||||
sub _streamDevHLS {
|
||||
my $params = shift;
|
||||
|
||||
my $camname = $params->{camname};
|
||||
my $strmdev = $params->{strmdev};
|
||||
|
||||
my $hash = $defs{$camname};
|
||||
my $streamHash = $defs{$strmdev};
|
||||
my $ftui = $params->{ftui};
|
||||
my $pws = $params->{pws};
|
||||
my $ha = $params->{ha};
|
||||
my $hb = $params->{hb};
|
||||
|
||||
my $cmdrefresh = $params->{cmdrefresh};
|
||||
my $cmdrecendless = $params->{cmdrecendless};
|
||||
my $cmdrecstop = $params->{cmdrecstop};
|
||||
my $cmddosnap = $params->{cmddosnap};
|
||||
|
||||
my $imgrecendless = $params->{imgrecendless};
|
||||
my $imgrecstop = $params->{imgrecstop};
|
||||
my $imgdosnap = $params->{imgdosnap};
|
||||
my $imgrefresh = $params->{imgrefresh};
|
||||
my $imgblank = $params->{imgblank};
|
||||
|
||||
my $ttrefresh = $params->{ttrefresh};
|
||||
my $ttsnap = $params->{ttsnap};
|
||||
my $ttrecstop = $params->{ttrecstop};
|
||||
my $ttrecstart = $params->{ttrecstart};
|
||||
|
||||
my ($cause,$ret) = ("","");
|
||||
|
||||
# es ist ein .m3u8-File bzw. ein Link dorthin zu übergeben
|
||||
my $cam = AttrVal($camname, "alias", $camname);
|
||||
my $m3u8 = AttrVal($camname, "hlsStrmObject", "");
|
||||
@ -8274,6 +8509,7 @@ sub streamDev {
|
||||
$m3u8 = $1;
|
||||
$m3u8 =~ s/\$NAME/$camname/gx;
|
||||
}
|
||||
|
||||
my $d = $camname;
|
||||
$d =~ s/\./_/x; # Namensableitung zur javascript Codeanpassung
|
||||
|
||||
@ -8292,19 +8528,22 @@ sub streamDev {
|
||||
|
||||
$streamHash->{HELPER}{STREAM} = "<video $pws id=video_$d></video>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1; # Statusbit wenn ein Stream aktiviert ist
|
||||
|
||||
if(!$hb) {
|
||||
$ret .= "<a onClick=\"$cmdrefresh\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= $imgblank;
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") { # Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
} else { # Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
}
|
||||
|
||||
$ret .= "</td>";
|
||||
|
||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
@ -8312,7 +8551,67 @@ sub streamDev {
|
||||
}
|
||||
}
|
||||
|
||||
} elsif ($fmt =~ /switched/x) {
|
||||
return $ret;
|
||||
}
|
||||
|
||||
######################################################################################
|
||||
# Streaming Device Typ: switched
|
||||
sub _streamDevSWITCHED {
|
||||
my $params = shift;
|
||||
|
||||
my $camname = $params->{camname};
|
||||
my $strmdev = $params->{strmdev};
|
||||
|
||||
my $hash = $defs{$camname};
|
||||
my $streamHash = $defs{$strmdev};
|
||||
my $ftui = $params->{ftui};
|
||||
my $pws = $params->{pws};
|
||||
my $ha = $params->{ha};
|
||||
my $hb = $params->{hb};
|
||||
my $hau = $params->{hau};
|
||||
|
||||
my $cmdrefresh = $params->{cmdrefresh};
|
||||
my $cmdrecendless = $params->{cmdrecendless};
|
||||
my $cmdrecstop = $params->{cmdrecstop};
|
||||
my $cmddosnap = $params->{cmddosnap};
|
||||
my $cmdstop = $params->{cmdstop};
|
||||
my $cmdmjpegrun = $params->{cmdmjpegrun};
|
||||
my $cmdhlsrun = $params->{cmdhlsrun};
|
||||
my $cmdlrirun = $params->{cmdlrirun};
|
||||
my $cmdlh264run = $params->{cmdlh264run};
|
||||
my $cmdlsnaprun = $params->{cmdlsnaprun};
|
||||
my $cmdhlsreact = $params->{cmdhlsreact};
|
||||
my $cmdlmjpegrun = $params->{cmdlmjpegrun};
|
||||
|
||||
my $imgrecendless = $params->{imgrecendless};
|
||||
my $imgrecstop = $params->{imgrecstop};
|
||||
my $imgdosnap = $params->{imgdosnap};
|
||||
my $imgrefresh = $params->{imgrefresh};
|
||||
my $imgblank = $params->{imgblank};
|
||||
my $imgstop = $params->{imgstop};
|
||||
my $imghlsreact = $params->{imghlsreact};
|
||||
my $imgmjpegrun = $params->{imgmjpegrun};
|
||||
my $imghlsrun = $params->{imghlsrun};
|
||||
my $imglh264run = $params->{imglh264run};
|
||||
my $imglmjpegrun = $params->{imglmjpegrun};
|
||||
my $imglsnaprun = $params->{imglsnaprun};
|
||||
|
||||
my $ttrefresh = $params->{ttrefresh};
|
||||
my $ttsnap = $params->{ttsnap};
|
||||
my $ttrecstop = $params->{ttrecstop};
|
||||
my $ttrecstart = $params->{ttrecstart};
|
||||
my $ttcmdstop = $params->{ttcmdstop};
|
||||
my $tthlsreact = $params->{tthlsreact};
|
||||
my $ttmjpegrun = $params->{ttmjpegrun};
|
||||
my $tthlsrun = $params->{tthlsrun};
|
||||
my $ttlrrun = $params->{ttlrrun};
|
||||
my $imglrirun = $params->{imglrirun};
|
||||
my $tth264run = $params->{tth264run};
|
||||
my $ttlmjpegrun = $params->{ttlmjpegrun};
|
||||
my $ttlsnaprun = $params->{ttlsnaprun};
|
||||
|
||||
my ($link,$cause,$ret) = ("","","");
|
||||
|
||||
my $wltype = $hash->{HELPER}{WLTYPE};
|
||||
$link = $hash->{HELPER}{LINK};
|
||||
|
||||
@ -8326,28 +8625,33 @@ sub streamDev {
|
||||
} else {
|
||||
$ret .= "<td><img src=$link $ha><br>" if($link);
|
||||
}
|
||||
|
||||
$streamHash->{HELPER}{STREAM} = "<img src=$link $pws>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
}
|
||||
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= $imgblank;
|
||||
|
||||
if($hash->{HELPER}{RUNVIEW} =~ /live_fw/x) {
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") { # Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
} else { # Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
}
|
||||
|
||||
$ret .= "</td>";
|
||||
|
||||
if(AttrVal($camname,"ptzPanel_use",1) && $hash->{HELPER}{RUNVIEW} =~ /live_fw/x) {
|
||||
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
$ret .= "<td>$ptz_ret</td>";
|
||||
}
|
||||
}
|
||||
|
||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/ && !$hau) {
|
||||
$ret .= "</tr>";
|
||||
$ret .= '<tr class="odd">';
|
||||
@ -8360,21 +8664,23 @@ sub streamDev {
|
||||
|
||||
} elsif ($wltype =~ /iframe/x) {
|
||||
if(!$ftui) {
|
||||
$ret .= "<td><iframe src=$link $ha controls autoplay onClick=\"FW_okDialog('<img src=$link $pws>')\">
|
||||
Iframes disabled
|
||||
</iframe><br>" if($link);
|
||||
$ret .= "<td><iframe src=$link $ha controls autoplay onClick=\"FW_okDialog('<img src=$link $pws>')\">".
|
||||
"Iframes disabled".
|
||||
"</iframe><br>" if($link);
|
||||
} else {
|
||||
$ret .= "<td><iframe src=$link $ha controls autoplay>
|
||||
Iframes disabled
|
||||
</iframe><br>" if($link);
|
||||
$ret .= "<td><iframe src=$link $ha controls autoplay>".
|
||||
"Iframes disabled".
|
||||
"</iframe><br>" if($link);
|
||||
}
|
||||
$streamHash->{HELPER}{STREAM} = "<iframe src=$link $pws controls autoplay>".
|
||||
"Iframes disabled".
|
||||
"</iframe>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdrefresh\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= "</td>";
|
||||
|
||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/ && !$hau) {
|
||||
$ret .= '</tr>';
|
||||
$ret .= '<tr class="odd">';
|
||||
@ -8392,15 +8698,19 @@ sub streamDev {
|
||||
<source src=$link type=\"video/webm\">
|
||||
Your browser does not support the video tag
|
||||
</video><br>";
|
||||
|
||||
$streamHash->{HELPER}{STREAM} = "<video $pws controls autoplay>".
|
||||
"<source src=$link type=\"video/mp4\">".
|
||||
"<source src=$link type=\"video/ogg\">".
|
||||
"<source src=$link type=\"video/webm\">".
|
||||
"Your browser does not support the video tag".
|
||||
"</video>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "</td>";
|
||||
|
||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/ && !$hau) {
|
||||
$ret .= '</tr>';
|
||||
$ret .= '<tr class="odd">';
|
||||
@ -8410,6 +8720,7 @@ sub streamDev {
|
||||
$ret .= "</td>";
|
||||
$ret .= "<td></td>" if(AttrVal($camname,"ptzPanel_use",0));
|
||||
}
|
||||
|
||||
} elsif($wltype =~ /base64img/x) {
|
||||
if(!$ftui) {
|
||||
$ret .= "<td><img src='data:image/jpeg;base64,$link' $ha onClick=\"FW_okDialog('<img src=data:image/jpeg;base64,$link $pws>')\"><br>" if($link);
|
||||
@ -8418,6 +8729,7 @@ sub streamDev {
|
||||
}
|
||||
$streamHash->{HELPER}{STREAM} = "<img src=data:image/jpeg;base64,$link $pws>"; # Stream für "get <SSCamSTRM-Device> popupStream" speichern
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= $imgblank;
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
@ -8438,32 +8750,35 @@ sub streamDev {
|
||||
<source src=$link type=\"video/MP2T\">
|
||||
Your browser does not support the video tag
|
||||
</video><br>";
|
||||
|
||||
$streamHash->{HELPER}{STREAM} = "<video $pws controls autoplay>".
|
||||
"<source src=$link type=\"application/x-mpegURL\">".
|
||||
"<source src=$link type=\"video/MP2T\">".
|
||||
"Your browser does not support the video tag".
|
||||
"</video>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdrefresh\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= "<a onClick=\"$cmdhlsreact\" onmouseover=\"Tip('$tthlsreact')\" onmouseout=\"UnTip()\">$imghlsreact </a>";
|
||||
$ret .= $imgblank;
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") { # Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
} else { # Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "</td>";
|
||||
|
||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||
my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
$ret .= "<td>$ptz_ret</td>";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
@ -8478,16 +8793,8 @@ sub streamDev {
|
||||
$ret .= "<a onClick=\"$cmdlsnaprun\" onmouseover=\"Tip('$ttlsnaprun')\" onmouseout=\"UnTip()\">$imglsnaprun </a>";
|
||||
$ret .= "</td>";
|
||||
}
|
||||
} else {
|
||||
$cause = "Videoformat not supported";
|
||||
$ret .= "<td> <br> <b> $cause </b> <br><br></td>";
|
||||
}
|
||||
|
||||
$ret .= '</tr>';
|
||||
$ret .= '</tbody>';
|
||||
$ret .= '</table>';
|
||||
Log3($strmdev, 4, "$strmdev - Link called: $link") if($link);
|
||||
|
||||
undef $link;
|
||||
|
||||
return $ret;
|
||||
@ -10881,12 +11188,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 22363 2020-07-06 21:38:30Z DS_Starter $ im Kopf komplett! vorhanden )
|
||||
if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 49_SSCam.pm 22382 2020-07-10 20:25:50Z DS_Starter $ im Kopf komplett! vorhanden )
|
||||
$modules{$type}{META}{x_version} =~ s/1.1.1/$v/g;
|
||||
} else {
|
||||
$modules{$type}{META}{x_version} = $v;
|
||||
}
|
||||
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCam.pm 22363 2020-07-06 21:38:30Z DS_Starter $ im Kopf komplett! vorhanden )
|
||||
return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCam.pm 22382 2020-07-10 20:25:50Z DS_Starter $ im Kopf komplett! vorhanden )
|
||||
if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
|
||||
# es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
|
||||
# mit {<Modul>->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
|
||||
@ -10948,6 +11255,7 @@ return;
|
||||
<li>automatized definition of all in SVS available cameras in FHEM (autocreateCams) </li>
|
||||
<li>save the last recording of camera locally </li>
|
||||
<li>Selection of several cache types for image data storage (attribute cacheType) </li>
|
||||
<li>execute Zoom actions (only if PTZ camera supports Zoom) </li>
|
||||
</ul>
|
||||
</ul>
|
||||
<br>
|
||||
@ -10998,9 +11306,13 @@ return;
|
||||
|
||||
<br>
|
||||
|
||||
The PTZ panel (only PTZ cameras) in SSCam use its own icons.
|
||||
Thereby the system find the icons, in FHEMWEB device the attribute "iconPath" has to be completed by "sscam"
|
||||
(e.g. "attr WEB iconPath default:fhemSVG:openautomation:sscam").
|
||||
SSCam uses its own icons.
|
||||
In order for the system to find the icons, the attribute <b>iconPath</b> must be supplemented with <b>sscam</b> in the FHEMWEB device. <br><br>
|
||||
|
||||
<ul>
|
||||
<b>Example</b> <br>
|
||||
attr WEB iconPath default:fhemSVG:openautomation:sscam
|
||||
</ul>
|
||||
<br><br>
|
||||
</ul>
|
||||
|
||||
@ -12874,6 +13186,7 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
<li>Automatisiertes Anlegen aller in der SVS vorhandenen Kameras in FHEM (autocreateCams) </li>
|
||||
<li>lokales Abspeichern der letzten Kamera-Aufnahme </li>
|
||||
<li>Auswahl unterschiedlicher Cache-Typen zur Bilddatenspeicherung (Attribut cacheType) </li>
|
||||
<li>ausführen von Zoom-Aktionen (bei PTZ-Kameras die Zoom unterstützen) </li>
|
||||
</ul>
|
||||
</ul>
|
||||
<br>
|
||||
@ -12924,16 +13237,20 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
<tr><td>Meta </td><td>(FHEM-Modul) </td></tr>
|
||||
<tr><td>Net::SMTP </td><td>(wenn Bilddaten-Versand verwendet) </td></tr>
|
||||
<tr><td>MIME::Lite </td><td>(wenn Bilddaten-Versand verwendet) </td></tr>
|
||||
<tr><td>CHI </td><td>(wenn Cache verwendet) </td></tr>
|
||||
<tr><td>CHI::Driver::Redis </td><td>(wenn Cache verwendet) </td></tr>
|
||||
<tr><td>Cache::Cache </td><td>(wenn Cache verwendet) </td></tr>
|
||||
<tr><td>CHI </td><td>(wenn Cache verwendet wird) </td></tr>
|
||||
<tr><td>CHI::Driver::Redis </td><td>(wenn Cache verwendet wird) </td></tr>
|
||||
<tr><td>Cache::Cache </td><td>(wenn Cache verwendet wird) </td></tr>
|
||||
</table>
|
||||
|
||||
<br>
|
||||
|
||||
Das PTZ-Paneel (nur PTZ Kameras) in SSCam benutzt einen eigenen Satz Icons.
|
||||
Damit das System sie findet, ist im FHEMWEB Device das Attribut "iconPath" um "sscam" zu ergänzen
|
||||
(z.B. "attr WEB iconPath default:fhemSVG:openautomation:sscam").
|
||||
SSCam benutzt einen eigenen Satz Icons.
|
||||
Damit das System sie findet, ist im FHEMWEB Device das Attribut <b>iconPath</b> um <b>sscam</b> zu ergänzen. <br><br>
|
||||
|
||||
<ul>
|
||||
<b>Beispiel</b> <br>
|
||||
attr WEB iconPath default:fhemSVG:openautomation:sscam
|
||||
</ul>
|
||||
<br><br>
|
||||
</ul>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user