From 4102140fa0bd0df39199655d02150ef0d7ed5608 Mon Sep 17 00:00:00 2001 From: ua1zbe Date: Tue, 18 Aug 2026 08:46:48 +0300 Subject: [PATCH] Fix APRS meteo temp: t-field is whole degrees Fahrenheit (was dividing by 10); round to whole Celsius --- .../ru/ua1zbe/svxremote/aprs/AprsMeteo.kt | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/ru/ua1zbe/svxremote/aprs/AprsMeteo.kt b/app/src/main/java/ru/ua1zbe/svxremote/aprs/AprsMeteo.kt index 66d963e..c1e3370 100644 --- a/app/src/main/java/ru/ua1zbe/svxremote/aprs/AprsMeteo.kt +++ b/app/src/main/java/ru/ua1zbe/svxremote/aprs/AprsMeteo.kt @@ -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). */