patch-remove-perlexperimental #77
145
CHANGELOG.md
145
CHANGELOG.md
@@ -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)
|
||||||
|
|||||||
@@ -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 <name> Weather apikey=<DarkSkyAPISecretKey></code><br><br>
|
<code>define <name> Weather apikey=<DarkSkyAPISecretKey></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ötigt. Mit <code>apt-get install
|
Hinweis: es wird das Perl-Modul JSON benö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 <name> Weather apikey=<DarkSkyAPISecretKey></code><br><br>
|
<code>define <name> Weather apikey=<DarkSkyAPISecretKey></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üssel, den man sich auf der Webseite von Dark Sky
|
individuellen Schlü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ützt zusätzlich vier verschiedene Funktionen
|
Das Modul unterstützt zusätzlich vier verschiedene Funktionen
|
||||||
<code>WeatherAsHtml</code>, <code>WeatherAsHtmlV</code>,
|
<code>WeatherAsHtml</code>, <code>WeatherAsHtmlV</code>,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 = {};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user