From 0757bc45643927bb2edfb216f6bcda804080f478 Mon Sep 17 00:00:00 2001 From: nasseeder1 Date: Fri, 24 Jul 2020 15:04:22 +0000 Subject: [PATCH] 49_SSCam: set compatibility to 8.2.8, minor changes acc. PBP lvl 3 git-svn-id: https://svn.fhem.de/fhem/trunk@22463 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/49_SSCam.pm | 171 +++++++++++++-------------- fhem/contrib/DS_Starter/49_SSCam.pm | 173 ++++++++++++++-------------- 3 files changed, 174 insertions(+), 171 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 320228ee9..5d06eee79 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # 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. + - change: 49_SSCam: set compatibility to 8.2.8, minor changes acc. PBP lvl 3 - feature: 93_DbRep: new aggregation value 'minute', some fixes - feature: 14_SD_UT.pm new model Westinghouse Bendan, NAVARIS touch light switch, diff --git a/fhem/FHEM/49_SSCam.pm b/fhem/FHEM/49_SSCam.pm index 70ede174c..ebec87ce2 100644 --- a/fhem/FHEM/49_SSCam.pm +++ b/fhem/FHEM/49_SSCam.pm @@ -159,6 +159,7 @@ BEGIN { # Versions History intern my %vNotesIntern = ( + "9.5.1" => "24.07.2020 set compatibility to 8.2.8, some changes according PBP level 3 ", "9.5.0" => "15.07.2020 streamDev master type added, comref revised ", "9.4.5" => "15.07.2020 fix crash while autocreate CommandDelete, CommandSave is missing ", "9.4.4" => "14.07.2020 fix crash while autocreate makeDeviceName is missing ", @@ -500,7 +501,7 @@ my %sdswfn = ( # Fun # Standardvariablen und Forward-Deklaration my $defSlim = 3; # default Anzahl der abzurufenden Schnappschüsse mit snapGallery my $defSnum = "1,2,3,4,5,6,7,8,9,10"; # mögliche Anzahl der abzurufenden Schnappschüsse mit snapGallery -my $compstat = "8.2.7"; # getestete SVS-Version +my $compstat = "8.2.8"; # getestete SVS-Version my $valZoom = ".++,+,stop,-,--."; # Inhalt des Setters "setZoom" #use vars qw($FW_ME); # webname (default is fhem), used by 97_GROUP/weblink @@ -1091,7 +1092,7 @@ sub Attr { return "The value of \"$aName\" has to be greater than 10 seconds." if($aVal <= 10); } if($aName =~ m/cacheServerParam/x) { - return "Please provide the Redis server parameters in form: : or unix:" if($aVal !~ /^(.*:\d+|unix:.+)$/); + return "Please provide the Redis server parameters in form: : or unix:" if($aVal !~ /^(.*?:\d+|unix:.+)$/x); my $type = AttrVal($name, "cacheType", "internal"); if($hash->{HELPER}{CACHEKEY} && $type eq "redis") { cache($name, "c_destroy"); @@ -1616,23 +1617,23 @@ sub Set { } elsif ($opt eq "motdetsc" && IsModelCam($hash)) { if (!$hash->{CREDENTIALS}) {return qq{Credentials of $name are not set - make sure you've set it with "set $name credentials username password"};} - if (!$prop || $prop !~ /^(disable|camera|SVS)$/) { return " \"$opt\" needs one of those arguments: disable, camera, SVS !";} + if (!$prop || $prop !~ /^(disable|camera|SVS)$/x) { return " \"$opt\" needs one of those arguments: disable, camera, SVS !";} $hash->{HELPER}{MOTDETSC} = $prop; if ($prop1) { # check ob Zahl zwischen 1 und 99 - return "invalid value for sensitivity (SVS or camera) - use number between 1 - 99" if ($prop1 !~ /^([1-9]|[1-9][0-9])*$/); + return "invalid value for sensitivity (SVS or camera) - use number between 1 - 99" if ($prop1 !~ /^([1-9]|[1-9][0-9])*$/x); $hash->{HELPER}{MOTDETSC_PROP1} = $prop1; } if ($prop2) { # check ob Zahl zwischen 1 und 99 - return "invalid value for threshold (SVS) / object size (camera) - use number between 1 - 99" if ($prop2 !~ /^([1-9]|[1-9][0-9])*$/); + return "invalid value for threshold (SVS) / object size (camera) - use number between 1 - 99" if ($prop2 !~ /^([1-9]|[1-9][0-9])*$/x); $hash->{HELPER}{MOTDETSC_PROP2} = $prop2; } if ($prop3) { # check ob Zahl zwischen 1 und 99 - return "invalid value for threshold (SVS) / object size (camera) - use number between 1 - 99" if ($prop3 !~ /^([1-9]|[1-9][0-9])*$/); + return "invalid value for threshold (SVS) / object size (camera) - use number between 1 - 99" if ($prop3 !~ /^([1-9]|[1-9][0-9])*$/x); $hash->{HELPER}{MOTDETSC_PROP3} = $prop3; } amMotDetSc($hash); @@ -1701,7 +1702,7 @@ sub Set { return; } else { - if ($prop !~ /\d+/ || $prop1 !~ /\d+/ || abs($prop) > 640 || abs($prop1) > 480) { + if ($prop !~ /\d+/x || $prop1 !~ /\d+/x || abs($prop) > 640 || abs($prop1) > 480) { return "Function \"goAbsPTZ\" needs two coordinates, posX=0-640 and posY=0-480, as arguments or use up, down, left, right instead"; } @@ -1720,11 +1721,11 @@ sub Set { return "PTZ version of Synology API isn't set. Use \"get $name scanVirgin\" first." if(!$hash->{HELPER}{APIPTZMAXVER}); if($hash->{HELPER}{APIPTZMAXVER} <= 4) { - if (!defined($prop) || ($prop !~ /^up$|^down$|^left$|^right$|^dir_\d$/)) {return "Function \"move\" needs an argument like up, down, left, right or dir_X (X = 0 to CapPTZDirections-1)";} + if (!defined($prop) || ($prop !~ /^up$|^down$|^left$|^right$|^dir_\d$/x)) {return "Function \"move\" needs an argument like up, down, left, right or dir_X (X = 0 to CapPTZDirections-1)";} $hash->{HELPER}{GOMOVEDIR} = $prop; } elsif ($hash->{HELPER}{APIPTZMAXVER} >= 5) { - if (!defined($prop) || ($prop !~ /^right$|^upright$|^up$|^upleft$|^left$|^downleft$|^down$|^downright$/)) {return "Function \"move\" needs an argument like right, upright, up, upleft, left, downleft, down, downright ";} + if (!defined($prop) || ($prop !~ /^right$|^upright$|^up$|^upleft$|^left$|^downleft$|^down$|^downright$/x)) {return "Function \"move\" needs an argument like right, upright, up, upleft, left, downleft, down, downright ";} my %dirs = ( right => 0, upright => 4, @@ -2120,7 +2121,7 @@ sub Get { $ret .= ""; $i = 0; for my $key (sortVersion("desc",keys %vNotesExtern)) { - ($val0,$val1) = split(/\s/,$vNotesExtern{$key},2); + ($val0,$val1) = split(/\s/x,$vNotesExtern{$key},2); $ret .= sprintf("$key $val0 $val1" ); $ret .= ""; $i++; @@ -2213,7 +2214,7 @@ sub FWsummaryFn { $ret .= ""; if($wltype eq "image") { - if(ReadingsVal($name, "SVSversion", "8.2.3-5828") eq "8.2.3-5828" && ReadingsVal($name, "CamVideoType", "") !~ /MJPEG/) { + if(ReadingsVal($name, "SVSversion", "8.2.3-5828") eq "8.2.3-5828" && ReadingsVal($name, "CamVideoType", "") !~ /MJPEG/x) { $ret .= "
Because SVS version 8.2.3-5828 is running you cannot see the MJPEG-Stream. Please upgrade to a higher SVS version !

