diff --git a/README.md b/README.md index 9811dbd8..0083f082 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Install [openScale-dev-build.apk](https://github.com/oliexdev/openScale/releases - Import or export your data from/into a CSV file - Estimates body metrics (body fat, body water and lean body mass) based on scientic publications - Support for multiple users -- Partial or full support for custom made Bluetooth scale, Xiaomi Mi scale v1/v2, Sanitas SBF70, Medisana BS444/BS440, Digoo DG-S038H, Yunmai Mini, Excelvan CF369BLE/CF366BLE, Yunmai SE, MGB, Exingtech Y1, Beurer BF700/BF710/BF800, Silvercrest SBF75, Runtastic Libra, Hesley (Yunchen), iHealth HS3, Easy Home 64050, Accuway, Trisa Body Analyze 4.0, Inlife (see [openScale wiki](https://github.com/oliexdev/openScale/wiki/Supported-scales-in-openScale) for details) +- Partial or full support for custom made Bluetooth scale, Xiaomi Mi scale v1/v2, Sanitas SBF70, Medisana BS430/BS444/BS440, Digoo DG-S038H, Yunmai Mini, Excelvan CF369BLE/CF366BLE, Yunmai SE, MGB, Exingtech Y1, Beurer BF700/BF710/BF800, Silvercrest SBF75, Runtastic Libra, Hesley (Yunchen), iHealth HS3, Easy Home 64050, Accuway, Trisa Body Analyze 4.0, Inlife (see [openScale wiki](https://github.com/oliexdev/openScale/wiki/Supported-scales-in-openScale) for details) - Partially or full translated into Brazilian Portuguese, Catalan, Chinese (traditional), Croatian, Czech, Danish, Dutch, English, French, Galician, German, Greek, Hebrew, Italian, Japanese, Norwegian Bokmål, Polish, Romanian, Russian, Slovak, Slovenian, Spanish, Swedish, Turkish, Vietnamese - No advertising and for free - All data belongs to you (no cloud service) diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java index 506da9a4..b64d696d 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothFactory.java @@ -59,8 +59,14 @@ public class BluetoothFactory { } // BS444 || BS440 if (deviceName.startsWith("013197") || deviceName.startsWith("0202B6")) { - return new BluetoothMedisanaBS44x(context); + return new BluetoothMedisanaBS44x(context, true); } + + //BS430 + if (deviceName.startsWith("0203B")) { + return new BluetoothMedisanaBS44x(context, false); + } + if (deviceName.startsWith("SWAN") || name.equals("icomon".toLowerCase(Locale.US))) { return new BluetoothMGB(context); } diff --git a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java index bbb30f95..da2d43df 100644 --- a/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java +++ b/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMedisanaBS44x.java @@ -34,12 +34,16 @@ public class BluetoothMedisanaBS44x extends BluetoothCommunication { private ScaleMeasurement btScaleMeasurement; + private boolean applyOffset; + // Scale time is in seconds since 2010-01-01 private static final long SCALE_UNIX_TIMESTAMP_OFFSET = 1262304000; - public BluetoothMedisanaBS44x(Context context) { + + public BluetoothMedisanaBS44x(Context context, boolean applyOffset) { super(context); btScaleMeasurement = new ScaleMeasurement(); + this.applyOffset = applyOffset; } @Override @@ -79,7 +83,9 @@ public class BluetoothMedisanaBS44x extends BluetoothCommunication { case 3: // send magic number to receive weight data long timestamp = new Date().getTime() / 1000; - timestamp -= SCALE_UNIX_TIMESTAMP_OFFSET; + if(applyOffset){ + timestamp -= SCALE_UNIX_TIMESTAMP_OFFSET; + } byte[] date = Converters.toInt32Le(timestamp); byte[] magicBytes = new byte[] {(byte)0x02, date[0], date[1], date[2], date[3]}; @@ -117,7 +123,9 @@ public class BluetoothMedisanaBS44x extends BluetoothCommunication { private void parseWeightData(byte[] weightData) { float weight = Converters.fromUnsignedInt16Le(weightData, 1) / 100.0f; long timestamp = Converters.fromUnsignedInt32Le(weightData, 5); - timestamp += SCALE_UNIX_TIMESTAMP_OFFSET; + if (applyOffset) { + timestamp += SCALE_UNIX_TIMESTAMP_OFFSET; + } btScaleMeasurement.setDateTime(new Date(timestamp * 1000)); btScaleMeasurement.setWeight(weight);