1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-29 08:20:16 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/asteroidos/AsteroidOSWeather.java
José Rebelo 564cb1bfcc Introduce WeatherSpec v4
New fields for current weather:

- dewPoint
- pressure
- cloudCover
- visibility
- sunRise
- sunSet
- moonRise
- moonSet
- moonPhase
- airQuality
- latitude
- longitude
- feelsLikeTemp
- isCurrentLocation

New fields for daily forecast:

Deprecate the old "Forecast" class, which was not versioned, but keep it for backwards compatibility with old apps. Old WeatherSpec forecasts are de-serialized into the new Daily class. New fields:

- windSpeed
- windDirection
- uvIndex
- precipProbability
- sunRise
- sunSet
- moonRise
- moonSet
- moonPhase
- airQuality

Add hourly values:
- timestamp
- temp
- conditionCode
- humidity
- windSpeed
- windDirection
- uvIndex
- precipProbability

Air Quality:
- aqi (plume)
- co
- no2
- o3
- pm10
- pm25
- so2
- coAqi
- no2Aqi
- o3Aqi
- pm10Aqi
- pm25Aqi
- so2Aqi
2023-08-27 15:13:57 +00:00

121 lines
3.3 KiB
Java

package nodomain.freeyourgadget.gadgetbridge.devices.asteroidos;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
/**
* An adapter class for weather
*/
public class AsteroidOSWeather {
/**
* Provides a day's worth of weather
*/
public class Day {
/**
* The minimum temp of the day
*/
public int minTemp;
/**
* The maximum temp of the day
*/
public int maxTemp;
/**
* The current OWM weather condition code
*/
public int condition;
/**
* Creates a Day from the forecast given
* @param forecast
*/
public Day(WeatherSpec.Daily forecast) {
minTemp = forecast.minTemp;
maxTemp = forecast.maxTemp;
condition = forecast.conditionCode;
}
/**
* Creates a Day from the WeatherSpec given
* @param spec
*/
public Day(WeatherSpec spec) {
minTemp = spec.todayMinTemp;
maxTemp = spec.todayMaxTemp;
condition = spec.currentConditionCode;
}
}
/**
* The days of the weather
*/
public Day[] days = new Day[5];
/**
* The city name of the weather
*/
public String cityName = "";
/**
* Creates an AsteroidOSWeather from the WeatherSpec given
* @param spec
*/
public AsteroidOSWeather(WeatherSpec spec) {
cityName = spec.location;
days[0] = new Day(spec);
for (int i = 1; i < 5 && i < spec.forecasts.size(); i++) {
days[i] = new Day(spec.forecasts.get(i));
}
}
/**
* Returns a byte array of the city name
* @return a byte array of the city name
*/
public byte[] getCityName() {
return cityName.getBytes(StandardCharsets.UTF_8);
}
/**
* Parses the days' weather conditions and returns them in a format AsteroidOS can handle
* @return a byte array to be sent to the device
*/
public byte[] getWeatherConditions() {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
for (Day day : days) {
stream.write((byte) (day.condition >> 8));
stream.write((byte) (day.condition));
}
return stream.toByteArray();
}
/**
* Parses the days' min temps and returns them in a format AsteroidOS can handle
* @return a byte array to be sent to the device
*/
public byte[] getMinTemps() {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
for (Day day : days) {
stream.write((byte) (day.minTemp >> 8));
stream.write((byte) (day.minTemp));
}
return stream.toByteArray();
}
/**
* Parses the days' max temps and returns them in a format AsteroidOS can handle
* @return a byte array to be sent to the device
*/
public byte[] getMaxTemps() {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
for (Day day : days) {
stream.write((byte) (day.maxTemp >> 8));
stream.write((byte) (day.maxTemp));
}
return stream.toByteArray();
}
}