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.
|
# 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.
|
# 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
|
- feature: 71_YAMAHA_NP: Added undocumented reverse-engineered
|
||||||
sound functionality :-)
|
sound functionality :-)
|
||||||
(balance, enhancer, equalizer)
|
(balance, enhancer, equalizer)
|
||||||
|
@ -48,6 +48,11 @@ eval "use FHEM::Meta;1" or my $modMetaAbsent = 1;
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
our %SSCam_vNotesIntern = (
|
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.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 ".
|
"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 ",
|
"bugfix userattr when changing Prests ",
|
||||||
@ -153,6 +158,7 @@ our %SSCam_vNotesIntern = (
|
|||||||
|
|
||||||
# Versions History extern
|
# Versions History extern
|
||||||
our %SSCam_vNotesExtern = (
|
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.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.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\", ".
|
"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
|
# getestete SVS-Version
|
||||||
my $compstat = "8.2.4";
|
my $compstat = "8.2.5";
|
||||||
|
|
||||||
# Aufbau Errorcode-Hashes (siehe Surveillance Station Web API)
|
# Aufbau Errorcode-Hashes (siehe Surveillance Station Web API)
|
||||||
my %SSCam_errauthlist = (
|
my %SSCam_errauthlist = (
|
||||||
@ -326,7 +332,7 @@ our %SSCam_ttips_en = (
|
|||||||
ttcmdstop => "Stopp playback of camera "§NAME§"",
|
ttcmdstop => "Stopp playback of camera "§NAME§"",
|
||||||
tthlsreact => "Reactivate HTTP Livestreaming Interface of camera "§NAME§".<br>The camera is enforced to restart HLS transmission.",
|
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§".",
|
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.",
|
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",
|
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",
|
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§"",
|
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.",
|
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§"",
|
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.",
|
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.",
|
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.",
|
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;
|
$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 $emtxt = AttrVal($name, "recEmailTxt", "");
|
||||||
my $at = join(" ",@a);
|
if($spec =~ /recEmailTxt:/) {
|
||||||
if($at =~ /recEmailTxt:/) {
|
$spec =~ m/.*recEmailTxt:"(.*)".*/i;
|
||||||
$at =~ m/.*recEmailTxt:"(.*)".*/i;
|
|
||||||
$emtxt = $1;
|
$emtxt = $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -898,9 +909,8 @@ sub SSCam_Set($@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $teletxt = AttrVal($name, "recTelegramTxt", "");
|
my $teletxt = AttrVal($name, "recTelegramTxt", "");
|
||||||
my $bt = join(" ",@a);
|
if($spec =~ /recTelegramTxt:/) {
|
||||||
if($bt =~ /recTelegramTxt:/) {
|
$spec =~ m/.*recTelegramTxt:"(.*)".*/i;
|
||||||
$bt =~ m/.*recTelegramTxt:"(.*)".*/i;
|
|
||||||
$teletxt = $1;
|
$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\"";}
|
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 $emtxt = $hash->{HELPER}{SMTPRECMSG}?delete $hash->{HELPER}{SMTPRECMSG}:"";
|
||||||
my $teletxt = $hash->{HELPER}{TELERECMSG}?delete $hash->{HELPER}{TELERECMSG}:"";
|
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");
|
SSCam_camstoprec("$name!_!$emtxt!_!$teletxt");
|
||||||
|
|
||||||
} elsif ($opt eq "snap" && SSCam_IsModelCam($hash)) {
|
} elsif ($opt eq "snap" && SSCam_IsModelCam($hash)) {
|
||||||
@ -931,12 +948,17 @@ sub SSCam_Set($@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Log3($name, 4, "$name - Trigger snapshots - Number: $num, Lag: $lag");
|
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 $emtxt = AttrVal($name, "snapEmailTxt", "");
|
||||||
my $at = join(" ",@a);
|
if($spec =~ /snapEmailTxt:/) {
|
||||||
if($at =~ /snapEmailTxt:/) {
|
$spec =~ m/.*snapEmailTxt:"(.*)".*/i;
|
||||||
$at =~ m/.*snapEmailTxt:"(.*)".*/i;
|
|
||||||
$emtxt = $1;
|
$emtxt = $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -948,9 +970,8 @@ sub SSCam_Set($@) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $teletxt = AttrVal($name, "snapTelegramTxt", "");
|
my $teletxt = AttrVal($name, "snapTelegramTxt", "");
|
||||||
my $bt = join(" ",@a);
|
if($spec =~ /snapTelegramTxt:/) {
|
||||||
if($bt =~ /snapTelegramTxt:/) {
|
$spec =~ m/.*snapTelegramTxt:"(.*)".*/i;
|
||||||
$bt =~ m/.*snapTelegramTxt:"(.*)".*/i;
|
|
||||||
$teletxt = $1;
|
$teletxt = $1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1355,6 +1376,13 @@ sub SSCam_Set($@) {
|
|||||||
|
|
||||||
} elsif ($opt eq "runView" && SSCam_IsModelCam($hash)) {
|
} 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\"";}
|
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 ($prop eq "live_open") {
|
||||||
if ($prop1) {$hash->{HELPER}{VIEWOPENROOM} = $prop1;} else {delete $hash->{HELPER}{VIEWOPENROOM};}
|
if ($prop1) {$hash->{HELPER}{VIEWOPENROOM} = $prop1;} else {delete $hash->{HELPER}{VIEWOPENROOM};}
|
||||||
$hash->{HELPER}{OPENWINDOW} = 1;
|
$hash->{HELPER}{OPENWINDOW} = 1;
|
||||||
@ -1427,12 +1455,20 @@ sub SSCam_Set($@) {
|
|||||||
} elsif ($opt eq "hlsactivate" && SSCam_IsModelCam($hash)) {
|
} elsif ($opt eq "hlsactivate" && SSCam_IsModelCam($hash)) {
|
||||||
# ohne SET-Menüeintrag
|
# 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\"";}
|
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);
|
SSCam_hlsactivate($hash);
|
||||||
|
|
||||||
} elsif ($opt eq "refresh" && SSCam_IsModelCam($hash)) {
|
} elsif ($opt eq "refresh" && SSCam_IsModelCam($hash)) {
|
||||||
# ohne SET-Menüeintrag
|
# ohne SET-Menüeintrag
|
||||||
if($prop =~ /STRM/) {
|
my $spec = join(" ",@a);
|
||||||
# Event in allen SSCamSTRM-Devices erzeugen um Contentwiedergabe aufzufrischen
|
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
|
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)) {
|
} 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\"";}
|
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);
|
SSCam_stopliveview($hash);
|
||||||
|
|
||||||
} elsif ($opt eq "setPreset" && SSCam_IsModelCam($hash)) {
|
} elsif ($opt eq "setPreset" && SSCam_IsModelCam($hash)) {
|
||||||
@ -1906,7 +1948,6 @@ sub SSCam_FWdetailFn ($$$$) {
|
|||||||
$ret .= $hash->{".setup"};
|
$ret .= $hash->{".setup"};
|
||||||
}
|
}
|
||||||
|
|
||||||
# return undef if(!AttrVal($d,"ptzPanel_use",1));
|
|
||||||
$hash->{".ptzhtml"} = SSCam_ptzpanel($d) if($hash->{".ptzhtml"} eq "");
|
$hash->{".ptzhtml"} = SSCam_ptzpanel($d) if($hash->{".ptzhtml"} eq "");
|
||||||
|
|
||||||
if($hash->{".ptzhtml"} ne "" && AttrVal($d,"ptzPanel_use",1)) {
|
if($hash->{".ptzhtml"} ne "" && AttrVal($d,"ptzPanel_use",1)) {
|
||||||
@ -5089,7 +5130,7 @@ sub SSCam_camop_parse ($) {
|
|||||||
$sendrecs{$sn}{createdTm} = $createdTm;
|
$sendrecs{$sn}{createdTm} = $createdTm;
|
||||||
$sendrecs{$sn}{fileName} = $fileName;
|
$sendrecs{$sn}{fileName} = $fileName;
|
||||||
$sendrecs{$sn}{".imageData"} = $myjson;
|
$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
|
# prüfen ob Recording als Email / Telegram versendet werden soll
|
||||||
SSCam_prepareSendData ($hash, $OpMode, \%sendrecs);
|
SSCam_prepareSendData ($hash, $OpMode, \%sendrecs);
|
||||||
@ -5443,6 +5484,10 @@ sub SSCam_camop_parse ($) {
|
|||||||
my $sn = 0;
|
my $sn = 0;
|
||||||
my %sendsnaps = (); # Schnappschuss Hash zum Versand wird leer erstellt
|
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]) {
|
while ($data->{'data'}{'data'}[$i]) {
|
||||||
if(!$data->{'data'}{'data'}[$i]{'camName'} || $data->{'data'}{'data'}[$i]{'camName'} ne $camname) { # Forum:#97706
|
if(!$data->{'data'}{'data'}[$i]{'camName'} || $data->{'data'}{'data'}[$i]{'camName'} ne $camname) { # Forum:#97706
|
||||||
$i += 1;
|
$i += 1;
|
||||||
@ -5467,19 +5512,32 @@ sub SSCam_camop_parse ($) {
|
|||||||
$sendsnaps{$sn}{".imageData"} = $imageData;
|
$sendsnaps{$sn}{".imageData"} = $imageData;
|
||||||
Log3($name,4, "$name - Snap '$sn' added to send gallery hash: ID => $snapid, File => $fileName, Created => $createdTm");
|
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
|
# Snaphash erstellen
|
||||||
if($hash->{HELPER}{".SNAPHASH"}{$sn}) {
|
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{snapid} = $snapid;
|
$hash->{HELPER}{".SNAPHASH"}{$sn}{snapid} = $snapid;
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{createdTm} = $createdTm;
|
$hash->{HELPER}{".SNAPHASH"}{$sn}{createdTm} = $createdTm;
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{fileName} = $fileName;
|
$hash->{HELPER}{".SNAPHASH"}{$sn}{fileName} = $fileName;
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{imageData} = $imageData;
|
$hash->{HELPER}{".SNAPHASH"}{$sn}{imageData} = $imageData;
|
||||||
Log3($name,4, "$name - Snap '$sn' added to gallery hash: ID => $snapid, File => $fileName, Created => $createdTm");
|
Log3($name,4, "$name - Snap '$sn' added to gallery hash: ID => $snapid, File => $fileName, Created => $createdTm");
|
||||||
}
|
|
||||||
|
|
||||||
$sn += 1;
|
$sn += 1;
|
||||||
$i += 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
|
# prüfen ob Schnappschuß versendet werden soll
|
||||||
SSCam_prepareSendData ($hash, $OpMode, \%sendsnaps);
|
SSCam_prepareSendData ($hash, $OpMode, \%sendsnaps);
|
||||||
|
|
||||||
@ -5491,6 +5549,10 @@ sub SSCam_camop_parse ($) {
|
|||||||
|
|
||||||
$hash->{HELPER}{TOTALCNT} = $data->{data}{total}; # total Anzahl Schnappschüsse
|
$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]) {
|
while ($data->{'data'}{'data'}[$i]) {
|
||||||
if(!$data->{'data'}{'data'}[$i]{'camName'} || $data->{'data'}{'data'}[$i]{'camName'} ne $camname) { # Forum:#97706
|
if(!$data->{'data'}{'data'}[$i]{'camName'} || $data->{'data'}{'data'}[$i]{'camName'} ne $camname) { # Forum:#97706
|
||||||
$i += 1;
|
$i += 1;
|
||||||
@ -5508,15 +5570,32 @@ sub SSCam_camop_parse ($) {
|
|||||||
} else {
|
} else {
|
||||||
$createdTm = "$d[0]-$d[1]-$d[2] / $t[1]";
|
$createdTm = "$d[0]-$d[1]-$d[2] / $t[1]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Snaphash erstellen
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{snapid} = $snapid;
|
$hash->{HELPER}{".SNAPHASH"}{$sn}{snapid} = $snapid;
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{createdTm} = $createdTm;
|
$hash->{HELPER}{".SNAPHASH"}{$sn}{createdTm} = $createdTm;
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{fileName} = $fileName;
|
$hash->{HELPER}{".SNAPHASH"}{$sn}{fileName} = $fileName;
|
||||||
$hash->{HELPER}{".SNAPHASH"}{$sn}{imageData} = $imageData;
|
$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}");
|
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;
|
$sn += 1;
|
||||||
$i += 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
|
# Direktausgabe Snaphash wenn nicht gepollt wird
|
||||||
if(!AttrVal($name, "snapGalleryBoost",0)) {
|
if(!AttrVal($name, "snapGalleryBoost",0)) {
|
||||||
my $htmlCode = SSCam_composegallery($name);
|
my $htmlCode = SSCam_composegallery($name);
|
||||||
@ -5539,10 +5618,9 @@ sub SSCam_camop_parse ($) {
|
|||||||
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
||||||
|
|
||||||
######## fallabhängige Eventgenerierung ########
|
######## fallabhängige Eventgenerierung ########
|
||||||
if ($hash->{HELPER}{SNAPBYSTRMDEV} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
if ($hash->{HELPER}{INFORM} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
||||||
# Snap durch SSCamSTRM-Device ausgelöst
|
# Snap durch SSCamSTRM-Device ausgelöst
|
||||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
||||||
delete $hash->{HELPER}{SNAPBYSTRMDEV};
|
|
||||||
delete $hash->{HELPER}{LSNAPBYSTRMDEV};
|
delete $hash->{HELPER}{LSNAPBYSTRMDEV};
|
||||||
} elsif ($hash->{HELPER}{LSNAPBYDEV}) {
|
} elsif ($hash->{HELPER}{LSNAPBYDEV}) {
|
||||||
SSCam_refresh($hash,0,1,0); # kein Room-Refresh, SSCam-state-Event, kein SSCamSTRM-Event
|
SSCam_refresh($hash,0,1,0); # kein Room-Refresh, SSCam-state-Event, kein SSCamSTRM-Event
|
||||||
@ -5550,26 +5628,6 @@ sub SSCam_camop_parse ($) {
|
|||||||
} else {
|
} else {
|
||||||
SSCam_refresh($hash,0,0,0); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
|
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$/) {
|
} elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/) {
|
||||||
# HLS Streaming wurde aktiviert
|
# HLS Streaming wurde aktiviert
|
||||||
@ -6653,13 +6711,11 @@ return($hash,$success,$myjson);
|
|||||||
|
|
||||||
######################################################################################################
|
######################################################################################################
|
||||||
# Refresh eines Raumes aus $hash->{HELPER}{STRMROOM}
|
# 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)
|
# $hash, $pload (1=Page reload), SSCam-state-Event(1=Event), SSCamSTRM-Event (1=Event)
|
||||||
######################################################################################################
|
######################################################################################################
|
||||||
sub SSCam_refresh($$$$) {
|
sub SSCam_refresh($$$$) {
|
||||||
my ($hash,$pload,$lpoll_scm,$lpoll_strm) = @_;
|
my ($hash,$pload,$lpoll_scm,$lpoll_strm) = @_;
|
||||||
my $name;
|
my ($name,$st);
|
||||||
if (ref $hash ne "HASH")
|
if (ref $hash ne "HASH")
|
||||||
{
|
{
|
||||||
($name,$pload,$lpoll_scm,$lpoll_strm) = split ",",$hash;
|
($name,$pload,$lpoll_scm,$lpoll_strm) = split ",",$hash;
|
||||||
@ -6669,48 +6725,53 @@ sub SSCam_refresh($$$$) {
|
|||||||
}
|
}
|
||||||
my $fpr = 0;
|
my $fpr = 0;
|
||||||
|
|
||||||
# Kontext des SSCamSTRM-Devices speichern für Refresh
|
# SSCamSTRM-Device mit hinterlegter FUUID ($hash->{HELPER}{INFORM}) selektieren
|
||||||
my $sd = $hash->{HELPER}{STRMDEV}?$hash->{HELPER}{STRMDEV}:"\"n.a.\""; # Name des aufrufenden SSCamSTRM-Devices
|
my @spgs = devspec2array("TYPE=SSCamSTRM");
|
||||||
my $sr = $hash->{HELPER}{STRMROOM}?$hash->{HELPER}{STRMROOM}:"\"n.a.\""; # Raum aus dem das SSCamSTRM-Device die Funktion aufrief
|
my $room = "";
|
||||||
my $sl = $hash->{HELPER}{STRMDETAIL}?$hash->{HELPER}{STRMDETAIL}:"\"n.a.\""; # Name des SSCamSTRM-Devices (wenn Detailansicht)
|
foreach(@spgs) {
|
||||||
$fpr = AttrVal($hash->{HELPER}{STRMDEV},"forcePageRefresh",0) if($hash->{HELPER}{STRMDEV});
|
if($defs{$_}{PARENT} eq $name) {
|
||||||
Log3($name, 4, "$name - SSCam_refresh - caller: $sd, callerroom: $sr, detail: $sl, pload: $pload, forcePageRefresh: $fpr, event_STRMdev: $lpoll_strm");
|
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
|
# Page-Reload
|
||||||
if($pload && $hash->{HELPER}{STRMROOM} && $hash->{HELPER}{STRMDETAIL}) {
|
if($pload && $room) {
|
||||||
if($hash->{HELPER}{STRMROOM} && !$hash->{HELPER}{STRMDETAIL} && !$fpr) {
|
if(!$fpr) {
|
||||||
Log3($name, 4, "$name - SSCam_refresh jetzt");
|
# nur Räume mit dem SSCamSTRM-Device reloaden
|
||||||
# trifft zu wenn in einer Raumansicht
|
my @rooms = split(",",$room);
|
||||||
my @rooms = split(",",$hash->{HELPER}{STRMROOM});
|
|
||||||
foreach (@rooms) {
|
foreach (@rooms) {
|
||||||
my $room = $_;
|
my $r = $_;
|
||||||
{ map { FW_directNotify("FILTER=room=$room", "#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
|
{ 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
|
# trifft zu bei Detailansicht oder im FLOORPLAN bzw. Dashboard oder wenn Seitenrefresh mit dem
|
||||||
# SSCamSTRM-Attribut "forcePageRefresh" erzwungen wird
|
# SSCamSTRM-Attribut "forcePageRefresh" erzwungen wird
|
||||||
{ map { FW_directNotify("#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
|
{ 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)
|
# 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) {
|
if($lpoll_scm) {
|
||||||
readingsSingleUpdate($hash,"state", $st, 1);
|
readingsSingleUpdate($hash,"state", $st, 1);
|
||||||
} else {
|
} else {
|
||||||
readingsSingleUpdate($hash,"state", $st, 0);
|
readingsSingleUpdate($hash,"state", $st, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
# parentState des SSCamSTRM-Device mit Opmode updaten (mit/ohne Event)
|
# parentState des SSCamSTRM-Device updaten
|
||||||
if($hash->{HELPER}{STRMDEV}) {
|
$st = ReadingsVal($name, "state", "initialized");
|
||||||
my $strmhash = $defs{$hash->{HELPER}{STRMDEV}};
|
foreach(@spgs) {
|
||||||
if($lpoll_strm) {
|
if($defs{$_}{PARENT} eq $name) {
|
||||||
readingsSingleUpdate($strmhash,"parentState", $hash->{OPMODE}, 1);
|
next if(IsDisabled($defs{$_}{NAME}) || !$hash->{HELPER}{INFORM} || $hash->{HELPER}{INFORM} ne $defs{$_}{FUUID});
|
||||||
} else {
|
readingsBeginUpdate($defs{$_});
|
||||||
readingsSingleUpdate($strmhash,"parentState", $hash->{OPMODE}, 0);
|
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
|
# konvertiere alle ptzPanel_rowXX-attribute zu html-Code für
|
||||||
# das generierte Widget und das weblink-Device ptzpanel_$name
|
# das generierte Widget und das weblink-Device ptzpanel_$name
|
||||||
###############################################################################
|
###############################################################################
|
||||||
sub SSCam_ptzpanel($;$$) {
|
sub SSCam_ptzpanel(@) {
|
||||||
my ($name,$ptzcdev,$ptzcontrol) = @_;
|
my ($name,$ptzcdev,$ptzcontrol,$ftui) = @_;
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
my $iconpath = AttrVal("$name","ptzPanel_iconPath","www/images/sscam");
|
my $iconpath = AttrVal("$name","ptzPanel_iconPath","www/images/sscam");
|
||||||
my $iconprefix = AttrVal("$name","ptzPanel_iconPrefix","black_btn_");
|
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 $valPresets = ReadingsVal("$name","Presets","");
|
||||||
my $valPatrols = ReadingsVal("$name","Patrols","");
|
my $valPatrols = ReadingsVal("$name","Patrols","");
|
||||||
my $rowisset = 0;
|
my $rowisset = 0;
|
||||||
@ -6900,8 +6963,9 @@ sub SSCam_ptzpanel($;$$) {
|
|||||||
|
|
||||||
return "" if(SSCam_myVersion($hash) <= 71);
|
return "" if(SSCam_myVersion($hash) <= 71);
|
||||||
|
|
||||||
$ptz_ret = "<div class=\"ptzpanel\">";
|
$ptz_ret = "";
|
||||||
$ptz_ret.= '<table class="rc_body">';
|
$ptz_ret .= "<style>TD.ptzcontrol {padding: 2px 2px;}</style>";
|
||||||
|
$ptz_ret .= '<table class="rc_body">';
|
||||||
|
|
||||||
foreach my $rownr (0..9) {
|
foreach my $rownr (0..9) {
|
||||||
$rownr = sprintf("%2.2d",$rownr);
|
$rownr = sprintf("%2.2d",$rownr);
|
||||||
@ -6912,7 +6976,7 @@ sub SSCam_ptzpanel($;$$) {
|
|||||||
my @btn = split (",",$row); # die Anzahl Buttons in einer Reihe
|
my @btn = split (",",$row); # die Anzahl Buttons in einer Reihe
|
||||||
|
|
||||||
foreach my $btnnr (0..$#btn) {
|
foreach my $btnnr (0..$#btn) {
|
||||||
$ptz_ret .= '<td class="rc_button">';
|
$ptz_ret .= '<td class="ptzcontrol">';
|
||||||
if ($btn[$btnnr] ne "") {
|
if ($btn[$btnnr] ne "") {
|
||||||
my $cmd;
|
my $cmd;
|
||||||
my $img;
|
my $img;
|
||||||
@ -6925,12 +6989,17 @@ sub SSCam_ptzpanel($;$$) {
|
|||||||
}
|
}
|
||||||
if ($img =~ m/\.svg/) { # Verwendung für SVG's
|
if ($img =~ m/\.svg/) { # Verwendung für SVG's
|
||||||
$img = FW_makeImage($img, $cmd, "rc-button");
|
$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 {
|
} 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") {
|
if ($cmd || $cmd eq "0") {
|
||||||
$cmd = "cmd=set $name $cmd";
|
my $cmd1 = "FW_cmd('$FW_ME$FW_subdir?XHR=1&cmd=set $name $cmd')"; # $FW_subdir = Sub-path in URL, used by FLOORPLAN/weblink
|
||||||
$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
|
$cmd1 = "ftui.setFhemStatus('set $name $cmd')" if($ftui);
|
||||||
|
$ptz_ret .= "<a onClick=\"$cmd1\">$img</a>";
|
||||||
} else {
|
} else {
|
||||||
$ptz_ret .= $img;
|
$ptz_ret .= $img;
|
||||||
}
|
}
|
||||||
@ -6942,11 +7011,10 @@ sub SSCam_ptzpanel($;$$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ptz_ret .= "</table>";
|
$ptz_ret .= "</table>";
|
||||||
$ptz_ret .= "</div>";
|
|
||||||
|
|
||||||
########################
|
########################
|
||||||
# add Preset & Patrols
|
# add Preset & Patrols
|
||||||
|
if(!$ftui) {
|
||||||
my ($Presets,$Patrols,$fn);
|
my ($Presets,$Patrols,$fn);
|
||||||
my $cmdPreset = "goPreset";
|
my $cmdPreset = "goPreset";
|
||||||
my $cmdPatrol = "runPatrol";
|
my $cmdPatrol = "runPatrol";
|
||||||
@ -6971,7 +7039,6 @@ sub SSCam_ptzpanel($;$$) {
|
|||||||
last if(defined($Patrols));
|
last if(defined($Patrols));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Rahmenklasse
|
# Rahmenklasse
|
||||||
$ptz_ret .= "<div class=\"ptzpanel\">";
|
$ptz_ret .= "<div class=\"ptzpanel\">";
|
||||||
$ptz_ret .= "<table class=\"rc_body\">";
|
$ptz_ret .= "<table class=\"rc_body\">";
|
||||||
@ -6998,6 +7065,7 @@ sub SSCam_ptzpanel($;$$) {
|
|||||||
$ptz_ret .= "</div>";
|
$ptz_ret .= "</div>";
|
||||||
|
|
||||||
#####################
|
#####################
|
||||||
|
}
|
||||||
|
|
||||||
if ($rowisset) {
|
if ($rowisset) {
|
||||||
return $ptz_ret;
|
return $ptz_ret;
|
||||||
@ -7088,8 +7156,8 @@ return;
|
|||||||
# $fmt = Streaming Format
|
# $fmt = Streaming Format
|
||||||
#
|
#
|
||||||
######################################################################################
|
######################################################################################
|
||||||
sub SSCam_StreamDev($$$) {
|
sub SSCam_StreamDev($$$;$) {
|
||||||
my ($camname,$strmdev,$fmt) = @_;
|
my ($camname,$strmdev,$fmt,$ftui) = @_;
|
||||||
my $hash = $defs{$camname};
|
my $hash = $defs{$camname};
|
||||||
my $wltype = $hash->{HELPER}{WLTYPE};
|
my $wltype = $hash->{HELPER}{WLTYPE};
|
||||||
my $serveraddr = $hash->{SERVERADDR};
|
my $serveraddr = $hash->{SERVERADDR};
|
||||||
@ -7106,47 +7174,77 @@ sub SSCam_StreamDev($$$) {
|
|||||||
my $camid = $hash->{CAMID};
|
my $camid = $hash->{CAMID};
|
||||||
my $sid = $hash->{HELPER}{SID};
|
my $sid = $hash->{HELPER}{SID};
|
||||||
my $proto = $hash->{PROTOCOL};
|
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
|
# Kontext des SSCamSTRM-Devices speichern für SSCam_refresh
|
||||||
$hash->{HELPER}{STRMDEV} = $strmdev; # Name des aufrufenden SSCamSTRM-Devices
|
$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}{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}{STRMDETAIL} = $FW_detail?$FW_detail:""; # Name des SSCamSTRM-Devices (wenn Detailansicht)
|
||||||
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
|
my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
|
||||||
|
my $uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices
|
||||||
delete $streamHash->{HELPER}{STREAM};
|
delete $streamHash->{HELPER}{STREAM};
|
||||||
delete $streamHash->{HELPER}{STREAMACTIVE}; # Statusbit ob ein Stream aktiviert ist
|
delete $streamHash->{HELPER}{STREAMACTIVE}; # Statusbit ob ein Stream aktiviert ist
|
||||||
|
|
||||||
# Definition Tasten
|
# Definition Tasten
|
||||||
my $imgblank = "<img src=\"$FW_ME/www/images/sscam/black_btn_CAMBLANK.png\">"; # nicht sichtbare Leertaste
|
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 $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 $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 $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 $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 $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 $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 $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 $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 $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 $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 $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\">";
|
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
|
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
|
my $pws = AttrVal($strmdev, "popupWindowSize", ""); # Größe eines Popups
|
||||||
$pws =~ s/"//g if($pws);
|
$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);
|
my $StmKey = ReadingsVal($camname,"StmKey",undef);
|
||||||
|
|
||||||
# Javascript Bibliothek für Tooltips (http://www.walterzorn.de/tooltip/tooltip.htm#download) und Texte
|
# Javascript Bibliothek für Tooltips (http://www.walterzorn.de/tooltip/tooltip.htm#download) und Texte
|
||||||
@ -7183,13 +7281,18 @@ sub SSCam_StreamDev($$$) {
|
|||||||
|
|
||||||
$ret = "";
|
$ret = "";
|
||||||
$ret .= "<script type=\"text/javascript\" src=\"$ttjs\"></script>";
|
$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 .= '<tbody>';
|
||||||
$ret .= '<tr class="odd">';
|
$ret .= '<tr class="odd">';
|
||||||
|
|
||||||
if(!$StmKey || ReadingsVal($camname, "Availability", "") ne "enabled" || IsDisabled($camname)) {
|
if(!$StmKey || ReadingsVal($camname, "Availability", "") ne "enabled" || IsDisabled($camname)) {
|
||||||
# Ausgabe bei Fehler
|
# 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 = !$StmKey?"Camera $cam has no Reading \"StmKey\" set !":"Cam \"$cam\" is disabled";
|
||||||
$cause = "Camera \"$cam\" is disabled" if(IsDisabled($camname));
|
$cause = "Camera \"$cam\" is disabled" if(IsDisabled($camname));
|
||||||
$ret .= "<td> <br> <b> $cause </b> <br><br></td>";
|
$ret .= "<td> <br> <b> $cause </b> <br><br></td>";
|
||||||
@ -7212,22 +7315,26 @@ sub SSCam_StreamDev($$$) {
|
|||||||
if($apiaudiostmmaxver) {
|
if($apiaudiostmmaxver) {
|
||||||
$audiolink = "$proto://$serveraddr:$serverport/webapi/$apiaudiostmpath?api=$apiaudiostm&version=$apiaudiostmmaxver&method=Stream&cameraId=$camid&_sid=$sid";
|
$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>";
|
$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}{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
|
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||||
# Aufnahmebutton endlos Start
|
# 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 {
|
} else {
|
||||||
# Aufnahmebutton Stop
|
# 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>";
|
$ret .= "</td>";
|
||||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||||
if($ptz_ret) {
|
if($ptz_ret) {
|
||||||
$ret .= "<td>$ptz_ret</td>";
|
$ret .= "<td>$ptz_ret</td>";
|
||||||
}
|
}
|
||||||
@ -7246,8 +7353,12 @@ sub SSCam_StreamDev($$$) {
|
|||||||
$link = $hash->{HELPER}{".LASTSNAP"};
|
$link = $hash->{HELPER}{".LASTSNAP"};
|
||||||
my $gattr = (AttrVal($camname,"snapGallerySize","Icon") eq "Full")?$ha:"";
|
my $gattr = (AttrVal($camname,"snapGallerySize","Icon") eq "Full")?$ha:"";
|
||||||
if($link) {
|
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 .= "<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>";
|
$ret .= "</td>";
|
||||||
$streamHash->{HELPER}{STREAM} = "<img src=data:image/jpeg;base64,$link $pws>"; # Stream für "get <SSCamSTRM-Device> popupStream" speichern
|
$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
|
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
||||||
@ -7289,19 +7400,19 @@ sub SSCam_StreamDev($$$) {
|
|||||||
}
|
}
|
||||||
$ret .= "<br>";
|
$ret .= "<br>";
|
||||||
Log3($strmdev, 4, "$strmdev - generic Stream params:\n$htag");
|
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;
|
$ret .= $imgblank;
|
||||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||||
# Aufnahmebutton endlos Start
|
# 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 {
|
} else {
|
||||||
# Aufnahmebutton Stop
|
# 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>";
|
$ret .= "</td>";
|
||||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||||
if($ptz_ret) {
|
if($ptz_ret) {
|
||||||
$ret .= "<td>$ptz_ret</td>";
|
$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}{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
|
$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;
|
$ret .= $imgblank;
|
||||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||||
# Aufnahmebutton endlos Start
|
# 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 {
|
} else {
|
||||||
# Aufnahmebutton Stop
|
# 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>";
|
$ret .= "</td>";
|
||||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||||
if($ptz_ret) {
|
if($ptz_ret) {
|
||||||
$ret .= "<td>$ptz_ret</td>";
|
$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/) {
|
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>";
|
$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 {
|
} else {
|
||||||
|
if(!$ftui) {
|
||||||
$ret .= "<td><img src=$link $ha onClick=\"FW_okDialog('<img src=$link $pws>')\"><br>" if($link);
|
$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}{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
|
$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 .= $imgblank;
|
||||||
if($hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
|
if($hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
|
||||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||||
# Aufnahmebutton endlos Start
|
# 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 {
|
} else {
|
||||||
# Aufnahmebutton Stop
|
# 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>";
|
$ret .= "</td>";
|
||||||
if(AttrVal($camname,"ptzPanel_use",1) && $hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
|
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) {
|
if($ptz_ret) {
|
||||||
$ret .= "<td>$ptz_ret</td>";
|
$ret .= "<td>$ptz_ret</td>";
|
||||||
}
|
}
|
||||||
@ -7396,15 +7511,21 @@ sub SSCam_StreamDev($$$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} elsif ($wltype =~ /iframe/) {
|
} elsif ($wltype =~ /iframe/) {
|
||||||
|
if(!$ftui) {
|
||||||
$ret .= "<td><iframe src=$link $ha controls autoplay onClick=\"FW_okDialog('<img src=$link $pws>')\">
|
$ret .= "<td><iframe src=$link $ha controls autoplay onClick=\"FW_okDialog('<img src=$link $pws>')\">
|
||||||
Iframes disabled
|
Iframes disabled
|
||||||
</iframe><br>" if($link);
|
</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>".
|
$streamHash->{HELPER}{STREAM} = "<iframe src=$link $pws controls autoplay>".
|
||||||
"Iframes disabled".
|
"Iframes disabled".
|
||||||
"</iframe>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
"</iframe>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
$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 .= "<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 .= "</td>";
|
$ret .= "</td>";
|
||||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) {
|
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) {
|
||||||
$ret .= '</tr>';
|
$ret .= '</tr>';
|
||||||
@ -7430,7 +7551,7 @@ sub SSCam_StreamDev($$$) {
|
|||||||
"Your browser does not support the video tag".
|
"Your browser does not support the video tag".
|
||||||
"</video>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
"</video>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
$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>";
|
$ret .= "</td>";
|
||||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) {
|
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) {
|
||||||
$ret .= '</tr>';
|
$ret .= '</tr>';
|
||||||
@ -7442,16 +7563,24 @@ sub SSCam_StreamDev($$$) {
|
|||||||
$ret .= "<td></td>" if(AttrVal($camname,"ptzPanel_use",0));
|
$ret .= "<td></td>" if(AttrVal($camname,"ptzPanel_use",0));
|
||||||
}
|
}
|
||||||
} elsif($wltype =~ /base64img/) {
|
} 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);
|
$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}{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
|
$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 .= $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>";
|
$ret .= "</td>";
|
||||||
|
|
||||||
} elsif($wltype =~ /embed/) {
|
} elsif($wltype =~ /embed/) {
|
||||||
|
if(!$ftui) {
|
||||||
$ret .= "<td><embed src=$link $ha onClick=\"FW_okDialog('<img src=$link $pws>')\"></td>" if($link);
|
$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}{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
|
$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".
|
"Your browser does not support the video tag".
|
||||||
"</video>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
"</video>"; # Stream für "set <SSCamSTRM-Device> popupStream" speichern
|
||||||
$streamHash->{HELPER}{STREAMACTIVE} = 1 if($link); # Statusbit wenn ein Stream aktiviert ist
|
$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 .= "<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 .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdhlsreact')\" onmouseover=\"Tip('$tthlsreact')\" onmouseout=\"UnTip()\">$imghlsreact </a>";
|
$ret .= "<a onClick=\"$cmdhlsreact\" onmouseover=\"Tip('$tthlsreact')\" onmouseout=\"UnTip()\">$imghlsreact </a>";
|
||||||
$ret .= $imgblank;
|
$ret .= $imgblank;
|
||||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||||
# Aufnahmebutton endlos Start
|
# 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 {
|
} else {
|
||||||
# Aufnahmebutton Stop
|
# 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>";
|
$ret .= "</td>";
|
||||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
|
||||||
if($ptz_ret) {
|
if($ptz_ret) {
|
||||||
$ret .= "<td>$ptz_ret</td>";
|
$ret .= "<td>$ptz_ret</td>";
|
||||||
}
|
}
|
||||||
@ -7493,12 +7622,12 @@ sub SSCam_StreamDev($$$) {
|
|||||||
my $cam = AttrVal($camname, "alias", $camname);
|
my $cam = AttrVal($camname, "alias", $camname);
|
||||||
$cause = "Playback cam \"$cam\" switched off";
|
$cause = "Playback cam \"$cam\" switched off";
|
||||||
$ret .= "<td> <br> <b> $cause </b> <br><br>";
|
$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=\"$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=\"$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=\"$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=\"$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=\"$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=\"$cmdlsnaprun\" onmouseover=\"Tip('$ttlsnaprun')\" onmouseout=\"UnTip()\">$imglsnaprun </a>";
|
||||||
$ret .= "</td>";
|
$ret .= "</td>";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -7564,8 +7693,8 @@ return $ret;
|
|||||||
# Schnappschußgalerie zusammenstellen
|
# Schnappschußgalerie zusammenstellen
|
||||||
# Verwendung durch SSCamSTRM-Devices
|
# Verwendung durch SSCamSTRM-Devices
|
||||||
###############################################################################
|
###############################################################################
|
||||||
sub SSCam_composegallery ($;$$) {
|
sub SSCam_composegallery ($;$$$) {
|
||||||
my ($name,$strmdev,$model) = @_;
|
my ($name,$strmdev,$model,$ftui) = @_;
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
my $camname = $hash->{CAMNAME};
|
my $camname = $hash->{CAMNAME};
|
||||||
my $allsnaps = $hash->{HELPER}{".SNAPHASH"}; # = %allsnaps
|
my $allsnaps = $hash->{HELPER}{".SNAPHASH"}; # = %allsnaps
|
||||||
@ -7575,6 +7704,9 @@ sub SSCam_composegallery ($;$$) {
|
|||||||
my $limit = $hash->{HELPER}{SNAPLIMIT}; # abgerufene Anzahl Snaps
|
my $limit = $hash->{HELPER}{SNAPLIMIT}; # abgerufene Anzahl Snaps
|
||||||
my $totalcnt = $hash->{HELPER}{TOTALCNT}; # totale 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
|
$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"," "))
|
my $lupt = ((ReadingsTimestamp($name,"LastSnapTime"," ") gt ReadingsTimestamp($name,"LastUpdateTime"," "))
|
||||||
? ReadingsTimestamp($name,"LastSnapTime"," ")
|
? ReadingsTimestamp($name,"LastSnapTime"," ")
|
||||||
: ReadingsTimestamp($name,"LastUpdateTime"," ")); # letzte Aktualisierung
|
: ReadingsTimestamp($name,"LastUpdateTime"," ")); # letzte Aktualisierung
|
||||||
@ -7584,22 +7716,35 @@ sub SSCam_composegallery ($;$$) {
|
|||||||
$hash->{HELPER}{STRMDEV} = $strmdev; # Name des aufrufenden SSCamSTRM-Devices
|
$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}{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}{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\">";
|
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 $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
|
# falls "SSCam_composegallery" durch ein SSCamSTRM-Device aufgerufen wird
|
||||||
my $devWlink = "";
|
|
||||||
my $pws = "";
|
my $pws = "";
|
||||||
if ($strmdev) {
|
if ($strmdev) {
|
||||||
$pws = AttrVal($strmdev, "popupWindowSize", ""); # Größe eines Popups (umgelegt: Forum:https://forum.fhem.de/index.php/topic,45671.msg927912.html#msg927912)
|
$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);
|
$pws =~ s/"//g if($pws);
|
||||||
my $wlha = AttrVal($strmdev, "htmlattr", undef);
|
$ha = AttrVal($strmdev, "htmlattr", $ha); # htmlattr vom SSCamSTRM-Device übernehmen falls von SSCamSTRM-Device aufgerufen und gesetzt
|
||||||
$ha = (defined($wlha))?$wlha:$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
|
# 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
|
# Javascript Bibliothek für Tooltips (http://www.walterzorn.de/tooltip/tooltip.htm#download) und Texte
|
||||||
my $ttjs = "/fhem/pgm2/sscam_tooltip.js";
|
my $ttjs = "/fhem/pgm2/sscam_tooltip.js";
|
||||||
my ($ttsnap);
|
|
||||||
if(AttrVal("global","language","EN") =~ /EN/) {
|
my $ttsnap = $SSCam_ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
|
||||||
$ttsnap = $SSCam_ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
|
if(AttrVal("global","language","EN") =~ /DE/) {
|
||||||
} else {
|
|
||||||
$ttsnap = $SSCam_ttips_de{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
|
$ttsnap = $SSCam_ttips_de{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Header Generierung
|
||||||
my $header;
|
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") {
|
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));
|
$header .= " (Possibly another snapshots are available. Last recall: $lupt)<br>" if(AttrVal($name,"snapGalleryBoost",0));
|
||||||
} else {
|
} 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 .= " (Eventuell sind neuere Aufnahmen verfügbar. Letzter Abruf: $lupt)<br>" if(AttrVal($name,"snapGalleryBoost",0));
|
||||||
}
|
}
|
||||||
$header .= $sgbnote;
|
$header .= $sgbnote;
|
||||||
@ -7635,8 +7787,8 @@ sub SSCam_composegallery ($;$$) {
|
|||||||
my ($htmlCode,$ct);
|
my ($htmlCode,$ct);
|
||||||
$htmlCode = "<html>";
|
$htmlCode = "<html>";
|
||||||
$htmlCode .= "<script type=\"text/javascript\" src=\"$ttjs\"></script>";
|
$htmlCode .= "<script type=\"text/javascript\" src=\"$ttjs\"></script>";
|
||||||
$htmlCode .= sprintf("$devWlink <div class=\"makeTable wide\"; style=\"text-align:center\"> $header <br>");
|
$htmlCode .= "<div class=\"makeTable wide\"; style=\"text-align:$hdrAlign\"> $header <br>";
|
||||||
$htmlCode .= "<table class=\"block wide internals\">";
|
$htmlCode .= '<table class="block wide internals" style="margin-left:auto;margin-right:auto">';
|
||||||
$htmlCode .= "<tbody>";
|
$htmlCode .= "<tbody>";
|
||||||
$htmlCode .= "<tr class=\"odd\">";
|
$htmlCode .= "<tr class=\"odd\">";
|
||||||
my $cell = 1;
|
my $cell = 1;
|
||||||
@ -7644,7 +7796,9 @@ sub SSCam_composegallery ($;$$) {
|
|||||||
foreach my $key (@as) {
|
foreach my $key (@as) {
|
||||||
$ct = $allsnaps->{$key}{createdTm};
|
$ct = $allsnaps->{$key}{createdTm};
|
||||||
my $idata = "";
|
my $idata = "";
|
||||||
|
if(!$ftui) {
|
||||||
$idata = "onClick=\"FW_okDialog('<img src=data:image/jpeg;base64,$allsnaps->{$key}{imageData} $pws>')\"" if(AttrVal($name,"snapGalleryBoost",0));
|
$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>" );
|
my $html = sprintf("<td>$ct<br> <img src=\"data:image/jpeg;base64,$allsnaps->{$key}{imageData}\" $gattr $idata> </td>" );
|
||||||
$cell++;
|
$cell++;
|
||||||
|
|
||||||
@ -7666,7 +7820,7 @@ sub SSCam_composegallery ($;$$) {
|
|||||||
$htmlCode .= "</tbody>";
|
$htmlCode .= "</tbody>";
|
||||||
$htmlCode .= "</table>";
|
$htmlCode .= "</table>";
|
||||||
$htmlCode .= "</div>";
|
$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>";
|
$htmlCode .= "</html>";
|
||||||
|
|
||||||
return $htmlCode;
|
return $htmlCode;
|
||||||
@ -9155,9 +9309,16 @@ return;
|
|||||||
For example the recordings are stored for a defined time in Surveillance Station and will be deleted after that period.<br><br>
|
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>
|
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> Prerequisites </b> <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>
|
<ul>
|
||||||
This module uses the Perl-modules JSON and MIME::Lite which are usually have to be installed in addition. <br>
|
This module uses the Perl-modules JSON and MIME::Lite which are usually have to be installed in addition. <br>
|
||||||
On Debian-Linux based systems these modules can be installed by: <br><br>
|
On Debian-Linux based systems these modules can be installed by: <br><br>
|
||||||
@ -9202,7 +9363,7 @@ return;
|
|||||||
command in a previously defined SVS device.
|
command in a previously defined SVS device.
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
A <b>camera</b> is defined by: <br><br>
|
A <b>camera device</b> is defined by: <br><br>
|
||||||
<ul>
|
<ul>
|
||||||
<b><code>define <Name> SSCAM <camera name in SVS> <ServerAddr> [Port] [Protocol]</code></b> <br><br>
|
<b><code>define <Name> SSCAM <camera name in SVS> <ServerAddr> [Port] [Protocol]</code></b> <br><br>
|
||||||
</ul>
|
</ul>
|
||||||
@ -9266,6 +9427,7 @@ return;
|
|||||||
panel can be affected by <a href="#SSCamattr">attributes</a> "ptzPanel_.*". <br>
|
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.
|
Please see also <a href="#SSCamset">command</a> <b>"set <name> createPTZcontrol"</b> in this context.
|
||||||
<br><br><br>
|
<br><br><br>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<a name="SSCam_Credentials"></a>
|
<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>
|
<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>
|
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>
|
<b>Vorbereitung </b> <br><br>
|
||||||
|
@ -35,6 +35,8 @@ eval "use FHEM::Meta;1" or my $modMetaAbsent = 1;
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
our %SSCamSTRM_vNotesIntern = (
|
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.5.0" => "27.03.2019 add Meta.pm support ",
|
||||||
"2.4.0" => "24.02.2019 support for \"genericStrmHtmlTag\" in streaming device MODEL generic ",
|
"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 ",
|
"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
|
# Standardvariablen und Forward-Declaration
|
||||||
sub SSCam_ptzpanel($;$$);
|
sub SSCam_ptzpanel(@);
|
||||||
sub SSCam_StreamDev($$$);
|
sub SSCam_StreamDev($$$;$);
|
||||||
sub SSCam_getclhash($;$$);
|
sub SSCam_getclhash($;$$);
|
||||||
|
|
||||||
# my $hlsjs = "hls.js"; # hls.js Release von Seite https://github.com/video-dev/hls.js/releases
|
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
sub SSCamSTRM_Initialize($) {
|
sub SSCamSTRM_Initialize($) {
|
||||||
my ($hash) = @_;
|
my ($hash) = @_;
|
||||||
@ -75,16 +75,21 @@ sub SSCamSTRM_Initialize($) {
|
|||||||
|
|
||||||
$hash->{DefFn} = "SSCamSTRM_Define";
|
$hash->{DefFn} = "SSCamSTRM_Define";
|
||||||
$hash->{SetFn} = "SSCamSTRM_Set";
|
$hash->{SetFn} = "SSCamSTRM_Set";
|
||||||
|
$hash->{GetFn} = "SSCamSTRM_Get";
|
||||||
$hash->{AttrList} = "autoRefresh:selectnumbers,120,0.2,1800,0,log10 ".
|
$hash->{AttrList} = "autoRefresh:selectnumbers,120,0.2,1800,0,log10 ".
|
||||||
"autoRefreshFW:$fwd ".
|
"autoRefreshFW:$fwd ".
|
||||||
"disable:1,0 ".
|
"disable:1,0 ".
|
||||||
"forcePageRefresh:1,0 ".
|
"forcePageRefresh:1,0 ".
|
||||||
"genericStrmHtmlTag ".
|
"genericStrmHtmlTag ".
|
||||||
"htmlattr ".
|
"htmlattr ".
|
||||||
|
"htmlattrFTUI ".
|
||||||
"hideDisplayName:1,0 ".
|
"hideDisplayName:1,0 ".
|
||||||
|
"hideDisplayNameFTUI:1,0 ".
|
||||||
"popupWindowSize ".
|
"popupWindowSize ".
|
||||||
"popupStreamFW:$fwd ".
|
"popupStreamFW:$fwd ".
|
||||||
"popupStreamTo:OK,1,2,3,4,5,6,7,8,9,10,15,20,25,30,40,50,60 ".
|
"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;
|
$readingFnAttributes;
|
||||||
$hash->{RenameFn} = "SSCamSTRM_Rename";
|
$hash->{RenameFn} = "SSCamSTRM_Rename";
|
||||||
$hash->{CopyFn} = "SSCamSTRM_Copy";
|
$hash->{CopyFn} = "SSCamSTRM_Copy";
|
||||||
@ -134,7 +139,10 @@ sub SSCamSTRM_Rename($$) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
################################################################
|
###############################################################
|
||||||
|
# SSCamSTRM Copy
|
||||||
|
# passt die Deviceparameter bei kopierten Device an
|
||||||
|
###############################################################
|
||||||
sub SSCamSTRM_Copy($$) {
|
sub SSCamSTRM_Copy($$) {
|
||||||
my ($old_name,$new_name) = @_;
|
my ($old_name,$new_name) = @_;
|
||||||
my $hash = $defs{$new_name};
|
my $hash = $defs{$new_name};
|
||||||
@ -145,6 +153,27 @@ sub SSCamSTRM_Copy($$) {
|
|||||||
return;
|
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($@) {
|
sub SSCamSTRM_Set($@) {
|
||||||
my ($hash, @a) = @_;
|
my ($hash, @a) = @_;
|
||||||
@ -244,14 +273,8 @@ sub SSCamSTRM_FwFn($;$$$) {
|
|||||||
$hash->{HELPER}{FW} = $FW_wname;
|
$hash->{HELPER}{FW} = $FW_wname;
|
||||||
|
|
||||||
$link = AnalyzePerlCommand(undef, $link) if($link =~ m/^{(.*)}$/s);
|
$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 = "";
|
my $ret = "";
|
||||||
$ret .= "<span>$dlink $show</span><br>" if(!AttrVal($d,"hideDisplayName",0));
|
|
||||||
if(IsDisabled($d)) {
|
if(IsDisabled($d)) {
|
||||||
if(AttrVal($d,"hideDisplayName",0)) {
|
if(AttrVal($d,"hideDisplayName",0)) {
|
||||||
$ret .= "Stream-device <a href=\"/fhem?detail=$d\">$d</a> is disabled";
|
$ret .= "Stream-device <a href=\"/fhem?detail=$d\">$d</a> is disabled";
|
||||||
@ -327,6 +350,39 @@ sub SSCamSTRM_setVersionInfo($) {
|
|||||||
return;
|
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;
|
1;
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
@ -337,9 +393,10 @@ return;
|
|||||||
<a name="SSCamSTRM"></a>
|
<a name="SSCamSTRM"></a>
|
||||||
<h3>SSCamSTRM</h3>
|
<h3>SSCamSTRM</h3>
|
||||||
<br>
|
<br>
|
||||||
The module SSCamSTRM is a special device module synchronized to the SSCam module. It is used for definition of
|
<ul>
|
||||||
Streaming-Devices. <br>
|
The module SSCamSTRM is a special device module synchronized to the SSCam module. It is used for definition of
|
||||||
Dependend of the Streaming-Device state, different buttons are provided to start actions:
|
Streaming-Devices. <br>
|
||||||
|
Dependend of the Streaming-Device state, different buttons are provided to start actions:
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<table>
|
||||||
<colgroup> <col width=25%> <col width=75%> </colgroup>
|
<colgroup> <col width=25%> <col width=75%> </colgroup>
|
||||||
@ -359,6 +416,13 @@ Dependend of the Streaming-Device state, different buttons are provided to start
|
|||||||
</ul>
|
</ul>
|
||||||
<br>
|
<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>
|
<ul>
|
||||||
<a name="SSCamSTRMdefine"></a>
|
<a name="SSCamSTRMdefine"></a>
|
||||||
<b>Define</b>
|
<b>Define</b>
|
||||||
@ -390,7 +454,17 @@ Dependend of the Streaming-Device state, different buttons are provided to start
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
<a name="SSCamSTRMget"></a>
|
<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>
|
<a name="SSCamSTRMattr"></a>
|
||||||
<b>Attributes</b>
|
<b>Attributes</b>
|
||||||
@ -459,13 +533,30 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
|||||||
</li>
|
</li>
|
||||||
<br>
|
<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>
|
<a name="htmlattr"></a>
|
||||||
<li><b>htmlattr</b><br>
|
<li><b>htmlattr</b><br>
|
||||||
Additional HTML tags to manipulate the streaming device.
|
Additional HTML tags to manipulate the streaming device.
|
||||||
<br><br>
|
<br><br>
|
||||||
<ul>
|
<ul>
|
||||||
<b>Example: </b><br>
|
<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>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
@ -502,6 +593,18 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
|||||||
attr <name> popupWindowSize width="600" height="425" <br>
|
attr <name> popupWindowSize width="600" height="425" <br>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</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>
|
||||||
</ul>
|
</ul>
|
||||||
@ -513,10 +616,10 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
|||||||
|
|
||||||
<a name="SSCamSTRM"></a>
|
<a name="SSCamSTRM"></a>
|
||||||
<h3>SSCamSTRM</h3>
|
<h3>SSCamSTRM</h3>
|
||||||
|
<ul>
|
||||||
<br>
|
<br>
|
||||||
Das Modul SSCamSTRM ist ein mit SSCam abgestimmtes Gerätemodul zur Definition von Streaming-Devices. <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:
|
Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unterschiedliche Drucktasten angeboten:
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<table>
|
||||||
<colgroup> <col width=25%> <col width=75%> </colgroup>
|
<colgroup> <col width=25%> <col width=75%> </colgroup>
|
||||||
@ -536,6 +639,13 @@ Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unters
|
|||||||
</ul>
|
</ul>
|
||||||
<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>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<a name="SSCamSTRMdefine"></a>
|
<a name="SSCamSTRMdefine"></a>
|
||||||
<b>Define</b>
|
<b>Define</b>
|
||||||
@ -568,7 +678,18 @@ Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unters
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
<a name="SSCamSTRMget"></a>
|
<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>
|
<a name="SSCamSTRMattr"></a>
|
||||||
<b>Attribute</b>
|
<b>Attribute</b>
|
||||||
@ -637,13 +758,30 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
|||||||
</li>
|
</li>
|
||||||
<br>
|
<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>
|
<a name="htmlattr"></a>
|
||||||
<li><b>htmlattr</b><br>
|
<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>
|
<br><br>
|
||||||
<ul>
|
<ul>
|
||||||
<b>Beispiel: </b><br>
|
<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>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
@ -679,6 +817,18 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
|
|||||||
attr <name> popupWindowSize width="600" height="425" <br>
|
attr <name> popupWindowSize width="600" height="425" <br>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</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>
|
||||||
</ul>
|
</ul>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user