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