mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
49_SSCam: support of FTUI Widget with SSCamSTRM, new attributes in SSCamSTRM, some fixes
git-svn-id: https://svn.fhem.de/fhem/trunk@19837 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
7eda00c3c2
commit
e22753d0f3
@ -1,5 +1,7 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- feature: 49_SSCam: support of FTUI Widget with SSCamSTRM, new attributes
|
||||
in SSCamSTRM, some fixes
|
||||
- feature: 71_YAMAHA_NP: Added undocumented reverse-engineered
|
||||
sound functionality :-)
|
||||
(balance, enhancer, equalizer)
|
||||
|
@ -48,6 +48,11 @@ eval "use FHEM::Meta;1" or my $modMetaAbsent = 1;
|
||||
|
||||
# Versions History intern
|
||||
our %SSCam_vNotesIntern = (
|
||||
"8.16.0" => "14.07.2019 change detail link generation from SSCamSTRM to SSCam ",
|
||||
"8.15.2" => "14.07.2019 fix order of snaps in snapgallery when adding new snaps, fix english date formating in composegallery, ".
|
||||
"align center of FTUI table, set compatibility to 8.2.5 ",
|
||||
"8.15.1" => "11.07.2019 enhancement and bugfixes for refresh of SSCamSTRM devices (integrate FUUID) ",
|
||||
"8.15.0" => "09.07.2019 support of SSCamSTRM get function and FTUI widget ",
|
||||
"8.14.2" => "28.06.2019 increase get SID timeout to at least 60 s, set compatibility to SVS 8.2.4, improve disable/enable behavior ",
|
||||
"8.14.1" => "23.06.2019 Presets and Patrols containing spaces in its names are replaced by \"_\", deletion of Presets corrected ".
|
||||
"bugfix userattr when changing Prests ",
|
||||
@ -153,6 +158,7 @@ our %SSCam_vNotesIntern = (
|
||||
|
||||
# Versions History extern
|
||||
our %SSCam_vNotesExtern = (
|
||||
"8.15.0" => "09.07.2019 support of integrating Streaming-Devices in a SSCam FTUI widget ",
|
||||
"8.14.0" => "01.06.2019 In detailview are buttons provided to open the camera native setup screen or Synology Surveillance Station and the Synology Surveillance Station online help. ",
|
||||
"8.12.0" => "25.03.2019 Delay FHEM shutdown as long as sessions are not terminated, but not longer than global attribute \"maxShutdownDelay\". ",
|
||||
"8.11.0" => "25.02.2019 compatibility set to SVS version 8.2.3, Popup possible for streaming devices of type \"generic\", ".
|
||||
@ -266,7 +272,7 @@ our %SSCam_vNotesExtern = (
|
||||
);
|
||||
|
||||
# getestete SVS-Version
|
||||
my $compstat = "8.2.4";
|
||||
my $compstat = "8.2.5";
|
||||
|
||||
# Aufbau Errorcode-Hashes (siehe Surveillance Station Web API)
|
||||
my %SSCam_errauthlist = (
|
||||
@ -326,7 +332,7 @@ our %SSCam_ttips_en = (
|
||||
ttcmdstop => "Stopp playback of camera "§NAME§"",
|
||||
tthlsreact => "Reactivate HTTP Livestreaming Interface of camera "§NAME§".<br>The camera is enforced to restart HLS transmission.",
|
||||
ttmjpegrun => "Playback the MJPEG Livestream of camera "§NAME§".",
|
||||
tthlsrun => "Playback the native HTTP Livestream of camera "§NAME§".",
|
||||
tthlsrun => "Playback the native HTTP Livestream of camera "§NAME§". The browser must have native support for HLS streaming.",
|
||||
ttlrrun => "Playback of last recording of camera "§NAME§" in an iFrame.<br>Both MJPEG and H.264 recordings are rendered.",
|
||||
tth264run => "Playback of last H.264 recording of camera "§NAME§".<br>It only starts if the recording is type H.264",
|
||||
ttlmjpegrun => "Playback of last MJPEG recording of camera "§NAME§".<br>It only starts if the recording is type MJPEG",
|
||||
@ -344,7 +350,7 @@ our %SSCam_ttips_de = (
|
||||
ttcmdstop => "Stopp Wiedergabe von Kamera "§NAME§"",
|
||||
tthlsreact => "Reaktiviert das HTTP Livestreaming Interface von Kamera "§NAME§".<br>Die Kamera wird aufgefordert die HLS Übertragung zu restarten.",
|
||||
ttmjpegrun => "Wiedergabe des MJPEG Livestreams von Kamera "§NAME§"",
|
||||
tthlsrun => "Wiedergabe des HTTP Livestreams von Kamera "§NAME§".<br>Es wird die HLS Funktion der Synology Surveillance Station verwendet.",
|
||||
tthlsrun => "Wiedergabe des HTTP Livestreams von Kamera "§NAME§".<br>Es wird die HLS Funktion der Synology Surveillance Station verwendet. (der Browser muss HLS nativ unterstützen)",
|
||||
ttlrrun => "Wiedergabe der letzten Aufnahme von Kamera "§NAME§" in einem iFrame.<br>Es werden sowohl MJPEG als auch H.264 Aufnahmen wiedergegeben.",
|
||||
tth264run => "Wiedergabe der letzten H.264 Aufnahme von Kamera "§NAME§".<br>Die Wiedergabe startet nur wenn die Aufnahme vom Typ H.264 ist.",
|
||||
ttlmjpegrun => "Wiedergabe der letzten MJPEG Aufnahme von Kamera "§NAME§".<br>Die Wiedergabe startet nur wenn die Aufnahme vom Typ MJPEG ist.",
|
||||
@ -883,10 +889,15 @@ sub SSCam_Set($@) {
|
||||
$hash->{HELPER}{RECTIME_TEMP} = $prop;
|
||||
}
|
||||
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/) {
|
||||
$spec =~ m/.*STRM:(.*).*/i; # Aufnahme durch SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
}
|
||||
|
||||
my $emtxt = AttrVal($name, "recEmailTxt", "");
|
||||
my $at = join(" ",@a);
|
||||
if($at =~ /recEmailTxt:/) {
|
||||
$at =~ m/.*recEmailTxt:"(.*)".*/i;
|
||||
if($spec =~ /recEmailTxt:/) {
|
||||
$spec =~ m/.*recEmailTxt:"(.*)".*/i;
|
||||
$emtxt = $1;
|
||||
}
|
||||
|
||||
@ -898,9 +909,8 @@ sub SSCam_Set($@) {
|
||||
}
|
||||
|
||||
my $teletxt = AttrVal($name, "recTelegramTxt", "");
|
||||
my $bt = join(" ",@a);
|
||||
if($bt =~ /recTelegramTxt:/) {
|
||||
$bt =~ m/.*recTelegramTxt:"(.*)".*/i;
|
||||
if($spec =~ /recTelegramTxt:/) {
|
||||
$spec =~ m/.*recTelegramTxt:"(.*)".*/i;
|
||||
$teletxt = $1;
|
||||
}
|
||||
|
||||
@ -916,6 +926,13 @@ sub SSCam_Set($@) {
|
||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||
my $emtxt = $hash->{HELPER}{SMTPRECMSG}?delete $hash->{HELPER}{SMTPRECMSG}:"";
|
||||
my $teletxt = $hash->{HELPER}{TELERECMSG}?delete $hash->{HELPER}{TELERECMSG}:"";
|
||||
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/) {
|
||||
$spec =~ m/.*STRM:(.*).*/i; # Aufnahmestop durch SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
}
|
||||
|
||||
SSCam_camstoprec("$name!_!$emtxt!_!$teletxt");
|
||||
|
||||
} elsif ($opt eq "snap" && SSCam_IsModelCam($hash)) {
|
||||
@ -931,12 +948,17 @@ sub SSCam_Set($@) {
|
||||
}
|
||||
|
||||
Log3($name, 4, "$name - Trigger snapshots - Number: $num, Lag: $lag");
|
||||
$hash->{HELPER}{SNAPBYSTRMDEV} = 1 if ($prop2 && $prop2 =~ /STRM/); # $prop wird mitgegeben durch Snap by SSCamSTRM-Device
|
||||
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/) {
|
||||
$spec =~ m/.*STRM:(.*).*/i; # Snap by SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
$hash->{HELPER}{SNAPBYSTRMDEV} = 1;
|
||||
}
|
||||
|
||||
my $emtxt = AttrVal($name, "snapEmailTxt", "");
|
||||
my $at = join(" ",@a);
|
||||
if($at =~ /snapEmailTxt:/) {
|
||||
$at =~ m/.*snapEmailTxt:"(.*)".*/i;
|
||||
if($spec =~ /snapEmailTxt:/) {
|
||||
$spec =~ m/.*snapEmailTxt:"(.*)".*/i;
|
||||
$emtxt = $1;
|
||||
}
|
||||
|
||||
@ -948,9 +970,8 @@ sub SSCam_Set($@) {
|
||||
}
|
||||
|
||||
my $teletxt = AttrVal($name, "snapTelegramTxt", "");
|
||||
my $bt = join(" ",@a);
|
||||
if($bt =~ /snapTelegramTxt:/) {
|
||||
$bt =~ m/.*snapTelegramTxt:"(.*)".*/i;
|
||||
if($spec =~ /snapTelegramTxt:/) {
|
||||
$spec =~ m/.*snapTelegramTxt:"(.*)".*/i;
|
||||
$teletxt = $1;
|
||||
}
|
||||
|
||||
@ -1355,6 +1376,13 @@ sub SSCam_Set($@) {
|
||||
|
||||
} elsif ($opt eq "runView" && SSCam_IsModelCam($hash)) {
|
||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/) {
|
||||
$spec =~ m/.*STRM:(.*).*/i; # Call by SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
}
|
||||
|
||||
if ($prop eq "live_open") {
|
||||
if ($prop1) {$hash->{HELPER}{VIEWOPENROOM} = $prop1;} else {delete $hash->{HELPER}{VIEWOPENROOM};}
|
||||
$hash->{HELPER}{OPENWINDOW} = 1;
|
||||
@ -1427,12 +1455,20 @@ sub SSCam_Set($@) {
|
||||
} elsif ($opt eq "hlsactivate" && SSCam_IsModelCam($hash)) {
|
||||
# ohne SET-Menüeintrag
|
||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/) {
|
||||
$spec =~ m/.*STRM:(.*).*/i; # Call by SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
}
|
||||
SSCam_hlsactivate($hash);
|
||||
|
||||
} elsif ($opt eq "refresh" && SSCam_IsModelCam($hash)) {
|
||||
# ohne SET-Menüeintrag
|
||||
if($prop =~ /STRM/) {
|
||||
# Event in allen SSCamSTRM-Devices erzeugen um Contentwiedergabe aufzufrischen
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/) {
|
||||
$spec =~ m/.*STRM:(.*).*/i; # Refresh by SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
||||
}
|
||||
|
||||
@ -1443,6 +1479,12 @@ sub SSCam_Set($@) {
|
||||
|
||||
} elsif ($opt eq "stopView" && SSCam_IsModelCam($hash)) {
|
||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||
|
||||
my $spec = join(" ",@a);
|
||||
if($spec =~ /STRM:/) {
|
||||
$spec =~ m/.*STRM:(.*).*/i; # Stop by SSCamSTRM-Device
|
||||
$hash->{HELPER}{INFORM} = $1;
|
||||
}
|
||||
SSCam_stopliveview($hash);
|
||||
|
||||
} elsif ($opt eq "setPreset" && SSCam_IsModelCam($hash)) {
|
||||
@ -1906,7 +1948,6 @@ sub SSCam_FWdetailFn ($$$$) {
|
||||
$ret .= $hash->{".setup"};
|
||||
}
|
||||
|
||||
# return undef if(!AttrVal($d,"ptzPanel_use",1));
|
||||
$hash->{".ptzhtml"} = SSCam_ptzpanel($d) if($hash->{".ptzhtml"} eq "");
|
||||
|
||||
if($hash->{".ptzhtml"} ne "" && AttrVal($d,"ptzPanel_use",1)) {
|
||||
@ -5089,7 +5130,7 @@ sub SSCam_camop_parse ($) {
|
||||
$sendrecs{$sn}{createdTm} = $createdTm;
|
||||
$sendrecs{$sn}{fileName} = $fileName;
|
||||
$sendrecs{$sn}{".imageData"} = $myjson;
|
||||
Log3($name,4, "$name - Snap '$sn' added to send recording hash: ID => $recid, File => $fileName, Created => $createdTm");
|
||||
Log3($name,4, "$name - Recording '$sn' added to send recording hash: ID => $recid, File => $fileName, Created => $createdTm");
|
||||
|
||||
# prüfen ob Recording als Email / Telegram versendet werden soll
|
||||
SSCam_prepareSendData ($hash, $OpMode, \%sendrecs);
|
||||
@ -5443,6 +5484,10 @@ sub SSCam_camop_parse ($) {
|
||||
my $sn = 0;
|
||||
my %sendsnaps = (); # Schnappschuss Hash zum Versand wird leer erstellt
|
||||
|
||||
if($hash->{HELPER}{".SNAPHASH"}) {
|
||||
$hash->{HELPER}{".SNAPHASHOLD"} = delete($hash->{HELPER}{".SNAPHASH"});
|
||||
}
|
||||
|
||||
while ($data->{'data'}{'data'}[$i]) {
|
||||
if(!$data->{'data'}{'data'}[$i]{'camName'} || $data->{'data'}{'data'}[$i]{'camName'} ne $camname) { # Forum:#97706
|
||||
$i += 1;
|
||||
@ -5467,19 +5512,32 @@ sub SSCam_camop_parse ($) {
|
||||
$sendsnaps{$sn}{".imageData"} = $imageData;
|
||||
Log3($name,4, "$name - Snap '$sn' added to send gallery hash: ID => $snapid, File => $fileName, Created => $createdTm");
|
||||
|
||||
# Snaphash um die neuen Snaps ergänzen wenn existent
|
||||
if($hash->{HELPER}{".SNAPHASH"}{$sn}) {
|
||||
# Snaphash erstellen
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{snapid} = $snapid;
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{createdTm} = $createdTm;
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{fileName} = $fileName;
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{imageData} = $imageData;
|
||||
Log3($name,4, "$name - Snap '$sn' added to gallery hash: ID => $snapid, File => $fileName, Created => $createdTm");
|
||||
}
|
||||
|
||||
$sn += 1;
|
||||
$i += 1;
|
||||
}
|
||||
|
||||
my $sgn = AttrVal($name,"snapGalleryNumber",3);
|
||||
my $ss = $sn;
|
||||
$sn = 0;
|
||||
|
||||
if($hash->{HELPER}{".SNAPHASHOLD"} && $sgn > $ss) {
|
||||
for my $kn ($ss..($sgn-1)) {
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{snapid} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{snapid};
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{createdTm} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{createdTm};
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{fileName} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{fileName};
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{imageData} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{imageData};
|
||||
$sn += 1;
|
||||
}
|
||||
delete $hash->{HELPER}{".SNAPHASHOLD"};
|
||||
}
|
||||
|
||||
# prüfen ob Schnappschuß versendet werden soll
|
||||
SSCam_prepareSendData ($hash, $OpMode, \%sendsnaps);
|
||||
|
||||
@ -5491,6 +5549,10 @@ sub SSCam_camop_parse ($) {
|
||||
|
||||
$hash->{HELPER}{TOTALCNT} = $data->{data}{total}; # total Anzahl Schnappschüsse
|
||||
|
||||
if($hash->{HELPER}{".SNAPHASH"}) {
|
||||
$hash->{HELPER}{".SNAPHASHOLD"} = delete($hash->{HELPER}{".SNAPHASH"});
|
||||
}
|
||||
|
||||
while ($data->{'data'}{'data'}[$i]) {
|
||||
if(!$data->{'data'}{'data'}[$i]{'camName'} || $data->{'data'}{'data'}[$i]{'camName'} ne $camname) { # Forum:#97706
|
||||
$i += 1;
|
||||
@ -5508,15 +5570,32 @@ sub SSCam_camop_parse ($) {
|
||||
} else {
|
||||
$createdTm = "$d[0]-$d[1]-$d[2] / $t[1]";
|
||||
}
|
||||
|
||||
# Snaphash erstellen
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{snapid} = $snapid;
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{createdTm} = $createdTm;
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{fileName} = $fileName;
|
||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{imageData} = $imageData;
|
||||
Log3($name,4, "$name - Snap '$sn' added to gallery hash: ID => $hash->{HELPER}{\".SNAPHASH\"}{$sn}{snapid}, File => $hash->{HELPER}{\".SNAPHASH\"}{$sn}{fileName}, Created => $hash->{HELPER}{\".SNAPHASH\"}{$sn}{createdTm}");
|
||||
|
||||
$sn += 1;
|
||||
$i += 1;
|
||||
}
|
||||
|
||||
my $sgn = AttrVal($name,"snapGalleryNumber",3);
|
||||
my $ss = $sn;
|
||||
$sn = 0;
|
||||
if($hash->{HELPER}{".SNAPHASHOLD"} && $sgn > $ss) {
|
||||
for my $kn ($ss..($sgn-1)) {
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{snapid} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{snapid};
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{createdTm} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{createdTm};
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{fileName} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{fileName};
|
||||
$hash->{HELPER}{".SNAPHASH"}{$kn}{imageData} = $hash->{HELPER}{".SNAPHASHOLD"}{$sn}{imageData};
|
||||
$sn += 1;
|
||||
}
|
||||
delete $hash->{HELPER}{".SNAPHASHOLD"};
|
||||
}
|
||||
|
||||
# Direktausgabe Snaphash wenn nicht gepollt wird
|
||||
if(!AttrVal($name, "snapGalleryBoost",0)) {
|
||||
my $htmlCode = SSCam_composegallery($name);
|
||||
@ -5539,10 +5618,9 @@ sub SSCam_camop_parse ($) {
|
||||
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
||||
|
||||
######## fallabhängige Eventgenerierung ########
|
||||
if ($hash->{HELPER}{SNAPBYSTRMDEV} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
||||
if ($hash->{HELPER}{INFORM} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
||||
# Snap durch SSCamSTRM-Device ausgelöst
|
||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
||||
delete $hash->{HELPER}{SNAPBYSTRMDEV};
|
||||
delete $hash->{HELPER}{LSNAPBYSTRMDEV};
|
||||
} elsif ($hash->{HELPER}{LSNAPBYDEV}) {
|
||||
SSCam_refresh($hash,0,1,0); # kein Room-Refresh, SSCam-state-Event, kein SSCamSTRM-Event
|
||||
@ -5550,26 +5628,6 @@ sub SSCam_camop_parse ($) {
|
||||
} else {
|
||||
SSCam_refresh($hash,0,0,0); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
|
||||
}
|
||||
# longpoll für alle Streamingdevices v. Typ "lastsnap"
|
||||
my @lsnapstrms = devspec2array("TYPE=SSCamSTRM:FILTER=PARENT=$name:FILTER=MODEL=lastsnap");
|
||||
if(scalar(@lsnapstrms) >= 1) {
|
||||
foreach (@lsnapstrms) {
|
||||
if($defs{$_}) {
|
||||
$hash->{HELPER}{STRMDEV} = $_;
|
||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
||||
}
|
||||
}
|
||||
}
|
||||
# longpoll für alle Streamingdevices v. Typ "snapgallery"
|
||||
@lsnapstrms = devspec2array("TYPE=SSCamSTRM:FILTER=PARENT=$name:FILTER=MODEL=snapgallery");
|
||||
if(scalar(@lsnapstrms) >= 1) {
|
||||
foreach (@lsnapstrms) {
|
||||
if($defs{$_}) {
|
||||
$hash->{HELPER}{STRMDEV} = $_;
|
||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/) {
|
||||
# HLS Streaming wurde aktiviert
|
||||
@ -6653,13 +6711,11 @@ return($hash,$success,$myjson);
|
||||
|
||||
######################################################################################################
|
||||
# Refresh eines Raumes aus $hash->{HELPER}{STRMROOM}
|
||||
# bzw. Longpoll von SSCam bzw. eines SSCamSTRM Devices wenn
|
||||
# $hash->{HELPER}{STRMDEV} gefüllt
|
||||
# $hash, $pload (1=Page reload), SSCam-state-Event(1=Event), SSCamSTRM-Event (1=Event)
|
||||
######################################################################################################
|
||||
sub SSCam_refresh($$$$) {
|
||||
my ($hash,$pload,$lpoll_scm,$lpoll_strm) = @_;
|
||||
my $name;
|
||||
my ($name,$st);
|
||||
if (ref $hash ne "HASH")
|
||||
{
|
||||
($name,$pload,$lpoll_scm,$lpoll_strm) = split ",",$hash;
|
||||
@ -6669,48 +6725,53 @@ sub SSCam_refresh($$$$) {
|
||||
}
|
||||
my $fpr = 0;
|
||||
|
||||
# Kontext des SSCamSTRM-Devices speichern für Refresh
|
||||
my $sd = $hash->{HELPER}{STRMDEV}?$hash->{HELPER}{STRMDEV}:"\"n.a.\""; # Name des aufrufenden SSCamSTRM-Devices
|
||||
my $sr = $hash->{HELPER}{STRMROOM}?$hash->{HELPER}{STRMROOM}:"\"n.a.\""; # Raum aus dem das SSCamSTRM-Device die Funktion aufrief
|
||||
my $sl = $hash->{HELPER}{STRMDETAIL}?$hash->{HELPER}{STRMDETAIL}:"\"n.a.\""; # Name des SSCamSTRM-Devices (wenn Detailansicht)
|
||||
$fpr = AttrVal($hash->{HELPER}{STRMDEV},"forcePageRefresh",0) if($hash->{HELPER}{STRMDEV});
|
||||
Log3($name, 4, "$name - SSCam_refresh - caller: $sd, callerroom: $sr, detail: $sl, pload: $pload, forcePageRefresh: $fpr, event_STRMdev: $lpoll_strm");
|
||||
# SSCamSTRM-Device mit hinterlegter FUUID ($hash->{HELPER}{INFORM}) selektieren
|
||||
my @spgs = devspec2array("TYPE=SSCamSTRM");
|
||||
my $room = "";
|
||||
foreach(@spgs) {
|
||||
if($defs{$_}{PARENT} eq $name) {
|
||||
next if(IsDisabled($defs{$_}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$_}{FUUID});
|
||||
$fpr = AttrVal($defs{$_}{NAME},"forcePageRefresh",0);
|
||||
$room = AttrVal($defs{$_}{NAME},"room","");
|
||||
Log3($name, 4, "$name - SSCam_refresh - pagerefresh: $defs{$_}{NAME}") if($fpr);
|
||||
}
|
||||
}
|
||||
|
||||
# Page-Reload
|
||||
if($pload && $hash->{HELPER}{STRMROOM} && $hash->{HELPER}{STRMDETAIL}) {
|
||||
if($hash->{HELPER}{STRMROOM} && !$hash->{HELPER}{STRMDETAIL} && !$fpr) {
|
||||
Log3($name, 4, "$name - SSCam_refresh jetzt");
|
||||
# trifft zu wenn in einer Raumansicht
|
||||
my @rooms = split(",",$hash->{HELPER}{STRMROOM});
|
||||
if($pload && $room) {
|
||||
if(!$fpr) {
|
||||
# nur Räume mit dem SSCamSTRM-Device reloaden
|
||||
my @rooms = split(",",$room);
|
||||
foreach (@rooms) {
|
||||
my $room = $_;
|
||||
{ map { FW_directNotify("FILTER=room=$room", "#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
|
||||
my $r = $_;
|
||||
{ map { FW_directNotify("FILTER=room=$r", "#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
|
||||
}
|
||||
} elsif ( !$hash->{HELPER}{STRMROOM} || $hash->{HELPER}{STRMDETAIL} || $fpr ) {
|
||||
}
|
||||
} elsif ($pload || $fpr) {
|
||||
# trifft zu bei Detailansicht oder im FLOORPLAN bzw. Dashboard oder wenn Seitenrefresh mit dem
|
||||
# SSCamSTRM-Attribut "forcePageRefresh" erzwungen wird
|
||||
{ map { FW_directNotify("#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
|
||||
}
|
||||
} elsif ($fpr) {
|
||||
# Seitenrefresh durch SSCamSTRM-Attribut "forcePageRefresh" erzwungen
|
||||
{ map { FW_directNotify("#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
|
||||
}
|
||||
|
||||
# Aufnahmestatus/Disabledstatus in state abbilden & SSCam-Device state setzen (mit/ohne Event)
|
||||
my $st = (ReadingsVal($name, "Availability", "enabled") eq "disabled")?"disabled":(ReadingsVal($name, "Record", "") eq "Start")?"on":"off";
|
||||
$st = (ReadingsVal($name, "Availability", "enabled") eq "disabled")?"disabled":(ReadingsVal($name, "Record", "") eq "Start")?"on":"off";
|
||||
if($lpoll_scm) {
|
||||
readingsSingleUpdate($hash,"state", $st, 1);
|
||||
} else {
|
||||
readingsSingleUpdate($hash,"state", $st, 0);
|
||||
}
|
||||
|
||||
# parentState des SSCamSTRM-Device mit Opmode updaten (mit/ohne Event)
|
||||
if($hash->{HELPER}{STRMDEV}) {
|
||||
my $strmhash = $defs{$hash->{HELPER}{STRMDEV}};
|
||||
if($lpoll_strm) {
|
||||
readingsSingleUpdate($strmhash,"parentState", $hash->{OPMODE}, 1);
|
||||
} else {
|
||||
readingsSingleUpdate($strmhash,"parentState", $hash->{OPMODE}, 0);
|
||||
# parentState des SSCamSTRM-Device updaten
|
||||
$st = ReadingsVal($name, "state", "initialized");
|
||||
foreach(@spgs) {
|
||||
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);
|
||||
readingsBulkUpdate($defs{$_},"state", "updated");
|
||||
readingsEndUpdate($defs{$_}, 1);
|
||||
Log3($name, 4, "$name - SSCam_refresh - caller: $_, FUUID: $hash->{HELPER}{INFORM}");
|
||||
delete $hash->{HELPER}{INFORM};
|
||||
}
|
||||
}
|
||||
|
||||
@ -6887,11 +6948,13 @@ return ($ret);
|
||||
# konvertiere alle ptzPanel_rowXX-attribute zu html-Code für
|
||||
# das generierte Widget und das weblink-Device ptzpanel_$name
|
||||
###############################################################################
|
||||
sub SSCam_ptzpanel($;$$) {
|
||||
my ($name,$ptzcdev,$ptzcontrol) = @_;
|
||||
sub SSCam_ptzpanel(@) {
|
||||
my ($name,$ptzcdev,$ptzcontrol,$ftui) = @_;
|
||||
my $hash = $defs{$name};
|
||||
my $iconpath = AttrVal("$name","ptzPanel_iconPath","www/images/sscam");
|
||||
my $iconprefix = AttrVal("$name","ptzPanel_iconPrefix","black_btn_");
|
||||
my $pbs = AttrVal("$ptzcdev","ptzButtonSize", 100); # Größe der Druckbuttons in %
|
||||
my $pbsf = AttrVal("$ptzcdev","ptzButtonSizeFTUI", 100); # Größe der Druckbuttons im FTUI in %
|
||||
my $valPresets = ReadingsVal("$name","Presets","");
|
||||
my $valPatrols = ReadingsVal("$name","Patrols","");
|
||||
my $rowisset = 0;
|
||||
@ -6900,7 +6963,8 @@ sub SSCam_ptzpanel($;$$) {
|
||||
|
||||
return "" if(SSCam_myVersion($hash) <= 71);
|
||||
|
||||
$ptz_ret = "<div class=\"ptzpanel\">";
|
||||
$ptz_ret = "";
|
||||
$ptz_ret .= "<style>TD.ptzcontrol {padding: 2px 2px;}</style>";
|
||||
$ptz_ret .= '<table class="rc_body">';
|
||||
|
||||
foreach my $rownr (0..9) {
|
||||
@ -6912,7 +6976,7 @@ sub SSCam_ptzpanel($;$$) {
|
||||
my @btn = split (",",$row); # die Anzahl Buttons in einer Reihe
|
||||
|
||||
foreach my $btnnr (0..$#btn) {
|
||||
$ptz_ret .= '<td class="rc_button">';
|
||||
$ptz_ret .= '<td class="ptzcontrol">';
|
||||
if ($btn[$btnnr] ne "") {
|
||||
my $cmd;
|
||||
my $img;
|
||||
@ -6925,12 +6989,17 @@ sub SSCam_ptzpanel($;$$) {
|
||||
}
|
||||
if ($img =~ m/\.svg/) { # Verwendung für SVG's
|
||||
$img = FW_makeImage($img, $cmd, "rc-button");
|
||||
} else { # $FW_ME = URL-Pfad unter dem der FHEMWEB-Server via HTTP erreichbar ist, z.B. /fhem
|
||||
if($ftui) {
|
||||
$img = "<img src=\"$FW_ME/$iconpath/$iconprefix$img\" height=\"$pbsf%\" width=\"$pbsf%\">";
|
||||
} else {
|
||||
$img = "<img src=\"$FW_ME/$iconpath/$iconprefix$img\">"; # $FW_ME = URL-Pfad unter dem der FHEMWEB-Server via HTTP erreichbar ist, z.B. /fhem
|
||||
$img = "<img src=\"$FW_ME/$iconpath/$iconprefix$img\" height=\"$pbs%\" width=\"$pbs%\">";
|
||||
}
|
||||
}
|
||||
if ($cmd || $cmd eq "0") {
|
||||
$cmd = "cmd=set $name $cmd";
|
||||
$ptz_ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmd')\">$img</a>"; # $FW_subdir = Sub-path in URL, used by FLOORPLAN/weblink
|
||||
my $cmd1 = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name $cmd')"; # $FW_subdir = Sub-path in URL, used by FLOORPLAN/weblink
|
||||
$cmd1 = "ftui.setFhemStatus('set $name $cmd')" if($ftui);
|
||||
$ptz_ret .= "<a onClick=\"$cmd1\">$img</a>";
|
||||
} else {
|
||||
$ptz_ret .= $img;
|
||||
}
|
||||
@ -6942,11 +7011,10 @@ sub SSCam_ptzpanel($;$$) {
|
||||
}
|
||||
|
||||
$ptz_ret .= "</table>";
|
||||
$ptz_ret .= "</div>";
|
||||
|
||||
########################
|
||||
# add Preset & Patrols
|
||||
|
||||
if(!$ftui) {
|
||||
my ($Presets,$Patrols,$fn);
|
||||
my $cmdPreset = "goPreset";
|
||||
my $cmdPatrol = "runPatrol";
|
||||
@ -6971,7 +7039,6 @@ sub SSCam_ptzpanel($;$$) {
|
||||
last if(defined($Patrols));
|
||||
}
|
||||
|
||||
|
||||
# Rahmenklasse
|
||||
$ptz_ret .= "<div class=\"ptzpanel\">";
|
||||
$ptz_ret .= "<table class=\"rc_body\">";
|
||||
@ -6998,6 +7065,7 @@ sub SSCam_ptzpanel($;$$) {
|
||||
$ptz_ret .= "</div>";
|
||||
|
||||
#####################
|
||||
}
|
||||
|
||||
if ($rowisset) {
|
||||
return $ptz_ret;
|
||||
@ -7088,8 +7156,8 @@ return;
|
||||
# $fmt = Streaming Format
|
||||
#
|
||||
######################################################################################
|
||||
sub SSCam_StreamDev($$$) {
|
||||
my ($camname,$strmdev,$fmt) = @_;
|
||||
sub SSCam_StreamDev($$$;$) {
|
||||
my ($camname,$strmdev,$fmt,$ftui) = @_;
|
||||
my $hash = $defs{$camname};
|
||||
my $wltype = $hash->{HELPER}{WLTYPE};
|
||||
my $serveraddr = $hash->{SERVERADDR};
|
||||
@ -7106,47 +7174,77 @@ sub SSCam_StreamDev($$$) {
|
||||
my $camid = $hash->{CAMID};
|
||||
my $sid = $hash->{HELPER}{SID};
|
||||
my $proto = $hash->{PROTOCOL};
|
||||
my ($cause,$ret,$link,$audiolink,$devWlink,$wlhash,$alias,$wlalias);
|
||||
$ftui = ($ftui && $ftui eq "ftui")?1:0;
|
||||
my $hdrAlign = "center";
|
||||
my ($cause,$ret,$link,$audiolink,$devWlink,$wlhash,$wlalias);
|
||||
|
||||
# Kontext des SSCamSTRM-Devices speichern für SSCam_refresh
|
||||
$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
|
||||
|
||||
# Definition Tasten
|
||||
my $imgblank = "<img src=\"$FW_ME/www/images/sscam/black_btn_CAMBLANK.png\">"; # nicht sichtbare Leertaste
|
||||
my $cmdstop = "cmd=set $camname stopView"; # Stream deaktivieren
|
||||
my $cmdstop = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname stopView STRM:$uuid')"; # Stream deaktivieren
|
||||
my $imgstop = "<img src=\"$FW_ME/www/images/default/remotecontrol/black_btn_POWEROFF3.png\">";
|
||||
my $cmdhlsreact = "cmd=set $camname hlsreactivate"; # HLS Stream reaktivieren
|
||||
my $cmdhlsreact = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname hlsreactivate')"; # HLS Stream reaktivieren
|
||||
my $imghlsreact = "<img src=\"$FW_ME/www/images/default/remotecontrol/black_btn_BACKDroid.png\">";
|
||||
my $cmdmjpegrun = "cmd=set $camname runView live_fw"; # MJPEG Stream aktivieren
|
||||
my $cmdmjpegrun = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname runView live_fw STRM:$uuid')"; # MJPEG Stream aktivieren
|
||||
my $imgmjpegrun = "<img src=\"$FW_ME/www/images/sscam/black_btn_MJPEG.png\">";
|
||||
my $cmdhlsrun = "cmd=set $camname runView live_fw_hls"; # HLS Stream aktivieren
|
||||
my $cmdhlsrun = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname runView live_fw_hls STRM:$uuid')"; # HLS Stream aktivieren
|
||||
my $imghlsrun = "<img src=\"$FW_ME/www/images/sscam/black_btn_HLS.png\">";
|
||||
my $cmdlrirun = "cmd=set $camname runView lastrec_fw"; # Last Record IFrame
|
||||
my $cmdlrirun = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname runView lastrec_fw STRM:$uuid')"; # Last Record IFrame
|
||||
my $imglrirun = "<img src=\"$FW_ME/www/images/sscam/black_btn_LASTRECIFRAME.png\">";
|
||||
my $cmdlh264run = "cmd=set $camname runView lastrec_fw_MPEG4/H.264"; # Last Record H.264
|
||||
my $cmdlh264run = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname runView lastrec_fw_MPEG4/H.264 STRM:$uuid')"; # Last Record H.264
|
||||
my $imglh264run = "<img src=\"$FW_ME/www/images/sscam/black_btn_LRECH264.png\">";
|
||||
my $cmdlmjpegrun = "cmd=set $camname runView lastrec_fw_MJPEG"; # Last Record MJPEG
|
||||
my $cmdlmjpegrun = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname runView lastrec_fw_MJPEG STRM:$uuid')"; # Last Record MJPEG
|
||||
my $imglmjpegrun = "<img src=\"$FW_ME/www/images/sscam/black_btn_LRECMJPEG.png\">";
|
||||
my $cmdlsnaprun = "cmd=set $camname runView lastsnap_fw STRM"; # Last SNAP
|
||||
my $cmdlsnaprun = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname runView lastsnap_fw STRM:$uuid')"; # Last SNAP
|
||||
my $imglsnaprun = "<img src=\"$FW_ME/www/images/sscam/black_btn_LSNAP.png\">";
|
||||
my $cmdrecendless = "cmd=set $camname on 0"; # Endlosaufnahme Start
|
||||
my $cmdrecendless = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname on 0 STRM:$uuid')"; # Endlosaufnahme Start
|
||||
my $imgrecendless = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTART.png\">";
|
||||
my $cmdrecstop = "cmd=set $camname off"; # Aufnahme Stop
|
||||
my $cmdrecstop = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname off STRM:$uuid')"; # Aufnahme Stop
|
||||
my $imgrecstop = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTOP.png\">";
|
||||
my $cmddosnap = "cmd=set $camname snap 1 2 STRM"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||
my $cmddosnap = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname snap 1 2 STRM:$uuid')"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||
my $imgdosnap = "<img src=\"$FW_ME/www/images/sscam/black_btn_DOSNAP.png\">";
|
||||
my $cmdrefresh = "cmd=set $camname refresh STRM"; # Refresh in SSCamSTRM-Devices
|
||||
my $cmdrefresh = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $camname refresh STRM:$uuid')"; # Refresh in SSCamSTRM-Devices
|
||||
my $imgrefresh = "<img src=\"$FW_ME/www/images/default/Restart.png\">";
|
||||
|
||||
# bei Aufruf durch FTUI Kommandosyntax anpassen
|
||||
if ($ftui) {
|
||||
$cmddosnap = "ftui.setFhemStatus('set $camname snap 1 2 STRM:$uuid')";
|
||||
$cmdstop = "ftui.setFhemStatus('set $camname stopView STRM:$uuid')";
|
||||
$cmdhlsreact = "ftui.setFhemStatus('set $camname hlsreactivate STRM:$uuid')";
|
||||
$cmdmjpegrun = "ftui.setFhemStatus('set $camname runView live_fw STRM:$uuid')";
|
||||
$cmdhlsrun = "ftui.setFhemStatus('set $camname runView live_fw_hls STRM:$uuid')";
|
||||
$cmdlrirun = "ftui.setFhemStatus('set $camname runView lastrec_fw STRM:$uuid')";
|
||||
$cmdlh264run = "ftui.setFhemStatus('set $camname runView lastrec_fw_MPEG4/H.264 STRM:$uuid')";
|
||||
$cmdlmjpegrun = "ftui.setFhemStatus('set $camname runView lastrec_fw_MJPEG STRM:$uuid')";
|
||||
$cmdlsnaprun = "ftui.setFhemStatus('set $camname runView lastsnap_fw STRM STRM:$uuid')";
|
||||
$cmdrecendless = "ftui.setFhemStatus('set $camname on 0 STRM:$uuid')";
|
||||
$cmdrecstop = "ftui.setFhemStatus('set $camname off STRM:$uuid')";
|
||||
$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 htmattr Streaming-Device übersteuern
|
||||
$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 $pws = AttrVal($strmdev, "popupWindowSize", ""); # Größe eines Popups
|
||||
$pws =~ s/"//g if($pws);
|
||||
|
||||
my $show = $defs{$streamHash->{PARENT}}->{HELPER}{ACTSTRM} if($streamHash->{MODEL} =~ /switched/);
|
||||
$show = $show?"($show)":"";
|
||||
|
||||
my $alias = AttrVal($strmdev, "alias", $strmdev); # Linktext als Aliasname oder Devicename setzen
|
||||
my $dlink = "<a href=\"/fhem?detail=$strmdev\">$alias</a>";
|
||||
|
||||
my $StmKey = ReadingsVal($camname,"StmKey",undef);
|
||||
|
||||
# Javascript Bibliothek für Tooltips (http://www.walterzorn.de/tooltip/tooltip.htm#download) und Texte
|
||||
@ -7183,13 +7281,18 @@ sub SSCam_StreamDev($$$) {
|
||||
|
||||
$ret = "";
|
||||
$ret .= "<script type=\"text/javascript\" src=\"$ttjs\"></script>";
|
||||
$ret .= '<table class="block wide internals">';
|
||||
$ret .= '<table class="block wide internals" style="margin-left:auto;margin-right:auto">';
|
||||
if($ftui) {
|
||||
$ret .= "<span align=\"$hdrAlign\">$dlink $show </span><br>" if(!AttrVal($strmdev,"hideDisplayNameFTUI",0));
|
||||
} else {
|
||||
$ret .= "<span align=\"$hdrAlign\">$dlink $show </span><br>" if(!AttrVal($strmdev,"hideDisplayName",0));
|
||||
}
|
||||
$ret .= '<tbody>';
|
||||
$ret .= '<tr class="odd">';
|
||||
|
||||
if(!$StmKey || ReadingsVal($camname, "Availability", "") ne "enabled" || IsDisabled($camname)) {
|
||||
# Ausgabe bei Fehler
|
||||
my $cam = AttrVal($camname, "alias", $camname);
|
||||
my $cam = AttrVal($camname, "alias", $camname); # Linktext als Aliasname oder Devicename setzen
|
||||
$cause = !$StmKey?"Camera $cam has no Reading \"StmKey\" set !":"Cam \"$cam\" is disabled";
|
||||
$cause = "Camera \"$cam\" is disabled" if(IsDisabled($camname));
|
||||
$ret .= "<td> <br> <b> $cause </b> <br><br></td>";
|
||||
@ -7212,22 +7315,26 @@ sub SSCam_StreamDev($$$) {
|
||||
if($apiaudiostmmaxver) {
|
||||
$audiolink = "$proto://$serveraddr:$serverport/webapi/$apiaudiostmpath?api=$apiaudiostm&version=$apiaudiostmmaxver&method=Stream&cameraId=$camid&_sid=$sid";
|
||||
}
|
||||
if(!$ftui) {
|
||||
$ret .= "<td><img src=$link $ha onClick=\"FW_okDialog('<img src=$link $pws>')\"><br>";
|
||||
} else {
|
||||
$ret .= "<td><img src=$link $ha><br>";
|
||||
}
|
||||
$streamHash->{HELPER}{STREAM} = "<img src=$link $pws>"; # Stream für "get <SSCamSTRM-Device> popupStream" speichern
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
}
|
||||
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "</td>";
|
||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
||||
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
$ret .= "<td>$ptz_ret</td>";
|
||||
}
|
||||
@ -7246,8 +7353,12 @@ sub SSCam_StreamDev($$$) {
|
||||
$link = $hash->{HELPER}{".LASTSNAP"};
|
||||
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>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
} else {
|
||||
$ret .= "<td><img src='data:image/jpeg;base64,$link' $gattr><br>";
|
||||
}
|
||||
$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
|
||||
@ -7289,19 +7400,19 @@ sub SSCam_StreamDev($$$) {
|
||||
}
|
||||
$ret .= "<br>";
|
||||
Log3($strmdev, 4, "$strmdev - generic Stream params:\n$htag");
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrefresh')\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= "<a onClick=\"$cmdrefresh\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= $imgblank;
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "</td>";
|
||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
||||
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
$ret .= "<td>$ptz_ret</td>";
|
||||
}
|
||||
@ -7335,19 +7446,19 @@ sub SSCam_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
|
||||
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrefresh')\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= "<a onClick=\"$cmdrefresh\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= $imgblank;
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "</td>";
|
||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
||||
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
$ret .= "<td>$ptz_ret</td>";
|
||||
}
|
||||
@ -7362,25 +7473,29 @@ sub SSCam_StreamDev($$$) {
|
||||
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(!$ftui) {
|
||||
$ret .= "<td><img src=$link $ha onClick=\"FW_okDialog('<img src=$link $pws>')\"><br>" if($link);
|
||||
} 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=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= $imgblank;
|
||||
if($hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
|
||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||
# Aufnahmebutton endlos Start
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </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/) {
|
||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
||||
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
$ret .= "<td>$ptz_ret</td>";
|
||||
}
|
||||
@ -7396,15 +7511,21 @@ sub SSCam_StreamDev($$$) {
|
||||
}
|
||||
|
||||
} elsif ($wltype =~ /iframe/) {
|
||||
if(!$ftui) {
|
||||
$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);
|
||||
}
|
||||
$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=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrefresh')\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$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/) {
|
||||
$ret .= '</tr>';
|
||||
@ -7430,7 +7551,7 @@ sub SSCam_StreamDev($$$) {
|
||||
"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=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "</td>";
|
||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) {
|
||||
$ret .= '</tr>';
|
||||
@ -7442,16 +7563,24 @@ sub SSCam_StreamDev($$$) {
|
||||
$ret .= "<td></td>" if(AttrVal($camname,"ptzPanel_use",0));
|
||||
}
|
||||
} elsif($wltype =~ /base64img/) {
|
||||
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);
|
||||
} else {
|
||||
$ret .= "<td><img src='data:image/jpeg;base64,$link' $ha><br>" if($link);
|
||||
}
|
||||
$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=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdstop\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= $imgblank;
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "</td>";
|
||||
|
||||
} elsif($wltype =~ /embed/) {
|
||||
if(!$ftui) {
|
||||
$ret .= "<td><embed src=$link $ha onClick=\"FW_okDialog('<img src=$link $pws>')\"></td>" if($link);
|
||||
} else {
|
||||
$ret .= "<td><embed src=$link $ha></td>" if($link);
|
||||
}
|
||||
$streamHash->{HELPER}{STREAM} = "<embed src=$link $pws>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||
|
||||
@ -7467,21 +7596,21 @@ sub SSCam_StreamDev($$$) {
|
||||
"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=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\" onmouseover=\"Tip('$ttcmdstop')\" onmouseout=\"UnTip()\">$imgstop </a>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrefresh')\" onmouseover=\"Tip('$ttrefresh')\" onmouseout=\"UnTip()\">$imgrefresh </a>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdhlsreact')\" onmouseover=\"Tip('$tthlsreact')\" onmouseout=\"UnTip()\">$imghlsreact </a>";
|
||||
$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
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecendless\" onmouseover=\"Tip('$ttrecstart')\" onmouseout=\"UnTip()\">$imgrecendless </a>";
|
||||
} else {
|
||||
# Aufnahmebutton Stop
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
$ret .= "<a onClick=\"$cmdrecstop\" onmouseover=\"Tip('$ttrecstop')\" onmouseout=\"UnTip()\">$imgrecstop </a>";
|
||||
}
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>";
|
||||
$ret .= "</td>";
|
||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
||||
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||
if($ptz_ret) {
|
||||
$ret .= "<td>$ptz_ret</td>";
|
||||
}
|
||||
@ -7493,12 +7622,12 @@ sub SSCam_StreamDev($$$) {
|
||||
my $cam = AttrVal($camname, "alias", $camname);
|
||||
$cause = "Playback cam \"$cam\" switched off";
|
||||
$ret .= "<td> <br> <b> $cause </b> <br><br>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdmjpegrun')\" onmouseover=\"Tip('$ttmjpegrun')\" onmouseout=\"UnTip()\">$imgmjpegrun </a>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdhlsrun')\" onmouseover=\"Tip('$tthlsrun')\" onmouseout=\"UnTip()\">$imghlsrun </a>" if(SSCam_IsHLSCap($hash));
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdlrirun')\" onmouseover=\"Tip('$ttlrrun')\" onmouseout=\"UnTip()\">$imglrirun </a>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdlh264run')\" onmouseover=\"Tip('$tth264run')\" onmouseout=\"UnTip()\">$imglh264run </a>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdlmjpegrun')\" onmouseover=\"Tip('$ttlmjpegrun')\" onmouseout=\"UnTip()\">$imglmjpegrun </a>";
|
||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdlsnaprun')\" onmouseover=\"Tip('$ttlsnaprun')\" onmouseout=\"UnTip()\">$imglsnaprun </a>";
|
||||
$ret .= "<a onClick=\"$cmdmjpegrun\" onmouseover=\"Tip('$ttmjpegrun')\" onmouseout=\"UnTip()\">$imgmjpegrun </a>";
|
||||
$ret .= "<a onClick=\"$cmdhlsrun\" onmouseover=\"Tip('$tthlsrun')\" onmouseout=\"UnTip()\">$imghlsrun </a>" if(SSCam_IsHLSCap($hash));
|
||||
$ret .= "<a onClick=\"$cmdlrirun\" onmouseover=\"Tip('$ttlrrun')\" onmouseout=\"UnTip()\">$imglrirun </a>";
|
||||
$ret .= "<a onClick=\"$cmdlh264run\" onmouseover=\"Tip('$tth264run')\" onmouseout=\"UnTip()\">$imglh264run </a>";
|
||||
$ret .= "<a onClick=\"$cmdlmjpegrun\" onmouseover=\"Tip('$ttlmjpegrun')\" onmouseout=\"UnTip()\">$imglmjpegrun </a>";
|
||||
$ret .= "<a onClick=\"$cmdlsnaprun\" onmouseover=\"Tip('$ttlsnaprun')\" onmouseout=\"UnTip()\">$imglsnaprun </a>";
|
||||
$ret .= "</td>";
|
||||
}
|
||||
} else {
|
||||
@ -7564,8 +7693,8 @@ return $ret;
|
||||
# Schnappschußgalerie zusammenstellen
|
||||
# Verwendung durch SSCamSTRM-Devices
|
||||
###############################################################################
|
||||
sub SSCam_composegallery ($;$$) {
|
||||
my ($name,$strmdev,$model) = @_;
|
||||
sub SSCam_composegallery ($;$$$) {
|
||||
my ($name,$strmdev,$model,$ftui) = @_;
|
||||
my $hash = $defs{$name};
|
||||
my $camname = $hash->{CAMNAME};
|
||||
my $allsnaps = $hash->{HELPER}{".SNAPHASH"}; # = %allsnaps
|
||||
@ -7575,6 +7704,9 @@ sub SSCam_composegallery ($;$$) {
|
||||
my $limit = $hash->{HELPER}{SNAPLIMIT}; # 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"," "))
|
||||
? ReadingsTimestamp($name,"LastSnapTime"," ")
|
||||
: ReadingsTimestamp($name,"LastUpdateTime"," ")); # letzte Aktualisierung
|
||||
@ -7584,22 +7716,35 @@ sub SSCam_composegallery ($;$$) {
|
||||
$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} if($strmdev); # Hash des SSCamSTRM-Devices
|
||||
delete $streamHash->{HELPER}{STREAM};
|
||||
|
||||
my $cmddosnap = "cmd=set $name snap 1 2 STRM"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||
if($strmdev) {
|
||||
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
|
||||
$uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices
|
||||
delete $streamHash->{HELPER}{STREAM};
|
||||
}
|
||||
|
||||
my $cmddosnap = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name snap 1 2 STRM:$uuid')"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||
my $imgdosnap = "<img src=\"$FW_ME/www/images/sscam/black_btn_DOSNAP.png\">";
|
||||
|
||||
# bei Aufruf durch FTUI Kommandosyntax anpassen
|
||||
if($ftui) {
|
||||
$cmddosnap = "ftui.setFhemStatus('set $name snap 1 2 STRM:$uuid')";
|
||||
}
|
||||
|
||||
my $ha = AttrVal($name, "snapGalleryHtmlAttr", AttrVal($name, "htmlattr", 'width="500" height="325"'));
|
||||
|
||||
my $alias = AttrVal($strmdev, "alias", $strmdev); # Linktext als Aliasname oder Devicename setzen
|
||||
my $dlink = "<a href=\"/fhem?detail=$strmdev\">$alias</a>";
|
||||
|
||||
# falls "SSCam_composegallery" durch ein SSCamSTRM-Device aufgerufen wird
|
||||
my $devWlink = "";
|
||||
my $pws = "";
|
||||
if ($strmdev) {
|
||||
$pws = AttrVal($strmdev, "popupWindowSize", ""); # Größe eines Popups (umgelegt: Forum:https://forum.fhem.de/index.php/topic,45671.msg927912.html#msg927912)
|
||||
$pws =~ s/"//g if($pws);
|
||||
my $wlha = AttrVal($strmdev, "htmlattr", undef);
|
||||
$ha = (defined($wlha))?$wlha:$ha; # htmlattr vom SSCamSTRM-Device übernehmen falls von SSCamSTRM-Device aufgerufen und gesetzt
|
||||
$ha = AttrVal($strmdev, "htmlattr", $ha); # htmlattr vom SSCamSTRM-Device übernehmen falls von SSCamSTRM-Device aufgerufen und gesetzt
|
||||
if($ftui) {
|
||||
$ha = AttrVal($strmdev, "htmlattrFTUI", $ha); # wenn aus FTUI aufgerufen divers setzen
|
||||
}
|
||||
}
|
||||
|
||||
# wenn SSCamSTRM-device genutzt wird und attr "snapGalleryBoost" nicht gesetzt ist -> Warnung in Gallerie ausgeben
|
||||
@ -7611,19 +7756,26 @@ sub SSCam_composegallery ($;$$) {
|
||||
|
||||
# Javascript Bibliothek für Tooltips (http://www.walterzorn.de/tooltip/tooltip.htm#download) und Texte
|
||||
my $ttjs = "/fhem/pgm2/sscam_tooltip.js";
|
||||
my ($ttsnap);
|
||||
if(AttrVal("global","language","EN") =~ /EN/) {
|
||||
$ttsnap = $SSCam_ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
|
||||
} else {
|
||||
|
||||
my $ttsnap = $SSCam_ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
|
||||
if(AttrVal("global","language","EN") =~ /DE/) {
|
||||
$ttsnap = $SSCam_ttips_de{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
|
||||
}
|
||||
|
||||
# Header Generierung
|
||||
my $header;
|
||||
if($ftui) {
|
||||
$header .= "$dlink <br>" if(!AttrVal($strmdev,"hideDisplayNameFTUI",0));
|
||||
} else {
|
||||
$header .= "$dlink <br>" if(!AttrVal($strmdev,"hideDisplayName",0));
|
||||
}
|
||||
if ($lang eq "EN") {
|
||||
$header = "Snapshots ($limit/$totalcnt) of camera <b>$camname</b> - newest Snapshot: $lss<br>";
|
||||
$header .= "Snapshots ($limit/$totalcnt) of camera <b>$camname</b> - newest Snapshot: $lss<br>";
|
||||
$header .= " (Possibly another snapshots are available. Last recall: $lupt)<br>" if(AttrVal($name,"snapGalleryBoost",0));
|
||||
} else {
|
||||
$header = "Schnappschüsse ($limit/$totalcnt) von Kamera <b>$camname</b> - neueste Aufnahme: $lss <br>";
|
||||
$header .= "Schnappschüsse ($limit/$totalcnt) von Kamera <b>$camname</b> - neueste Aufnahme: $lss <br>";
|
||||
$lupt =~ /(\d+)-(\d\d)-(\d\d)\s+(.*)/;
|
||||
$lupt = "$3.$2.$1 $4";
|
||||
$header .= " (Eventuell sind neuere Aufnahmen verfügbar. Letzter Abruf: $lupt)<br>" if(AttrVal($name,"snapGalleryBoost",0));
|
||||
}
|
||||
$header .= $sgbnote;
|
||||
@ -7635,8 +7787,8 @@ sub SSCam_composegallery ($;$$) {
|
||||
my ($htmlCode,$ct);
|
||||
$htmlCode = "<html>";
|
||||
$htmlCode .= "<script type=\"text/javascript\" src=\"$ttjs\"></script>";
|
||||
$htmlCode .= sprintf("$devWlink <div class=\"makeTable wide\"; style=\"text-align:center\"> $header <br>");
|
||||
$htmlCode .= "<table class=\"block wide internals\">";
|
||||
$htmlCode .= "<div class=\"makeTable wide\"; style=\"text-align:$hdrAlign\"> $header <br>";
|
||||
$htmlCode .= '<table class="block wide internals" style="margin-left:auto;margin-right:auto">';
|
||||
$htmlCode .= "<tbody>";
|
||||
$htmlCode .= "<tr class=\"odd\">";
|
||||
my $cell = 1;
|
||||
@ -7644,7 +7796,9 @@ sub SSCam_composegallery ($;$$) {
|
||||
foreach my $key (@as) {
|
||||
$ct = $allsnaps->{$key}{createdTm};
|
||||
my $idata = "";
|
||||
if(!$ftui) {
|
||||
$idata = "onClick=\"FW_okDialog('<img src=data:image/jpeg;base64,$allsnaps->{$key}{imageData} $pws>')\"" if(AttrVal($name,"snapGalleryBoost",0));
|
||||
}
|
||||
my $html = sprintf("<td>$ct<br> <img src=\"data:image/jpeg;base64,$allsnaps->{$key}{imageData}\" $gattr $idata> </td>" );
|
||||
$cell++;
|
||||
|
||||
@ -7666,7 +7820,7 @@ sub SSCam_composegallery ($;$$) {
|
||||
$htmlCode .= "</tbody>";
|
||||
$htmlCode .= "</table>";
|
||||
$htmlCode .= "</div>";
|
||||
$htmlCode .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>" if($strmdev);
|
||||
$htmlCode .= "<a onClick=\"$cmddosnap\" onmouseover=\"Tip('$ttsnap')\" onmouseout=\"UnTip()\">$imgdosnap </a>" if($strmdev);
|
||||
$htmlCode .= "</html>";
|
||||
|
||||
return $htmlCode;
|
||||
@ -9155,7 +9309,14 @@ return;
|
||||
For example the recordings are stored for a defined time in Surveillance Station and will be deleted after that period.<br><br>
|
||||
|
||||
If you like to discuss or help to improve this module please use FHEM-Forum with link: <br>
|
||||
<a href="http://forum.fhem.de/index.php/topic,45671.msg374390.html#msg374390">49_SSCam: Fragen, Hinweise, Neuigkeiten und mehr rund um dieses Modul</a>.<br><br>
|
||||
<a href="http://forum.fhem.de/index.php/topic,45671.msg374390.html#msg374390">49_SSCam: Fragen, Hinweise, Neuigkeiten und mehr rund um dieses Modul</a>.
|
||||
<br><br>
|
||||
|
||||
<b>Integration into FHEM TabletUI: </b> <br><br>
|
||||
There is a widget provided for integration of SSCam-Streaming devices (Type SSCamSTRM) into FTUI. For further information please be informed by the
|
||||
(german) FHEM Wiki article: <br>
|
||||
<a href="https://wiki.fhem.de/wiki/FTUI_Widget_f%C3%BCr_SSCam_Streaming_Devices_(SSCamSTRM)">FTUI Widget für SSCam Streaming Devices (SSCamSTRM)</a>.
|
||||
<br><br><br>
|
||||
|
||||
<b>Prerequisites </b> <br><br>
|
||||
<ul>
|
||||
@ -9202,7 +9363,7 @@ return;
|
||||
command in a previously defined SVS device.
|
||||
<br><br>
|
||||
|
||||
A <b>camera</b> is defined by: <br><br>
|
||||
A <b>camera device</b> is defined by: <br><br>
|
||||
<ul>
|
||||
<b><code>define <Name> SSCAM <camera name in SVS> <ServerAddr> [Port] [Protocol]</code></b> <br><br>
|
||||
</ul>
|
||||
@ -9266,6 +9427,7 @@ return;
|
||||
panel can be affected by <a href="#SSCamattr">attributes</a> "ptzPanel_.*". <br>
|
||||
Please see also <a href="#SSCamset">command</a> <b>"set <name> createPTZcontrol"</b> in this context.
|
||||
<br><br><br>
|
||||
|
||||
</ul>
|
||||
|
||||
<a name="SSCam_Credentials"></a>
|
||||
@ -10910,7 +11072,14 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
<a href="http://forum.fhem.de/index.php/topic,45671.msg374390.html#msg374390">49_SSCam: Fragen, Hinweise, Neuigkeiten und mehr rund um dieses Modul</a>.<br><br>
|
||||
|
||||
Weitere Infomationen zum Modul sind im FHEM-Wiki zu finden:<br>
|
||||
<a href="http://www.fhemwiki.de/wiki/SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station">SSCAM - Steuerung von Kameras in Synology Surveillance Station</a>.<br><br>
|
||||
<a href="http://www.fhemwiki.de/wiki/SSCAM_-_Steuerung_von_Kameras_in_Synology_Surveillance_Station">SSCAM - Steuerung von Kameras in Synology Surveillance Station</a>.
|
||||
<br><br>
|
||||
|
||||
<b>Integration in FHEM TabletUI: </b> <br><br>
|
||||
Zur Integration von SSCam Streaming Devices (Typ SSCamSTRM) wird ein Widget bereitgestellt.
|
||||
Für weitere Information dazu bitte den Artikel im Wiki durchlesen: <br>
|
||||
<a href="https://wiki.fhem.de/wiki/FTUI_Widget_f%C3%BCr_SSCam_Streaming_Devices_(SSCamSTRM)">FTUI Widget für SSCam Streaming Devices (SSCamSTRM)</a>.
|
||||
<br><br><br>
|
||||
|
||||
|
||||
<b>Vorbereitung </b> <br><br>
|
||||
|
@ -35,6 +35,8 @@ eval "use FHEM::Meta;1" or my $modMetaAbsent = 1;
|
||||
|
||||
# Versions History intern
|
||||
our %SSCamSTRM_vNotesIntern = (
|
||||
"2.7.0" => "15.07.2019 FTUI support, new attributes htmlattrFTUI, hideDisplayNameFTUI, ptzButtonSize, ptzButtonSizeFTUI ",
|
||||
"2.6.0" => "21.06.2019 GetFn -> get <name> html ",
|
||||
"2.5.0" => "27.03.2019 add Meta.pm support ",
|
||||
"2.4.0" => "24.02.2019 support for \"genericStrmHtmlTag\" in streaming device MODEL generic ",
|
||||
"2.3.0" => "04.02.2019 SSCamSTRM_Rename / SSCamSTRM_Copy added, Streaming device can now be renamed or copied ",
|
||||
@ -61,12 +63,10 @@ our %SSCamSTRM_vNotesIntern = (
|
||||
);
|
||||
|
||||
# Standardvariablen und Forward-Declaration
|
||||
sub SSCam_ptzpanel($;$$);
|
||||
sub SSCam_StreamDev($$$);
|
||||
sub SSCam_ptzpanel(@);
|
||||
sub SSCam_StreamDev($$$;$);
|
||||
sub SSCam_getclhash($;$$);
|
||||
|
||||
# my $hlsjs = "hls.js"; # hls.js Release von Seite https://github.com/video-dev/hls.js/releases
|
||||
|
||||
################################################################
|
||||
sub SSCamSTRM_Initialize($) {
|
||||
my ($hash) = @_;
|
||||
@ -75,16 +75,21 @@ sub SSCamSTRM_Initialize($) {
|
||||
|
||||
$hash->{DefFn} = "SSCamSTRM_Define";
|
||||
$hash->{SetFn} = "SSCamSTRM_Set";
|
||||
$hash->{GetFn} = "SSCamSTRM_Get";
|
||||
$hash->{AttrList} = "autoRefresh:selectnumbers,120,0.2,1800,0,log10 ".
|
||||
"autoRefreshFW:$fwd ".
|
||||
"disable:1,0 ".
|
||||
"forcePageRefresh:1,0 ".
|
||||
"genericStrmHtmlTag ".
|
||||
"htmlattr ".
|
||||
"htmlattrFTUI ".
|
||||
"hideDisplayName:1,0 ".
|
||||
"hideDisplayNameFTUI:1,0 ".
|
||||
"popupWindowSize ".
|
||||
"popupStreamFW:$fwd ".
|
||||
"popupStreamTo:OK,1,2,3,4,5,6,7,8,9,10,15,20,25,30,40,50,60 ".
|
||||
"ptzButtonSize:selectnumbers,50,5,100,0,lin ".
|
||||
"ptzButtonSizeFTUI:selectnumbers,50,5,100,0,lin ".
|
||||
$readingFnAttributes;
|
||||
$hash->{RenameFn} = "SSCamSTRM_Rename";
|
||||
$hash->{CopyFn} = "SSCamSTRM_Copy";
|
||||
@ -134,7 +139,10 @@ sub SSCamSTRM_Rename($$) {
|
||||
return;
|
||||
}
|
||||
|
||||
################################################################
|
||||
###############################################################
|
||||
# SSCamSTRM Copy
|
||||
# passt die Deviceparameter bei kopierten Device an
|
||||
###############################################################
|
||||
sub SSCamSTRM_Copy($$) {
|
||||
my ($old_name,$new_name) = @_;
|
||||
my $hash = $defs{$new_name};
|
||||
@ -145,6 +153,27 @@ sub SSCamSTRM_Copy($$) {
|
||||
return;
|
||||
}
|
||||
|
||||
###############################################################
|
||||
# SSCamSTRM Get
|
||||
###############################################################
|
||||
sub SSCamSTRM_Get($@) {
|
||||
my ($hash, @a) = @_;
|
||||
return "\"get X\" needs at least an argument" if ( @a < 2 );
|
||||
my $name = shift @a;
|
||||
my $cmd = shift @a;
|
||||
|
||||
if ($cmd eq "html") {
|
||||
return SSCamSTRM_AsHtml($hash);
|
||||
}
|
||||
|
||||
if ($cmd eq "ftui") {
|
||||
return SSCamSTRM_AsHtml($hash,"ftui");
|
||||
}
|
||||
|
||||
return undef;
|
||||
return "Unknown argument $cmd, choose one of html:noArg";
|
||||
}
|
||||
|
||||
################################################################
|
||||
sub SSCamSTRM_Set($@) {
|
||||
my ($hash, @a) = @_;
|
||||
@ -244,14 +273,8 @@ sub SSCamSTRM_FwFn($;$$$) {
|
||||
$hash->{HELPER}{FW} = $FW_wname;
|
||||
|
||||
$link = AnalyzePerlCommand(undef, $link) if($link =~ m/^{(.*)}$/s);
|
||||
my $show = $defs{$hash->{PARENT}}->{HELPER}{ACTSTRM} if($hash->{MODEL} =~ /switched/);
|
||||
$show = $show?"($show)":"";
|
||||
|
||||
my $alias = AttrVal($d, "alias", $d); # Linktext als Aliasname oder Devicename setzen
|
||||
my $dlink = "<a href=\"/fhem?detail=$d\">$alias</a>";
|
||||
|
||||
my $ret = "";
|
||||
$ret .= "<span>$dlink $show</span><br>" if(!AttrVal($d,"hideDisplayName",0));
|
||||
if(IsDisabled($d)) {
|
||||
if(AttrVal($d,"hideDisplayName",0)) {
|
||||
$ret .= "Stream-device <a href=\"/fhem?detail=$d\">$d</a> is disabled";
|
||||
@ -327,6 +350,39 @@ sub SSCamSTRM_setVersionInfo($) {
|
||||
return;
|
||||
}
|
||||
|
||||
################################################################
|
||||
# Grafik als HTML zurück liefern (z.B. für Widget)
|
||||
################################################################
|
||||
sub SSCamSTRM_AsHtml($;$) {
|
||||
my ($hash,$ftui) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $link = $hash->{LINK};
|
||||
|
||||
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')}";
|
||||
}
|
||||
|
||||
$link = AnalyzePerlCommand(undef, $link) if($link =~ m/^{(.*)}$/s);
|
||||
|
||||
my $ret = "<html>";
|
||||
if(IsDisabled($name)) {
|
||||
if(AttrVal($name,"hideDisplayName",0)) {
|
||||
$ret .= "Stream-device <a href=\"/fhem?detail=$name\">$name</a> is disabled";
|
||||
} else {
|
||||
$ret .= "Stream-device is disabled";
|
||||
}
|
||||
|
||||
} else {
|
||||
$ret .= $link;
|
||||
}
|
||||
|
||||
$ret .= "</html>";
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
@ -337,6 +393,7 @@ return;
|
||||
<a name="SSCamSTRM"></a>
|
||||
<h3>SSCamSTRM</h3>
|
||||
<br>
|
||||
<ul>
|
||||
The module SSCamSTRM is a special device module synchronized to the SSCam module. It is used for definition of
|
||||
Streaming-Devices. <br>
|
||||
Dependend of the Streaming-Device state, different buttons are provided to start actions:
|
||||
@ -359,6 +416,13 @@ Dependend of the Streaming-Device state, different buttons are provided to start
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
<b>Integration into FHEM TabletUI: </b> <br><br>
|
||||
There is a widget provided for integration of SSCam-Streaming devices into FTUI. For further information please be informed by the
|
||||
(german) FHEM Wiki article: <br>
|
||||
<a href="https://wiki.fhem.de/wiki/FTUI_Widget_f%C3%BCr_SSCam_Streaming_Devices_(SSCamSTRM)">FTUI Widget für SSCam Streaming Devices (SSCamSTRM)</a>.
|
||||
<br><br>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<a name="SSCamSTRMdefine"></a>
|
||||
<b>Define</b>
|
||||
@ -390,7 +454,17 @@ Dependend of the Streaming-Device state, different buttons are provided to start
|
||||
<br>
|
||||
|
||||
<a name="SSCamSTRMget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
<b>Get</b>
|
||||
<ul>
|
||||
<br>
|
||||
<ul>
|
||||
<li><b> get <name> html </b> </li>
|
||||
The stream object (camera live view, snapshots or replay) is fetched as HTML-code and depicted.
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
<br>
|
||||
</ul>
|
||||
|
||||
<a name="SSCamSTRMattr"></a>
|
||||
<b>Attributes</b>
|
||||
@ -459,13 +533,30 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="hideDisplayNameFTUI"></a>
|
||||
<li><b>hideDisplayNameFTUI</b><br>
|
||||
Hide the device/alias name (link to detail view) in FHEM TabletUI.
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="htmlattr"></a>
|
||||
<li><b>htmlattr</b><br>
|
||||
Additional HTML tags to manipulate the streaming device.
|
||||
<br><br>
|
||||
<ul>
|
||||
<b>Example: </b><br>
|
||||
attr <name> htmlattr width="480" height="560" <br>
|
||||
attr <name> htmlattr width="580" height="460" <br>
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="htmlattrFTUI"></a>
|
||||
<li><b>htmlattrFTUI</b><br>
|
||||
Additional HTML tags to manipulate the streaming device in TabletUI.
|
||||
<br><br>
|
||||
<ul>
|
||||
<b>Example: </b><br>
|
||||
attr <name> htmlattr width="580" height="460" <br>
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
@ -502,6 +593,18 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
attr <name> popupWindowSize width="600" height="425" <br>
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="ptzButtonSize"></a>
|
||||
<li><b>ptzButtonSize</b><br>
|
||||
Specifies the PTZ-panel button size (in %).
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="ptzButtonSizeFTUI"></a>
|
||||
<li><b>ptzButtonSizeFTUI</b><br>
|
||||
Specifies the PTZ-panel button size used in a Tablet UI (in %).
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
@ -513,7 +616,7 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
|
||||
<a name="SSCamSTRM"></a>
|
||||
<h3>SSCamSTRM</h3>
|
||||
|
||||
<ul>
|
||||
<br>
|
||||
Das Modul SSCamSTRM ist ein mit SSCam abgestimmtes Gerätemodul zur Definition von Streaming-Devices. <br>
|
||||
Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unterschiedliche Drucktasten angeboten:
|
||||
@ -536,6 +639,13 @@ Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unters
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
<b>Integration in FHEM TabletUI: </b> <br><br>
|
||||
Zur Integration von SSCam Streaming Devices (Typ SSCamSTRM) wird ein Widget bereitgestellt.
|
||||
Für weitere Information dazu bitte den Artikel im Wiki durchlesen: <br>
|
||||
<a href="https://wiki.fhem.de/wiki/FTUI_Widget_f%C3%BCr_SSCam_Streaming_Devices_(SSCamSTRM)">FTUI Widget für SSCam Streaming Devices (SSCamSTRM)</a>.
|
||||
<br><br><br>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<a name="SSCamSTRMdefine"></a>
|
||||
<b>Define</b>
|
||||
@ -568,7 +678,18 @@ Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unters
|
||||
<br>
|
||||
|
||||
<a name="SSCamSTRMget"></a>
|
||||
<b>Get</b> <ul>N/A</ul><br>
|
||||
<b>Get</b>
|
||||
<ul>
|
||||
<br>
|
||||
<ul>
|
||||
<li><b> get <name> html </b> </li>
|
||||
Das eingebundene Streamobjekt (Kamera Live View, Schnappschüsse oder Wiedergabe einer Aufnahme) wird als HTML-code
|
||||
abgerufen und dargestellt.
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
<br>
|
||||
</ul>
|
||||
|
||||
<a name="SSCamSTRMattr"></a>
|
||||
<b>Attribute</b>
|
||||
@ -637,13 +758,30 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="hideDisplayNameFTUI"></a>
|
||||
<li><b>hideDisplayNameFTUI</b><br>
|
||||
Verbirgt den Device/Alias-Namen (Link zur Detailansicht) im TabletUI.
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="htmlattr"></a>
|
||||
<li><b>htmlattr</b><br>
|
||||
Zusätzliche HTML Tags zur Darstellungsänderung im Streaming Device.
|
||||
Zusätzliche HTML Tags zur Darstellung im Streaming Device.
|
||||
<br><br>
|
||||
<ul>
|
||||
<b>Beispiel: </b><br>
|
||||
attr <name> htmlattr width="480" height="560" <br>
|
||||
attr <name> htmlattr width="580" height="460" <br>
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="htmlattrFTUI"></a>
|
||||
<li><b>htmlattrFTUI</b><br>
|
||||
Zusätzliche HTML Tags zur Darstellung des Streaming Device im TabletUI.
|
||||
<br><br>
|
||||
<ul>
|
||||
<b>Beispiel: </b><br>
|
||||
attr <name> htmlattr width="580" height="460" <br>
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
@ -679,6 +817,18 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
||||
attr <name> popupWindowSize width="600" height="425" <br>
|
||||
</ul>
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="ptzButtonSize"></a>
|
||||
<li><b>ptzButtonSize</b><br>
|
||||
Legt die Größe der Drucktasten des PTZ Paneels fest (in %).
|
||||
</li>
|
||||
<br>
|
||||
|
||||
<a name="ptzButtonSizeFTUI"></a>
|
||||
<li><b>ptzButtonSizeFTUI</b><br>
|
||||
Legt die Größe der Drucktasten des PTZ Paneels in einem Tablet UI fest (in %).
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
|
Loading…
x
Reference in New Issue
Block a user