Fix APRS meteo temp: t-field is whole degrees Fahrenheit (was dividing by 10); round to whole Celsius
This commit is contained in:
@@ -93,7 +93,7 @@ class AprsMeteo(
|
||||
sawPacket = true
|
||||
if (BuildConfig.DEBUG) Log.d(tag, "pkt: " + line.substringBefore('>'))
|
||||
parse(line)?.let { wx ->
|
||||
Log.d(tag, "wx: $wx")
|
||||
Log.d(tag, "wx: $wx RAW=${line.length} $line")
|
||||
main.post { onWeather(wx) }
|
||||
}
|
||||
}
|
||||
@@ -122,26 +122,19 @@ class AprsMeteo(
|
||||
val temp = parseTemp(body) ?: return null
|
||||
// В APRS метео-часть температура в градусах Фаренгейта
|
||||
val c = (temp - 32.0) * 5.0 / 9.0
|
||||
val t = if (c == c.toInt().toDouble()) c.toInt().toString()
|
||||
else (Math.round(c * 10.0) / 10.0).toString()
|
||||
return line.substringBefore('>') + " Температура " + t + "C"
|
||||
val t = Math.round(c).toString()
|
||||
return line.substringBefore('>') + " Температура: " + t + " °C"
|
||||
}
|
||||
|
||||
/** Температура из метео-части после символа '_': t062=62°F, t06=6°F, t-08=-8°F, T083=83°F.
|
||||
* В APRS метео-формате температура кодируется в градусах Фаренгейта. */
|
||||
/** Температура из метео-части после символа '_': t057=57°F, t06=6°F, t-08=-8°F.
|
||||
* В APRS метео-формате температура — целые градусы Фаренгейта. */
|
||||
private fun parseTemp(body: String): Double? {
|
||||
val u = body.indexOf('_')
|
||||
if (u < 0) return null
|
||||
val meta = body.substring(u + 1).substringBefore(' ') // до комментария
|
||||
val m = Regex("[tT]([+-]?)(\\d{2,3})").find(meta) ?: return null
|
||||
val sign = if (m.groupValues[1] == "-") -1 else 1
|
||||
val d = m.groupValues[2]
|
||||
val v = if (d.length == 3) {
|
||||
d.substring(0, 2).toInt() + d.substring(2).toInt() / 10.0
|
||||
} else {
|
||||
d.toInt().toDouble()
|
||||
}
|
||||
return sign * v
|
||||
return sign * m.groupValues[2].toInt().toDouble()
|
||||
}
|
||||
|
||||
/** APRS-IS passcode по позывному (алгоритм aprsc). */
|
||||
|
||||
Reference in New Issue
Block a user