Newer
Older
weather-servlet / src / main / scala / uk / org / floop / msc / wview / LoopPacket.scala
package uk.org.floop.msc.wview

object VALUE_TYPE extends Enumeration {
  val FLOAT, USHORT, TIME_T, SHORT, UCHAR = Value
  def sizeof(t: Value): Int = t match {
    case VALUE_TYPE.FLOAT => 4
    case VALUE_TYPE.USHORT => 2
    case VALUE_TYPE.TIME_T => 4
    case VALUE_TYPE.SHORT => 2
    case VALUE_TYPE.UCHAR => 1
  }
}

object LoopPacket {
  val fields = List(
      (VALUE_TYPE.FLOAT, "barometer"),       // inches
      (VALUE_TYPE.FLOAT, "stationPressure"), // inches
      (VALUE_TYPE.FLOAT, "altimeter"),       // inches
      (VALUE_TYPE.FLOAT, "inTemp"),          // degrees F
      (VALUE_TYPE.FLOAT, "outTemp"),         // degrees F
      (VALUE_TYPE.USHORT, "inHumidity"),     // percent
      (VALUE_TYPE.USHORT, "outHumidity"),    // percent
      (VALUE_TYPE.USHORT, "windSpeed"),      // mph
      (VALUE_TYPE.USHORT, "windDir"),        // degrees
      (VALUE_TYPE.USHORT, "windGust"),       // mph
      (VALUE_TYPE.USHORT, "windGustDir"),    // degrees
      (VALUE_TYPE.FLOAT,  "rainRate"),       // in/hr
      (VALUE_TYPE.FLOAT,  "sampleRain"),     // inches
      (VALUE_TYPE.FLOAT,  "sampleET"),       // ET
      (VALUE_TYPE.USHORT, "radiation"),      // watts/m^3
      (VALUE_TYPE.FLOAT, "UV"),             // UV index * 10
      (VALUE_TYPE.FLOAT,  "dewpoint"),       // degrees F
      (VALUE_TYPE.FLOAT,  "windchill"),      // degrees F
      (VALUE_TYPE.FLOAT,  "heatindex"),      // degrees F
    
        // computed values - station should not alter these
      (VALUE_TYPE.FLOAT,  "stormRain"),         // inches
      (VALUE_TYPE.TIME_T, "stormStart"),        // time_t
      (VALUE_TYPE.FLOAT,  "dayRain"),           // inches
      (VALUE_TYPE.FLOAT,  "monthRain"),         // inches
      (VALUE_TYPE.FLOAT,  "yearRain"),          // inches
      (VALUE_TYPE.FLOAT,  "dayET"),             // inches
      (VALUE_TYPE.FLOAT,  "monthET"),           // inches
      (VALUE_TYPE.FLOAT,  "yearET"),            // inches
      (VALUE_TYPE.FLOAT,  "intervalAvgWCHILL"), // degrees F
      (VALUE_TYPE.SHORT,  "intervalAvgWSPEED"), // mph
      (VALUE_TYPE.USHORT, "yearRainMonth"),     // 1-12 Rain Start Month
    
        // --- The following may or may not be supported for a given station ---
    
        // Vantage Pro
      (VALUE_TYPE.USHORT, "rxCheckPercent"),        // 0 - 100
      (VALUE_TYPE.USHORT, "tenMinuteAvgWindSpeed"), // mph
      (VALUE_TYPE.USHORT, "forecastIcon"),          // VP only
      (VALUE_TYPE.USHORT, "forecastRule"),          // VP only
      (VALUE_TYPE.USHORT, "txBatteryStatus"),       // VP only
      (VALUE_TYPE.USHORT, "consBatteryVoltage"),    // VP only
      (VALUE_TYPE.SHORT,  "extraTemp1"),            // degrees F + 90
      (VALUE_TYPE.SHORT,  "extraTemp2"),            // degrees F + 90
      (VALUE_TYPE.SHORT,  "extraTemp3"),            // degrees F + 90
      (VALUE_TYPE.SHORT,  "soilTemp1"),             // degrees F + 90
      (VALUE_TYPE.SHORT,  "soilTemp2"),             // degrees F + 90
      (VALUE_TYPE.SHORT,  "soilTemp3"),             // degrees F + 90
      (VALUE_TYPE.SHORT,  "soilTemp4"),             // degrees F + 90
      (VALUE_TYPE.SHORT,  "leafTemp1"),             // degrees F + 90
      (VALUE_TYPE.SHORT,  "leafTemp2"),             // degrees F + 90
      (VALUE_TYPE.UCHAR,  "extraHumid1"),           // percent
      (VALUE_TYPE.UCHAR,  "extraHumid2"),           // percent
      (VALUE_TYPE.UCHAR,  "soilMoist1"),
      (VALUE_TYPE.UCHAR,  "soilMoist2"),
      (VALUE_TYPE.UCHAR,  "leafWet1"),
      (VALUE_TYPE.UCHAR,  "leafWet2"),
    
        // Vaisala WXT-510
      (VALUE_TYPE.FLOAT,  "wxt510Hail"),             // inches
      (VALUE_TYPE.FLOAT,  "wxt510Hailrate"),         // in/hr
      (VALUE_TYPE.FLOAT,  "wxt510HeatingTemp"),      // degrees F
      (VALUE_TYPE.FLOAT,  "wxt510HeatingVoltage"),   // volts
      (VALUE_TYPE.FLOAT,  "wxt510SupplyVoltage"),    // volts
      (VALUE_TYPE.FLOAT,  "wxt510ReferenceVoltage"),  // volts
      (VALUE_TYPE.FLOAT,  "wxt510RainDuration"),      // sec
      (VALUE_TYPE.FLOAT,  "wxt510RainPeakRate"),     // volts
      (VALUE_TYPE.FLOAT,  "wxt510HailDuration"),     // sec
      (VALUE_TYPE.FLOAT,  "wxt510HailPeakRate"),     // volts
      (VALUE_TYPE.FLOAT,  "wxt510Rain"),             // inches

      // WMR918/968
      (VALUE_TYPE.UCHAR,  "wmr918Humid3"),           // percent
      (VALUE_TYPE.FLOAT,  "wmr918Pool"),             // degrees F
      (VALUE_TYPE.UCHAR,  "wmr918Tendency"),         // WMR's Forecast
      (VALUE_TYPE.UCHAR,  "wmr918WindBatteryStatus"),
      (VALUE_TYPE.UCHAR,  "wmr918RainBatteryStatus"),
      (VALUE_TYPE.UCHAR,  "wmr918OutTempBatteryStatus"),
      (VALUE_TYPE.UCHAR,  "wmr918InTempBatteryStatus"),
      (VALUE_TYPE.UCHAR,  "wmr918poolTempBatteryStatus"),
      (VALUE_TYPE.UCHAR,  "wmr918extra1BatteryStatus"),
      (VALUE_TYPE.UCHAR,  "wmr918extra2BatteryStatus"),
      (VALUE_TYPE.UCHAR,  "wmr918extra3BatteryStatus")
      
  )
  
  val START_FRAME = Array(0x88, 0xf3, 0xa2, 0xc6, 0xda, 0xda, 0xcf, 0xe7).map(_.toByte)

}