From 92fa2c47b5559558e51344beae0758f6001cce4a Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Thu, 14 Jun 2018 15:32:14 +0000 Subject: [PATCH] 49_SSCam: global vars git-svn-id: https://svn.fhem.de/fhem/trunk@16872 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/49_SSCam.pm | 76 +++++++++++++++++++++------------------ fhem/FHEM/49_SSCamSTRM.pm | 18 ++++++---- 2 files changed, 53 insertions(+), 41 deletions(-) diff --git a/fhem/FHEM/49_SSCam.pm b/fhem/FHEM/49_SSCam.pm index d22df917b..8bf775ad0 100644 --- a/fhem/FHEM/49_SSCam.pm +++ b/fhem/FHEM/49_SSCam.pm @@ -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 .= " "; + $ret .= "
"; + if(ReadingsVal($camname, "Record", "Stop") eq "Stop") { + # Aufnahmebutton endlos Start + $ret .= "$imgrecendless "; + } else { + # Aufnahmebutton Stop + $ret .= "$imgrecstop "; + } + $ret .= "$imgdosnap "; + $ret .= ""; if(AttrVal($camname,"ptzPanel_use",1)) { my $ptz_ret = SSCam_ptzpanel($camname); if($ptz_ret) { @@ -5811,7 +5816,8 @@ sub SSCam_StreamDev($$$) { $ret .= ''; $ret .= ""; + "; + $ret .= ""; } } elsif($fmt =~ /switched/) { @@ -5821,7 +5827,8 @@ sub SSCam_StreamDev($$$) { if($link && $wltype =~ /image|iframe|video|base64img|embed|hls/) { if($wltype =~ /image/) { $ret .= "
"; - $ret .= "$imgstop "; + $ret .= "$imgstop "; + $ret .= $imgblank; if(ReadingsVal($camname, "Record", "Stop") eq "Stop") { # Aufnahmebutton endlos Start $ret .= "$imgrecendless "; @@ -5838,6 +5845,7 @@ sub SSCam_StreamDev($$$) { } } if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) { + $ret .= ""; $ret .= ''; $ret .= ""; + $ret .= ""; } } elsif ($wltype =~ /video/) { @@ -5868,11 +5877,12 @@ sub SSCam_StreamDev($$$) { $ret .= "$imgstop "; $ret .= ""; if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/) { + $ret .= ''; $ret .= ''; $ret .= ""; - $ret .= ''; + "; + $ret .= ""; } } elsif($wltype =~ /base64img/) { $ret .= "
"; @@ -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 diff --git a/fhem/FHEM/49_SSCamSTRM.pm b/fhem/FHEM/49_SSCamSTRM.pm index e212167ba..48ee3219f 100644 --- a/fhem/FHEM/49_SSCamSTRM.pm +++ b/fhem/FHEM/49_SSCamSTRM.pm @@ -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} = ""; + } 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
  • forcePageRefresh
    The attribute is evaluated by SSCam.
    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.

  • @@ -254,8 +259,7 @@ Abhängig vom Zustand des Streaming-Devices werden zum Start von Aktionen unters
  • forcePageRefresh
    Das Attribut wird durch SSCam ausgewertet.
    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.