From f4115fa6177a64eab1a5a2dd9e56e3e8efdbb404 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Wed, 30 Sep 2020 18:47:19 +0200 Subject: [PATCH] Amazfit Bip S: Also send wind and humidity Does not work with most weather sources, but it is better to send something to remove garbled characters --- .../service/devices/huami/HuamiSupport.java | 74 +++++++++++++------ .../huami/amazfitbips/AmazfitBipSSupport.java | 2 +- 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index 356c5c25c..91f29b57c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -252,7 +252,7 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { return 0x00; } - public boolean supportsSunriseSunset() { + public boolean supportsSunriseSunsetWindHumidity() { return false; } @@ -2135,33 +2135,59 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport { LOG.error("Error sending current forecast location", ex); } - if (supportsSunriseSunset() && GBApplication.getPrefs().getBoolean("send_sunrise_sunset", false)) { - float[] longlat = GBApplication.getGBPrefs().getLongLat(getContext()); - float longitude = longlat[0]; - float latitude = longlat[1]; - if (longitude != 0 && latitude != 0) { - final GregorianCalendar dateTimeToday = new GregorianCalendar(); + if (supportsSunriseSunsetWindHumidity()) { + try { + TransactionBuilder builder; + builder = performInitialized("Sending wind/humidity"); - GregorianCalendar[] sunriseTransitSet = SPA.calculateSunriseTransitSet(dateTimeToday, latitude, longitude, DeltaT.estimate(dateTimeToday)); + String windString = weatherSpec.windSpeed + "km/h"; + String humidityString = weatherSpec.currentHumidity + "%"; - try { - TransactionBuilder builder; - builder = performInitialized("Sending sunrise/sunset"); + int length = 8 + windString.getBytes().length + humidityString.getBytes().length; - ByteBuffer buf = ByteBuffer.allocate(10); - buf.order(ByteOrder.LITTLE_ENDIAN); - buf.put((byte) 16); - buf.putInt(weatherSpec.timestamp); - buf.put((byte) (tz_offset_hours * 4)); - buf.put((byte) sunriseTransitSet[0].get(GregorianCalendar.HOUR_OF_DAY)); - buf.put((byte) sunriseTransitSet[0].get(GregorianCalendar.MINUTE)); - buf.put((byte) sunriseTransitSet[2].get(GregorianCalendar.HOUR_OF_DAY)); - buf.put((byte) sunriseTransitSet[2].get(GregorianCalendar.MINUTE)); + ByteBuffer buf = ByteBuffer.allocate(length); + buf.order(ByteOrder.LITTLE_ENDIAN); + buf.put((byte) 64); + buf.putInt(weatherSpec.timestamp); + buf.put((byte) (tz_offset_hours * 4)); + buf.put(windString.getBytes()); + buf.put((byte) 0); + buf.put(humidityString.getBytes()); + buf.put((byte) 0); + writeToChunked(builder, 1, buf.array()); + builder.queue(getQueue()); + } catch (Exception ex) { + LOG.error("Error sending wind/humidity", ex); + } - writeToChunked(builder, 1, buf.array()); - builder.queue(getQueue()); - } catch (Exception ex) { - LOG.error("Error sending sunset/sunrise", ex); + if (GBApplication.getPrefs().getBoolean("send_sunrise_sunset", false)) { + float[] longlat = GBApplication.getGBPrefs().getLongLat(getContext()); + float longitude = longlat[0]; + float latitude = longlat[1]; + if (longitude != 0 && latitude != 0) { + final GregorianCalendar dateTimeToday = new GregorianCalendar(); + + GregorianCalendar[] sunriseTransitSet = SPA.calculateSunriseTransitSet(dateTimeToday, latitude, longitude, DeltaT.estimate(dateTimeToday)); + + try { + TransactionBuilder builder; + builder = performInitialized("Sending sunrise/sunset"); + + ByteBuffer buf = ByteBuffer.allocate(10); + buf.order(ByteOrder.LITTLE_ENDIAN); + buf.put((byte) 16); + buf.putInt(weatherSpec.timestamp); + buf.put((byte) (tz_offset_hours * 4)); + buf.put((byte) sunriseTransitSet[0].get(GregorianCalendar.HOUR_OF_DAY)); + buf.put((byte) sunriseTransitSet[0].get(GregorianCalendar.MINUTE)); + buf.put((byte) sunriseTransitSet[2].get(GregorianCalendar.HOUR_OF_DAY)); + buf.put((byte) sunriseTransitSet[2].get(GregorianCalendar.MINUTE)); + + writeToChunked(builder, 1, buf.array()); + builder.queue(getQueue()); + } catch (Exception ex) { + LOG.error("Error sending sunset/sunrise", ex); + } } } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java index b38385aff..159f9f883 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbips/AmazfitBipSSupport.java @@ -65,7 +65,7 @@ public class AmazfitBipSSupport extends AmazfitBipSupport { } @Override - public boolean supportsSunriseSunset() { + public boolean supportsSunriseSunsetWindHumidity() { Version version = new Version(gbDevice.getFirmwareVersion()); return (!isDTH(version) && (version.compareTo(new Version("2.1.1.50")) >= 0) || (version.compareTo(new Version("4.1.5.55")) >= 0)); }