98_HTTPMOD.pm: added new attribute preProcessRegex

git-svn-id: https://svn.fhem.de/fhem/trunk@16013 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
StefanStrobel 2018-01-27 20:47:58 +00:00
parent 98ea153a79
commit fbbca7388f

View File

@ -145,6 +145,7 @@
# fixed a warning when alwaysNum without NumLen is specified
# 2017-09-06 new attribute reAuthAlways to do the defined authentication steps
# before each get / set / getupdate regardless of any reAuthRegex setting or similar.
# 2018-01-18 added preProcessRegex e.g. to fix broken JSON data in a response
#
#
@ -210,7 +211,7 @@ sub HTTPMOD_AddToQueue($$$$$;$$$$);
sub HTTPMOD_JsonFlatter($$;$);
sub HTTPMOD_ExtractReading($$$$$);
my $HTTPMOD_Version = '3.4.0 - 9.9.2017';
my $HTTPMOD_Version = '3.4.1 - 18.1.2018';
#
# FHEM module intitialisation
@ -274,6 +275,7 @@ sub HTTPMOD_Initialize($)
"showMatched:0,1 " .
"showError:0,1 " .
"removeBuf:0,1 " .
"preProcessRegex " .
"parseFunction1 " .
"parseFunction2 " .
@ -2423,6 +2425,19 @@ sub HTTPMOD_Read($$$)
($body ? ",\r\nBody: $body" : ", body empty");
$body = "" if (!$body);
my $ppr = AttrVal($name, "preProcessRegex", "");
if ($ppr) {
my $pprexp = '$body=~' . $ppr;
my $oldSig = ($SIG{__WARN__} ? $SIG{__WARN__} : 'DEFAULT');
$SIG{__WARN__} = sub { Log3 $name, 3, "$name: read applying preProcessRegex created warning: @_"; };
eval $pprexp;
$SIG{__WARN__} = $oldSig;
$body =~ $ppr;
Log3 $name, 5, "$name: Read - body after preProcessRegex: $ppr is $body";
}
$buffer = ($header ? $header . "\r\n\r\n" . $body : $body); # for matching sid / reauth
$buffer = $buffer . "\r\n\r\n" . $err if ($err); # for matching reauth
@ -3506,7 +3521,6 @@ HTTPMOD_AddToQueue($$$$$;$$$$){
The same restrictions as for DeleteIfUnmatched apply regarding a fhem restart.
<br>
<li><b>httpVersion</b></li>
defines the HTTP-Version to be sent to the server. This defaults to 1.0.
<li><b>sslVersion</b></li>
@ -3554,6 +3568,8 @@ HTTPMOD_AddToQueue($$$$$;$$$$){
<li><b>parseFunction1</b> and <b>parseFunction2</b></li>
These functions allow an experienced Perl / Fhem developer to plug in his own parsing functions.<br>
Please look into the module source to see how it works and don't use them if you are not sure what you are doing.
<li><b>preProcessRegex</b></li>
can be used to fix a broken HTTP response before parsing. The regex should be a replacement regex like s/match/replacement/g and will be applied to the buffer.
<li><b>Remarks regarding the automatically created userattr entries</b></li>
Fhemweb allows attributes to be edited by clicking on them. However this does not work for attributes that match to a wildcard attribute. To circumvent this restriction HTTPMOD automatically adds an entry for each instance of a defined wildcard attribute to the device userattr list. E.g. if you define a reading[0-9]Name attribute as reading01Name, HTTPMOD will add reading01Name to the device userattr list. These entries only have the purpose of making editing in Fhemweb easier.