59_Weather: Improved the language initialization logic by replacing the experimental given/when construct with a more standard if/elsif structure
git-svn-id: https://svn.fhem.de/fhem/trunk@30388 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it
|
||||
- change: 59_Weather: Improved the language initialization logic by replacing
|
||||
the experimental `given/when` construct with a more
|
||||
standard `if/elsif` structure.
|
||||
- change: 77_UWZ: Refactor language handling,perl-experimental and cleanup
|
||||
- bugfix: WMBus: support for frame type B with more than one block
|
||||
- bugfix: 76_SolarForecast: V 1.59.3, minor fix in bat graphic
|
||||
|
||||
@@ -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.0",
|
||||
"author": [
|
||||
"Marko Oldenburg <fhemdevelopment@cooltux.net>"
|
||||
],
|
||||
@@ -574,4 +545,3 @@ __END__
|
||||
=end :application/json;q=META.json
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1036,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>"
|
||||
],
|
||||
|
||||
@@ -6,7 +6,6 @@ use FHEM::Meta;
|
||||
|
||||
use POSIX;
|
||||
use HttpUtils;
|
||||
use experimental qw /switch/;
|
||||
use Encode;
|
||||
|
||||
my $META = {};
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user