dev #79

Merged
marko merged 4 commits from dev into main 2025-10-14 05:22:36 +00:00
5 changed files with 202 additions and 124 deletions

View File

@@ -1,4 +1,97 @@
### ``` Refactor pre-commit hook file list and output formatting (HEAD -> patch-removedarksky) ### 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)
>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)
>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 >Wed, 5 Feb 2025 07:07:52 +0100
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) >Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
@@ -38,7 +131,7 @@ function as intended.
### docs: add changelog (origin/patch-changeVersion) ### docs: add changelog
>Tue, 4 Feb 2025 21:01:33 +0100 >Tue, 4 Feb 2025 21:01:33 +0100
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) >Author: Marko Oldenburg (fhemdevelopment@cooltux.net)

View File

@@ -1,4 +1,4 @@
UPD 2025-02-05_05:56:41 25899 FHEM/59_Weather.pm 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-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

View File

@@ -41,7 +41,8 @@ use FHEM::Meta;
use POSIX; use POSIX;
use HttpUtils; use HttpUtils;
use experimental qw /switch/;
#use experimental qw /switch/;
my $META = {}; my $META = {};
my $ret = FHEM::Meta::getMetadata( __FILE__, $META ); my $ret = FHEM::Meta::getMetadata( __FILE__, $META );
@@ -466,67 +467,59 @@ sub _FillSelfHashWithWeatherResponse {
$self->{cached}->{city} = encode_utf8( $data->{name} ); $self->{cached}->{city} = encode_utf8( $data->{name} );
$self->{cached}->{license}{text} = 'none'; $self->{cached}->{license}{text} = 'none';
given ( $self->{endpoint} ) { if ( $self->{endpoint} eq 'onecall' ) {
when ('onecall') { ## löschen des alten current Datensatzes
## löschen des alten current Datensatzes delete $self->{cached}->{current};
delete $self->{cached}->{current};
## löschen des alten forecast Datensatzes ## löschen des alten forecast Datensatzes
delete $self->{cached}->{forecast}; delete $self->{cached}->{forecast};
## löschen des alten Alerts Datensatzes ## löschen des alten Alerts Datensatzes
delete $self->{cached}->{alerts}; delete $self->{cached}->{alerts};
$self =
_FillSelfHashWithWeatherResponseForOnecallCurrent( $self, $data );
if ( ref( $data->{hourly} ) eq "ARRAY"
&& scalar( @{ $data->{hourly} } ) > 0 )
{
$self = $self =
_FillSelfHashWithWeatherResponseForOnecallCurrent( $self, $data ); _FillSelfHashWithWeatherResponseForOnecallHourly( $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 );
}
} }
when ('weather') { if ( ref( $data->{daily} ) eq "ARRAY"
## löschen des alten current Datensatzes && scalar( @{ $data->{daily} } ) > 0 )
delete $self->{cached}->{current}; {
## löschen des alten Alerts Datensatzes
delete $self->{cached}->{alerts};
$self = $self =
_FillSelfHashWithWeatherResponseForWeatherCurrent( $self, $data ); _FillSelfHashWithWeatherResponseForOnecallDaily( $self, $data );
} }
when ('forecast') { if ( ref( $data->{alerts} ) eq "ARRAY"
## löschen des alten forecast Datensatzes && scalar( @{ $data->{alerts} } ) > 0 )
delete $self->{cached}->{forecast}; {
$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" ## löschen des alten Alerts Datensatzes
and scalar( @{ $data->{list} } ) > 0 ) delete $self->{cached}->{alerts};
{
$self = $self =
_FillSelfHashWithWeatherResponseForForecastHourly( $self, _FillSelfHashWithWeatherResponseForWeatherCurrent( $self, $data );
$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 );
} }
} }

View File

@@ -6,7 +6,6 @@ use FHEM::Meta;
use POSIX; use POSIX;
use HttpUtils; use HttpUtils;
use experimental qw /switch/;
use Encode; use Encode;
my $META = {}; my $META = {};

View File

@@ -41,10 +41,7 @@ eval { use Time::HiRes qw /gettimeofday/; 1 }
eval { use Readonly; 1 } eval { use Readonly; 1 }
or $missingModul .= "libreadonly-perl "; or $missingModul .= "libreadonly-perl ";
#use Time::HiRes qw(gettimeofday); #use experimental qw /switch/;
use experimental qw /switch/;
#use Readonly;
use FHEM::Meta; use FHEM::Meta;
@@ -224,48 +221,48 @@ sub _LanguageInitialize {
my $lang = shift; my $lang = shift;
given ($lang) { if ( $lang eq 'de' ) {
when ('de') { %wdays_txt_i18n = %wdays_txt_de;
%wdays_txt_i18n = %wdays_txt_de; @directions_txt_i18n = @directions_txt_de;
@directions_txt_i18n = @directions_txt_de; %pressure_trend_txt_i18n = %pressure_trend_txt_de;
%pressure_trend_txt_i18n = %pressure_trend_txt_de; %status_items_txt_i18n = %status_items_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; elsif ( $lang eq 'fr' ) {
@directions_txt_i18n = @directions_txt_nl; %wdays_txt_i18n = %wdays_txt_fr;
%pressure_trend_txt_i18n = %pressure_trend_txt_nl; @directions_txt_i18n = @directions_txt_fr;
%status_items_txt_i18n = %status_items_txt_nl; %pressure_trend_txt_i18n = %pressure_trend_txt_fr;
} %status_items_txt_i18n = %status_items_txt_fr;
when ('fr') { }
%wdays_txt_i18n = %wdays_txt_fr; elsif ( $lang eq 'pl' ) {
@directions_txt_i18n = @directions_txt_fr; %wdays_txt_i18n = %wdays_txt_pl;
%pressure_trend_txt_i18n = %pressure_trend_txt_fr; @directions_txt_i18n = @directions_txt_pl;
%status_items_txt_i18n = %status_items_txt_fr; %pressure_trend_txt_i18n = %pressure_trend_txt_pl;
} %status_items_txt_i18n = %status_items_txt_pl;
when ('pl') { }
%wdays_txt_i18n = %wdays_txt_pl; elsif ( $lang eq 'it' ) {
@directions_txt_i18n = @directions_txt_pl; %wdays_txt_i18n = %wdays_txt_it;
%pressure_trend_txt_i18n = %pressure_trend_txt_pl; @directions_txt_i18n = @directions_txt_it;
%status_items_txt_i18n = %status_items_txt_pl; %pressure_trend_txt_i18n = %pressure_trend_txt_it;
} %status_items_txt_i18n = %status_items_txt_it;
when ('it') { }
%wdays_txt_i18n = %wdays_txt_it; else {
@directions_txt_i18n = @directions_txt_it; %wdays_txt_i18n = %wdays_txt_en;
%pressure_trend_txt_i18n = %pressure_trend_txt_it; @directions_txt_i18n = @directions_txt_en;
%status_items_txt_i18n = %status_items_txt_it; %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; return;
@@ -862,35 +859,31 @@ sub Attr {
my ( $cmd, $name, $attrName, $AttrVal ) = @_; my ( $cmd, $name, $attrName, $AttrVal ) = @_;
my $hash = $::defs{$name}; my $hash = $::defs{$name};
given ($attrName) { if ( $attrName eq 'forecast' ) {
when ('forecast') { if ( $cmd eq 'set' ) {
if ( $cmd eq 'set' ) { $hash->{fhem}->{api}->setForecast($AttrVal);
$hash->{fhem}->{api}->setForecast($AttrVal); }
} elsif ( $cmd eq 'del' ) {
elsif ( $cmd eq 'del' ) { $hash->{fhem}->{api}->setForecast();
$hash->{fhem}->{api}->setForecast();
}
::InternalTimer( gettimeofday() + 0.5,
\&FHEM::Core::Weather::DeleteForecastreadings, $hash );
} }
when ('forecastLimit') { ::InternalTimer( gettimeofday() + 0.5,
::InternalTimer( gettimeofday() + 0.5, \&FHEM::Core::Weather::DeleteForecastreadings, $hash );
\&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') { ::InternalTimer( gettimeofday() + 0.5,
if ( $cmd eq 'set' ) { \&FHEM::Core::Weather::DeleteAlertsreadings, $hash );
$hash->{fhem}->{api}->setAlerts($AttrVal);
}
elsif ( $cmd eq 'del' ) {
$hash->{fhem}->{api}->setAlerts();
}
::InternalTimer( gettimeofday() + 0.5,
\&FHEM::Core::Weather::DeleteAlertsreadings, $hash );
}
} }
return; return;