2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-15 22:26:04 +00:00

49_SSCam: global vars

git-svn-id: https://svn.fhem.de/fhem/trunk@16872 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2018-06-14 15:32:14 +00:00
parent 446c6bd9dc
commit 92fa2c47b5
2 changed files with 53 additions and 41 deletions

View File

@ -27,7 +27,7 @@
#########################################################################################################################
# Versions History:
#
# 5.2.1 14.06.2018 design change of SSCam_StreamDev
# 5.2.1 14.06.2018 design change of SSCam_StreamDev, change in event generation for SSCam_StreamDev, fix global vars
# 5.2.0 14.06.2018 support longpoll refresh of SSCamSTRM-Devices
# 5.1.0 13.06.2018 more control elements (Start/Stop Recording, Take Snapshot) in func SSCam_StreamDev
# control of detaillink is moved to SSCamSTRM-device
@ -2180,7 +2180,7 @@ sub SSCam_stopliveview ($) {
SSCam_getapisites($hash);
} else {
# kein HLS Stream
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, Longpoll SSCam, Longpoll SSCamSTRM
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
$hash->{HELPER}{ACTIVE} = "off";
if (AttrVal($name,"debugactivetoken",0)) {
Log3($name, 3, "$name - Active-Token deleted by OPMODE: $hash->{OPMODE}");
@ -3895,7 +3895,7 @@ sub SSCam_camop ($) {
}
}
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, Longpoll SSCam, Longpoll SSCamSTRM
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
$hash->{HELPER}{ACTIVE} = "off";
if (AttrVal($name,"debugactivetoken",0)) {
@ -4049,7 +4049,7 @@ sub SSCam_camop_parse ($) {
InternalTimer(gettimeofday()+$rectime, "SSCam_camstoprec", $hash);
}
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein Longpoll SSCam, Longpoll SSCamSTRM
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
} elsif ($OpMode eq "Stop") {
@ -4063,7 +4063,7 @@ sub SSCam_camop_parse ($) {
# Logausgabe
Log3($name, 3, "$name - Camera $camname Recording stopped");
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein Longpoll SSCam, Longpoll SSCamSTRM
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
# Aktualisierung Eventlist der letzten Aufnahme
SSCam_geteventlist($hash);
@ -4258,10 +4258,7 @@ sub SSCam_camop_parse ($) {
} elsif ($OpMode eq "Snap") {
# ein Schnapschuß wurde aufgenommen
# falls Aufnahme noch läuft -> state = on setzen
# my $st;
# (ReadingsVal("$name", "Record", "") eq "Start")?$st="on":$st="off";
# readingsSingleUpdate($hash,"state", $st, 0);
SSCam_refresh($hash,0,0,0); # kein Room-Refresh, kein Longpoll SSCam, kein Longpoll SSCamSTRM
SSCam_refresh($hash,0,0,0); # kein Room-Refresh, kein SSCam-state-Event, kein SSCamSTRM-Event
$snapid = $data->{data}{'id'};
@ -4312,14 +4309,12 @@ sub SSCam_camop_parse ($) {
if (exists($hash->{HELPER}{RUNVIEW}) && $hash->{HELPER}{RUNVIEW} =~ /snap/ && exists($data->{'data'}{'data'}[0]{imageData})) {
delete $hash->{HELPER}{RUNVIEW};
# Aufnahmestatus in state abbilden
my $st;
# (ReadingsVal("$name", "Record", "") eq "Start")?$st="on":$st="off";
# readingsSingleUpdate($hash,"state", $st, 0);
# Aufnahmestatus in state abbilden
$hash->{HELPER}{LINK} = $data->{data}{data}[0]{imageData};
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein Longpoll SSCam, Longpoll SSCamSTRM
}
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
} else {
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
}
if($OpMode eq "getsnapgallery") {
# es soll eine Schnappschußgallerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt werden (Attr snapGalleryBoost=0)
@ -4383,14 +4378,14 @@ sub SSCam_camop_parse ($) {
Log3($name, 4, "$name - HLS Streaming of camera \"$name\" activated, Streaming-URL: $url") if(AttrVal($name,"verbose",3) == 4);
Log3($name, 3, "$name - HLS Streaming of camera \"$name\" activated") if(AttrVal($name,"verbose",3) == 3);
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, Longpoll SSCam, Longpoll SSCamSTRM
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
} elsif ($OpMode eq "stopliveview_hls") {
# HLS Streaming wurde deaktiviert, Aktivitätsstatus speichern
$hash->{HELPER}{HLSSTREAM} = "inactive";
Log3($name, 3, "$name - HLS Streaming of camera \"$name\" deactivated");
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, Longpoll SSCam, Longpoll SSCamSTRM
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
} elsif ($OpMode eq "reactivate_hls") {
# HLS Streaming wurde deaktiviert, Aktivitätsstatus speichern
@ -4406,7 +4401,7 @@ sub SSCam_camop_parse ($) {
$hash->{HELPER}{HLSSTREAM} = "active";
Log3($name, 4, "$name - HLS Streaming of camera \"$name\" activated for streaming device");
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, Longpoll SSCam, Longpoll SSCamSTRM
SSCam_refresh($hash,0,1,1); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
} elsif ($OpMode eq "getsnapfilename") {
# den Filenamen eines Schnapschusses ermitteln
@ -5406,20 +5401,21 @@ return($hash,$success,$myjson);
# Refresh eines Raumes aus $hash->{HELPER}{STRMROOM}
# bzw. Longpoll von SSCam bzw. eines SSCamSTRM Devices wenn
# $hash->{HELPER}{STRMDEV} gefüllt
# $hash, $pload (1=Page reload), $longpoll SSCam(1=Event), $longpoll SSCamSTRM (1=Event)
# $hash, $pload (1=Page reload), SSCam-state-Event(1=Event), SSCamSTRM-Event (1=Event)
######################################################################################################
sub SSCam_refresh($$$$) {
my ($hash,$pload,$lpoll_scm,$lpoll_strm) = @_;
my $name = $hash->{NAME};
my $fpr = 0;
# Kontext des SSCamSTRM-Devices speichern für SSCam_refresh
# Kontext des SSCamSTRM-Devices speichern für Refresh
my $sd = $hash->{HELPER}{STRMDEV}?$hash->{HELPER}{STRMDEV}:"\"n.a.\""; # Name des aufrufenden SSCamSTRM-Devices
my $sr = $hash->{HELPER}{STRMROOM}?$hash->{HELPER}{STRMROOM}:"\"n.a.\""; # Raum aus dem das SSCamSTRM-Device die Funktion aufrief
my $sl = $hash->{HELPER}{STRMDETAIL}?$hash->{HELPER}{STRMDETAIL}:"\"n.a.\""; # Name des SSCamSTRM-Devices (wenn Detailansicht)
$fpr = AttrVal($hash->{HELPER}{STRMDEV},"forcePageRefresh",0) if($hash->{HELPER}{STRMDEV});
Log3($name, 4, "$name - SSCam_refresh - caller: $sd, callerroom: $sr, detail: $sl, pload: $pload, forcePageRefresh: $fpr");
# Page-Reload
if($pload && $hash->{HELPER}{STRMROOM} && $hash->{HELPER}{STRMDETAIL}) {
if($hash->{HELPER}{STRMROOM} && !$hash->{HELPER}{STRMDETAIL} && !$fpr) {
Log3($name, 4, "$name - SSCam_refresh jetzt");
@ -5439,7 +5435,7 @@ sub SSCam_refresh($$$$) {
{ map { FW_directNotify("#FHEMWEB:$_", "location.reload('true')", "") } devspec2array("TYPE=FHEMWEB") }
}
# Aufnahmestatus in state abbilden & Longpoll SSCam-Device wenn Event 1
# Aufnahmestatus in state abbilden & SSCam-Device state setzen (mit/ohne Event)
my $st = (ReadingsVal($name, "Record", "") eq "Start")?"on":"off";
if($lpoll_scm) {
readingsSingleUpdate($hash,"state", $st, 1);
@ -5447,13 +5443,13 @@ sub SSCam_refresh($$$$) {
readingsSingleUpdate($hash,"state", $st, 0);
}
# Longpoll des SSCamSTRM-Device
# state des SSCamSTRM-Device mit Opmode updaten (mit/ohne Event)
if($hash->{HELPER}{STRMDEV}) {
my $strmhash = $defs{$hash->{HELPER}{STRMDEV}};
if($lpoll_strm) {
readingsSingleUpdate($strmhash,"state", $st, 1);
readingsSingleUpdate($strmhash,"state", $hash->{OPMODE}, 1);
} else {
readingsSingleUpdate($strmhash,"state", $st, 0);
readingsSingleUpdate($strmhash,"state", $hash->{OPMODE}, 0);
}
}
@ -5799,7 +5795,16 @@ sub SSCam_StreamDev($$$) {
if($fmt =~ /mjpeg/) {
$link = "http://$serveraddr:$serverport/webapi/$apivideostmspath?api=$apivideostms&version=$apivideostmsmaxver&method=Stream&cameraId=$camid&format=mjpeg&_sid=$sid";
$audiolink = "http://$serveraddr:$serverport/webapi/$apiaudiostmpath?api=$apiaudiostm&version=$apiaudiostmmaxver&method=Stream&cameraId=$camid&_sid=$sid";
$ret .= "<td><img src=$link $ha> </td>";
$ret .= "<td><img src=$link $ha><br>";
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) {
@ -5811,7 +5816,8 @@ sub SSCam_StreamDev($$$) {
$ret .= '<tr class="odd">';
$ret .= "<td><audio src=$audiolink preload='none' volume='0.5' controls>
Your browser does not support the audio element.
</audio></td>";
</audio>";
$ret .= "</td>";
}
} elsif($fmt =~ /switched/) {
@ -5821,7 +5827,8 @@ sub SSCam_StreamDev($$$) {
if($link && $wltype =~ /image|iframe|video|base64img|embed|hls/) {
if($wltype =~ /image/) {
$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;
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
# Aufnahmebutton endlos Start
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdrecendless')\">$imgrecendless </a>";
@ -5838,6 +5845,7 @@ sub SSCam_StreamDev($$$) {
}
}
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) {
$ret .= "</tr>";
$ret .= '<tr class="odd">';
$ret .= "<td><audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
Your browser does not support the audio element.
@ -5855,7 +5863,8 @@ sub SSCam_StreamDev($$$) {
$ret .= '<tr class="odd">';
$ret .= "<td><audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
Your browser does not support the audio element.
</audio></td>";
</audio>";
$ret .= "</td>";
}
} elsif ($wltype =~ /video/) {
@ -5868,11 +5877,12 @@ sub SSCam_StreamDev($$$) {
$ret .= "<a onClick=\"FW_cmd('$FW_ME$FW_subdir?XHR=1&$cmdstop')\">$imgstop </a>";
$ret .= "</td>";
if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) {
$ret .= '</tr>';
$ret .= '<tr class="odd">';
$ret .= "<td><audio src=$hash->{HELPER}{AUDIOLINK} preload='none' volume='0.5' controls>
Your browser does not support the audio element.
</audio></td>";
$ret .= '</tr>';
</audio>";
$ret .= "</td>";
}
} elsif($wltype =~ /base64img/) {
$ret .= "<td><img src='data:image/jpeg;base64,$link' $ha><br>";
@ -5954,7 +5964,7 @@ sub composegallery ($;$$) {
my $ha = AttrVal($name, "snapGalleryHtmlAttr", AttrVal($name, "htmlattr", 'width="500" height="325"'));
# falls "composegallery" durch ein mit "createSnapGallery" angelegtes Device aufgerufen wird
my ($devWlink);
my $devWlink = " ";
if ($strmdev) {
if($defs{$strmdev}{TYPE} ne "SSCamSTRM") {
# Abfrage wegen Kompatibilität zu "alten" compose mit weblink-Modul
@ -5963,8 +5973,6 @@ sub composegallery ($;$$) {
}
my $wlha = AttrVal($strmdev, "htmlattr", undef);
$ha = (defined($wlha))?$wlha:$ha; # htmlattr vom weblink-Device übernehmen falls von wl-Device aufgerufen und gesetzt
} else {
$devWlink = " ";
}
# wenn Weblink genutzt wird und attr "snapGalleryBoost" nicht gesetzt ist -> Warnung in Gallerie ausgeben

View File

@ -28,6 +28,7 @@
#########################################################################################################################
# Versions History:
#
# 1.0.1 14.06.2018 commandref revised
# 1.0.0 14.06.2018 switch to longpoll refresh
# 0.4 13.06.2018 new attribute "noDetaillink" (deleted in V1.0.0)
# 0.3 12.06.2018 new attribute "forcePageRefresh"
@ -40,7 +41,7 @@ package main;
use strict;
use warnings;
my $SSCamSTRMVersion = "1.0.0";
my $SSCamSTRMVersion = "1.0.1";
################################################################
sub SSCamSTRM_Initialize($) {
@ -51,7 +52,8 @@ sub SSCamSTRM_Initialize($) {
$hash->{FW_summaryFn} = "SSCamSTRM_FwFn";
$hash->{FW_detailFn} = "SSCamSTRM_FwFn";
$hash->{AttrFn} = "SSCamSTRM_Attr";
# $hash->{FW_atPageEnd} = 1;
#$hash->{FW_addDetailToSummary} = 1;
# $hash->{FW_atPageEnd} = 1; # Achtung, kein Longpoll
}
@ -70,7 +72,11 @@ sub SSCamSTRM_Define($$) {
$hash->{VERSION} = $SSCamSTRMVersion;
$hash->{LINK} = $link;
$attr{$name}{alias} = ".";
if($hash->{MODEL} =~ /switched|mjpeg/) {
$attr{$name}{alias} = "<span></span>";
} else {
$attr{$name}{alias} = ".";
}
readingsSingleUpdate($hash,"state", "initialized", 1); # Init für "state"
@ -177,8 +183,7 @@ Dependend of the Streaming-Device state, different buttons are provided to start
<li><b>forcePageRefresh</b><br>
The attribute is evaluated by SSCam. <br>
If set, a reload of all browser pages with active FHEMWEB-connections will be enforced.
The restriction of a page reload of only one room or more rooms is canceled by this attribute, if the SSCamSTRM-Device
is e.g. added to a FLOORPLAN or Dashboard and it is additionally located in one or more rooms.
This may be helpful if problems with longpoll are appear.
</li>
<br>
@ -254,8 +259,7 @@ Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unters
<li><b>forcePageRefresh</b><br>
Das Attribut wird durch SSCam ausgewertet. <br>
Wenn gesetzt, wird ein Reload aller Browserseiten mit aktiven FHEMWEB-Verbindungen bei bestimmten Aktionen erzwungen.
Die Beschränkung des Seitenreloads auf nur einen oder mehrere Räume wird mit diesem Attribut aufgehoben, falls das
SSCamSTRM-Device sich z.B. in einem FLOORPLAN oder Dashboard befindet und zusätzlich in einen oder mehrere Räume
Das kann hilfreich sein, falls es mit Longpoll Probleme geben sollte.
eingefügt ist.
</li>
<br>