Compare commits
7 Commits
14644b8575
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| b78f6110d9 | |||
| 0ab46dd00b | |||
| 437d04b87c | |||
| 82d0e6b1b6 | |||
| e84d810e39 | |||
| dbd7d760aa | |||
| 75f92aece3 |
105
CHANGELOG.md
105
CHANGELOG.md
@@ -1,4 +1,107 @@
|
||||
### Refactor language handling in Weather API (HEAD -> patch-remove-perlexperimental)
|
||||
### Update version to 2.3.1 and fix conditionals in Weather.pm (HEAD -> patch-mod-weather)
|
||||
>Thu, 16 Oct 2025 19:01:00 +0200
|
||||
|
||||
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
||||
|
||||
>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
||||
|
||||
This commit updates the version number in the FHEM weather module
|
||||
from 2.3.0 to 2.3.1 to reflect the latest changes.
|
||||
|
||||
In addition to the version bump, several conditionals in
|
||||
lib/FHEM/Core/Weather.pm have been corrected. Specifically, the
|
||||
syntax for checking the command attributes has been fixed to ensure
|
||||
proper evaluation of the conditions.
|
||||
|
||||
These changes improve code clarity and correctness, which helps
|
||||
in maintaining the module. There are no breaking changes in this
|
||||
commit, and existing functionality remains intact.
|
||||
|
||||
|
||||
|
||||
### Remove DarkSky API support from Weather module (tag: v2.3.0, origin/testing, origin/main, origin/dev, origin/HEAD, testing, main, dev)
|
||||
>Tue, 14 Oct 2025 07:35:31 +0200
|
||||
|
||||
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
||||
|
||||
>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
||||
|
||||
The DarkSky API support has been removed from the Weather module
|
||||
documentation, affecting both English and German sections. The API
|
||||
documentation now focuses solely on the OpenWeatherMap API.
|
||||
|
||||
Changes include the deletion of DarkSky references in `59_Weather.pm`
|
||||
and updates to example command snippets to refer to the
|
||||
OpenWeatherMap API. The version number was incremented from
|
||||
v2.2.35 to v2.3.0, and the OpenWeatherMap API version was updated
|
||||
from v3.2.7 to v3.2.8.
|
||||
|
||||
These updates were necessary as DarkSky has been discontinued,
|
||||
streamlining the module's functionality. There are no breaking
|
||||
changes for current OpenWeatherMap API users.
|
||||
|
||||
Additionally, the language handling in the Weather API was
|
||||
refactored to replace the experimental `given/when` construct
|
||||
with standard `if/elsif` statements for better readability
|
||||
and maintainability. This change does not introduce any breaking
|
||||
changes and enhances code clarity.
|
||||
|
||||
|
||||
|
||||
### Remove DarkSky API support from Weather module
|
||||
>Tue, 14 Oct 2025 07:35:18 +0200
|
||||
|
||||
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
||||
|
||||
>Commiter: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
||||
|
||||
The DarkSky API support has been removed from the Weather module documentation,
|
||||
including its references in both English and German sections. The API
|
||||
documentation has been updated to exclusively focus on the
|
||||
OpenWeatherMap API.
|
||||
|
||||
The changes made to `59_Weather.pm` include:
|
||||
|
||||
- Deleted mentions of the DarkSky API in the documentation.
|
||||
- Updated example command snippets to reference the
|
||||
OpenWeatherMap API.
|
||||
- Version number has been incremented from v2.2.35 to v2.3.0.
|
||||
|
||||
In addition, the version number for the OpenWeatherMap API support
|
||||
has been updated from v3.2.7 to v3.2.8 in the corresponding API file.
|
||||
|
||||
These updates were necessary to streamline the module's
|
||||
functionality and align it with current API availability, as
|
||||
DarkSky has been discontinued. There are no breaking changes
|
||||
for existing users of the OpenWeatherMap API.
|
||||
|
||||
|
||||
|
||||
### Refactor language handling in Weather API
|
||||
>Tue, 14 Oct 2025 07:04:00 +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 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.
|
||||
|
||||
|
||||
|
||||
### Refactor language handling in Weather API
|
||||
>Tue, 14 Oct 2025 07:03:38 +0200
|
||||
|
||||
>Author: Marko Oldenburg (fhemdevelopment@cooltux.net)
|
||||
|
||||
@@ -78,7 +78,6 @@ __END__
|
||||
|
||||
The Weather module works with various weather APIs:
|
||||
<ul>
|
||||
<li>DarkSky (<a href="https://darksky.net">web site</a>, standard)</li>
|
||||
<li>OpenWeatherMap (<a href="https://openweathermap.org/">web site)</a></li>
|
||||
<li>Wunderground (<a href="https://www.wunderground.com/member/api-keys">web site)</a></li>
|
||||
</ul>
|
||||
@@ -96,7 +95,7 @@ __END__
|
||||
The parameters have the following meanings:<br>
|
||||
|
||||
<table>
|
||||
<tr><td><code>API</code></td><td>name of the weather API, e.g. <code>DarkSkyAPI</code></td></tr>
|
||||
<tr><td><code>API</code></td><td>name of the weather API, e.g. <code>OpenWeatherMapAPI</code></td></tr>
|
||||
<tr><td><code>apioptions</code></td><td>indivual options for the chosen API</td></tr>
|
||||
<tr><td><code>apikey</code></td><td>key for the chosen API</td></tr>
|
||||
<tr><td><code>location</code></td><td>location for the weather forecast;
|
||||
@@ -108,7 +107,7 @@ __END__
|
||||
<p></p>
|
||||
|
||||
A very simple definition is:<br><br>
|
||||
<code>define <name> Weather apikey=<DarkSkyAPISecretKey></code><br><br>
|
||||
<code>define <name> Weather apikey=<OpenWeatherMapAPISecretKey></code><br><br>
|
||||
This uses the Dark Sky API with an individual key that you need to
|
||||
retrieve from the Dark Sky web site.<p></p>
|
||||
|
||||
@@ -122,19 +121,6 @@ __END__
|
||||
|
||||
API-specific documentation follows.<p></p>
|
||||
|
||||
<h4>Dark Sky</h4><p></p>
|
||||
|
||||
<table>
|
||||
<tr><td>API</td><td><code>DarkSkyAPI</code></td></tr>
|
||||
<tr><td>apioptions</td><td><code>cachemaxage:<cachemaxage></code><br>duration
|
||||
in seconds to retrieve the forecast from the cache instead from the API</td></tr>
|
||||
<tr><td>location</td><td><code><latitude,longitude></code><br>
|
||||
geographic coordinates in degrees of the location for which the
|
||||
weather is forecast; if missing, the values of the attributes
|
||||
of the <code>global</code> device are taken, if these exist.</td></tr>
|
||||
</table>
|
||||
<p></p>
|
||||
|
||||
<h4>OpenWeatherMap</h4><p></p>
|
||||
|
||||
<table>
|
||||
@@ -324,7 +310,7 @@ __END__
|
||||
Die Parameter haben die folgende Bedeutung:<br>
|
||||
|
||||
<table>
|
||||
<tr><td><code>API</code></td><td>Name des Wetter-APIs, z.B. <code>DarkSkyAPI</code></td></tr>
|
||||
<tr><td><code>API</code></td><td>Name des Wetter-APIs, z.B. <code>OpenWeatherMapAPI</code></td></tr>
|
||||
<tr><td><code>apioptions</code></td><td>Individuelle Optionen für das gewählte API</td></tr>
|
||||
<tr><td><code>apikey</code></td><td>Schlüssel für das gewählte API</td></tr>
|
||||
<tr><td><code>location</code></td><td>Ort, für den das Wetter vorhergesagt wird.
|
||||
@@ -338,7 +324,7 @@ __END__
|
||||
|
||||
|
||||
Eine ganz einfache Definition ist:<br><br>
|
||||
<code>define <name> Weather apikey=<DarkSkyAPISecretKey></code><br><br>
|
||||
<code>define <name> Weather apikey=<OpenWeatherMapAPISecretKey></code><br><br>
|
||||
|
||||
Bei dieser Definition wird die API von Dark Sky verwendet mit einem
|
||||
individuellen Schlüssel, den man sich auf der Webseite von Dark Sky
|
||||
@@ -353,20 +339,6 @@ __END__
|
||||
|
||||
Es folgt die API-spezifische Dokumentation.<p></p>
|
||||
|
||||
<h4>Dark Sky</h4><p></p>
|
||||
|
||||
<table>
|
||||
<tr><td>API</td><td><code>DarkSkyAPI</code></td></tr>
|
||||
<tr><td>apioptions</td><td><code>cachemaxage:<cachemaxage></code><br>Zeitdauer in
|
||||
Sekunden, innerhalb derer die Wettervorhersage nicht neu abgerufen
|
||||
sondern aus dem Cache zurück geliefert wird.</td></tr>
|
||||
<tr><td>location</td><td><code><latitude,longitude></code><br> Geographische Breite
|
||||
und Länge des Ortes in Grad, für den das Wetter vorhergesagt wird.
|
||||
Bei fehlender Angabe werden die Werte aus den gleichnamigen Attributen
|
||||
des <code>global</code>-Device genommen, sofern vorhanden.</td></tr>
|
||||
</table>
|
||||
<p></p>
|
||||
|
||||
<h4>OpenWeatherMap</h4><p></p>
|
||||
|
||||
<table>
|
||||
@@ -539,13 +511,12 @@ __END__
|
||||
"fhem-mod-device",
|
||||
"fhem-core",
|
||||
"Weather",
|
||||
"DarkSky",
|
||||
"OpenWeatherMap",
|
||||
"Underground"
|
||||
],
|
||||
"release_status": "stable",
|
||||
"license": "GPL_2",
|
||||
"version": "v2.2.35",
|
||||
"version": "v2.3.3",
|
||||
"author": [
|
||||
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
|
||||
],
|
||||
|
||||
@@ -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-10-14_07:03:17 38721 lib/FHEM/APIs/Weather/wundergroundAPI.pm
|
||||
UPD 2025-10-23_19:47:25 24515 FHEM/59_Weather.pm
|
||||
UPD 2025-10-23_19:45:59 34158 lib/FHEM/Core/Weather.pm
|
||||
UPD 2025-10-14_07:39:57 33545 lib/FHEM/APIs/Weather/OpenWeatherMapAPI.pm
|
||||
UPD 2025-10-14_07:20:30 38721 lib/FHEM/APIs/Weather/wundergroundAPI.pm
|
||||
|
||||
@@ -1029,7 +1029,7 @@ sub _strftimeWrapper {
|
||||
],
|
||||
"release_status": "stable",
|
||||
"license": "GPL_2",
|
||||
"version": "v3.2.7",
|
||||
"version": "v3.2.8",
|
||||
"author": [
|
||||
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
|
||||
],
|
||||
|
||||
@@ -232,9 +232,6 @@ sub _LanguageInitialize {
|
||||
@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' ) {
|
||||
|
||||
}
|
||||
elsif ( $lang eq 'fr' ) {
|
||||
%wdays_txt_i18n = %wdays_txt_fr;
|
||||
@@ -647,13 +644,13 @@ sub Get {
|
||||
my $reading = shift @$aRef // return;
|
||||
my $value;
|
||||
|
||||
if ( defined( $hash->{readings}->{$reading} ) ) {
|
||||
$value = $hash->{readings}->{$reading}->{VAL};
|
||||
if ( defined( $hash->{READINGS}->{$reading} ) ) {
|
||||
$value = $hash->{READINGS}->{$reading}->{VAL};
|
||||
}
|
||||
else {
|
||||
my $rt = '';
|
||||
if ( defined( $hash->{readings} ) ) {
|
||||
$rt = join( ":noArg ", sort keys %{ $hash->{readings} } );
|
||||
if ( defined( $hash->{READINGS} ) ) {
|
||||
$rt = join( ":noArg ", sort keys %{ $hash->{READINGS} } );
|
||||
}
|
||||
|
||||
return "Unknown reading $reading, choose one of " . $rt;
|
||||
@@ -870,11 +867,11 @@ sub Attr {
|
||||
::InternalTimer( gettimeofday() + 0.5,
|
||||
\&FHEM::Core::Weather::DeleteForecastreadings, $hash );
|
||||
}
|
||||
elsif ('forecastLimit') {
|
||||
elsif ( $cmd eq 'forecastLimit' ) {
|
||||
::InternalTimer( gettimeofday() + 0.5,
|
||||
\&FHEM::Core::Weather::DeleteForecastreadings, $hash );
|
||||
}
|
||||
elsif ('alerts') {
|
||||
elsif ( $cmd eq 'alerts' ) {
|
||||
if ( $cmd eq 'set' ) {
|
||||
$hash->{fhem}->{api}->setAlerts($AttrVal);
|
||||
}
|
||||
@@ -936,8 +933,8 @@ sub WeatherAsHtmlV {
|
||||
else {
|
||||
$fc = (
|
||||
(
|
||||
defined( $h->{readings}->{fc1_day_of_week} )
|
||||
&& $h->{readings}->{fc1_day_of_week}
|
||||
defined( $h->{READINGS}->{fc1_day_of_week} )
|
||||
&& $h->{READINGS}->{fc1_day_of_week}
|
||||
) ? 'fc' : 'hfc'
|
||||
);
|
||||
}
|
||||
@@ -953,8 +950,8 @@ sub WeatherAsHtmlV {
|
||||
);
|
||||
|
||||
for ( my $i = 1 ; $i < $items ; $i++ ) {
|
||||
if ( defined( $h->{readings}->{"${fc}${i}_low_c"} )
|
||||
&& $h->{readings}->{"${fc}${i}_low_c"} )
|
||||
if ( defined( $h->{READINGS}->{"${fc}${i}_low_c"} )
|
||||
&& $h->{READINGS}->{"${fc}${i}_low_c"} )
|
||||
{
|
||||
$ret .= sprintf(
|
||||
'<tr><td class="weatherIcon" width=%d>%s</td><td class="weatherValue"><span class="weatherDay">%s: %s</span><br><span class="weatherMin">min %s°C</span> <span class="weatherMax">max %s°C</span><br>%s</td></tr>',
|
||||
@@ -1024,8 +1021,8 @@ sub WeatherAsHtmlH {
|
||||
else {
|
||||
$fc = (
|
||||
(
|
||||
defined( $h->{readings}->{fc1_day_of_week} )
|
||||
&& $h->{readings}->{fc1_day_of_week}
|
||||
defined( $h->{READINGS}->{fc1_day_of_week} )
|
||||
&& $h->{READINGS}->{fc1_day_of_week}
|
||||
) ? 'fc' : 'hfc'
|
||||
);
|
||||
}
|
||||
@@ -1059,8 +1056,8 @@ sub WeatherAsHtmlH {
|
||||
::ReadingsVal( $d, "humidity", "" )
|
||||
);
|
||||
for ( my $i = 1 ; $i < $items ; $i++ ) {
|
||||
if ( defined( $h->{readings}->{"${fc}${i}_low_c"} )
|
||||
&& $h->{readings}->{"${fc}${i}_low_c"} )
|
||||
if ( defined( $h->{READINGS}->{"${fc}${i}_low_c"} )
|
||||
&& $h->{READINGS}->{"${fc}${i}_low_c"} )
|
||||
{
|
||||
$ret .= sprintf( '<td class="weatherMin">min %s°C</td>',
|
||||
::ReadingsVal( $d, "${fc}${i}_low_c", " - " ) );
|
||||
@@ -1077,8 +1074,8 @@ sub WeatherAsHtmlH {
|
||||
$ret .= sprintf( '<tr><td class="weatherMax">%s</td>',
|
||||
::ReadingsVal( $d, "wind_condition", "" ) );
|
||||
for ( my $i = 1 ; $i < $items ; $i++ ) {
|
||||
if ( defined( $h->{readings}->{"${fc}${i}_high_c"} )
|
||||
&& $h->{readings}->{"${fc}${i}_high_c"} )
|
||||
if ( defined( $h->{READINGS}->{"${fc}${i}_high_c"} )
|
||||
&& $h->{READINGS}->{"${fc}${i}_high_c"} )
|
||||
{
|
||||
$ret .= sprintf( '<td class="weatherMax">max %s°C</td>',
|
||||
::ReadingsVal( $d, "${fc}${i}_high_c", " - " ) );
|
||||
|
||||
Reference in New Issue
Block a user