2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-09 20:57:11 +00:00

73_GardenaSmartBridge: try to use JSON::MaybeXS wrapper for chance of better performance + open code

git-svn-id: https://svn.fhem.de/fhem/trunk@19629 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
LeonGaultier 2019-06-15 07:53:40 +00:00
parent 6abe964792
commit 13d4a450a3
3 changed files with 150 additions and 5 deletions

View File

@ -1,5 +1,7 @@
# 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.
- bugfix: 73_GardenaSmartBridge: fix undefined value
as an ARRAY reference bug
- update: 59_Weather.pm: API Files try to use JSON::MaybeXS wrapper for chance
of better performance + open code, more log entry
- update: 98_Siro.pm: V1.3 fix perlwarnings

View File

@ -59,7 +59,7 @@ use strict;
use warnings;
use FHEM::Meta;
my $version = '1.6.5';
my $version = '1.6.6';
sub GardenaSmartBridge_Initialize($) {
@ -112,9 +112,80 @@ use HttpUtils;
eval "use Encode qw(encode encode_utf8 decode_utf8);1"
or $missingModul .= "Encode ";
eval "use JSON;1" or $missingModul .= 'JSON ';
# eval "use JSON;1" or $missingModul .= 'JSON ';
eval "use IO::Socket::SSL;1" or $missingModul .= 'IO::Socket::SSL ';
# try to use JSON::MaybeXS wrapper
# for chance of better performance + open code
eval {
require JSON::MaybeXS;
import JSON::MaybeXS qw( decode_json encode_json );
1;
};
if ($@) {
$@ = undef;
# try to use JSON wrapper
# for chance of better performance
eval {
# JSON preference order
local $ENV{PERL_JSON_BACKEND} =
'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP'
unless ( defined( $ENV{PERL_JSON_BACKEND} ) );
require JSON;
import JSON qw( decode_json encode_json );
1;
};
if ($@) {
$@ = undef;
# In rare cases, Cpanel::JSON::XS may
# be installed but JSON|JSON::MaybeXS not ...
eval {
require Cpanel::JSON::XS;
import Cpanel::JSON::XS qw(decode_json encode_json);
1;
};
if ($@) {
$@ = undef;
# In rare cases, JSON::XS may
# be installed but JSON not ...
eval {
require JSON::XS;
import JSON::XS qw(decode_json encode_json);
1;
};
if ($@) {
$@ = undef;
# Fallback to built-in JSON which SHOULD
# be available since 5.014 ...
eval {
require JSON::PP;
import JSON::PP qw(decode_json encode_json);
1;
};
if ($@) {
$@ = undef;
# Fallback to JSON::backportPP in really rare cases
require JSON::backportPP;
import JSON::backportPP qw(decode_json encode_json);
1;
}
}
}
}
}
BEGIN {
GP_Import(
qw(readingsSingleUpdate
@ -753,7 +824,8 @@ sub WriteReadings($$) {
scalar( @{ $decode_json->{zones} } ) );
}
elsif ( $decode_json->{id} ne $hash->{helper}{locations_id}
and ref( $decode_json->{abilities} ) eq 'ARRAY' )
and ref( $decode_json->{abilities} ) eq 'ARRAY'
and ref( $decode_json->{abilities}[0]{properties} ) eq 'ARRAY' )
{
my $properties =
scalar( @{ $decode_json->{abilities}[0]{properties} } );

View File

@ -59,7 +59,7 @@ use strict;
use warnings;
use FHEM::Meta;
my $version = "1.6.3";
my $version = '1.6.4';
sub GardenaSmartDevice_Initialize($) {
@ -103,7 +103,78 @@ use FHEM::Meta;
use Time::Local;
eval "use JSON;1" or $missingModul .= "JSON ";
# eval "use JSON;1" or $missingModul .= "JSON ";
# try to use JSON::MaybeXS wrapper
# for chance of better performance + open code
eval {
require JSON::MaybeXS;
import JSON::MaybeXS qw( decode_json encode_json );
1;
};
if ($@) {
$@ = undef;
# try to use JSON wrapper
# for chance of better performance
eval {
# JSON preference order
local $ENV{PERL_JSON_BACKEND} =
'Cpanel::JSON::XS,JSON::XS,JSON::PP,JSON::backportPP'
unless ( defined( $ENV{PERL_JSON_BACKEND} ) );
require JSON;
import JSON qw( decode_json encode_json );
1;
};
if ($@) {
$@ = undef;
# In rare cases, Cpanel::JSON::XS may
# be installed but JSON|JSON::MaybeXS not ...
eval {
require Cpanel::JSON::XS;
import Cpanel::JSON::XS qw(decode_json encode_json);
1;
};
if ($@) {
$@ = undef;
# In rare cases, JSON::XS may
# be installed but JSON not ...
eval {
require JSON::XS;
import JSON::XS qw(decode_json encode_json);
1;
};
if ($@) {
$@ = undef;
# Fallback to built-in JSON which SHOULD
# be available since 5.014 ...
eval {
require JSON::PP;
import JSON::PP qw(decode_json encode_json);
1;
};
if ($@) {
$@ = undef;
# Fallback to JSON::backportPP in really rare cases
require JSON::backportPP;
import JSON::backportPP qw(decode_json encode_json);
1;
}
}
}
}
}
## Import der FHEM Funktionen
BEGIN {