changeset 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
files config.weather.example fetch_weather.pl weather.tcl
diffstat 3 files changed, 24 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/config.weather.example	Wed Jan 08 15:21:16 2020 +0200
+++ b/config.weather.example	Tue Jan 21 22:14:01 2020 +0200
@@ -42,6 +42,7 @@
 lappend weather_msg_result ", tien pinta @rv_10@°C"
 lappend weather_msg_result ", kosteus \002@humidity@%\002"
 lappend weather_msg_result ", tuuli \002@wind_speed@\002 m/s"
+lappend weather_msg_result " (suunta \002@wind_direction@\002)"
 lappend weather_msg_result ", pilvipeite \002@rv_9@\002"
 lappend weather_msg_result ", näkyvyys \002@rv_12@ km\002"
 lappend weather_msg_result "."
--- 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"})),
--- a/weather.tcl	Wed Jan 08 15:21:16 2020 +0200
+++ b/weather.tcl	Tue Jan 21 22:14:01 2020 +0200
@@ -1,7 +1,7 @@
 ##########################################################################
 #
-# Weather v1.0.0 by Matti 'ccr' Hamalainen <ccr@tnsp.org>
-# (C) Copyright 2014-2017 Tecnic Software productions (TNSP)
+# Weather v1.1.0 by Matti 'ccr' Hamalainen <ccr@tnsp.org>
+# (C) Copyright 2014-2020 Tecnic Software productions (TNSP)
 #
 # Requires data fetcher to be run as a cronjob, see fetch_weather.pl
 # for more information.
@@ -23,7 +23,7 @@
 # No need to look below this line
 ##########################################################################
 set weather_name "Weather"
-set weather_version "1.0.0"
+set weather_version "1.1.0"
 
 
 ### Initialization messages
@@ -140,6 +140,7 @@
   set uvals(temp) [lindex $udata 6]
   set uvals(humidity) [lindex $udata 7]
   set uvals(wind_speed) [lindex $udata 8]
+  set uvals(wind_direction) [lindex $udata 9]
 
   if {[expr [clock seconds] - $uvals(vtime)] < 3600} {
     set uvals(ctime) [clock format $uvals(vtime) -format "%H:%M"]
@@ -147,7 +148,7 @@
     set uvals(ctime) [clock format $uvals(vtime) -format "%H:%M (%d.%m.%Y)"]
   }
 
-  for {set id 9} {$id < [llength $udata]} {incr id} {
+  for {set id 10} {$id < [llength $udata]} {incr id} {
     set uvals(rv_$id) [lindex $udata $id]
   }