1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-12-01 06:22:55 +01:00

Add moon phase support

This commit is contained in:
Martin.JM 2024-02-18 12:49:43 +01:00 committed by José Rebelo
parent 242f3c6dbc
commit b231104a88
2 changed files with 88 additions and 5 deletions

View File

@ -262,6 +262,86 @@ public class Weather {
return 0;
}
public enum MoonPhase {
UNKNOWN, // Good to have probably
NEW_MOON,
WAXING_CRESCENT,
FIRST_QUARTER,
WAXING_GIBBOUS,
FULL_MOON,
WANING_GIBBOUS,
THIRD_QUARTER,
WANING_CRESCENT
}
public static MoonPhase degreesToMoonPhase(int degrees) {
final int leeway = 6; // Give some leeway for the new moon, first quarter, full moon, and third quarter
if (degrees < 0 || degrees > 360)
return MoonPhase.UNKNOWN;
else if (degrees >= 360 - leeway || degrees <= leeway)
return MoonPhase.NEW_MOON;
else if (degrees < 90)
return MoonPhase.WAXING_CRESCENT;
else if (degrees <= 90 + leeway)
return MoonPhase.FIRST_QUARTER;
else if (degrees < 180 - leeway)
return MoonPhase.WAXING_GIBBOUS;
else if (degrees <= 180 + leeway)
return MoonPhase.FULL_MOON;
else if (degrees < 270 - leeway)
return MoonPhase.WANING_GIBBOUS;
else if (degrees <= 270 + leeway)
return MoonPhase.THIRD_QUARTER;
else
return MoonPhase.WANING_CRESCENT;
}
private static byte moonPhaseToByte (MoonPhase moonPhase) {
switch (moonPhase) {
case NEW_MOON:
return 1;
case WAXING_CRESCENT:
return 2;
case FIRST_QUARTER:
return 3;
case WAXING_GIBBOUS:
return 4;
case FULL_MOON:
return 5;
case WANING_GIBBOUS:
return 6;
case THIRD_QUARTER:
return 7;
case WANING_CRESCENT:
return 8;
default:
return 0;
}
}
private static MoonPhase byteToMoonPhase(byte moonPhase) {
switch (moonPhase) {
case 1:
return MoonPhase.NEW_MOON;
case 2:
return MoonPhase.WAXING_CRESCENT;
case 3:
return MoonPhase.FIRST_QUARTER;
case 4:
return MoonPhase.WAXING_GIBBOUS;
case 5:
return MoonPhase.FULL_MOON;
case 6:
return MoonPhase.WANING_GIBBOUS;
case 7:
return MoonPhase.THIRD_QUARTER;
case 8:
return MoonPhase.WANING_CRESCENT;
default:
return MoonPhase.UNKNOWN;
}
}
public static class CurrentWeatherRequest extends HuaweiPacket {
public static final byte id = 0x01;
@ -474,7 +554,7 @@ public class Weather {
public int sunsetTime;
public int moonRiseTime;
public int moonSetTime;
public byte moonPhase; // TODO: probably enum
public MoonPhase moonPhase;
@Override
public String toString() {
@ -532,7 +612,7 @@ public class Weather {
.put(0x17, dayData.sunsetTime)
.put(0x1a, dayData.moonRiseTime)
.put(0x1b, dayData.moonSetTime)
.put(0x1e, dayData.moonPhase)
.put(0x1e, moonPhaseToByte(dayData.moonPhase))
);
}
this.tlv.put(0x90, dayDataTlv);
@ -575,7 +655,7 @@ public class Weather {
dayData.sunsetTime = dayTlv.getInteger(0x17);
dayData.moonRiseTime = dayTlv.getInteger(0x1a);
dayData.moonSetTime = dayTlv.getInteger(0x1b);
dayData.moonPhase = dayTlv.getByte(0x1e);
dayData.moonPhase = byteToMoonPhase(dayTlv.getByte(0x1e));
dayDataList.add(dayData);
}
}

View File

@ -16,9 +16,12 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket;
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Weather;
import nodomain.freeyourgadget.gadgetbridge.model.WeatherSpec;
@ -62,7 +65,7 @@ public class SendWeatherForecastRequest extends Request {
today.sunsetTime = weatherSpec.sunSet;
today.moonRiseTime = weatherSpec.moonRise;
today.moonSetTime = weatherSpec.moonSet;
today.moonPhase = (byte) 4; // weatherSpec.moonPhase; // TODO: check
today.moonPhase = Weather.degreesToMoonPhase(weatherSpec.moonPhase);
dayDataArrayList.add(today);
for (int i = 0; i < dayCount - 1; i++) {
@ -76,7 +79,7 @@ public class SendWeatherForecastRequest extends Request {
dayData.sunsetTime = daily.sunSet;
dayData.moonRiseTime = daily.moonRise;
dayData.moonSetTime = daily.moonSet;
dayData.moonPhase = (byte) 4; // daily.moonPhase; // TODO: check
dayData.moonPhase = Weather.degreesToMoonPhase(daily.moonPhase);
dayDataArrayList.add(dayData);
}
try {