patch-remove-perlexperimental #77

Merged
marko merged 13 commits from patch-remove-perlexperimental into testing 2025-10-14 05:10:17 +00:00
7 changed files with 291 additions and 161 deletions

View File

@@ -1,4 +1,147 @@
### feat: remove DarkSky, change versions remove DarkSkyAPI, no longer supported change Copyright years and versions of OWM API (HEAD -> patch-changeVersion) ### 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
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net)
Updated the list of files in the pre-commit hook to remove
references to 'lib/FHEM/APIs/Weather/DarkSkyAPI.pm' and adjusted
the output formatting for better readability. The order of the
files in the @filenames array has been restructured for clarity.
These changes were necessary to ensure our code base focuses on
the more relevant weather API files.
No breaking changes introduced; the pre-commit hook continues to
function as intended.
```
### docs: add changelog
>Tue, 4 Feb 2025 21:27:10 +0100
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net)
### docs: fix unbalanced p
>Tue, 4 Feb 2025 21:26:52 +0100
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net)
### docs: add changelog
>Tue, 4 Feb 2025 21:01:33 +0100
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net)
### feat: remove DarkSky, change versions remove DarkSkyAPI, no longer supported change Copyright years and versions of OWM API
>Tue, 4 Feb 2025 21:01:17 +0100 >Tue, 4 Feb 2025 21:01:17 +0100
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net) >Author: Marko Oldenburg (fhemdevelopment@cooltux.net)

View File

@@ -74,7 +74,7 @@ __END__
<h3>Weather</h3> <h3>Weather</h3>
<ul> <ul>
Note: you need the JSON perl module. Use <code>apt-get install Note: you need the JSON perl module. Use <code>apt-get install
libjson-perl</code> on Debian and derivatives.<p><p> libjson-perl</code> on Debian and derivatives.<p></p>
The Weather module works with various weather APIs: The Weather module works with various weather APIs:
<ul> <ul>
@@ -105,12 +105,12 @@ __END__
<tr><td><code>lang</code></td><td>language of the forecast: <code>de</code>, <tr><td><code>lang</code></td><td>language of the forecast: <code>de</code>,
<code>en</code>, <code>pl</code>, <code>fr</code>, <code>it</code> or <code>nl</code></td></tr> <code>en</code>, <code>pl</code>, <code>fr</code>, <code>it</code> or <code>nl</code></td></tr>
</table> </table>
<p> <p></p>
A very simple definition is:<br><br> A very simple definition is:<br><br>
<code>define &lt;name&gt; Weather apikey=&lt;DarkSkyAPISecretKey&gt;</code><br><br> <code>define &lt;name&gt; Weather apikey=&lt;DarkSkyAPISecretKey&gt;</code><br><br>
This uses the Dark Sky API with an individual key that you need to This uses the Dark Sky API with an individual key that you need to
retrieve from the Dark Sky web site.<p><p> retrieve from the Dark Sky web site.<p></p>
Examples: Examples:
<pre> <pre>
@@ -120,9 +120,9 @@ __END__
</pre> </pre>
API-specific documentation follows.<p> API-specific documentation follows.<p></p>
<h4>Dark Sky</h4><p> <h4>Dark Sky</h4><p></p>
<table> <table>
<tr><td>API</td><td><code>DarkSkyAPI</code></td></tr> <tr><td>API</td><td><code>DarkSkyAPI</code></td></tr>
@@ -133,9 +133,9 @@ __END__
weather is forecast; if missing, the values of the attributes weather is forecast; if missing, the values of the attributes
of the <code>global</code> device are taken, if these exist.</td></tr> of the <code>global</code> device are taken, if these exist.</td></tr>
</table> </table>
<p><p> <p></p>
<h4>OpenWeatherMap</h4><p> <h4>OpenWeatherMap</h4><p></p>
<table> <table>
<tr><td>API</td><td><code>OpenWeatherMapAPI</code></td></tr> <tr><td>API</td><td><code>OpenWeatherMapAPI</code></td></tr>
@@ -151,9 +151,9 @@ __END__
weather is forecast; if missing, the values of the attributes weather is forecast; if missing, the values of the attributes
of the <code>global</code> device are taken, if these exist.</td></tr> of the <code>global</code> device are taken, if these exist.</td></tr>
</table> </table>
<p><p> <p></p>
<h4>Wunderground</h4><p> <h4>Wunderground</h4><p></p>
<table> <table>
<tr><td>API</td><td><code>wundergroundAPI</code></td></tr> <tr><td>API</td><td><code>wundergroundAPI</code></td></tr>
@@ -165,7 +165,7 @@ __END__
weather is forecast; if missing, the values of the attributes weather is forecast; if missing, the values of the attributes
of the <code>global</code> device are taken, if these exist.</td></tr> of the <code>global</code> device are taken, if these exist.</td></tr>
</table> </table>
<p><p> <p></p>
The module provides four additional functions <code>WeatherAsHtml</code>, The module provides four additional functions <code>WeatherAsHtml</code>,
<code>WeatherAsHtmlV</code>, <code>WeatherAsHtmlH</code> and <code>WeatherAsHtmlV</code>, <code>WeatherAsHtmlH</code> and
@@ -303,7 +303,7 @@ __END__
<ul> <ul>
Hinweis: es wird das Perl-Modul JSON ben&ouml;tigt. Mit <code>apt-get install Hinweis: es wird das Perl-Modul JSON ben&ouml;tigt. Mit <code>apt-get install
libjson-perl</code> kann es unter Debian und Derivaten installiert libjson-perl</code> kann es unter Debian und Derivaten installiert
werden.<p><p> werden.<p></p>
Das Weather-Modul arbeitet mit verschiedenen Wetter-APIs zusammen: Das Weather-Modul arbeitet mit verschiedenen Wetter-APIs zusammen:
<ul> <ul>
@@ -334,14 +334,15 @@ __END__
<tr><td><code>lang</code></td><td>Sprache der Wettervorhersage: <code>de</code>, <tr><td><code>lang</code></td><td>Sprache der Wettervorhersage: <code>de</code>,
<code>en</code>, <code>pl</code>, <code>fr</code>, <code>it</code> oder <code>nl</code></td></tr> <code>en</code>, <code>pl</code>, <code>fr</code>, <code>it</code> oder <code>nl</code></td></tr>
</table> </table>
<p> <p></p>
Eine ganz einfache Definition ist:<br><br> Eine ganz einfache Definition ist:<br><br>
<code>define &lt;name&gt; Weather apikey=&lt;DarkSkyAPISecretKey&gt;</code><br><br> <code>define &lt;name&gt; Weather apikey=&lt;DarkSkyAPISecretKey&gt;</code><br><br>
Bei dieser Definition wird die API von Dark Sky verwendet mit einem Bei dieser Definition wird die API von Dark Sky verwendet mit einem
individuellen Schl&uuml;ssel, den man sich auf der Webseite von Dark Sky individuellen Schl&uuml;ssel, den man sich auf der Webseite von Dark Sky
beschaffen muss.<p><p> beschaffen muss.<p></p>
Beispiele: Beispiele:
<pre> <pre>
@@ -350,9 +351,9 @@ __END__
define <name> Weather API=wundergroundAPI,stationId:IHAUIDELB111 apikey=ed64ccc80f004556a4e3456567800b6324a define <name> Weather API=wundergroundAPI,stationId:IHAUIDELB111 apikey=ed64ccc80f004556a4e3456567800b6324a
</pre> </pre>
Es folgt die API-spezifische Dokumentation.<p> Es folgt die API-spezifische Dokumentation.<p></p>
<h4>Dark Sky</h4><p> <h4>Dark Sky</h4><p></p>
<table> <table>
<tr><td>API</td><td><code>DarkSkyAPI</code></td></tr> <tr><td>API</td><td><code>DarkSkyAPI</code></td></tr>
@@ -364,9 +365,9 @@ __END__
Bei fehlender Angabe werden die Werte aus den gleichnamigen Attributen Bei fehlender Angabe werden die Werte aus den gleichnamigen Attributen
des <code>global</code>-Device genommen, sofern vorhanden.</td></tr> des <code>global</code>-Device genommen, sofern vorhanden.</td></tr>
</table> </table>
<p><p> <p></p>
<h4>OpenWeatherMap</h4><p> <h4>OpenWeatherMap</h4><p></p>
<table> <table>
<tr><td>API</td><td><code>OpenWeatherMapAPI</code></td></tr> <tr><td>API</td><td><code>OpenWeatherMapAPI</code></td></tr>
@@ -385,9 +386,9 @@ __END__
Bei fehlender Angabe werden die Werte aus den gleichnamigen Attributen Bei fehlender Angabe werden die Werte aus den gleichnamigen Attributen
des <code>global</code>-Device genommen, sofern vorhanden.</td></tr> des <code>global</code>-Device genommen, sofern vorhanden.</td></tr>
</table> </table>
<p><p> <p></p>
<h4>Wunderground</h4><p> <h4>Wunderground</h4><p></p>
<table> <table>
<tr><td>API</td><td><code>wundergroundAPI</code></td></tr> <tr><td>API</td><td><code>wundergroundAPI</code></td></tr>
@@ -400,7 +401,7 @@ __END__
Bei fehlender Angabe werden die Werte aus den gleichnamigen Attributen Bei fehlender Angabe werden die Werte aus den gleichnamigen Attributen
des <code>global</code>-Device genommen, sofern vorhanden.</td></tr> des <code>global</code>-Device genommen, sofern vorhanden.</td></tr>
</table> </table>
<p><p> <p></p>
Das Modul unterst&uuml;tzt zus&auml;tzlich vier verschiedene Funktionen Das Modul unterst&uuml;tzt zus&auml;tzlich vier verschiedene Funktionen
<code>WeatherAsHtml</code>, <code>WeatherAsHtmlV</code>, <code>WeatherAsHtml</code>, <code>WeatherAsHtmlV</code>,

View File

@@ -1,4 +1,4 @@
UPD 2025-02-04_20:57:25 25848 FHEM/59_Weather.pm UPD 2025-02-05_05:56:41 25899 FHEM/59_Weather.pm
UPD 2025-02-04_20:58:03 34419 lib/FHEM/Core/Weather.pm UPD 2025-10-14_06:51:10 34175 lib/FHEM/Core/Weather.pm
UPD 2025-02-04_20:58:29 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_20:57:50 38751 lib/FHEM/APIs/Weather/wundergroundAPI.pm UPD 2025-10-14_07:03:17 38721 lib/FHEM/APIs/Weather/wundergroundAPI.pm

View File

@@ -4,33 +4,34 @@ use File::Basename;
use POSIX qw(strftime); use POSIX qw(strftime);
use strict; use strict;
my @filenames = ( 'FHEM/59_Weather.pm', my @filenames = (
'lib/FHEM/Core/Weather.pm', 'FHEM/59_Weather.pm',
'lib/FHEM/APIs/Weather/DarkSkyAPI.pm', 'lib/FHEM/Core/Weather.pm',
'lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm', 'lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm',
'lib/FHEM/APIs/Weather/wundergroundAPI.pm', 'lib/FHEM/APIs/Weather/wundergroundAPI.pm',
); );
my $controlsfile = 'controls_Weather.txt'; my $controlsfile = 'controls_Weather.txt';
open(FH, ">$controlsfile") || return("Can't open $controlsfile: $!"); open( FH, ">$controlsfile" ) || return ("Can't open $controlsfile: $!");
for my $filename (@filenames) { for my $filename (@filenames) {
my @statOutput = stat($filename); my @statOutput = stat($filename);
if (scalar @statOutput != 13) { if ( scalar @statOutput != 13 ) {
printf 'error: stat has unexpected return value for ' . $filename . "\n"; printf 'error: stat has unexpected return value for '
. $filename . "\n";
next; next;
} }
my $mtime = $statOutput[9]; my $mtime = $statOutput[9];
my $date = POSIX::strftime("%Y-%m-%d", localtime($mtime)); my $date = POSIX::strftime( "%Y-%m-%d", localtime($mtime) );
my $time = POSIX::strftime("%H:%M:%S", localtime($mtime)); my $time = POSIX::strftime( "%H:%M:%S", localtime($mtime) );
my $filetime = $date."_".$time; my $filetime = $date . "_" . $time;
my $filesize = $statOutput[7]; my $filesize = $statOutput[7];
printf FH 'UPD ' . $filetime . ' ' . $filesize . ' ' .$filename . "\n"; printf FH 'UPD ' . $filetime . ' ' . $filesize . ' ' . $filename . "\n";
} }
close(FH); close(FH);

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;