diff --git a/73_GardenaSmartBridge.pm b/73_GardenaSmartBridge.pm index ef9ea30..a1dfa6c 100644 --- a/73_GardenaSmartBridge.pm +++ b/73_GardenaSmartBridge.pm @@ -53,63 +53,19 @@ ## ## -package main; - -use strict; -use warnings; -use FHEM::Meta; - -my $version = '1.6.6'; - -sub GardenaSmartBridge_Initialize($) { - - my ($hash) = @_; - - # Provider - $hash->{WriteFn} = 'FHEM::GardenaSmartBridge::Write'; - $hash->{Clients} = ':GardenaSmartDevice:'; - $hash->{MatchList} = { '1:GardenaSmartDevice' => '^{"id":".*' }; - - # Consumer - $hash->{SetFn} = 'FHEM::GardenaSmartBridge::Set'; - $hash->{DefFn} = 'FHEM::GardenaSmartBridge::Define'; - $hash->{UndefFn} = 'FHEM::GardenaSmartBridge::Undef'; - $hash->{DeleteFn} = 'FHEM::GardenaSmartBridge::Delete'; - $hash->{RenameFn} = 'FHEM::GardenaSmartBridge::Rename'; - $hash->{NotifyFn} = 'FHEM::GardenaSmartBridge::Notify'; - - $hash->{AttrFn} = 'FHEM::GardenaSmartBridge::Attr'; - $hash->{AttrList} = - 'debugJSON:0,1 ' - . 'disable:1 ' - . 'interval ' - . 'disabledForIntervals ' - . 'gardenaAccountEmail ' - . 'gardenaBaseURL ' - . $readingFnAttributes; - - foreach my $d ( sort keys %{ $modules{GardenaSmartBridge}{defptr} } ) { - - my $hash = $modules{GardenaSmartBridge}{defptr}{$d}; - $hash->{VERSION} = $version; - } - - return FHEM::Meta::InitMod( __FILE__, $hash ); -} - package FHEM::GardenaSmartBridge; use GPUtils qw(GP_Import) ; # wird für den Import der FHEM Funktionen aus der fhem.pl benötigt -my $missingModul = ''; - use strict; use warnings; use POSIX; use FHEM::Meta; use HttpUtils; +our $VERSION = '1.6.7'; +my $missingModul = ''; eval "use Encode qw(encode encode_utf8 decode_utf8);1" or $missingModul .= "Encode "; # eval "use JSON;1" or $missingModul .= 'JSON '; @@ -186,7 +142,11 @@ if ($@) { } } +## Import der FHEM Funktionen +#-- Run before package compilation BEGIN { + + # Import from main context GP_Import( qw(readingsSingleUpdate readingsBulkUpdate @@ -203,6 +163,7 @@ BEGIN { getKeyValue getUniqueId RemoveInternalTimer + readingFnAttributes InternalTimer defs init_done @@ -214,6 +175,60 @@ BEGIN { ); } +# _Export - Export references to main context using a different naming schema +sub _Export { + no strict qw/refs/; ## no critic + my $pkg = caller(0); + my $main = $pkg; + $main =~ s/^(?:.+::)?([^:]+)$/main::$1\_/g; + foreach (@_) { + *{ $main . $_ } = *{ $pkg . '::' . $_ }; + } +} + +#-- Export to main context with different name +_Export( + qw( + Initialize + ) +); + +sub Initialize($) { + + my ($hash) = @_; + + # Provider + $hash->{WriteFn} = 'FHEM::GardenaSmartBridge::Write'; + $hash->{Clients} = ':GardenaSmartDevice:'; + $hash->{MatchList} = { '1:GardenaSmartDevice' => '^{"id":".*' }; + + # Consumer + $hash->{SetFn} = 'FHEM::GardenaSmartBridge::Set'; + $hash->{DefFn} = 'FHEM::GardenaSmartBridge::Define'; + $hash->{UndefFn} = 'FHEM::GardenaSmartBridge::Undef'; + $hash->{DeleteFn} = 'FHEM::GardenaSmartBridge::Delete'; + $hash->{RenameFn} = 'FHEM::GardenaSmartBridge::Rename'; + $hash->{NotifyFn} = 'FHEM::GardenaSmartBridge::Notify'; + + $hash->{AttrFn} = 'FHEM::GardenaSmartBridge::Attr'; + $hash->{AttrList} = + 'debugJSON:0,1 ' + . 'disable:1 ' + . 'interval ' + . 'disabledForIntervals ' + . 'gardenaAccountEmail ' + . 'gardenaBaseURL ' + . $readingFnAttributes; + + foreach my $d ( sort keys %{ $modules{GardenaSmartBridge}{defptr} } ) { + + my $hash = $modules{GardenaSmartBridge}{defptr}{$d}; + $hash->{VERSION} = $VERSION; + } + + return FHEM::Meta::InitMod( __FILE__, $hash ); +} + sub Define($$) { my ( $hash, $def ) = @_; @@ -235,7 +250,7 @@ sub Define($$) { AttrVal( $name, 'gardenaBaseURL', 'https://sg-api.dss.husqvarnagroup.net' ) . '/sg-1'; - $hash->{VERSION} = $version; + $hash->{VERSION} = $VERSION; $hash->{INTERVAL} = 60; $hash->{NOTIFYDEV} = "global,$name"; diff --git a/74_GardenaSmartDevice.pm b/74_GardenaSmartDevice.pm index 9fcb37e..146f656 100644 --- a/74_GardenaSmartDevice.pm +++ b/74_GardenaSmartDevice.pm @@ -53,41 +53,6 @@ ## ## -package main; - -use strict; -use warnings; -use FHEM::Meta; - -my $version = '1.6.4'; - -sub GardenaSmartDevice_Initialize($) { - - my ($hash) = @_; - - $hash->{Match} = '^{"id":".*'; - - $hash->{SetFn} = "FHEM::GardenaSmartDevice::Set"; - $hash->{DefFn} = "FHEM::GardenaSmartDevice::Define"; - $hash->{UndefFn} = "FHEM::GardenaSmartDevice::Undef"; - $hash->{ParseFn} = "FHEM::GardenaSmartDevice::Parse"; - - $hash->{AttrFn} = "FHEM::GardenaSmartDevice::Attr"; - $hash->{AttrList} = - "readingValueLanguage:de,en " - . "model:watering_computer,sensor,mower,ic24,power,electronic_pressure_pump " - . "IODev " - . $readingFnAttributes; - - foreach my $d ( sort keys %{ $modules{GardenaSmartDevice}{defptr} } ) { - - my $hash = $modules{GardenaSmartDevice}{defptr}{$d}; - $hash->{VERSION} = $version; - } - - return FHEM::Meta::InitMod( __FILE__, $hash ); -} - ## unserer packagename package FHEM::GardenaSmartDevice; @@ -100,10 +65,8 @@ use strict; use warnings; use POSIX; use FHEM::Meta; - use Time::Local; - -# eval "use JSON;1" or $missingModul .= "JSON "; +our $VERSION = '1.6.5'; # try to use JSON::MaybeXS wrapper # for chance of better performance + open code @@ -177,7 +140,10 @@ if ($@) { } ## Import der FHEM Funktionen +#-- Run before package compilation BEGIN { + + # Import from main context GP_Import( qw(readingsSingleUpdate readingsBulkUpdate @@ -188,6 +154,7 @@ BEGIN { CommandAttr AttrVal ReadingsVal + readingFnAttributes AssignIoPort modules IOWrite @@ -196,6 +163,51 @@ BEGIN { ); } +# _Export - Export references to main context using a different naming schema +sub _Export { + no strict qw/refs/; ## no critic + my $pkg = caller(0); + my $main = $pkg; + $main =~ s/^(?:.+::)?([^:]+)$/main::$1\_/g; + foreach (@_) { + *{ $main . $_ } = *{ $pkg . '::' . $_ }; + } +} + +#-- Export to main context with different name +_Export( + qw( + Initialize + ) +); + +sub Initialize($) { + + my ($hash) = @_; + + $hash->{Match} = '^{"id":".*'; + + $hash->{SetFn} = "FHEM::GardenaSmartDevice::Set"; + $hash->{DefFn} = "FHEM::GardenaSmartDevice::Define"; + $hash->{UndefFn} = "FHEM::GardenaSmartDevice::Undef"; + $hash->{ParseFn} = "FHEM::GardenaSmartDevice::Parse"; + + $hash->{AttrFn} = "FHEM::GardenaSmartDevice::Attr"; + $hash->{AttrList} = + "readingValueLanguage:de,en " + . "model:watering_computer,sensor,mower,ic24,power,electronic_pressure_pump " + . "IODev " + . $readingFnAttributes; + + foreach my $d ( sort keys %{ $modules{GardenaSmartDevice}{defptr} } ) { + + my $hash = $modules{GardenaSmartDevice}{defptr}{$d}; + $hash->{VERSION} = $VERSION; + } + + return FHEM::Meta::InitMod( __FILE__, $hash ); +} + sub Define($$) { my ( $hash, $def ) = @_; @@ -214,7 +226,7 @@ sub Define($$) { my $category = $a[3]; $hash->{DEVICEID} = $deviceId; - $hash->{VERSION} = $version; + $hash->{VERSION} = $VERSION; $hash->{helper}{STARTINGPOINTID} = ''; CommandAttr( undef,