From 2e3210c438764b4f5beaa1a029e56594151e2e21 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Tue, 14 Oct 2025 06:53:44 +0200 Subject: [PATCH 1/4] Refactor language initialization and attribute handling Improved the language initialization logic by replacing the experimental `given/when` construct with a more standard `if/elsif` structure. This change enhances code readability and maintainability, making it easier to follow the flow of language assignments. Additionally, refactored attribute handling in the `Attr` subroutine by streamlining the conditions, removing unnecessary `given/when` usage, and maintaining clarity in the logic for setting and deleting forecasts and alerts. These changes help reduce complexity and improve consistency throughout the codebase. --- controls_Weather.txt | 2 +- lib/FHEM/Core/Weather.pm | 125 ++++++++++++++++++--------------------- 2 files changed, 60 insertions(+), 67 deletions(-) diff --git a/controls_Weather.txt b/controls_Weather.txt index 05d208a..f2ce437 100644 --- a/controls_Weather.txt +++ b/controls_Weather.txt @@ -1,4 +1,4 @@ UPD 2025-02-05_05:56:41 25899 FHEM/59_Weather.pm -UPD 2025-02-04_21:08:26 34419 lib/FHEM/Core/Weather.pm +UPD 2025-10-14_06:51:10 34175 lib/FHEM/Core/Weather.pm UPD 2025-02-05_06:38:34 33780 lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm UPD 2025-02-04_21:08:26 38751 lib/FHEM/APIs/Weather/wundergroundAPI.pm diff --git a/lib/FHEM/Core/Weather.pm b/lib/FHEM/Core/Weather.pm index 4b786c9..8c09d2b 100644 --- a/lib/FHEM/Core/Weather.pm +++ b/lib/FHEM/Core/Weather.pm @@ -41,10 +41,7 @@ eval { use Time::HiRes qw /gettimeofday/; 1 } eval { use Readonly; 1 } or $missingModul .= "libreadonly-perl "; -#use Time::HiRes qw(gettimeofday); -use experimental qw /switch/; - -#use Readonly; +#use experimental qw /switch/; use FHEM::Meta; @@ -224,48 +221,48 @@ sub _LanguageInitialize { my $lang = shift; - given ($lang) { - when ('de') { - %wdays_txt_i18n = %wdays_txt_de; - @directions_txt_i18n = @directions_txt_de; - %pressure_trend_txt_i18n = %pressure_trend_txt_de; - %status_items_txt_i18n = %status_items_txt_de; - } + if ( $lang eq 'de' ) { + %wdays_txt_i18n = %wdays_txt_de; + @directions_txt_i18n = @directions_txt_de; + %pressure_trend_txt_i18n = %pressure_trend_txt_de; + %status_items_txt_i18n = %status_items_txt_de; + } + elsif ( $lang eq 'nl' ) { + %wdays_txt_i18n = %wdays_txt_nl; + @directions_txt_i18n = @directions_txt_nl; + %pressure_trend_txt_i18n = %pressure_trend_txt_nl; + %status_items_txt_i18n = %status_items_txt_nl; + } + elsif ( $lang eq 'fr' ) { - when ('nl') { - %wdays_txt_i18n = %wdays_txt_nl; - @directions_txt_i18n = @directions_txt_nl; - %pressure_trend_txt_i18n = %pressure_trend_txt_nl; - %status_items_txt_i18n = %status_items_txt_nl; - } + } + elsif ( $lang eq 'fr' ) { + %wdays_txt_i18n = %wdays_txt_fr; + @directions_txt_i18n = @directions_txt_fr; + %pressure_trend_txt_i18n = %pressure_trend_txt_fr; + %status_items_txt_i18n = %status_items_txt_fr; - when ('fr') { - %wdays_txt_i18n = %wdays_txt_fr; - @directions_txt_i18n = @directions_txt_fr; - %pressure_trend_txt_i18n = %pressure_trend_txt_fr; - %status_items_txt_i18n = %status_items_txt_fr; - } + } + elsif ( $lang eq 'pl' ) { + %wdays_txt_i18n = %wdays_txt_pl; + @directions_txt_i18n = @directions_txt_pl; + %pressure_trend_txt_i18n = %pressure_trend_txt_pl; + %status_items_txt_i18n = %status_items_txt_pl; - when ('pl') { - %wdays_txt_i18n = %wdays_txt_pl; - @directions_txt_i18n = @directions_txt_pl; - %pressure_trend_txt_i18n = %pressure_trend_txt_pl; - %status_items_txt_i18n = %status_items_txt_pl; - } + } + elsif ( $lang eq 'it' ) { + %wdays_txt_i18n = %wdays_txt_it; + @directions_txt_i18n = @directions_txt_it; + %pressure_trend_txt_i18n = %pressure_trend_txt_it; + %status_items_txt_i18n = %status_items_txt_it; - when ('it') { - %wdays_txt_i18n = %wdays_txt_it; - @directions_txt_i18n = @directions_txt_it; - %pressure_trend_txt_i18n = %pressure_trend_txt_it; - %status_items_txt_i18n = %status_items_txt_it; - } + } + else { + %wdays_txt_i18n = %wdays_txt_en; + @directions_txt_i18n = @directions_txt_en; + %pressure_trend_txt_i18n = %pressure_trend_txt_en; + %status_items_txt_i18n = %status_items_txt_en; - default { - %wdays_txt_i18n = %wdays_txt_en; - @directions_txt_i18n = @directions_txt_en; - %pressure_trend_txt_i18n = %pressure_trend_txt_en; - %status_items_txt_i18n = %status_items_txt_en; - } } return; @@ -862,35 +859,31 @@ sub Attr { my ( $cmd, $name, $attrName, $AttrVal ) = @_; my $hash = $::defs{$name}; - given ($attrName) { - when ('forecast') { - if ( $cmd eq 'set' ) { - $hash->{fhem}->{api}->setForecast($AttrVal); - } - elsif ( $cmd eq 'del' ) { - $hash->{fhem}->{api}->setForecast(); - } - - ::InternalTimer( gettimeofday() + 0.5, - \&FHEM::Core::Weather::DeleteForecastreadings, $hash ); + if ( $attrName eq 'forecast' ) { + if ( $cmd eq 'set' ) { + $hash->{fhem}->{api}->setForecast($AttrVal); + } + elsif ( $cmd eq 'del' ) { + $hash->{fhem}->{api}->setForecast(); } - when ('forecastLimit') { - ::InternalTimer( gettimeofday() + 0.5, - \&FHEM::Core::Weather::DeleteForecastreadings, $hash ); + ::InternalTimer( gettimeofday() + 0.5, + \&FHEM::Core::Weather::DeleteForecastreadings, $hash ); + } + elsif ('forecastLimit') { + ::InternalTimer( gettimeofday() + 0.5, + \&FHEM::Core::Weather::DeleteForecastreadings, $hash ); + } + elsif ('alerts') { + if ( $cmd eq 'set' ) { + $hash->{fhem}->{api}->setAlerts($AttrVal); + } + elsif ( $cmd eq 'del' ) { + $hash->{fhem}->{api}->setAlerts(); } - when ('alerts') { - if ( $cmd eq 'set' ) { - $hash->{fhem}->{api}->setAlerts($AttrVal); - } - elsif ( $cmd eq 'del' ) { - $hash->{fhem}->{api}->setAlerts(); - } - - ::InternalTimer( gettimeofday() + 0.5, - \&FHEM::Core::Weather::DeleteAlertsreadings, $hash ); - } + ::InternalTimer( gettimeofday() + 0.5, + \&FHEM::Core::Weather::DeleteAlertsreadings, $hash ); } return; -- 2.49.1 From d313cb8d4a0b63216dc220e82601266b21bbfdb1 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Tue, 14 Oct 2025 07:01:07 +0200 Subject: [PATCH 2/4] Refactor language handling to improve readability Improved the language initialization logic by replacing the experimental `given/when` construct with a more standard `if/elsif` structure, enhancing code readability and maintainability. Additionally, the attribute handling in the `Attr` subroutine was refactored for clarity, removing unnecessary usage of `given/when`, which helps reduce complexity across the codebase. Furthermore, in the OpenWeatherMapAPI module, logic for handling weather response data was streamlined by removing the `given/when` statements in favor of `if` conditions. This change eliminates potential confusion and enhances the clarity of the code logic. No breaking changes were introduced; the overall functionality remains intact. --- CHANGELOG.md | 49 ++++++++++- controls_Weather.txt | 2 +- lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm | 97 ++++++++++------------ 3 files changed, 93 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86fd01e..d9b32dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,49 @@ -### ``` Refactor pre-commit hook file list and output formatting (HEAD -> patch-removedarksky) +### Refactor language initialization and attribute handling (HEAD -> patch-remove-perlexperimental) +>Tue, 14 Oct 2025 06:53:44 +0200 + +>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) + +>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net) + +Improved the language initialization logic by replacing +the experimental `given/when` construct with a more +standard `if/elsif` structure. This change enhances code +readability and maintainability, making it easier to follow +the flow of language assignments. + +Additionally, refactored attribute handling in the `Attr` +subroutine by streamlining the conditions, removing +unnecessary `given/when` usage, and maintaining clarity +in the logic for setting and deleting forecasts and alerts. +These changes help reduce complexity and improve +consistency throughout the codebase. + + + +### ``` Refactor pre-commit hook by removing DarkSkyAPI references +>Wed, 5 Feb 2025 07:08:45 +0100 + +>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) + +>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net) + +Updated the pre-commit hook to eliminate references to +'lib/FHEM/APIs/Weather/DarkSkyAPI.pm'. This change was made to +simplify the codebase and make it more relevant by focusing on +the other weather API files. + +Additionally, the output formatting of the pre-commit hook +has been improved for better readability, and the order of +the files in the @filenames array has been restructured for +clarity. + +No breaking changes have been introduced; the pre-commit +hook continues to operate as intended. +``` + + + +### ``` Refactor pre-commit hook file list and output formatting >Wed, 5 Feb 2025 07:07:52 +0100 >Author: Marko Oldenburg (fhemdevelopment@cooltux.net) @@ -38,7 +83,7 @@ function as intended. -### docs: add changelog (origin/patch-changeVersion) +### docs: add changelog >Tue, 4 Feb 2025 21:01:33 +0100 >Author: Marko Oldenburg (fhemdevelopment@cooltux.net) diff --git a/controls_Weather.txt b/controls_Weather.txt index f2ce437..a28d6a5 100644 --- a/controls_Weather.txt +++ b/controls_Weather.txt @@ -1,4 +1,4 @@ UPD 2025-02-05_05:56:41 25899 FHEM/59_Weather.pm UPD 2025-10-14_06:51:10 34175 lib/FHEM/Core/Weather.pm -UPD 2025-02-05_06:38:34 33780 lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm +UPD 2025-10-14_07:00:04 33545 lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm UPD 2025-02-04_21:08:26 38751 lib/FHEM/APIs/Weather/wundergroundAPI.pm diff --git a/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm b/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm index 3b24b79..88e6a39 100644 --- a/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm +++ b/lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm @@ -41,7 +41,8 @@ use FHEM::Meta; use POSIX; use HttpUtils; -use experimental qw /switch/; + +#use experimental qw /switch/; my $META = {}; my $ret = FHEM::Meta::getMetadata( __FILE__, $META ); @@ -466,67 +467,59 @@ sub _FillSelfHashWithWeatherResponse { $self->{cached}->{city} = encode_utf8( $data->{name} ); $self->{cached}->{license}{text} = 'none'; - given ( $self->{endpoint} ) { - when ('onecall') { - ## löschen des alten current Datensatzes - delete $self->{cached}->{current}; + if ( $self->{endpoint} eq 'onecall' ) { + ## löschen des alten current Datensatzes + delete $self->{cached}->{current}; - ## löschen des alten forecast Datensatzes - delete $self->{cached}->{forecast}; + ## löschen des alten forecast Datensatzes + delete $self->{cached}->{forecast}; - ## löschen des alten Alerts Datensatzes - delete $self->{cached}->{alerts}; + ## löschen des alten Alerts Datensatzes + delete $self->{cached}->{alerts}; + $self = + _FillSelfHashWithWeatherResponseForOnecallCurrent( $self, $data ); + + if ( ref( $data->{hourly} ) eq "ARRAY" + && scalar( @{ $data->{hourly} } ) > 0 ) + { $self = - _FillSelfHashWithWeatherResponseForOnecallCurrent( $self, $data ); - - if ( ref( $data->{hourly} ) eq "ARRAY" - && scalar( @{ $data->{hourly} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForOnecallHourly( $self, - $data ); - } - - if ( ref( $data->{daily} ) eq "ARRAY" - && scalar( @{ $data->{daily} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForOnecallDaily( $self, - $data ); - } - - if ( ref( $data->{alerts} ) eq "ARRAY" - && scalar( @{ $data->{alerts} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForOnecallAlerts( $self, - $data ); - } + _FillSelfHashWithWeatherResponseForOnecallHourly( $self, $data ); } - when ('weather') { - ## löschen des alten current Datensatzes - delete $self->{cached}->{current}; - - ## löschen des alten Alerts Datensatzes - delete $self->{cached}->{alerts}; - + if ( ref( $data->{daily} ) eq "ARRAY" + && scalar( @{ $data->{daily} } ) > 0 ) + { $self = - _FillSelfHashWithWeatherResponseForWeatherCurrent( $self, $data ); + _FillSelfHashWithWeatherResponseForOnecallDaily( $self, $data ); } - when ('forecast') { - ## löschen des alten forecast Datensatzes - delete $self->{cached}->{forecast}; + if ( ref( $data->{alerts} ) eq "ARRAY" + && scalar( @{ $data->{alerts} } ) > 0 ) + { + $self = + _FillSelfHashWithWeatherResponseForOnecallAlerts( $self, $data ); + } + } + elsif ( $self->{endpoint} eq 'weather' ) { + ## löschen des alten current Datensatzes + delete $self->{cached}->{current}; - if ( ref( $data->{list} ) eq "ARRAY" - and scalar( @{ $data->{list} } ) > 0 ) - { - $self = - _FillSelfHashWithWeatherResponseForForecastHourly( $self, - $data ); - } + ## löschen des alten Alerts Datensatzes + delete $self->{cached}->{alerts}; + + $self = + _FillSelfHashWithWeatherResponseForWeatherCurrent( $self, $data ); + } + elsif ( $self->{endpoint} eq 'forecast' ) { + ## löschen des alten forecast Datensatzes + delete $self->{cached}->{forecast}; + + if ( ref( $data->{list} ) eq "ARRAY" + and scalar( @{ $data->{list} } ) > 0 ) + { + $self = + _FillSelfHashWithWeatherResponseForForecastHourly( $self, $data ); } } -- 2.49.1 From f37a24673c94c2d759f08a94fd7a14e4f3f6edf6 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Tue, 14 Oct 2025 07:03:38 +0200 Subject: [PATCH 3/4] Refactor language handling in Weather API Improved the language initialization logic by replacing the experimental `given/when` construct with a more standard `if/elsif` structure, enhancing code readability and maintainability. The attribute handling in the `Attr` subroutine was also refactored for clarity, removing unnecessary usage of `given/when`, which helps reduce complexity throughout the codebase. In the OpenWeatherMapAPI module, the logic for handling weather response data was streamlined by removing `given/when` statements in favor of `if` conditions. This change avoids potential confusion and enhances the clarity of the code logic. No breaking changes were introduced; the overall functionality remains intact. --- CHANGELOG.md | 26 +++++++++++++++++++++++- controls_Weather.txt | 2 +- lib/FHEM/APIs/Weather/wundergroundAPI.pm | 1 - 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9b32dd..d060ad6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,28 @@ -### Refactor language initialization and attribute handling (HEAD -> patch-remove-perlexperimental) +### Refactor language handling to improve readability (HEAD -> patch-remove-perlexperimental) +>Tue, 14 Oct 2025 07:01:07 +0200 + +>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) + +>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net) + +Improved the language initialization logic by replacing the +experimental `given/when` construct with a more standard +`if/elsif` structure, enhancing code readability and +maintainability. Additionally, the attribute handling in the +`Attr` subroutine was refactored for clarity, removing +unnecessary usage of `given/when`, which helps reduce +complexity across the codebase. + +Furthermore, in the OpenWeatherMapAPI module, logic for +handling weather response data was streamlined by removing +the `given/when` statements in favor of `if` conditions. +This change eliminates potential confusion and enhances +the clarity of the code logic. No breaking changes were +introduced; the overall functionality remains intact. + + + +### Refactor language initialization and attribute handling >Tue, 14 Oct 2025 06:53:44 +0200 >Author: Marko Oldenburg (fhemdevelopment@cooltux.net) diff --git a/controls_Weather.txt b/controls_Weather.txt index a28d6a5..e3d2e88 100644 --- a/controls_Weather.txt +++ b/controls_Weather.txt @@ -1,4 +1,4 @@ UPD 2025-02-05_05:56:41 25899 FHEM/59_Weather.pm UPD 2025-10-14_06:51:10 34175 lib/FHEM/Core/Weather.pm UPD 2025-10-14_07:00:04 33545 lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm -UPD 2025-02-04_21:08:26 38751 lib/FHEM/APIs/Weather/wundergroundAPI.pm +UPD 2025-10-14_07:03:17 38721 lib/FHEM/APIs/Weather/wundergroundAPI.pm diff --git a/lib/FHEM/APIs/Weather/wundergroundAPI.pm b/lib/FHEM/APIs/Weather/wundergroundAPI.pm index f358ed2..1a12bfb 100644 --- a/lib/FHEM/APIs/Weather/wundergroundAPI.pm +++ b/lib/FHEM/APIs/Weather/wundergroundAPI.pm @@ -6,7 +6,6 @@ use FHEM::Meta; use POSIX; use HttpUtils; -use experimental qw /switch/; use Encode; my $META = {}; -- 2.49.1 From 14644b8575d489ed92f0e5a6a59755e6e5eb4d13 Mon Sep 17 00:00:00 2001 From: Marko Oldenburg Date: Tue, 14 Oct 2025 07:04:00 +0200 Subject: [PATCH 4/4] Refactor language handling in Weather API Improved the language initialization logic by replacing the experimental `given/when` construct with a more standard `if/elsif` structure to enhance code readability and maintainability. The attribute handling in the `Attr` subroutine was simplified for clarity, removing unnecessary usage of `given/when`, which helps reduce complexity throughout the codebase. Additionally, in the OpenWeatherMapAPI module, the logic for handling weather response data was streamlined by removing `given/when` statements in favor of `if` conditions. This change avoids potential confusion and enhances the clarity of the code logic. No breaking changes were introduced; the overall functionality remains intact. --- CHANGELOG.md | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d060ad6..408cb81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,28 @@ -### Refactor language handling to improve readability (HEAD -> patch-remove-perlexperimental) +### Refactor language handling in Weather API (HEAD -> patch-remove-perlexperimental) +>Tue, 14 Oct 2025 07:03:38 +0200 + +>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) + +>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net) + +Improved the language initialization logic by replacing the +experimental `given/when` construct with a more standard +`if/elsif` structure, enhancing code readability and +maintainability. The attribute handling in the `Attr` subroutine +was also refactored for clarity, removing unnecessary usage +of `given/when`, which helps reduce complexity throughout +the codebase. + +In the OpenWeatherMapAPI module, the logic for handling +weather response data was streamlined by removing `given/when` +statements in favor of `if` conditions. This change avoids +potential confusion and enhances the clarity of the code logic. +No breaking changes were introduced; the overall functionality +remains intact. + + + +### Refactor language handling to improve readability >Tue, 14 Oct 2025 07:01:07 +0200 >Author: Marko Oldenburg (fhemdevelopment@cooltux.net) -- 2.49.1