"; } else { $ret .= "
"; @@ -2231,7 +2232,7 @@ sub FWsummaryFn { $ret .= "$imgdosnap "; } $ret .= "
"; - if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) { + if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/x) { $ret .= ""; @@ -2243,7 +2244,7 @@ sub FWsummaryFn { "; $ret .= "
"; $ret .= "$imgstop "; - if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) { + if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/x) { $ret .= ""; @@ -2251,7 +2252,7 @@ sub FWsummaryFn { } elsif($wltype eq "embed") { $ret .= ""; - if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) { + if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/x) { $ret .= ""; @@ -2298,7 +2299,7 @@ sub FWsummaryFn { $ret .= "
"; $ret .= "$imgstop "; $ret .= "
"; - if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/) { + if($hash->{HELPER}{AUDIOLINK} && ReadingsVal($d, "CamAudioType", "Unknown") !~ /Unknown/x) { $ret .= ""; @@ -2496,7 +2497,7 @@ sub myVersion { my $name = $hash->{NAME}; my $actvs = 0; - my @vl = split (/-/,ReadingsVal($name, "SVSversion", ""),2); + my @vl = split (/-/x,ReadingsVal($name, "SVSversion", ""),2); if(@vl) { $actvs = $vl[0]; $actvs =~ s/\.//gx; @@ -2659,9 +2660,9 @@ sub wdpollcaminfo { my $lupd = ReadingsVal($name, "LastUpdateTime", "1970-01-01 / 01:00:00"); my ($year,$month,$mday,$hour,$min,$sec); if ($lupd =~ /(\d+)\.(\d+)\.(\d+)/x) { - ($mday, $month, $year, $hour, $min, $sec) = ($lupd =~ /(\d+)\.(\d+)\.(\d+) \/ (\d+):(\d+):(\d+)/); + ($mday, $month, $year, $hour, $min, $sec) = ($lupd =~ /(\d+)\.(\d+)\.(\d+)\s\/\s(\d+):(\d+):(\d+)/x); } else { - ($year, $month, $mday, $hour, $min, $sec) = ($lupd =~ /(\d+)-(\d+)-(\d+) \/ (\d+):(\d+):(\d+)/); + ($year, $month, $mday, $hour, $min, $sec) = ($lupd =~ /(\d+)-(\d+)-(\d+)\s\/\s(\d+):(\d+):(\d+)/x); } $lupd = fhemTimeLocal($sec, $min, $hour, $mday, $month-=1, $year-=1900); if( gettimeofday() > ($lupd + $pcia + 20) ) { @@ -4711,7 +4712,7 @@ sub getApiSites_Parse { Log3($name, 4, "$name - installed SVS version is: $actvs"); if(AttrVal($name,"simu_SVSversion",0)) { - my @vl = split (/\.|-/,AttrVal($name, "simu_SVSversion", "")); + my @vl = split (/\.|-/x,AttrVal($name, "simu_SVSversion", "")); $actvs = $vl[0]; $actvs .= $vl[1]; $actvs .= ($vl[2] =~ /\d/x) ? $vl[2]."xxxx" : $vl[2]; @@ -5420,7 +5421,7 @@ sub camOp { Log3($name, 4, "$name - trigger external event \"$hash->{HELPER}{EVENTID}\""); $url = "$proto://$serveraddr:$serverport/webapi/$apiextevtpath?api=$apiextevt&version=$apiextevtmaxver&method=Trigger&eventId=$hash->{HELPER}{EVENTID}&eventName=$hash->{HELPER}{EVENTID}&_sid=\"$sid\""; - } elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} !~ m/snap|^live_.*hls$/) { + } elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} !~ m/snap|^live_.*hls$/x) { $exturl = AttrVal($name, "livestreamprefix", "$proto://$serveraddr:$serverport"); $exturl = ($exturl eq "DEF")?"$proto://$serveraddr:$serverport":$exturl; if ($hash->{HELPER}{RUNVIEW} =~ m/live/x) { @@ -5572,7 +5573,7 @@ sub camOp_Parse { } elsif ($myjson ne "") { # wenn die Abfrage erfolgreich war ($data enthält die Ergebnisdaten des HTTP Aufrufes) # Evaluiere ob Daten im JSON-Format empfangen wurden - if($OpMode !~ /SaveRec|GetRec/) { # "SaveRec/GetRec" liefern MP4-Daten und kein JSON + if($OpMode !~ /SaveRec|GetRec/x) { # "SaveRec/GetRec" liefern MP4-Daten und kein JSON ($hash,$success,$myjson) = evaljson($hash,$myjson); unless ($success) { Log3($name, 4, "$name - Data returned: ".$myjson); @@ -6071,8 +6072,8 @@ sub camOp_Parse { } } else { for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren - next if $_ !~ /\{SNAPHASH\}\{(\d+)\}\{.*\}/; - $_ =~ s/\{SNAPHASH\}\{(\d+)\}\{.*\}/$1/; + next if $_ !~ /\{SNAPHASH\}\{(\d+)\}\{.*\}/x; + $_ =~ s/\{SNAPHASH\}\{(\d+)\}\{.*\}/$1/x; push @as,$_ if($_=~/^(\d+)$/x); } my %seen; @@ -6218,8 +6219,8 @@ sub camOp_Parse { } } else { for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren - next if $_ !~ /\{SNAPHASH\}\{(\d+)\}\{.*\}/; - $_ =~ s/\{SNAPHASH\}\{(\d+)\}\{.*\}/$1/; + next if $_ !~ /\{SNAPHASH\}\{(\d+)\}\{.*\}/x; + $_ =~ s/\{SNAPHASH\}\{(\d+)\}\{.*\}/$1/x; push @as,$_ if($_=~/^(\d+)$/x); } my %seen; @@ -6569,7 +6570,7 @@ sub camOp_Parse { if (AttrVal($name, "simu_SVSversion", undef)) { Log3($name, 4, "$name - another SVS-version ".AttrVal($name, "simu_SVSversion", undef)." will be simulated"); #delete $version{"SMALL"} if ($version{"SMALL"}); - my @vl = split (/\.|-/,AttrVal($name, "simu_SVSversion", "")); + my @vl = split (/\.|-/x,AttrVal($name, "simu_SVSversion", "")); $major = $vl[0]; $minor = $vl[1]; $small = ($vl[2] =~ /\d/x) ? $vl[2] : ''; @@ -6638,19 +6639,19 @@ sub camOp_Parse { if (AttrVal($name, "livestreamprefix", undef)) { my $exturl = AttrVal($name, "livestreamprefix", "$proto://$serveraddr:$serverport"); $exturl = ($exturl eq "DEF") ? "$proto://$serveraddr:$serverport" : $exturl; - my @mjh = split(/\//, $mjpegHttp, 4); + my @mjh = split(/\//x, $mjpegHttp, 4); $mjpegHttp = $exturl."/".$mjh[3]; - my @mxh = split(/\//, $mxpegHttp, 4); + my @mxh = split(/\//x, $mxpegHttp, 4); $mxpegHttp = $exturl."/".$mxh[3]; if($unicastPath) { - my @ucp = split(/[@\|:]/, $unicastPath); - my @lspf = split(/[\/\/\|:]/, $exturl); + my @ucp = split(/[@\|:]/x, $unicastPath); + my @lspf = split(/[\/\/\|:]/x, $exturl); $unicastPath = $ucp[0].":".$ucp[1].":".$ucp[2]."@".$lspf[3].":".$ucp[4]; } } # StmKey extrahieren - my @sk = split(/&StmKey=/, $mjpegHttp); + my @sk = split(/&StmKey=/x, $mjpegHttp); my $stmkey = $sk[1]; # Quotes in StmKey entfernen falls noQuotesForSID gesetzt @@ -7037,7 +7038,7 @@ sub camOp_Parse { # my $presid = $data->{'data'}->{'presets'}->[$cnt]->{'id'}; my $presid = $data->{'data'}->{'presets'}->[$cnt]->{'position'}; my $presname = $data->{'data'}->{'presets'}->[$cnt]->{'name'}; - $presname =~ s/\s+/_/g; # Leerzeichen im Namen ersetzen falls vorhanden + $presname =~ s/\s+/_/gx; # Leerzeichen im Namen ersetzen falls vorhanden $hash->{HELPER}{ALLPRESETS}{$presname} = "$presid"; my $ptype = $data->{'data'}->{'presets'}->[$cnt]->{'type'}; if ($ptype) { @@ -7071,7 +7072,7 @@ sub camOp_Parse { while ($cnt < $patrolcnt) { $patrolid = $data->{'data'}->{'patrols'}->[$cnt]->{'id'}; $patrolname = $data->{'data'}->{'patrols'}->[$cnt]->{'name'}; - $patrolname =~ s/\s+/_/g; # Leerzeichen im Namen ersetzen falls vorhanden + $patrolname =~ s/\s+/_/gx; # Leerzeichen im Namen ersetzen falls vorhanden $hash->{HELPER}{ALLPATROLS}{$patrolname} = $patrolid; $cnt += 1; } @@ -7436,7 +7437,7 @@ sub evaljson { eval {decode_json($myjson)} or do { - if( ($hash->{HELPER}{RUNVIEW} && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/) || $OpMode =~ m/^.*_hls$/ ) { + if( ($hash->{HELPER}{RUNVIEW} && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/x) || $OpMode =~ m/^.*_hls$/x ) { # HLS aktivate/deaktivate bringt kein JSON wenn bereits aktiviert/deaktiviert Log3($name, 5, "$name - HLS-activation data return: $myjson"); if ($myjson =~ m/{"success":true}/x) { @@ -7828,7 +7829,7 @@ sub ptzPanel { if ($btn[$btnnr] ne "") { my ($cmd,$img); - if ($btn[$btnnr] =~ /(.*?):(.*)/) { # enthält Komando -> : + if ($btn[$btnnr] =~ /(.*?):(.*)/x) { # enthält Komando -> : $cmd = $1; $img = $2; @@ -7983,7 +7984,7 @@ sub addptzattr { my $hash = $defs{$name}; my $actvs; - my @vl = split (/\.|-/,ReadingsVal($name, "SVSversion", "")); + my @vl = split (/\.|-/x,ReadingsVal($name, "SVSversion", "")); if(@vl) { $actvs = $vl[0]; $actvs.= $vl[1]; @@ -8001,7 +8002,7 @@ sub addptzattr { my $arg = "ptzPanel_Home"; my @ua = split(" ", $attr{$name}{userattr}); for (@ua) { - push(@h,$_) if($_ !~ m/$arg.*/); + push(@h,$_) if($_ !~ m/$arg.*/x); } $attr{$name}{userattr} = join(' ',@h); @@ -8318,7 +8319,7 @@ sub _streamDevMJPEG { my ($link,$audiolink); my $ret = ""; - 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/x) { $ret .= "
Because SVS version 8.2.3-5828 is running you cannot play back MJPEG-Stream. Please upgrade to a higher SVS version !

"; return $ret; @@ -8369,7 +8370,7 @@ sub _streamDevMJPEG { } } - if($audiolink && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/ && !$hau) { + if($audiolink && ReadingsVal($camname, "CamAudioType", "Unknown") !~ /Unknown/x && !$hau) { $ret .= ''; $ret .= ''; $ret .= "