mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +00:00
49_IPCAM: attrs unknownFormatRetryCount, unknownFormatRetryDelay, handleAnyXmlAsSvg
git-svn-id: https://svn.fhem.de/fhem/trunk@24272 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
330a8824db
commit
b159d5a436
@ -1,5 +1,7 @@
|
|||||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||||
# Do not insert empty lines here, update check depends on it.
|
# Do not insert empty lines here, update check depends on it.
|
||||||
|
- feature: 49_IPCAM: attrs unknownFormatRetryCount, unknownFormatRetryDelay
|
||||||
|
and handleAnyXmlAsSvg
|
||||||
- change: 74_GardenaDevice: add new API for mower
|
- change: 74_GardenaDevice: add new API for mower
|
||||||
- bugfix: 70_BOTVAC: transient map cache
|
- bugfix: 70_BOTVAC: transient map cache
|
||||||
- bugfix: 73_DoorBird: Event Video Routine
|
- bugfix: 73_DoorBird: Event Video Routine
|
||||||
|
@ -47,7 +47,7 @@ IPCAM_Initialize($$)
|
|||||||
"cmd01data cmd02data cmd03data cmd04data cmd05data cmd06data cmd07data ".
|
"cmd01data cmd02data cmd03data cmd04data cmd05data cmd06data cmd07data ".
|
||||||
"cmd08data cmd09data cmd10data cmd11data cmd12data cmd13data cmd14data cmd15data ".
|
"cmd08data cmd09data cmd10data cmd11data cmd12data cmd13data cmd14data cmd15data ".
|
||||||
"model do_not_notify:1,0 showtime:1,0 scheme:http,https ".
|
"model do_not_notify:1,0 showtime:1,0 scheme:http,https ".
|
||||||
"disable:0,1 ".
|
"disable:0,1 unknownFormatRetryDelay handleAnyXmlAsSvg:0,1 unknownFormatRetryCount ".
|
||||||
$readingFnAttributes;
|
$readingFnAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -515,13 +515,36 @@ sub RequestSnapshot_Callback {
|
|||||||
} elsif($snapshot ne "") {
|
} elsif($snapshot ne "") {
|
||||||
# Log3 $name, 3, "IPCAM ($name) - snapshot response: $data";
|
# Log3 $name, 3, "IPCAM ($name) - snapshot response: $data";
|
||||||
|
|
||||||
my $imageFormat = guessFileFormat(\$snapshot);
|
my $imageFormat = guessFileFormat($name, \$snapshot);
|
||||||
|
|
||||||
my @imageTypes = qw(JPEG PNG GIF TIFF BMP ICO PPM XPM XBM SVG);
|
my @imageTypes = qw(JPEG PNG GIF TIFF BMP ICO PPM XPM XBM SVG);
|
||||||
|
|
||||||
if( ! grep { $_ eq "$imageFormat"} @imageTypes) {
|
if( ! grep { $_ eq "$imageFormat"} @imageTypes) {
|
||||||
Log3 $name, 1, "IPCAM ($name) - Wrong or not supported image format: $imageFormat";
|
Log3 $name, 1, "IPCAM ($name) - Wrong or not supported image format: $imageFormat";
|
||||||
RemoveInternalTimer($hash);
|
RemoveInternalTimer($hash);
|
||||||
|
|
||||||
|
my $retryCount = int(AttrVal($name, 'unknownFormatRetryCount', 0));
|
||||||
|
if ($retryCount > 0) {
|
||||||
|
my $nrRetries = $hash->{RETRIES_LEFT};
|
||||||
|
if (! defined ($nrRetries)) {
|
||||||
|
$nrRetries = $retryCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($nrRetries > 0) {
|
||||||
|
my $retryInterval = AttrVal($name, 'unknownFormatRetryDelay', 2);
|
||||||
|
|
||||||
|
Log3 $name, 1, "IPCAM ($name) - Retrying for $nrRetries more time in $retryInterval seconds";
|
||||||
|
InternalTimer(gettimeofday()+$retryInterval, "main::HttpUtils_NonblockingGet", $param);
|
||||||
|
|
||||||
|
$hash->{RETRIES_LEFT} = $nrRetries -1;
|
||||||
|
} else {
|
||||||
|
$hash->{RETRIES_LEFT} = undef;
|
||||||
|
|
||||||
|
Log3 $name, 1, "IPCAM ($name) - No more retries";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,8 +646,8 @@ getScheme($) {
|
|||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
sub
|
sub
|
||||||
guessFileFormat($) {
|
guessFileFormat($$) {
|
||||||
my ($src) = shift;
|
my ($name,$src) = @_;
|
||||||
my $header;
|
my $header;
|
||||||
my $srcHeader;
|
my $srcHeader;
|
||||||
|
|
||||||
@ -645,7 +668,12 @@ guessFileFormat($) {
|
|||||||
return "PPM" if /^P[1-6]/;
|
return "PPM" if /^P[1-6]/;
|
||||||
return "XPM" if /(^\/\* XPM \*\/)|(static\s+char\s+\*\w+\[\]\s*=\s*{\s*"\d+)/;
|
return "XPM" if /(^\/\* XPM \*\/)|(static\s+char\s+\*\w+\[\]\s*=\s*{\s*"\d+)/;
|
||||||
return "XBM" if /^(?:\/\*.*\*\/\n)?#define\s/;
|
return "XBM" if /^(?:\/\*.*\*\/\n)?#define\s/;
|
||||||
return "SVG" if /^(<\?xml|[\012\015\t ]*<svg\b)/;
|
if (int(AttrVal($name, 'handleAnyXmlAsSvg', 0)) == 1) {
|
||||||
|
return "SVG" if /^(<\?xml|[\012\015\t ]*<svg\b)/;
|
||||||
|
} else {
|
||||||
|
return "SVG" if /^(<\?xml version="1.0" encoding="UTF-8"\?>)?\r?\n?<svg/;
|
||||||
|
}
|
||||||
|
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -919,6 +947,28 @@ DetailFn {
|
|||||||
<li><a href="#disable">disable</a></li>
|
<li><a href="#disable">disable</a></li>
|
||||||
<li><a href="#do_not_notify">do_not_notify</a></li>
|
<li><a href="#do_not_notify">do_not_notify</a></li>
|
||||||
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
|
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
|
||||||
|
<li>
|
||||||
|
handleAnyXmlAsSvg<br>
|
||||||
|
Previous versions of this module, any XML file was (maybe incorrectly) identified as SVG file.<br>
|
||||||
|
Now, only valid SVG files or SVG documents are identified as SVG, leading to a 'unknown format' response for any other XML file.<br>
|
||||||
|
If you rely on the previous behavior for any reason, setting this to 1 will handle any XML as valid SVG, writing it as .svg file to the storage.<br>
|
||||||
|
The default value is 0.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
unknownFormatRetryCount<br>
|
||||||
|
If this module is unable to guess the correct file format, your camera might have been under heavy load and unable to respond with a proper image file.<br>
|
||||||
|
The file format will be 'unknown' in that case. Setting this to a positive integer allows you to define how often<br>
|
||||||
|
this module should re-try to grab an image.<br>
|
||||||
|
Default value is 0.<br>
|
||||||
|
Example: <code>attr ipcam3 unknownFormatRetryCount 3</code>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
unknownFormatRetryDelay<br>
|
||||||
|
This defines the interval in seconds between retries, if [code]unknownFormatRetryCount[/code] is set to a positive integer.<br>
|
||||||
|
The following example sets a 5 seconds delay.<br>
|
||||||
|
Default is 2 seconds.<br>
|
||||||
|
Example: <code>attr ipcam3 unknownFormatRetryDelay 5</code>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
path<br>
|
path<br>
|
||||||
Defines the path and query component of the complete <a href="http://de.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank">URI</a> to get a snapshot of the
|
Defines the path and query component of the complete <a href="http://de.wikipedia.org/wiki/Uniform_Resource_Identifier" target="_blank">URI</a> to get a snapshot of the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user