diff fetch_weather.pl @ 487:b4be881a9908

fetch_weather, weather: Add primitive support for wind direction data.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 21 Jan 2020 22:14:01 +0200
parents b352722e8717
children 39fe08aafe12
line wrap: on
line diff
--- a/fetch_weather.pl	Wed Jan 08 15:21:16 2020 +0200
+++ b/fetch_weather.pl	Tue Jan 21 22:14:01 2020 +0200
@@ -176,16 +176,16 @@
 
 
 ### Return either data or if not defined, empty string
-sub plonk_data($)
+sub plonk_data
 {
-  return defined($_[0]) ? $_[0] : "";
+  return defined($_[0]) ? $_[0] : (defined($_[1]) ? $_[1] : "");
 }
 
 
 ### Same as plonk_data() but also lowercase the data string
 sub plonk_data_lc($)
 {
-  return defined($_[0]) ? lc($_[0]) : "";
+  return defined($_[0]) ? lc($_[0]) : (defined($_[1]) ? $_[1] : "");
 }
 
 
@@ -378,6 +378,8 @@
     my $json_str = force_decode_utf8($res->decoded_content);
     my $data = JSON->new->decode($json_str);
 
+#print $json_str."\n"; die("\n");
+
     if (!defined($data->{"dataUpdatedTime"}) || !defined($data->{"weatherStations"}))
     {
       print STDERR "ERROR: REST/JSON call result did not contain required data.\n";
@@ -450,13 +452,14 @@
             1,
 
             # Basic data
-            $meta_data->{$wid}{"geometry"}{"coordinates"}[1],
-            $meta_data->{$wid}{"geometry"}{"coordinates"}[0],
-            $meta_data->{$wid}{"geometry"}{"coordinates"}[2],
+            plonk_data($meta_data->{$wid}{"geometry"}{"coordinates"}[1], 0),
+            plonk_data($meta_data->{$wid}{"geometry"}{"coordinates"}[0], 0),
+            plonk_data($meta_data->{$wid}{"geometry"}{"coordinates"}[2], 0),
             str2time(plonk_data($wdata->{"measuredTime"})),
             plonk_data($wdata->{"sensors"}->{"airtemperature1"}->{"sensorValue"}),
             plonk_data($wdata->{"sensors"}->{"humidity"}->{"sensorValue"}),
             plonk_data($wdata->{"sensors"}->{"averagewindspeed"}->{"sensorValue"}),
+            plonk_data($wdata->{"sensors"}->{"winddirection"}->{"sensorValue"}),
 
             # Station type dependant data
             "",
@@ -482,15 +485,14 @@
 ###
 if (opt_chk_bool("opt_fmi"))
 {
-  my @fmitems = ("temperature", "humidity", "windspeedms", "totalcloudcover");
+  my @fmitems = ("temperature", "humidity", "windspeedms", "winddirection", "totalcloudcover");
 
   my $uri = "https://opendata.fmi.fi/wfs".
     "?request=getFeature".
-    "&storedquery_id=fmi::observations::weather::".
-    "multipointcoverage".
-#    "timevaluepair".
+    "&storedquery_id=fmi::observations::weather::multipointcoverage".
     "&starttime=".format_time_gmt(time() - 10*60)."&endtime=".format_time_gmt(time()).
-    "&parameters=".join(",", @fmitems)."&maxlocations=100&bbox=19,59,32,75";
+    "&parameters=".join(",", @fmitems).
+    "&maxlocations=200&bbox=19,59,32,75";
 
   print STDERR "FMI URI: ".$uri."\n" if (opt_get_int("debug") > 0);
 
@@ -500,6 +502,8 @@
     my $xml = XMLin(force_decode_utf8($res->decoded_content));
     my $time_base = time();
 
+#print $res->decoded_content; die("\n");
+
     if (defined($xml->{"wfs:member"}{"omso:GridSeriesObservation"}))
     {
       my $fdata = $xml->{"wfs:member"}{"omso:GridSeriesObservation"};
@@ -574,13 +578,14 @@
                 2,
 
                 # Basic data
-                $frec->{"lat"},
-                $frec->{"long"},
+                plonk_data($frec->{"lat"}, 0),
+                plonk_data($frec->{"long"}, 0),
                 0,
                 plonk_data($frec->{"time"}),
                 plonk_data($frec->{"temperature"}),
                 plonk_data($frec->{"humidity"}),
                 plonk_data($frec->{"windspeedms"}),
+                plonk_data($frec->{"winddirection"}),
 
                 # Station type dependant data
                 translate_clouds(plonk_data($frec->{"totalcloudcover"})),