changeset 535:edbc0190e82a

weather: Move some functions around into more logical location.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 07 Jul 2020 14:41:46 +0300
parents 7512889f7b72
children 1044fbacb8a7
files weather.tcl
diffstat 1 files changed, 102 insertions(+), 99 deletions(-) [+]
line wrap: on
line diff
--- a/weather.tcl	Tue Jul 07 14:40:45 2020 +0300
+++ b/weather.tcl	Tue Jul 07 14:41:46 2020 +0300
@@ -126,105 +126,6 @@
 }
 
 
-# Translate wind direction compass degree to name
-proc weather_get_wind_direction {uangle} {
-  global weather_msg_wind_directions
-
-  # If the data was not got, return empty value
-  if {$uangle == ""} {
-    return ""
-  }
-
-  # Calculate index to array of 8 compass direction names based on the angle we have
-  set uvalue [expr int(floor(fmod($uangle + 45.0/2, 360.0) / 45.0))]
-  if {$uvalue >= 0 && $uvalue < [llength $weather_msg_wind_directions]} {
-    return [lindex $weather_msg_wind_directions $uvalue]
-  } else {
-    return "ERROR ($udir)"
-  }
-}
-
-
-proc weather_get_raw_table_value {utable uvalue} {
-  # If the data was not got, return empty value
-  if {$uvalue == "" || $uvalue == "NaN"} {
-    return ""
-  }
-
-  return "[expr int($uvalue) + 1]/[llength $utable]"
-}
-
-
-# "Translate" a straight table index (0-N) to table value
-proc weather_get_table_value {utable uvalue} {
-  # If the data was not got, return empty value
-  if {$uvalue == "" || $uvalue == "NaN"} {
-    return ""
-  }
-
-  set uvalue [expr int($uvalue)]
-  set ulen [llength $utable]
-  if {$uvalue >= 0 && $uvalue < $ulen} {
-    return [lindex $utable $uvalue]
-  } else {
-    return "ERROR ($uvalue)"
-  }
-}
-
-
-#-------------------------------------------------------------------------
-# Produce one location of weather data as a string
-proc weather_get_str {udata umsg} {
-  global weather_msg_cloudiness
-
-  array unset uvals
-  set uvals(station) [lindex $udata 0]
-  set uvals(type) [lindex $udata 1]
-  set uvals(c_lat) [lindex $udata 2]
-  set uvals(c_lng) [lindex $udata 3]
-  set uvals(c_height) [lindex $udata 4]
-  set uvals(vtime) [lindex $udata 5]
-  set uvals(temp) [lindex $udata 6]
-  set uvals(humidity) [lindex $udata 7]
-  set uvals(wind_speed) [lindex $udata 8]
-  set uvals(wind_direction) [weather_get_wind_direction [lindex $udata 9]]
-  set uvals(wind_direction_deg) [lindex $udata 9]
-  set uvals(cloudiness) [weather_get_table_value $weather_msg_cloudiness [lindex $udata 10]]
-  set uvals(cloudiness_val) [weather_get_raw_table_value $weather_msg_cloudiness [lindex $udata 10]]
-  set uvals(road_surface_temp) [lindex $udata 11]
-  set uvals(precipitation) [lindex $udata 12]
-  set uvals(visibility) [lindex $udata 13]
-
-  if {[expr [clock seconds] - $uvals(vtime)] < 3600} {
-    set uvals(ctime) [clock format $uvals(vtime) -format "%H:%M"]
-  } else {
-    set uvals(ctime) [clock format $uvals(vtime) -format "%H:%M (%d.%m.%Y)"]
-  }
-
-  set astr ""
-  foreach aitem $umsg {
-    set atmp $aitem
-    foreach {akey aval} [array get uvals] {
-      if {$aval != ""} {
-        set atmp [string map [list "@${akey}@" $aval] $atmp]
-      }
-    }
-    if {$atmp != $aitem || [string first "@" $aitem] < 0} {
-      append astr $atmp
-    }
-  }
-
-  return $astr
-}
-
-
-# Get data by location key
-proc weather_get_by_key {ukey} {
-  global weather_data weather_msg_result
-  return [weather_get_str $weather_data($ukey) $weather_msg_result]
-}
-
-
 #-------------------------------------------------------------------------
 proc weather_update {} {
   global weather_datafile weather_data
@@ -293,6 +194,108 @@
 
 
 #-------------------------------------------------------------------------
+# Translate wind direction compass degree to name
+proc weather_get_wind_direction {uangle} {
+  global weather_msg_wind_directions
+
+  # If the data was not got, return empty value
+  if {$uangle == ""} {
+    return ""
+  }
+
+  # Calculate index to array of 8 compass direction names based on the angle we have
+  set uvalue [expr int(floor(fmod($uangle + 45.0/2, 360.0) / 45.0))]
+  if {$uvalue >= 0 && $uvalue < [llength $weather_msg_wind_directions]} {
+    return [lindex $weather_msg_wind_directions $uvalue]
+  } else {
+    return "ERROR ($udir)"
+  }
+}
+
+
+proc weather_get_raw_table_value {utable uvalue} {
+  # If the data was not got, return empty value
+  if {$uvalue == "" || $uvalue == "NaN"} {
+    return ""
+  }
+
+  return "[expr int($uvalue) + 1]/[llength $utable]"
+}
+
+
+# "Translate" a straight table index (0-N) to table value
+proc weather_get_table_value {utable uvalue} {
+  # If the data was not got, return empty value
+  if {$uvalue == "" || $uvalue == "NaN"} {
+    return ""
+  }
+
+  set uvalue [expr int($uvalue)]
+  set ulen [llength $utable]
+  if {$uvalue >= 0 && $uvalue < $ulen} {
+    return [lindex $utable $uvalue]
+  } else {
+    return "ERROR ($uvalue)"
+  }
+}
+
+
+# Produce one location of weather data as a string
+proc weather_get_str {udata umsg} {
+  global weather_msg_cloudiness
+  global weather_msg_precipitation
+
+  array unset uvals
+  set uvals(station) [lindex $udata 0]
+  set uvals(type) [lindex $udata 1]
+  set uvals(c_lat) [lindex $udata 2]
+  set uvals(c_lng) [lindex $udata 3]
+  set uvals(c_height) [lindex $udata 4]
+  set uvals(vtime) [lindex $udata 5]
+  set uvals(temp) [lindex $udata 6]
+  set uvals(humidity) [lindex $udata 7]
+  set uvals(wind_speed) [lindex $udata 8]
+  set uvals(wind_direction) [weather_get_wind_direction [lindex $udata 9]]
+  set uvals(wind_direction_deg) [lindex $udata 9]
+  set uvals(cloudiness) [weather_get_table_value $weather_msg_cloudiness [lindex $udata 10]]
+  set uvals(cloudiness_val) [weather_get_raw_table_value $weather_msg_cloudiness [lindex $udata 10]]
+  set uvals(road_surface_temp) [lindex $udata 11]
+  set uvals(precipitation) [lindex $udata 12]
+  set uvals(visibility) [lindex $udata 13]
+  set uvals(precipitation2) [weather_get_table_value $weather_msg_precipitation [lindex $udata 14]]
+  set uvals(precipitation_val) [weather_get_raw_table_value $weather_msg_precipitation [lindex $udata 14]]
+
+  if {[expr [clock seconds] - $uvals(vtime)] < 3600} {
+    set uvals(ctime) [clock format $uvals(vtime) -format "%H:%M"]
+  } else {
+    set uvals(ctime) [clock format $uvals(vtime) -format "%H:%M (%d.%m.%Y)"]
+  }
+
+  set astr ""
+  foreach aitem $umsg {
+    set atmp $aitem
+    foreach {akey aval} [array get uvals] {
+      if {$aval != ""} {
+        set atmp [string map [list "@${akey}@" $aval] $atmp]
+      }
+    }
+    if {$atmp != $aitem || [string first "@" $aitem] < 0} {
+      append astr $atmp
+    }
+  }
+
+  return $astr
+}
+
+
+# Get data by location key
+proc weather_get_by_key {ukey} {
+  global weather_data weather_msg_result
+  return [weather_get_str $weather_data($ukey) $weather_msg_result]
+}
+
+
+#-------------------------------------------------------------------------
 # Script initialization
 #-------------------------------------------------------------------------