diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java index 048cee6f7..2ec584fee 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/services/XiaomiWeatherService.java @@ -111,13 +111,13 @@ public class XiaomiWeatherService extends AbstractXiaomiService { .setHumidity(weatherSpec.currentHumidity) .setSymbol("%") ) - .setUnk5(XiaomiProto.WeatherCurrentUnk5.newBuilder() - .setUnk1("") - .setUnk2(0) + .setWind(XiaomiProto.WeatherCurrentWind.newBuilder() + .setWind(weatherSpec.windSpeedAsBeaufort()) + .setSymbol("") ) - .setUnk6(XiaomiProto.WeatherCurrentUnk6.newBuilder() + .setUv(XiaomiProto.WeatherCurrentUVIndex.newBuilder() .setUnk1("") - .setUnk2(0) + .setIndex(Math.round(weatherSpec.uvIndex)) // This is sent as an sint but seems to be displayed with a decimal point ) .setAQI(XiaomiProto.WeatherCurrentAQI.newBuilder() .setAQIText("Unknown") // some string like "Moderate" @@ -139,10 +139,12 @@ public class XiaomiWeatherService extends AbstractXiaomiService { XiaomiProto.WeatherDailyList.Builder dailyListBuilder = XiaomiProto.WeatherDailyList.newBuilder(); int daysToSend = Math.min(7, weatherSpec.forecasts.size()); for (int i = 0; i < daysToSend; i++) { + WeatherSpec.AirQuality airQuality = weatherSpec.forecasts.get(i).airQuality; + dailyListBuilder.addForecastDay(XiaomiProto.WeatherDailyForecastDay.newBuilder() - .setUnk1(XiaomiProto.DailyUnk1.newBuilder() - .setUnk1("") - .setUnk2(0) + .setAQI(XiaomiProto.DailyAQI.newBuilder() + .setAQIText("") + .setAQI(airQuality != null && airQuality.aqi >= 0 ? airQuality.aqi : 0) ) .setUnk2(XiaomiProto.DailyUnk2.newBuilder() .setUnk1(HuamiWeatherConditions.mapToAmazfitBipWeatherCode(weatherSpec.forecasts.get(i).conditionCode)) // TODO: verify diff --git a/app/src/main/proto/xiaomi.proto b/app/src/main/proto/xiaomi.proto index 95465715e..afd434a48 100644 --- a/app/src/main/proto/xiaomi.proto +++ b/app/src/main/proto/xiaomi.proto @@ -752,8 +752,8 @@ message WeatherCurrent { optional uint32 weatherCondition = 2; optional WeatherCurrentTemperature temperature = 3; optional WeatherCurrentHumidity humidity= 4; - optional WeatherCurrentUnk5 unk5 = 5; - optional WeatherCurrentUnk6 unk6 = 6; + optional WeatherCurrentWind wind = 5; + optional WeatherCurrentUVIndex uv = 6; optional WeatherCurrentAQI AQI = 7; optional WeatherCurrentWarning warning = 8; // Seems to be an array? optional float pressure = 9; @@ -776,14 +776,14 @@ message WeatherCurrentHumidity { optional sint32 humidity = 2; } -message WeatherCurrentUnk5 { - optional string unk1 = 1; - optional uint32 unk2 = 2; +message WeatherCurrentWind { + optional string symbol = 1; + optional sint32 wind = 2; } -message WeatherCurrentUnk6 { +message WeatherCurrentUVIndex { optional string unk1 = 1; - optional uint32 unk2 = 2; + optional sint32 index = 2; } message WeatherCurrentAQI { @@ -817,21 +817,21 @@ message WeatherDailyList { } message WeatherDailyForecastDay { - optional DailyUnk1 unk1 = 1; + optional DailyAQI AQI = 1; optional DailyUnk2 unk2 = 2; optional DailyHighLowTemp highLowTemp = 3; optional string temperatureSymbol = 4; optional DailySunriseSunset sunriseSunset = 5; } -message DailyUnk1 { - optional string unk1 = 1; - optional uint32 unk2 = 2; +message DailyAQI { + optional string AQIText = 1; + optional sint32 AQI = 2; } message DailyUnk2 { - optional uint32 unk1 = 1; - optional uint32 unk2 = 2; + optional sint32 unk1 = 1; + optional sint32 unk2 = 2; } message DailyHighLowTemp {