mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 09:16:53 +00:00
49_SSCam: V5.3.0, new createStreamDev generic, control elements for runView content within fhemweb, some new CamLive-Readings, minor fixes
git-svn-id: https://svn.fhem.de/fhem/trunk@16925 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
a3b678b532
commit
dd89b3274b
@ -1,5 +1,8 @@
|
|||||||
# 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: V5.3.0, new createStreamDev generic, control elements
|
||||||
|
for runView content within fhemweb, some new CamLive-
|
||||||
|
Readings, minor fixes
|
||||||
- change: 95_Dashboard: V3.10.1, added FW_hideDisplayName, Forum #88727
|
- change: 95_Dashboard: V3.10.1, added FW_hideDisplayName, Forum #88727
|
||||||
- change: 98_feels_like.pm: Improved algorithms
|
- change: 98_feels_like.pm: Improved algorithms
|
||||||
New attribute "sensorType"
|
New attribute "sensorType"
|
||||||
|
@ -27,6 +27,9 @@
|
|||||||
#########################################################################################################################
|
#########################################################################################################################
|
||||||
# Versions History:
|
# Versions History:
|
||||||
#
|
#
|
||||||
|
# 5.3.0 29.06.2018 changes regarding to "createStreamDev ... generic", refresh reading parentState of all
|
||||||
|
# SSCamSTRM devices with PARENT=SSCam-device, control elements for runView within fhemweb,
|
||||||
|
# new CamLive.*-Readings, minor fixes
|
||||||
# 5.2.7 26.06.2018 fix state turns to "off" even though cam is disabled
|
# 5.2.7 26.06.2018 fix state turns to "off" even though cam is disabled
|
||||||
# 5.2.6 20.06.2018 running stream as human readable entry for SSCamSTRM-Device, goAbsPTZ fix set-entry für non-PTZ
|
# 5.2.6 20.06.2018 running stream as human readable entry for SSCamSTRM-Device, goAbsPTZ fix set-entry für non-PTZ
|
||||||
# 5.2.5 18.06.2018 trigger lastsnap_fw to SSCamSTRM-Device only if snap was done by it.
|
# 5.2.5 18.06.2018 trigger lastsnap_fw to SSCamSTRM-Device only if snap was done by it.
|
||||||
@ -45,7 +48,7 @@
|
|||||||
# 4.1.0 05.05.2018 use SYNO.SurveillanceStation.VideoStream instead of SYNO.SurveillanceStation.VideoStreaming,
|
# 4.1.0 05.05.2018 use SYNO.SurveillanceStation.VideoStream instead of SYNO.SurveillanceStation.VideoStreaming,
|
||||||
# preparation for hls
|
# preparation for hls
|
||||||
# 4.0.0 01.05.2018 AudioStream possibility added
|
# 4.0.0 01.05.2018 AudioStream possibility added
|
||||||
# 3.10.0 24.04.2018 CreateStreamDev added, new features lastrec_fw_MJPEG, lastrec_fw_MPEG4/H.264 added to
|
# 3.10.0 24.04.2018 createStreamDev added, new features lastrec_fw_MJPEG, lastrec_fw_MPEG4/H.264 added to
|
||||||
# playback MPEG4/H.264 videos
|
# playback MPEG4/H.264 videos
|
||||||
# 3.9.2 21.04.2018 minor fixes
|
# 3.9.2 21.04.2018 minor fixes
|
||||||
# 3.9.1 20.04.2018 Attribute ptzPanel_use, initial webcommands in DeviceOverview changed, minor fixes ptzPanel
|
# 3.9.1 20.04.2018 Attribute ptzPanel_use, initial webcommands in DeviceOverview changed, minor fixes ptzPanel
|
||||||
@ -240,7 +243,7 @@ use Time::HiRes;
|
|||||||
use HttpUtils;
|
use HttpUtils;
|
||||||
# no if $] >= 5.017011, warnings => 'experimental';
|
# no if $] >= 5.017011, warnings => 'experimental';
|
||||||
|
|
||||||
my $SSCamVersion = "5.2.7";
|
my $SSCamVersion = "5.3.0";
|
||||||
|
|
||||||
# Aufbau Errorcode-Hashes (siehe Surveillance Station Web API)
|
# Aufbau Errorcode-Hashes (siehe Surveillance Station Web API)
|
||||||
my %SSCam_errauthlist = (
|
my %SSCam_errauthlist = (
|
||||||
@ -310,6 +313,7 @@ sub SSCam_Initialize($) {
|
|||||||
|
|
||||||
$hash->{AttrList} =
|
$hash->{AttrList} =
|
||||||
"disable:1,0 ".
|
"disable:1,0 ".
|
||||||
|
"genericStrmHtmlTag ".
|
||||||
"httptimeout ".
|
"httptimeout ".
|
||||||
"htmlattr ".
|
"htmlattr ".
|
||||||
"livestreamprefix ".
|
"livestreamprefix ".
|
||||||
@ -492,9 +496,9 @@ sub SSCam_Attr($$$$) {
|
|||||||
|
|
||||||
if ($do == 0) {
|
if ($do == 0) {
|
||||||
delete($defs{$name}{READINGS}{StmKeymjpegHttp});
|
delete($defs{$name}{READINGS}{StmKeymjpegHttp});
|
||||||
delete($defs{$name}{READINGS}{StmKeyUnicst});
|
|
||||||
delete($defs{$name}{READINGS}{LiveStreamUrl});
|
delete($defs{$name}{READINGS}{LiveStreamUrl});
|
||||||
delete($defs{$name}{READINGS}{StmKeyUnicstOverHttp});
|
delete($defs{$name}{READINGS}{StmKeyUnicstOverHttp});
|
||||||
|
delete($defs{$name}{READINGS}{StmKeymxpegHttp});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,6 +594,7 @@ sub SSCam_Attr($$$$) {
|
|||||||
if($aName =~ m/pollcaminfoall/) {
|
if($aName =~ m/pollcaminfoall/) {
|
||||||
return "The value of \"$aName\" has to be greater than 10 seconds." if($aVal <= 10);
|
return "The value of \"$aName\" has to be greater than 10 seconds." if($aVal <= 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($cmd eq "del") {
|
if ($cmd eq "del") {
|
||||||
@ -618,7 +623,7 @@ sub SSCam_Set($@) {
|
|||||||
my $setlist;
|
my $setlist;
|
||||||
my @prop;
|
my @prop;
|
||||||
|
|
||||||
return "module is deactivated" if(IsDisabled($name));
|
return if(IsDisabled($name));
|
||||||
|
|
||||||
if(SSCam_IsModelCam($hash)) {
|
if(SSCam_IsModelCam($hash)) {
|
||||||
# selist für Cams
|
# selist für Cams
|
||||||
@ -633,7 +638,7 @@ sub SSCam_Set($@) {
|
|||||||
"snap:noArg ".
|
"snap:noArg ".
|
||||||
(AttrVal($name, "snapGalleryBoost",0)?(AttrVal($name,"snapGalleryNumber",undef) || AttrVal($name,"snapGalleryBoost",0))?"snapGallery:noArg ":"snapGallery:$SSCAM_snum ":" ").
|
(AttrVal($name, "snapGalleryBoost",0)?(AttrVal($name,"snapGalleryNumber",undef) || AttrVal($name,"snapGalleryBoost",0))?"snapGallery:noArg ":"snapGallery:$SSCAM_snum ":" ").
|
||||||
"createSnapGallery:noArg ".
|
"createSnapGallery:noArg ".
|
||||||
"createStreamDev:mjpeg,switched ".
|
"createStreamDev:generic,mjpeg,switched ".
|
||||||
((ReadingsVal("$name", "CapPTZPan", "false") ne "false") ? "createPTZcontrol:noArg ": "").
|
((ReadingsVal("$name", "CapPTZPan", "false") ne "false") ? "createPTZcontrol:noArg ": "").
|
||||||
"enable:noArg ".
|
"enable:noArg ".
|
||||||
"disable:noArg ".
|
"disable:noArg ".
|
||||||
@ -747,6 +752,11 @@ sub SSCam_Set($@) {
|
|||||||
$ret = CommandDefine($hash->{CL},"$livedev SSCamSTRM {SSCam_StreamDev('$name','$livedev','mjpeg')}");
|
$ret = CommandDefine($hash->{CL},"$livedev SSCamSTRM {SSCam_StreamDev('$name','$livedev','mjpeg')}");
|
||||||
return $ret if($ret);
|
return $ret if($ret);
|
||||||
}
|
}
|
||||||
|
if($prop =~ /generic/) {
|
||||||
|
$livedev = "SSCamSTRM.$name.generic";
|
||||||
|
$ret = CommandDefine($hash->{CL},"$livedev SSCamSTRM {SSCam_StreamDev('$name','$livedev','generic')}");
|
||||||
|
return $ret if($ret);
|
||||||
|
}
|
||||||
if($prop =~ /switched/) {
|
if($prop =~ /switched/) {
|
||||||
$livedev = "SSCamSTRM.$name.switched";
|
$livedev = "SSCamSTRM.$name.switched";
|
||||||
$ret = CommandDefine($hash->{CL},"$livedev SSCamSTRM {SSCam_StreamDev('$name','$livedev','switched')}");
|
$ret = CommandDefine($hash->{CL},"$livedev SSCamSTRM {SSCam_StreamDev('$name','$livedev','switched')}");
|
||||||
@ -1176,11 +1186,50 @@ sub SSCam_FWsummaryFn ($$$$) {
|
|||||||
|
|
||||||
return if(!$hash->{HELPER}{LINK} || ReadingsVal($d, "state", "") =~ /^dis.*/ || IsDisabled($name));
|
return if(!$hash->{HELPER}{LINK} || ReadingsVal($d, "state", "") =~ /^dis.*/ || IsDisabled($name));
|
||||||
|
|
||||||
|
# Definition Tasten
|
||||||
|
my $imgblank = "<img src=\"$FW_ME/www/images/sscam/black_btn_CAMBLANK.png\">"; # nicht sichtbare Leertaste
|
||||||
|
my $cmdstop = "cmd=set $d stopView"; # Stream deaktivieren
|
||||||
|
my $imgstop = "<img src=\"$FW_ME/www/images/default/remotecontrol/black_btn_POWEROFF3.png\">";
|
||||||
|
my $cmdhlsreact = "cmd=set $d hlsreactivate"; # HLS Stream reaktivieren
|
||||||
|
my $imghlsreact = "<img src=\"$FW_ME/www/images/default/remotecontrol/black_btn_BACKDroid.png\">";
|
||||||
|
my $cmdmjpegrun = "cmd=set $d runView live_fw"; # MJPEG Stream aktivieren
|
||||||
|
my $imgmjpegrun = "<img src=\"$FW_ME/www/images/sscam/black_btn_MJPEG.png\">";
|
||||||
|
my $cmdhlsrun = "cmd=set $d runView live_fw_hls"; # HLS Stream aktivieren
|
||||||
|
my $imghlsrun = "<img src=\"$FW_ME/www/images/sscam/black_btn_HLS.png\">";
|
||||||
|
my $cmdlrirun = "cmd=set $d runView lastrec_fw"; # Last Record IFrame
|
||||||
|
my $imglrirun = "<img src=\"$FW_ME/www/images/sscam/black_btn_LASTRECIFRAME.png\">";
|
||||||
|
my $cmdlh264run = "cmd=set $d runView lastrec_fw_MPEG4/H.264"; # Last Record H.264
|
||||||
|
my $imglh264run = "<img src=\"$FW_ME/www/images/sscam/black_btn_LRECH264.png\">";
|
||||||
|
my $cmdlmjpegrun = "cmd=set $d runView lastrec_fw_MJPEG"; # Last Record MJPEG
|
||||||
|
my $imglmjpegrun = "<img src=\"$FW_ME/www/images/sscam/black_btn_LRECMJPEG.png\">";
|
||||||
|
my $cmdlsnaprun = "cmd=set $d runView lastsnap_fw STRM"; # Last SNAP
|
||||||
|
my $imglsnaprun = "<img src=\"$FW_ME/www/images/sscam/black_btn_LSNAP.png\">";
|
||||||
|
my $cmdrecendless = "cmd=set $d on 0"; # Endlosaufnahme Start
|
||||||
|
my $imgrecendless = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTART.png\">";
|
||||||
|
my $cmdrecstop = "cmd=set $d off"; # Aufnahme Stop
|
||||||
|
my $imgrecstop = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTOP.png\">";
|
||||||
|
my $cmddosnap = "cmd=set $d snap STRM"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||||
|
my $imgdosnap = "<img src=\"$FW_ME/www/images/sscam/black_btn_DOSNAP.png\">";
|
||||||
|
|
||||||
|
|
||||||
my $attr = AttrVal($d, "htmlattr", " ");
|
my $attr = AttrVal($d, "htmlattr", " ");
|
||||||
Log3($name, 4, "$name - SSCam_FWsummaryFn called - FW_wname: $FW_wname, device: $d, room: $room, attributes: $attr");
|
Log3($name, 4, "$name - SSCam_FWsummaryFn called - FW_wname: $FW_wname, device: $d, room: $room, attributes: $attr");
|
||||||
|
|
||||||
if($wltype eq "image") {
|
if($wltype eq "image") {
|
||||||
$ret = "<img src=$link $attr><br>";
|
$ret = "<img src=$link $attr><br>";
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
|
||||||
|
$ret .= $imgblank;
|
||||||
|
if($hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
|
||||||
|
if(ReadingsVal($d, "Record", "Stop") eq "Stop") {
|
||||||
|
# Aufnahmebutton endlos Start
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\">$imgrecendless </a>";
|
||||||
|
} else {
|
||||||
|
# Aufnahmebutton Stop
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\">$imgrecstop </a>";
|
||||||
|
}
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\">$imgdosnap </a>";
|
||||||
|
}
|
||||||
|
$ret .= "<br>";
|
||||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) {
|
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) {
|
||||||
$ret .= "<audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
|
$ret .= "<audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
|
||||||
Your browser does not support the audio element.
|
Your browser does not support the audio element.
|
||||||
@ -1188,7 +1237,11 @@ sub SSCam_FWsummaryFn ($$$$) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} elsif($wltype eq "iframe") {
|
} elsif($wltype eq "iframe") {
|
||||||
$ret = "<iframe src=$link $attr controls>Iframes disabled</iframe>";
|
$ret = "<iframe src=$link $attr controls autoplay>
|
||||||
|
Iframes disabled
|
||||||
|
</iframe>";
|
||||||
|
$ret .= "<br>";
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
|
||||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) {
|
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) {
|
||||||
$ret .= "<audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
|
$ret .= "<audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
|
||||||
Your browser does not support the audio element.
|
Your browser does not support the audio element.
|
||||||
@ -1210,21 +1263,38 @@ sub SSCam_FWsummaryFn ($$$$) {
|
|||||||
} elsif($wltype eq "base64img") {
|
} elsif($wltype eq "base64img") {
|
||||||
$alias = $hash->{HELPER}{ALIAS};
|
$alias = $hash->{HELPER}{ALIAS};
|
||||||
$ret = "<img $attr alt='$alias' src='data:image/jpeg;base64,$link'><br>";
|
$ret = "<img $attr alt='$alias' src='data:image/jpeg;base64,$link'><br>";
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
|
||||||
|
|
||||||
} elsif($wltype eq "hls") {
|
} elsif($wltype eq "hls") {
|
||||||
$alias = $hash->{HELPER}{ALIAS};
|
$alias = $hash->{HELPER}{ALIAS};
|
||||||
$ret = "<video $attr controls autoplay>
|
$ret = "<video $attr controls autoplay>
|
||||||
<source src=\"$link\" type=\"application/x-mpegURL\">
|
<source src=$link type=\"application/x-mpegURL\">
|
||||||
<source src=$link type=\"video/MP2T\">
|
<source src=$link type=\"video/MP2T\">
|
||||||
</video>";
|
Your browser does not support the video tag
|
||||||
|
</video>";
|
||||||
|
$ret .= "<br>";
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdhlsreact')\">$imghlsreact </a>";
|
||||||
|
$ret .= $imgblank;
|
||||||
|
if(ReadingsVal($d, "Record", "Stop") eq "Stop") {
|
||||||
|
# Aufnahmebutton endlos Start
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\">$imgrecendless </a>";
|
||||||
|
} else {
|
||||||
|
# Aufnahmebutton Stop
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\">$imgrecstop </a>";
|
||||||
|
}
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\">$imgdosnap </a>";
|
||||||
|
|
||||||
} elsif($wltype eq "video") {
|
} elsif($wltype eq "video") {
|
||||||
$ret = "<video $attr controls>
|
$ret = "<video $attr controls autoplay>
|
||||||
<source src=$link type=\"video/mp4\">
|
<source src=$link type=\"video/mp4\">
|
||||||
<source src=$link type=\"video/ogg\">
|
<source src=$link type=\"video/ogg\">
|
||||||
<source src=$link type=\"video/webm\">
|
<source src=$link type=\"video/webm\">
|
||||||
Your browser does not support the video tag.
|
Your browser does not support the video tag.
|
||||||
</video>";
|
</video>";
|
||||||
|
$ret .= "<br>";
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
|
||||||
|
$ret .= "<br>";
|
||||||
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) {
|
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) {
|
||||||
$ret .= "<audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
|
$ret .= "<audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
|
||||||
Your browser does not support the audio element.
|
Your browser does not support the audio element.
|
||||||
@ -4327,19 +4397,9 @@ sub SSCam_camop_parse ($) {
|
|||||||
|
|
||||||
if (exists($hash->{HELPER}{RUNVIEW}) && $hash->{HELPER}{RUNVIEW} =~ /snap/ && exists($data->{'data'}{'data'}[0]{imageData})) {
|
if (exists($hash->{HELPER}{RUNVIEW}) && $hash->{HELPER}{RUNVIEW} =~ /snap/ && exists($data->{'data'}{'data'}[0]{imageData})) {
|
||||||
delete $hash->{HELPER}{RUNVIEW};
|
delete $hash->{HELPER}{RUNVIEW};
|
||||||
# Aufnahmestatus in state abbilden
|
|
||||||
$hash->{HELPER}{LINK} = $data->{data}{data}[0]{imageData};
|
$hash->{HELPER}{LINK} = $data->{data}{data}[0]{imageData};
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($hash->{HELPER}{SNAPBYSTRMDEV} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
|
||||||
# Snap durch SSCamSTRM-Device ausgelöst
|
|
||||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
|
||||||
delete $hash->{HELPER}{SNAPBYSTRMDEV};
|
|
||||||
delete $hash->{HELPER}{LSNAPBYSTRMDEV};
|
|
||||||
} else {
|
|
||||||
SSCam_refresh($hash,0,0,0); # kein Room-Refresh, kein SSCam-state-Event, kein SSCamSTRM-Event
|
|
||||||
}
|
|
||||||
|
|
||||||
if($OpMode eq "getsnapgallery") {
|
if($OpMode eq "getsnapgallery") {
|
||||||
# es soll eine Schnappschußgallerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt werden (Attr snapGalleryBoost=0)
|
# es soll eine Schnappschußgallerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt werden (Attr snapGalleryBoost=0)
|
||||||
my $i = 0;
|
my $i = 0;
|
||||||
@ -4386,6 +4446,16 @@ sub SSCam_camop_parse ($) {
|
|||||||
|
|
||||||
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($hash->{HELPER}{SNAPBYSTRMDEV} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
||||||
|
# Snap durch SSCamSTRM-Device ausgelöst
|
||||||
|
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
||||||
|
delete $hash->{HELPER}{SNAPBYSTRMDEV};
|
||||||
|
delete $hash->{HELPER}{LSNAPBYSTRMDEV};
|
||||||
|
} else {
|
||||||
|
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
|
||||||
|
}
|
||||||
|
|
||||||
Log3($name, $verbose, "$name - Snapinfos of camera $camname retrieved");
|
Log3($name, $verbose, "$name - Snapinfos of camera $camname retrieved");
|
||||||
|
|
||||||
} elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/) {
|
} elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/) {
|
||||||
@ -4676,17 +4746,16 @@ sub SSCam_camop_parse ($) {
|
|||||||
# Readings löschen falls sie nicht angezeigt werden sollen (showStmInfoFull)
|
# Readings löschen falls sie nicht angezeigt werden sollen (showStmInfoFull)
|
||||||
if (!AttrVal($name,"showStmInfoFull",0)) {
|
if (!AttrVal($name,"showStmInfoFull",0)) {
|
||||||
delete($defs{$name}{READINGS}{StmKeymjpegHttp});
|
delete($defs{$name}{READINGS}{StmKeymjpegHttp});
|
||||||
delete($defs{$name}{READINGS}{StmKeyUnicst});
|
|
||||||
delete($defs{$name}{READINGS}{StmKeyUnicstOverHttp});
|
delete($defs{$name}{READINGS}{StmKeyUnicstOverHttp});
|
||||||
}
|
}
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"CamForceEnableMulticast",$camforcemcast) if($camforcemcast);
|
readingsBulkUpdate($hash,"CamForceEnableMulticast",$camforcemcast) if($camforcemcast);
|
||||||
readingsBulkUpdate($hash,"StmKey",$stmkey);
|
readingsBulkUpdate($hash,"StmKey",$stmkey);
|
||||||
readingsBulkUpdate($hash,"StmKeymjpegHttp",$mjpegHttp) if(AttrVal($name,"showStmInfoFull",0));
|
readingsBulkUpdate($hash,"StmKeymjpegHttp",$mjpegHttp) if(AttrVal($name,"showStmInfoFull",0));
|
||||||
# readingsBulkUpdate($hash,"StmKeymxpegHttp",$mxpegHttp);
|
readingsBulkUpdate($hash,"StmKeymxpegHttp",$mxpegHttp) if(AttrVal($name,"showStmInfoFull",0));
|
||||||
readingsBulkUpdate($hash,"StmKeyUnicstOverHttp",$unicastOverHttp) if(AttrVal($name,"showStmInfoFull",0) && $unicastOverHttp);
|
readingsBulkUpdate($hash,"StmKeyUnicstOverHttp",$unicastOverHttp) if(AttrVal($name,"showStmInfoFull",0) && $unicastOverHttp);
|
||||||
readingsBulkUpdate($hash,"StmKeyUnicst",$unicastPath) if(AttrVal($name,"showStmInfoFull",0) && $unicastPath);
|
readingsBulkUpdate($hash,"StmKeyUnicst",$unicastPath) if($unicastPath);
|
||||||
readingsBulkUpdate($hash,"Errorcode","none");
|
readingsBulkUpdate($hash,"Errorcode","none");
|
||||||
readingsBulkUpdate($hash,"Error","none");
|
readingsBulkUpdate($hash,"Error","none");
|
||||||
readingsEndUpdate($hash, 1);
|
readingsEndUpdate($hash, 1);
|
||||||
@ -4794,9 +4863,16 @@ sub SSCam_camop_parse ($) {
|
|||||||
$data->{'data'}->{'cameras'}->[0]->{'video_mirror'} = SSCam_jboolmap($data->{'data'}->{'cameras'}->[0]->{'video_mirror'});
|
$data->{'data'}->{'cameras'}->[0]->{'video_mirror'} = SSCam_jboolmap($data->{'data'}->{'cameras'}->[0]->{'video_mirror'});
|
||||||
$data->{'data'}->{'cameras'}->[0]->{'blPresetSpeed'} = SSCam_jboolmap($data->{'data'}->{'cameras'}->[0]->{'blPresetSpeed'});
|
$data->{'data'}->{'cameras'}->[0]->{'blPresetSpeed'} = SSCam_jboolmap($data->{'data'}->{'cameras'}->[0]->{'blPresetSpeed'});
|
||||||
|
|
||||||
|
my $clstrmno = $data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camLiveStreamNo'};
|
||||||
|
$clstrmno++ if($clstrmno == 0);
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
readingsBulkUpdate($hash,"CamAudioType",$camaudiotype);
|
readingsBulkUpdate($hash,"CamAudioType",$camaudiotype);
|
||||||
readingsBulkUpdate($hash,"CamLiveMode",$camLiveMode);
|
readingsBulkUpdate($hash,"CamLiveMode",$camLiveMode);
|
||||||
|
readingsBulkUpdate($hash,"CamLiveFps",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camLiveFps'});
|
||||||
|
readingsBulkUpdate($hash,"CamLiveResolution",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camLiveResolution'});
|
||||||
|
readingsBulkUpdate($hash,"CamLiveQuality",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camLiveQuality'});
|
||||||
|
readingsBulkUpdate($hash,"CamLiveStreamNo",$clstrmno);
|
||||||
readingsBulkUpdate($hash,"CamExposureMode",$exposuremode);
|
readingsBulkUpdate($hash,"CamExposureMode",$exposuremode);
|
||||||
readingsBulkUpdate($hash,"CamExposureControl",$exposurecontrol);
|
readingsBulkUpdate($hash,"CamExposureControl",$exposurecontrol);
|
||||||
readingsBulkUpdate($hash,"CamModel",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camModel'});
|
readingsBulkUpdate($hash,"CamModel",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camModel'});
|
||||||
@ -5467,13 +5543,16 @@ sub SSCam_refresh($$$$) {
|
|||||||
readingsSingleUpdate($hash,"state", $st, 0);
|
readingsSingleUpdate($hash,"state", $st, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
# state des SSCamSTRM-Device mit Opmode updaten (mit/ohne Event)
|
# parentState des SSCamSTRM-Device mit Opmode updaten (mit/ohne Event)
|
||||||
if($hash->{HELPER}{STRMDEV}) {
|
my @strmdvs = devspec2array("TYPE=SSCamSTRM:FILTER=PARENT=".$name);
|
||||||
my $strmhash = $defs{$hash->{HELPER}{STRMDEV}};
|
if(@strmdvs) {
|
||||||
if($lpoll_strm) {
|
foreach (@strmdvs) {
|
||||||
readingsSingleUpdate($strmhash,"state", $hash->{OPMODE}, 1);
|
my $strmhash = $defs{$_};
|
||||||
} else {
|
if($lpoll_strm) {
|
||||||
readingsSingleUpdate($strmhash,"state", $hash->{OPMODE}, 0);
|
readingsSingleUpdate($strmhash,"parentState", $hash->{OPMODE}, 1);
|
||||||
|
} else {
|
||||||
|
readingsSingleUpdate($strmhash,"parentState", $hash->{OPMODE}, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5799,7 +5878,6 @@ sub SSCam_StreamDev($$$) {
|
|||||||
my $StmKey = ReadingsVal($camname,"StmKey",undef);
|
my $StmKey = ReadingsVal($camname,"StmKey",undef);
|
||||||
|
|
||||||
$ret = "";
|
$ret = "";
|
||||||
#$ret .= "<div class=\"makeTable wide\">";
|
|
||||||
$ret .= '<table class="block wide internals">';
|
$ret .= '<table class="block wide internals">';
|
||||||
$ret .= '<tbody>';
|
$ret .= '<tbody>';
|
||||||
$ret .= '<tr class="odd">';
|
$ret .= '<tr class="odd">';
|
||||||
@ -5845,6 +5923,44 @@ sub SSCam_StreamDev($$$) {
|
|||||||
$ret .= "</td>";
|
$ret .= "</td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} elsif($fmt =~ /generic/) {
|
||||||
|
my $htag = AttrVal($camname,"genericStrmHtmlTag","");
|
||||||
|
if( $htag =~ m/^\s*(.*)\s*$/s ) {
|
||||||
|
$htag = $1;
|
||||||
|
$htag =~ s/\$NAME/$camname/g;
|
||||||
|
$htag =~ s/\$HTMLATTR/$ha/g;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$htag) {
|
||||||
|
$ret .= "<td> <br> <b> Set attribute \"genericStrmHtmlTag\" in device <a href=\"/fhem?detail=$camname\">$camname</a></b> <br><br></td>";
|
||||||
|
$ret .= '</tr>';
|
||||||
|
$ret .= '</tbody>';
|
||||||
|
$ret .= '</table>';
|
||||||
|
$ret .= '</div>';
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= "<td>";
|
||||||
|
$ret .= "$htag";
|
||||||
|
$ret .= "<br>";
|
||||||
|
Log3($strmdev, 4, "$strmdev - generic Stream params:\n$htag");
|
||||||
|
|
||||||
|
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||||
|
# Aufnahmebutton endlos Start
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\">$imgrecendless </a>";
|
||||||
|
} else {
|
||||||
|
# Aufnahmebutton Stop
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\">$imgrecstop </a>";
|
||||||
|
}
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\">$imgdosnap </a>";
|
||||||
|
$ret .= "</td>";
|
||||||
|
if(AttrVal($camname,"ptzPanel_use",1)) {
|
||||||
|
my $ptz_ret = SSCam_ptzpanel($camname);
|
||||||
|
if($ptz_ret) {
|
||||||
|
$ret .= "<td>$ptz_ret</td>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} elsif($fmt =~ /switched/) {
|
} elsif($fmt =~ /switched/) {
|
||||||
my $wltype = $hash->{HELPER}{WLTYPE};
|
my $wltype = $hash->{HELPER}{WLTYPE};
|
||||||
$link = $hash->{HELPER}{LINK};
|
$link = $hash->{HELPER}{LINK};
|
||||||
@ -5854,16 +5970,18 @@ sub SSCam_StreamDev($$$) {
|
|||||||
$ret .= "<td><img src=$link $ha><br>";
|
$ret .= "<td><img src=$link $ha><br>";
|
||||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
|
||||||
$ret .= $imgblank;
|
$ret .= $imgblank;
|
||||||
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
if($hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
|
||||||
# Aufnahmebutton endlos Start
|
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
|
||||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\">$imgrecendless </a>";
|
# Aufnahmebutton endlos Start
|
||||||
} else {
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\">$imgrecendless </a>";
|
||||||
# Aufnahmebutton Stop
|
} else {
|
||||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\">$imgrecstop </a>";
|
# Aufnahmebutton Stop
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecstop')\">$imgrecstop </a>";
|
||||||
|
}
|
||||||
|
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\">$imgdosnap </a>";
|
||||||
}
|
}
|
||||||
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmddosnap')\">$imgdosnap </a>";
|
|
||||||
$ret .= "</td>";
|
$ret .= "</td>";
|
||||||
if(AttrVal($camname,"ptzPanel_use",1)) {
|
if(AttrVal($camname,"ptzPanel_use",1) && $hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
|
||||||
my $ptz_ret = SSCam_ptzpanel($camname);
|
my $ptz_ret = SSCam_ptzpanel($camname);
|
||||||
if($ptz_ret) {
|
if($ptz_ret) {
|
||||||
$ret .= "<td>$ptz_ret</td>";
|
$ret .= "<td>$ptz_ret</td>";
|
||||||
@ -5962,7 +6080,7 @@ sub SSCam_StreamDev($$$) {
|
|||||||
$ret .= '</tr>';
|
$ret .= '</tr>';
|
||||||
$ret .= '</tbody>';
|
$ret .= '</tbody>';
|
||||||
$ret .= '</table>';
|
$ret .= '</table>';
|
||||||
#$ret .= '</div>';
|
Log3($strmdev, 4, "$strmdev - Link called: $link") if($link);
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
@ -5998,6 +6116,9 @@ sub SSCam_composegallery ($;$$) {
|
|||||||
: ReadingsTimestamp($name,"LastUpdateTime"," ")); # letzte Aktualisierung
|
: ReadingsTimestamp($name,"LastUpdateTime"," ")); # letzte Aktualisierung
|
||||||
$lupt =~ s/ / \/ /;
|
$lupt =~ s/ / \/ /;
|
||||||
|
|
||||||
|
my $cmddosnap = "cmd=set $name snap STRM"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||||
|
my $imgdosnap = "<img src=\"$FW_ME/www/images/sscam/black_btn_DOSNAP.png\">";
|
||||||
|
|
||||||
my $ha = AttrVal($name, "snapGalleryHtmlAttr", AttrVal($name, "htmlattr", 'width="500" height="325"'));
|
my $ha = AttrVal($name, "snapGalleryHtmlAttr", AttrVal($name, "htmlattr", 'width="500" height="325"'));
|
||||||
|
|
||||||
# falls "SSCam_composegallery" durch ein SSCamSTRM-Device aufgerufen wird
|
# falls "SSCam_composegallery" durch ein SSCamSTRM-Device aufgerufen wird
|
||||||
@ -6025,8 +6146,7 @@ sub SSCam_composegallery ($;$$) {
|
|||||||
$header .= $sgbnote;
|
$header .= $sgbnote;
|
||||||
|
|
||||||
my $gattr = (AttrVal($name,"snapGallerySize","Icon") eq "Full")?$ha:" ";
|
my $gattr = (AttrVal($name,"snapGallerySize","Icon") eq "Full")?$ha:" ";
|
||||||
|
my @as = sort{$a <=>$b}keys%{$allsnaps};
|
||||||
my @as = sort{$a <=>$b}keys%{$allsnaps};
|
|
||||||
|
|
||||||
# Ausgabetabelle erstellen
|
# Ausgabetabelle erstellen
|
||||||
my ($htmlCode,$ct);
|
my ($htmlCode,$ct);
|
||||||
@ -6061,6 +6181,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')\">$imgdosnap </a>" if($strmdev);
|
||||||
$htmlCode .= "</html>";
|
$htmlCode .= "</html>";
|
||||||
|
|
||||||
return $htmlCode;
|
return $htmlCode;
|
||||||
@ -6142,7 +6263,7 @@ sub SSCam_experror {
|
|||||||
<li>set/delete a Preset (at PTZ-cameras) </li>
|
<li>set/delete a Preset (at PTZ-cameras) </li>
|
||||||
<li>set a Preset or current position as Home Preset (at PTZ-cameras) </li>
|
<li>set a Preset or current position as Home Preset (at PTZ-cameras) </li>
|
||||||
<li>provides a panel for camera control (at PTZ-cameras) </li>
|
<li>provides a panel for camera control (at PTZ-cameras) </li>
|
||||||
<li>create a discrete device for streaming (createStreamDev) </li>
|
<li>create different types of discrete Streaming-Devices (createStreamDev) </li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
@ -6332,29 +6453,44 @@ sub SSCam_experror {
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<a name="SSCamcreateStreamDev"></a>
|
<a name="SSCamcreateStreamDev"></a>
|
||||||
<li><b> set <name> createStreamDev [mjpeg | switched] </b> (valid for CAM)</li> <br>
|
<li><b> set <name> createStreamDev [generic | mjpeg | switched] </b> (valid for CAM)</li> <br>
|
||||||
|
|
||||||
A separate streaming device (type SSCamSTRM) will be created. This device can be used as a discrete device in a dashboard for example.
|
A separate Streaming-Device (type SSCamSTRM) will be created. This device can be used as a discrete device in a dashboard for example.
|
||||||
The current room of the parent camera device is assigned to the new device if it is set there.
|
The current room of the parent camera device is assigned to the new device if it is set there.
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<table>
|
||||||
|
<colgroup> <col width=10%> <col width=90%> </colgroup>
|
||||||
|
<tr><td>generic </td><td>- the streaming device playback a content determined by attribute "genericStrmHtmlTag" </td></tr>
|
||||||
|
<tr><td>mjpeg </td><td>- the streaming device playback a permanent MJPEG video stream (Streamkey method) </td></tr>
|
||||||
|
<tr><td>switched </td><td>- playback of different streaming types. Buttons for mode control are provided. </td></tr>
|
||||||
|
</table>
|
||||||
|
</ul>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
You can control the design with HTML tags in <a href="#SSCamattr">attribute</a> "htmlattr" of the camera device or by the
|
You can control the design with HTML tags in <a href="#SSCamattr">attribute</a> "htmlattr" of the camera device or by the
|
||||||
specific attributes of the SSCamSTRM-device itself. <br>
|
specific attributes of the SSCamSTRM-device itself. <br>
|
||||||
In "switched"-Devices are buttons provided for mode control. <br>
|
In "switched"-Devices are buttons provided for mode control. <br>
|
||||||
If HLS (HTTP Live Streaming) is used in Streaming-Device of type "switched", then the camera has to be set to video format
|
If HLS (HTTP Live Streaming) is used in Streaming-Device of type "switched", then the camera has to be set to video format
|
||||||
H.264 in the Synology Surveillance Station. Therefore the selection button for "HLS" is only provided in Streaming-Device
|
H.264 in the Synology Surveillance Station. Therefore the selection button for "HLS" is only provided in Streaming-Device
|
||||||
if the Reading "CamStreamFormat" contains HLS". <br>
|
if the Reading "CamStreamFormat" contains HLS". <br>
|
||||||
HTTP Live Streaming is currently onla available on Mac Safari or modern mobile iOS/Android devices.
|
HTTP Live Streaming is currently only available on Mac Safari or modern mobile iOS/Android devices. <br>
|
||||||
<br><br>
|
In devices of type "switched" buttons for controlling the media type to start are provided. <br>
|
||||||
|
A Streaming-Device of type "generic" needs the complete definition of HTML-Tags by the attribute "genericStrmHtmlTag".
|
||||||
|
These tags specify the content to playback. <br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<b>Example:</b>
|
||||||
<colgroup> <col width=10%> <col width=90%> </colgroup>
|
<pre>
|
||||||
<tr><td>mjpeg </td><td>- the streaming device permanent playback a MJPEG video stream (Streamkey method) </td></tr>
|
attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||||
<tr><td>switched </td><td>- playback of different streaming types. Buttons for mode control are provided. </td></tr>
|
<source src='http://192.168.2.10:32000/$NAME.m3u8' type='application/x-mpegURL'>
|
||||||
</table>
|
</video>
|
||||||
|
</pre>
|
||||||
|
The variables $HTMLATTR, $NAME are placeholder and absorb the attribute "htmlattr" (if set) respectively the SSCam-Devicename.
|
||||||
</ul>
|
</ul>
|
||||||
<br><br>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><b> set <name> createPTZcontrol </b> (valid for PTZ-CAM)</li> <br>
|
<li><b> set <name> createPTZcontrol </b> (valid for PTZ-CAM)</li> <br>
|
||||||
@ -6736,6 +6872,18 @@ sub SSCam_experror {
|
|||||||
The livestream can be stopped again by command <b>"set <name> stopView"</b>.
|
The livestream can be stopped again by command <b>"set <name> stopView"</b>.
|
||||||
The "runView" function also switches Streaming-Devices of type "switched" into the appropriate mode. <br><br>
|
The "runView" function also switches Streaming-Devices of type "switched" into the appropriate mode. <br><br>
|
||||||
|
|
||||||
|
Dependend of the content to playback, different control buttons are provided: <br><br>
|
||||||
|
<ul>
|
||||||
|
<table>
|
||||||
|
<colgroup> <col width=25%> <col width=75%> </colgroup>
|
||||||
|
<tr><td> Start Recording </td><td>- starts an endless recording </td></tr>
|
||||||
|
<tr><td> Stop Recording </td><td>- stopps the recording </td></tr>
|
||||||
|
<tr><td> Take Snapshot </td><td>- take a snapshot </td></tr>
|
||||||
|
<tr><td> Switch off </td><td>- stops a running playback </td></tr>
|
||||||
|
</table>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
|
||||||
<b>Note for HLS (HTTP Live Streaming):</b> <br>
|
<b>Note for HLS (HTTP Live Streaming):</b> <br>
|
||||||
The video starts with a technology caused delay. Every stream will be segemented into some little video files
|
The video starts with a technology caused delay. Every stream will be segemented into some little video files
|
||||||
(with a lenth of approximately 10 seconds) and is than delivered to the client.
|
(with a lenth of approximately 10 seconds) and is than delivered to the client.
|
||||||
@ -7066,6 +7214,22 @@ http(s)://<hostname><port>/webapi/entry.cgi?api=SYNO.SurveillanceSta
|
|||||||
<li><b>disable</b><br>
|
<li><b>disable</b><br>
|
||||||
deactivates the device definition </li><br>
|
deactivates the device definition </li><br>
|
||||||
|
|
||||||
|
<li><b>genericStrmHtmlTag</b><br>
|
||||||
|
This attribute contains HTML-Tags for video-specification in a Streaming-Device of type "generic".
|
||||||
|
(see also "set <name> createStreamDev generic") <br><br>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<b>Example:</b>
|
||||||
|
<pre>
|
||||||
|
attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||||
|
<source src='http://192.168.2.10:32000/$NAME.m3u8' type='application/x-mpegURL'>
|
||||||
|
</video>
|
||||||
|
</pre>
|
||||||
|
The variables $HTMLATTR, $NAME are placeholder and absorb the attribute "htmlattr" (if set) respectively the SSCam-Devicename.
|
||||||
|
</ul>
|
||||||
|
<br><br>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li><b>httptimeout</b><br>
|
<li><b>httptimeout</b><br>
|
||||||
Timeout-Value of HTTP-Calls to Synology Surveillance Station, Default: 4 seconds (if httptimeout = "0"
|
Timeout-Value of HTTP-Calls to Synology Surveillance Station, Default: 4 seconds (if httptimeout = "0"
|
||||||
or not set) </li><br>
|
or not set) </li><br>
|
||||||
@ -7240,7 +7404,11 @@ http(s)://<hostname><port>/webapi/entry.cgi?api=SYNO.SurveillanceSta
|
|||||||
<tr><td><li>CamIP</li> </td><td>- IP-Address of Camera </td></tr>
|
<tr><td><li>CamIP</li> </td><td>- IP-Address of Camera </td></tr>
|
||||||
<tr><td><li>CamLastRec</li> </td><td>- Path / name of the last recording </td></tr>
|
<tr><td><li>CamLastRec</li> </td><td>- Path / name of the last recording </td></tr>
|
||||||
<tr><td><li>CamLastRecTime</li> </td><td>- date / starttime / endtime of the last recording </td></tr>
|
<tr><td><li>CamLastRecTime</li> </td><td>- date / starttime / endtime of the last recording </td></tr>
|
||||||
|
<tr><td><li>CamLiveFps</li> </td><td>- Frames per second of Live-Stream </td></tr>
|
||||||
<tr><td><li>CamLiveMode</li> </td><td>- Source of Live-View (DS, Camera) </td></tr>
|
<tr><td><li>CamLiveMode</li> </td><td>- Source of Live-View (DS, Camera) </td></tr>
|
||||||
|
<tr><td><li>camLiveQuality</li> </td><td>- Live-Stream quality set in SVS </td></tr>
|
||||||
|
<tr><td><li>camLiveResolution</li> </td><td>- Live-Stream resolution set in SVS </td></tr>
|
||||||
|
<tr><td><li>camLiveStreamNo</li> </td><td>- used Stream-number for Live-Stream </td></tr>
|
||||||
<tr><td><li>CamModel</li> </td><td>- Model of camera </td></tr>
|
<tr><td><li>CamModel</li> </td><td>- Model of camera </td></tr>
|
||||||
<tr><td><li>CamMotDetSc</li> </td><td>- state of motion detection source (disabled, by camera, by SVS) and their parameter </td></tr>
|
<tr><td><li>CamMotDetSc</li> </td><td>- state of motion detection source (disabled, by camera, by SVS) and their parameter </td></tr>
|
||||||
<tr><td><li>CamNTPServer</li> </td><td>- set time server </td></tr>
|
<tr><td><li>CamNTPServer</li> </td><td>- set time server </td></tr>
|
||||||
@ -7336,7 +7504,7 @@ http(s)://<hostname><port>/webapi/entry.cgi?api=SYNO.SurveillanceSta
|
|||||||
<li>Setzen/Löschen eines Presets (bei PTZ-Kameras) </li>
|
<li>Setzen/Löschen eines Presets (bei PTZ-Kameras) </li>
|
||||||
<li>Setzen der Home-Position (bei PTZ-Kameras) </li>
|
<li>Setzen der Home-Position (bei PTZ-Kameras) </li>
|
||||||
<li>erstellen eines Paneels zur Kamera-Steuerung. (bei PTZ-Kameras) </li>
|
<li>erstellen eines Paneels zur Kamera-Steuerung. (bei PTZ-Kameras) </li>
|
||||||
<li>erzeugen eines separaten Streaming-Devices (createStreamDev) </li>
|
<li>erzeugen unterschiedlicher Typen von separaten Streaming-Devices (createStreamDev) </li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
@ -7532,29 +7700,44 @@ http(s)://<hostname><port>/webapi/entry.cgi?api=SYNO.SurveillanceSta
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<a name="SSCamcreateStreamDev"></a>
|
<a name="SSCamcreateStreamDev"></a>
|
||||||
<li><b> set <name> createStreamDev [mjpeg | switched] </b> (gilt für CAM)</li> <br>
|
<li><b> set <name> createStreamDev [generic | mjpeg | switched] </b> (gilt für CAM)</li> <br>
|
||||||
|
|
||||||
Es wird ein separates Streaming-Device (Type SSCamSTRM) erstellt. Dieses Device kann z.B. als separates Device
|
Es wird ein separates Streaming-Device (Typ SSCamSTRM) erstellt. Dieses Device kann z.B. als separates Device
|
||||||
in einem Dashboard genutzt werden.
|
in einem Dashboard genutzt werden.
|
||||||
Dem Streaming-Device wird der aktuelle Raum des Kameradevice zugewiesen sofern dort gesetzt.
|
Dem Streaming-Device wird der aktuelle Raum des Kameradevice zugewiesen sofern dort gesetzt.
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<table>
|
||||||
|
<colgroup> <col width=10%> <col width=90%> </colgroup>
|
||||||
|
<tr><td>generic </td><td>- das Streaming-Device gibt einen durch das Attribut "genericStrmHtmlTag" bestimmten Content wieder </td></tr>
|
||||||
|
<tr><td>mjpeg </td><td>- das Streaming-Device gibt einen permanenten MJPEG Kamerastream wieder (Streamkey Methode) </td></tr>
|
||||||
|
<tr><td>switched </td><td>- Wiedergabe unterschiedlicher Streamtypen. Drucktasten zur Steuerung werden angeboten. </td></tr>
|
||||||
|
</table>
|
||||||
|
</ul>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
Die Gestaltung kann durch HTML-Tags im <a href="#SSCamattr">Attribut</a> "htmlattr" im Kameradevice oder mit den
|
Die Gestaltung kann durch HTML-Tags im <a href="#SSCamattr">Attribut</a> "htmlattr" im Kameradevice oder mit den
|
||||||
spezifischen Attributen im Streaming-Device beeinflusst werden. <br>
|
spezifischen Attributen im Streaming-Device beeinflusst werden. <br>
|
||||||
Soll ein HLS-Stream im Streaming-Device vom Typ "switched" gestartet werden, muss die Kamera in der Synology Surveillance Station
|
Soll ein HLS-Stream im Streaming-Device vom Typ "switched" gestartet werden, muss die Kamera in der Synology Surveillance Station
|
||||||
auf das Videoformat H.264 eingestellt sein. Diese Auswahltaste wird deshalb im nur im Streaming-Device angeboten wenn das
|
auf das Videoformat H.264 eingestellt sein. Diese Auswahltaste wird deshalb im nur im Streaming-Device angeboten wenn das
|
||||||
Reading "CamStreamFormat = HLS" beinhaltet. <br>
|
Reading "CamStreamFormat = HLS" beinhaltet. <br>
|
||||||
HLS (HTTP Live Streaming) kann momentan nur auf Mac Safari oder mobilen iOS/Android-Geräten wiedergegeben werden. <br>
|
HLS (HTTP Live Streaming) kann momentan nur auf Mac Safari oder mobilen iOS/Android-Geräten wiedergegeben werden. <br>
|
||||||
Im "switched"-Device werden Drucktasten zur Steuerung angeboten.
|
Im "switched"-Device werden Drucktasten zur Steuerung des zu startenden Medientyps angeboten. <br>
|
||||||
<br><br>
|
Ein Streaming-Device vom Typ "generic" benötigt die Angabe von HTML-Tags im Attribut "genericStrmHtmlTag". Diese Tags
|
||||||
|
spezifizieren den wiederzugebenden Content. <br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<b>Beispiel:</b>
|
||||||
<colgroup> <col width=10%> <col width=90%> </colgroup>
|
<pre>
|
||||||
<tr><td>mjpeg </td><td>- das Streaming-Device gibt einen permanenten MJPEG Kamerastream wieder (Streamkey Methode) </td></tr>
|
attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||||
<tr><td>switched </td><td>- Wiedergabe unterschiedlicher Streamtypen. Drucktasten zur Steuerung werden angeboten. </td></tr>
|
<source src='http://192.168.2.10:32000/$NAME.m3u8' type='application/x-mpegURL'>
|
||||||
</table>
|
</video>
|
||||||
|
</pre>
|
||||||
|
Die Variablen $HTMLATTR, $NAME sind Platzhalter und übernehmen ein gesetztes Attribut "htmlattr" bzw. den SSCam-Devicenamen.
|
||||||
</ul>
|
</ul>
|
||||||
<br><br>
|
|
||||||
</ul>
|
</ul>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><b> set <name> createPTZcontrol </b> (gilt für PTZ-CAM)</li> <br>
|
<li><b> set <name> createPTZcontrol </b> (gilt für PTZ-CAM)</li> <br>
|
||||||
@ -7942,6 +8125,18 @@ http(s)://<hostname><port>/webapi/entry.cgi?api=SYNO.SurveillanceSta
|
|||||||
Der Livestream wird über das Kommando <b>"set <name> stopView"</b> wieder beendet. <br>
|
Der Livestream wird über das Kommando <b>"set <name> stopView"</b> wieder beendet. <br>
|
||||||
Die "runView" Funktion schaltet ebenfalls Streaming-Devices vom Typ "switched" in den entsprechenden Modus. <br><br>
|
Die "runView" Funktion schaltet ebenfalls Streaming-Devices vom Typ "switched" in den entsprechenden Modus. <br><br>
|
||||||
|
|
||||||
|
Abhängig vom wiedergegebenen Content werden unterschiedliche Steuertasten angeboten: <br><br>
|
||||||
|
<ul>
|
||||||
|
<table>
|
||||||
|
<colgroup> <col width=25%> <col width=75%> </colgroup>
|
||||||
|
<tr><td> Start Recording </td><td>- startet eine Endlosaufnahme </td></tr>
|
||||||
|
<tr><td> Stop Recording </td><td>- stoppt eine Aufnahme </td></tr>
|
||||||
|
<tr><td> Take Snapshot </td><td>- löst einen Schnappschuß aus </td></tr>
|
||||||
|
<tr><td> Switch off </td><td>- stoppt eine laufende Wiedergabe </td></tr>
|
||||||
|
</table>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
|
||||||
<b>Hinweis zu HLS (HTTP Live Streaming):</b> <br>
|
<b>Hinweis zu HLS (HTTP Live Streaming):</b> <br>
|
||||||
Das Video startet mit einer technologisch bedingten Verzögerung. Jeder Stream wird in eine Reihe sehr kleiner Videodateien
|
Das Video startet mit einer technologisch bedingten Verzögerung. Jeder Stream wird in eine Reihe sehr kleiner Videodateien
|
||||||
(mit etwa 10 Sekunden Länge) segmentiert und an den Client ausgeliefert.
|
(mit etwa 10 Sekunden Länge) segmentiert und an den Client ausgeliefert.
|
||||||
@ -8284,6 +8479,22 @@ http(s)://<hostname><port>/webapi/entry.cgi?api=SYNO.SurveillanceSta
|
|||||||
<li><b>disable</b><br>
|
<li><b>disable</b><br>
|
||||||
deaktiviert das Gerätemodul bzw. die Gerätedefinition </li><br>
|
deaktiviert das Gerätemodul bzw. die Gerätedefinition </li><br>
|
||||||
|
|
||||||
|
<li><b>genericStrmHtmlTag</b><br>
|
||||||
|
Das Attribut enthält HTML-Tags zur Video-Spezifikation in einem Streaming-Device von Typ "generic".
|
||||||
|
(siehe "set <name> createStreamDev generic") <br><br>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<b>Beispiel:</b>
|
||||||
|
<pre>
|
||||||
|
attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||||
|
<source src='http://192.168.2.10:32000/$NAME.m3u8' type='application/x-mpegURL'>
|
||||||
|
</video>
|
||||||
|
</pre>
|
||||||
|
Die Variablen $HTMLATTR, $NAME sind Platzhalter und übernehmen ein gesetztes Attribut "htmlattr" bzw. den SSCam-Devicenamen.
|
||||||
|
</ul>
|
||||||
|
<br><br>
|
||||||
|
</li>
|
||||||
|
|
||||||
<li><b>httptimeout</b><br>
|
<li><b>httptimeout</b><br>
|
||||||
Timeout-Wert für HTTP-Aufrufe zur Synology Surveillance Station, Default: 4 Sekunden (wenn
|
Timeout-Wert für HTTP-Aufrufe zur Synology Surveillance Station, Default: 4 Sekunden (wenn
|
||||||
httptimeout = "0" oder nicht gesetzt) </li><br>
|
httptimeout = "0" oder nicht gesetzt) </li><br>
|
||||||
@ -8463,7 +8674,11 @@ http(s)://<hostname><port>/webapi/entry.cgi?api=SYNO.SurveillanceSta
|
|||||||
<tr><td><li>CamIP</li> </td><td>- IP-Adresse der Kamera </td></tr>
|
<tr><td><li>CamIP</li> </td><td>- IP-Adresse der Kamera </td></tr>
|
||||||
<tr><td><li>CamLastRec</li> </td><td>- Pfad / Name der letzten Aufnahme </td></tr>
|
<tr><td><li>CamLastRec</li> </td><td>- Pfad / Name der letzten Aufnahme </td></tr>
|
||||||
<tr><td><li>CamLastRecTime</li> </td><td>- Datum / Startzeit - Stopzeit der letzten Aufnahme </td></tr>
|
<tr><td><li>CamLastRecTime</li> </td><td>- Datum / Startzeit - Stopzeit der letzten Aufnahme </td></tr>
|
||||||
|
<tr><td><li>CamLiveFps</li> </td><td>- Frames pro Sekunde des Live-Streams </td></tr>
|
||||||
<tr><td><li>CamLiveMode</li> </td><td>- Quelle für Live-Ansicht (DS, Camera) </td></tr>
|
<tr><td><li>CamLiveMode</li> </td><td>- Quelle für Live-Ansicht (DS, Camera) </td></tr>
|
||||||
|
<tr><td><li>camLiveQuality</li> </td><td>- in SVS eingestellte Live-Stream Qualität </td></tr>
|
||||||
|
<tr><td><li>camLiveResolution</li> </td><td>- in SVS eingestellte Live-Stream Auflösung </td></tr>
|
||||||
|
<tr><td><li>camLiveStreamNo</li> </td><td>- verwendete Stream-Nummer für Live-Stream </td></tr>
|
||||||
<tr><td><li>CamModel</li> </td><td>- Kameramodell </td></tr>
|
<tr><td><li>CamModel</li> </td><td>- Kameramodell </td></tr>
|
||||||
<tr><td><li>CamMotDetSc</li> </td><td>- Status der Bewegungserkennung (disabled, durch Kamera, durch SVS) und deren Parameter </td></tr>
|
<tr><td><li>CamMotDetSc</li> </td><td>- Status der Bewegungserkennung (disabled, durch Kamera, durch SVS) und deren Parameter </td></tr>
|
||||||
<tr><td><li>CamNTPServer</li> </td><td>- eingestellter Zeitserver </td></tr>
|
<tr><td><li>CamNTPServer</li> </td><td>- eingestellter Zeitserver </td></tr>
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
#########################################################################################################################
|
#########################################################################################################################
|
||||||
# Versions History:
|
# Versions History:
|
||||||
#
|
#
|
||||||
|
# 1.2.2 26.06.2018 make changes for generic stream dev
|
||||||
# 1.2.1 23.06.2018 no name add-on if MODEL is snapgallery
|
# 1.2.1 23.06.2018 no name add-on if MODEL is snapgallery
|
||||||
# 1.2.0 20.06.2018 running stream as human readable entry for SSCamSTRM-Device
|
# 1.2.0 20.06.2018 running stream as human readable entry for SSCamSTRM-Device
|
||||||
# 1.1.0 16.06.2018 attr hideDisplayName regarding to Forum #88667
|
# 1.1.0 16.06.2018 attr hideDisplayName regarding to Forum #88667
|
||||||
@ -44,7 +45,7 @@ package main;
|
|||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
my $SSCamSTRMVersion = "1.2.1";
|
my $SSCamSTRMVersion = "1.2.2";
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
sub SSCamSTRM_Initialize($) {
|
sub SSCamSTRM_Initialize($) {
|
||||||
@ -116,7 +117,7 @@ sub SSCamSTRM_FwFn($$$$) {
|
|||||||
return undef if(IsDisabled($d));
|
return undef if(IsDisabled($d));
|
||||||
|
|
||||||
$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} !~ /snapgallery/);
|
my $show = $defs{$hash->{PARENT}}->{HELPER}{ACTSTRM} if($hash->{MODEL} =~ /switched/);
|
||||||
$show = $show?"($show)":"";
|
$show = $show?"($show)":"";
|
||||||
|
|
||||||
my $alias = AttrVal($d, "alias", $d); # Linktext als Aliasname oder Devicename setzen
|
my $alias = AttrVal($d, "alias", $d); # Linktext als Aliasname oder Devicename setzen
|
||||||
|
Loading…
x
Reference in New Issue
Block a user