mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-26 22:25:43 +00:00
OPENWEATHER: URL created during define
git-svn-id: https://svn.fhem.de/fhem/trunk@6951 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
6038d6881e
commit
5b00a3b2c7
@ -38,8 +38,9 @@ package MyOPENWEATHERParser;
|
||||
use base qw(HTML::Parser);
|
||||
our %fcReadings = ();
|
||||
my $curTag = "";
|
||||
my $day = -1;
|
||||
my $day = -2;
|
||||
my $time = "";
|
||||
my $isError = 0;
|
||||
# here HTML::text/start/end are overridden
|
||||
|
||||
%knownTags = ( tn => "tempMin"
|
||||
@ -51,24 +52,24 @@ my $time = "";
|
||||
, wd_txt => "windDirTxt"
|
||||
, pc => "presChange"
|
||||
, p => "valHours"
|
||||
, title => "error"
|
||||
, message => "errorMsg"
|
||||
, name => "city"
|
||||
, post_code => "postcode"
|
||||
);
|
||||
|
||||
sub text
|
||||
{
|
||||
my ( $self, $text ) = @_;
|
||||
|
||||
if ($curTag eq "name")
|
||||
my $rName = $knownTags{$curTag};
|
||||
if (defined $rName)
|
||||
{
|
||||
$fcReadings{"city"} = $text ;
|
||||
}
|
||||
elsif ($curTag eq "post_code")
|
||||
{
|
||||
$fcReadings{"postCode"} = $text ;
|
||||
}
|
||||
else
|
||||
{
|
||||
my $rName = $knownTags{$curTag};
|
||||
if (defined $rName && $day >= 0)
|
||||
if ($day == -2)
|
||||
{
|
||||
$fcReadings{$rName} = $text ;
|
||||
}
|
||||
elsif ( $day >= 0 )
|
||||
{
|
||||
#Umlaute entfernen
|
||||
if ($curTag eq "w_txt") {$text =~ s/ö/oe/; $text =~ s/ä/ae/; $text =~ s/ü/ue/; $text =~ s/ß/ss/;}
|
||||
@ -84,14 +85,14 @@ sub start
|
||||
|
||||
if ($tagname eq "forecast")
|
||||
{
|
||||
$day=-1;
|
||||
$day = -1;
|
||||
}
|
||||
if ($tagname eq "date")
|
||||
elsif ( $tagname eq "date" && $day >= -1 )
|
||||
{
|
||||
$day++;
|
||||
$time = "";
|
||||
}
|
||||
if ($tagname eq "time")
|
||||
elsif ($tagname eq "time")
|
||||
{
|
||||
$time = substr($attr->{value}, 0, 2);
|
||||
}
|
||||
@ -176,16 +177,26 @@ OPENWEATHER_Define($$)
|
||||
$hash->{STATE} = "Initializing" if $interval > 0;
|
||||
$hash->{STATE} = "Manual mode" if $interval == 0;
|
||||
$hash->{INTERVAL} = $interval;
|
||||
$hash->{PROJECT} = $args[2];
|
||||
$hash->{CITYCODE} = $args[3];
|
||||
$hash->{APIKEY} = $args[4];
|
||||
$hash->{CREDIT} = "Powered by wetter.com";
|
||||
RemoveInternalTimer($hash);
|
||||
#Get first data after 13 seconds
|
||||
InternalTimer(gettimeofday() + 13, "OPENWEATHER_Start", $hash, 0) if $interval > 0;
|
||||
$hash->{PROJECT} = $args[2];
|
||||
$hash->{CITYCODE} = $args[3];
|
||||
$hash->{APIKEY} = $args[4];
|
||||
$hash->{CREDIT} = "Powered by wetter.com";
|
||||
|
||||
$hash->{fhem}{modulVersion} = '$ID $';
|
||||
OPENWEATHER_Log $hash, 5, "OPENWEATHER.pm version is " . $hash->{fhem}{modulVersion};
|
||||
my $checkSum = md5_hex( $args[2] . $args[4] . $args[3] );
|
||||
|
||||
my $URL = 'http://api.wetter.com/forecast/weather';
|
||||
$URL .= '/city/' . $args[3];
|
||||
$URL .= '/project/' . $args[2];
|
||||
$URL .= '/cs/' . $checkSum;
|
||||
|
||||
$hash->{URL} = $URL;
|
||||
|
||||
RemoveInternalTimer($hash);
|
||||
# Get first data after 7 seconds
|
||||
InternalTimer(gettimeofday() + 7, "OPENWEATHER_Start", $hash, 0) if $interval > 0;
|
||||
|
||||
$hash->{fhem}{modulVersion} = '# $ID: $';
|
||||
OPENWEATHER_Log $hash, 5, "OPENWEATHER.pm version is " . $hash->{fhem}{modulVersion};
|
||||
|
||||
return undef;
|
||||
} #end OPENWEATHER_Define
|
||||
@ -311,18 +322,10 @@ OPENWEATHER_Run ($)
|
||||
my ($name) = @_;
|
||||
my $returnStr;
|
||||
my $hash = $defs{$name};
|
||||
my $projectName = $hash->{PROJECT};
|
||||
my $apiKey = $hash->{APIKEY};
|
||||
my $cityCode = $hash->{CITYCODE};
|
||||
|
||||
my $checkSum = md5_hex( $projectName . $apiKey . $cityCode );
|
||||
|
||||
my $URL = 'http://api.wetter.com/forecast/weather';
|
||||
$URL .= '/city/' . $cityCode;
|
||||
$URL .= '/project/' . $projectName;
|
||||
$URL .= '/cs/' . $checkSum;
|
||||
|
||||
$hash->{URL} = $URL;
|
||||
return $name."|0|Error: URL not created. Please re-define device."
|
||||
unless defined $hash->{URL};
|
||||
my $URL = $hash->{URL};
|
||||
|
||||
OPENWEATHER_Log $hash, 5, "Start capturing data from $URL";
|
||||
|
||||
@ -364,27 +367,36 @@ OPENWEATHER_Done($)
|
||||
my $message = decode_base64($result);
|
||||
|
||||
OPENWEATHER_Log $hash, 5, "Start parsing of XML data.";
|
||||
|
||||
my $parser = MyOPENWEATHERParser->new;
|
||||
%MyOPENWEATHERParser::fcReadings = ();
|
||||
$MyOPENWEATHERParser::day = -1;
|
||||
$MyOPENWEATHERParser::day = -2;
|
||||
$MyOPENWEATHERParser::time = "";
|
||||
$MyOPENWEATHERParser::isError = 0;
|
||||
$parser->parse($message);
|
||||
|
||||
OPENWEATHER_Log $hash, 4, "Captured values: " . keys (%MyOPENWEATHERParser::fcReadings);
|
||||
|
||||
readingsBulkUpdate($hash, "lastConnection", keys (%MyOPENWEATHERParser::fcReadings) . " values captured");
|
||||
|
||||
while (my ($rName, $rValue) = each(%MyOPENWEATHERParser::fcReadings) )
|
||||
if (defined $MyOPENWEATHERParser::fcReadings{error} )
|
||||
{
|
||||
readingsBulkUpdate( $hash, $rName, $rValue );
|
||||
OPENWEATHER_Log $hash, 5, "reading:$rName value:$rValue";
|
||||
readingsBulkUpdate($hash, "lastConnection", $MyOPENWEATHERParser::fcReadings{error});
|
||||
OPENWEATHER_Log $hash, 1, $MyOPENWEATHERParser::fcReadings{error}." - ".$MyOPENWEATHERParser::fcReadings{errorMsg};
|
||||
}
|
||||
else
|
||||
{
|
||||
readingsBulkUpdate($hash, "lastConnection", keys (%MyOPENWEATHERParser::fcReadings) . " values captured");
|
||||
|
||||
while (my ($rName, $rValue) = each(%MyOPENWEATHERParser::fcReadings) )
|
||||
{
|
||||
readingsBulkUpdate( $hash, $rName, $rValue );
|
||||
OPENWEATHER_Log $hash, 5, "reading:$rName value:$rValue";
|
||||
}
|
||||
|
||||
my $state = "Tmin: ".$MyOPENWEATHERParser::fcReadings{fc0_tempMin};
|
||||
$state .= " Tmax: ".$MyOPENWEATHERParser::fcReadings{fc0_tempMax};
|
||||
readingsBulkUpdate ($hash, "state", $state);
|
||||
|
||||
}
|
||||
my $state = "Tmin: ".$MyOPENWEATHERParser::fcReadings{fc0_tempMin};
|
||||
$state .= " Tmax: ".$MyOPENWEATHERParser::fcReadings{fc0_tempMax};
|
||||
readingsBulkUpdate ($hash, "state", $state);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
readingsBulkUpdate($hash, "lastConnection", $result);
|
||||
@ -530,7 +542,7 @@ OPENWEATHER_UpdateAborted($)
|
||||
</li><br>
|
||||
<li><code><Ortscode></code>
|
||||
<br>
|
||||
Code des Ortes für den die Wettervorhersage benötigt wird. Er kann direkt aus der Adresszeile der jeweiligen Vorhersageseite genommen werden. Zum Beispiel <i>DE0009042</i> aus:
|
||||
Code des Ortes, für den die Wettervorhersage benötigt wird. Er kann direkt aus der Adresszeile der jeweiligen Vorhersageseite genommen werden. Zum Beispiel <i>DE0009042</i> aus:
|
||||
<br>
|
||||
<i>http://www.wetter.com/wetter_aktuell/aktuelles_wetter/deutschland/rostock/<u>DE0009042</u>.html</i>
|
||||
</li><br>
|
||||
|
Loading…
x
Reference in New Issue
Block a user