Open-source weight and body metrics tracker, with support for Bluetooth scales

Related tags

Bluetooth openScale
Overview

  openScale logo  openScale Build Status Translation status

Open-source weight and body metrics tracker, with support for Bluetooth scales

Get it on F-Droid Get it on Google Play

Install openScale-dev-build.apk to get the latest development build generated by Travis CI. Also be aware that this version may contain bugs and you don't get any automatic updates.

Summary 📋

Monitor and track your weight, BMI, body fat, body water, muscle and other body metrics in an open source app that:

  • has an easy to use user interface with graphs,
  • supports various Bluetooth scales,
  • doesn't require you to create an account,
  • can be configured to only show the metrics you care about, and
  • respects your privacy and lets you decide what to do with your data.

Supported Bluetooth scales 🚀

openScale has built-in support for a number of Bluetooth (BLE or "smart") scales from many manufacturers, e.g. Beurer, Sanitas, Yunmai, Xiaomi, etc. (see model list below). Together with our users we constantly improve and extend the set of supported scales and in many cases pick up where the original app falls short.

  • Custom made Bluetooth scale
  • Beurer BF700, BF710, BF800, BF105, BF600, BF850 and BF950
  • Digoo DG-S038H
  • Excelvan CF369BLE
  • Exingtech Y1
  • Hesley (Yunchen)
  • MGB
  • Medisana BS444, BS440
  • Runtastic Libra
  • Sanitas SBF70
  • Silvercrest SBF75, SBF77
  • Vigorun
  • Xiaomi Mi scale v1 and v2
  • Yunmai Mini and SE
  • iHealth HS3
  • Easy Home 64050
  • and many more

Please see openScale wikipage for the full list and the level of support for each scale.

For scales without Bluetooth, or Bluetooth scales not (yet) supported by openScale, measurements can be manually entered in a quick and easy way.

Supported metrics 📈

Weight, BMI (body mass index), body water, muscle, LBM (lean body mass), body fat, bone mass, waist circumference, waist-to-height ratio, hip circumference, waist-hip ratio, visceral fat, chest circumference, thigh circumference, biceps circumference, neck circumference, body fat caliper, BMR (basal metabolic rate), TDEE (Total Daily Energy Expenditure) and Calories. Each entry can also have an optional comment.

Note: don't worry if you think the list is too long: metrics you don't use can be disabled and hidden.

Other features

  • Resizable widget to show the latest measurement on the home screen
  • Configure your weight unit: kg, lb or st
  • Set a goal to help keep your diet
  • Displays all your data on a chart and in a table to track your progress
  • Evaluates measurements and gives a quick visual feedback to show you if you're within or outside the recommended range given your age, sex, height etc.
  • Import or export your data from/into a CSV (comma separated value) file
  • Supports body fat, body water and lean body mass estimations based on scientific publications. Useful if your scale doesn't support those measurements.
  • Support for multiple users
  • Support for assisted weighing (e.g. for babies or pets)
  • Support for people with amputations
  • Partially or fully translated into more than 27 languages, see weblate project site for the full list
  • Optional dark theme selectable

Privacy 🔒

This app has no ads and requests no unnecessary permissions. The location permission is only needed to find a Bluetooth scale. Once found the permission can be revoked (or never granted if Bluetooth isn't used).

openScale doesn't send any data to a cloud and not having permission to access the internet is a strong guarantee of that.

If you want to synchronise your weight to GoogleFit, wger and/or MQTT 3.1, you can install openScale sync from GooglePlay.

Questions & Issues 🤔

Before asking, please first read the FAQ, the openScale wiki and try to find an answer in existing issues. If you still haven't found an answer, please create a new issue on GitHub.

Donations ❤️

If you would like to support this project's further development, the creator of this project or the continuous maintenance of this project, feel free to donate. Your donation is highly appreciated. Thank you!

PayPal Donation

Contributing 👍

If you found a bug, have an idea how to improve the openScale app or have a question, please create new issue or comment existing one. If you would like to contribute code, fork the repository and send a pull request.

If you want to help to support your Bluetooth scale please see here for further information.

If you want to help to translate the app in your language please see here

Screenshots 👀

image missing image missing image missing image missing
image missing image missing image missing image missing

License 📄

openScale is licensed under the GPL v3, see LICENSE file for full notice.

Copyright (C) 2014  olie.xdev 
   
    

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see 
    

   
Comments
  • Add support for 1byone scale

    Add support for 1byone scale

    I'm writing in hopes that you can add 1byone BT scale (https://www.amazon.com/1byone-Bluetooth-Wireless-Bathroom-Visceral/dp/B01FHELB56/) to your list of supported devices. I received this as a gift from my wife but it is tied to a proprietary app that leaves much to be desired.

    While I am much more of a hacker than a programmer, I am pretty sure that this is possible as someone has written some software that pulls the information from the scale:

    https://github.com/ec1oud/qt-ble-weightscale

    Further, I was able to use BT Snoop to pull the log where the scale connects and passes the information on to the phone. You can see the same type of information listed at the above repo here:

    https://github.com/ec1oud/qt-ble-weightscale/blob/master/doc/notes.txt

    Here's what it looks like:

    Frame 13693: 32 bytes on wire (256 bits), 32 bytes captured (256 bits)
    Bluetooth
    Bluetooth HCI H4
    Bluetooth HCI Event - LE Meta
        Event Code: LE Meta (0x3e)
        Parameter Total Length: 29
        Sub Event: LE Advertising Report (0x02)
        Num Reports: 1
        Event Type: Connectable Undirected Advertising (0x00)
        Peer Address Type: Public Device Address (0x00)
        BD_ADDR: TexasIns_2a:8d:a6 (f0:c7:7f:2a:8d:a6)
        Data Length: 17
        Advertising Data
            Flags
                Length: 2
                Type: Flags (0x01)
                000. .... = Reserved: 0x0
                ...0 .... = Simultaneous LE and BR/EDR to Same Device Capable (Host): false (0x0)
                .... 0... = Simultaneous LE and BR/EDR to Same Device Capable (Controller): false (0x0)
                .... .1.. = BR/EDR Not Supported: true (0x1)
                .... ..0. = LE General Discoverable Mode: false (0x0)
                .... ...1 = LE Limited Discoverable Mode: true (0x1)
            16-bit Service Class UUIDs (incomplete)
                Length: 3
                Type: 16-bit Service Class UUIDs (incomplete) (0x02)
                UUID 16: Unknown (0xfff0)
            Manufacturer Specific
                Length: 9
                Type: Manufacturer Specific (0xff)
                Company ID: Ericsson Technology Licensing (0x0000)
                Data: f0c77f2a8da6
        RSSI (dB): -60
    
    Frame 13694: 33 bytes on wire (264 bits), 33 bytes captured (264 bits)
    Bluetooth
    Bluetooth HCI H4
    Bluetooth HCI Event - LE Meta
        Event Code: LE Meta (0x3e)
        Parameter Total Length: 30
        Sub Event: LE Advertising Report (0x02)
        Num Reports: 1
        Event Type: Scan Response (0x04)
        Peer Address Type: Public Device Address (0x00)
        BD_ADDR: TexasIns_2a:8d:a6 (f0:c7:7f:2a:8d:a6)
        Data Length: 18
        Advertising Data
            Device Name: Electronic Scale
                Length: 17
                Type: Device Name (0x09)
                Device Name: Electronic Scale
        RSSI (dB): -60
    
    Frame 13721: 14 bytes on wire (112 bits), 14 bytes captured (112 bits)
    Bluetooth
    Bluetooth HCI H4
    Bluetooth HCI ACL Packet
    Bluetooth L2CAP Protocol
    Bluetooth Attribute Protocol
        Opcode: Write Request (0x12)
            0... .... = Authentication Signature: False
            .0.. .... = Command: False
            ..01 0010 = Method: Write Request (0x12)
        Handle: 0x0015 (Unknown: Unknown: Client Characteristic Configuration)
            [Service UUID: Unknown (0xfff0)]
            [Characteristic UUID: Unknown (0xfff4)]
            [UUID: Client Characteristic Configuration (0x2902)]
        Characteristic Configuration Client: 0x0001, Notification
            0000 0000 0000 00.. = Reseved: 0x0000
            .... .... .... ..0. = Indication: False
            .... .... .... ...1 = Notification: True
        [Response in Frame: 13722]
    
    Frame 13722: 10 bytes on wire (80 bits), 10 bytes captured (80 bits)
    Bluetooth
    Bluetooth HCI H4
    Bluetooth HCI ACL Packet
    Bluetooth L2CAP Protocol
    Bluetooth Attribute Protocol
        Opcode: Write Response (0x13)
            0... .... = Authentication Signature: False
            .0.. .... = Command: False
            ..01 0011 = Method: Write Response (0x13)
        [Handle: 0x0015 (Unknown: Unknown: Client Characteristic Configuration)]
            [Service UUID: Unknown (0xfff0)]
            [Characteristic UUID: Unknown (0xfff4)]
            [UUID: Client Characteristic Configuration (0x2902)]
        [Request in Frame: 13721]
    
    Frame 1965: 28 bytes on wire (224 bits), 28 bytes captured (224 bits)
    Bluetooth
        [Source: TexasIns_2a:8d:a6 (f0:c7:7f:2a:8d:a6)]
        [Destination: AsustekC_7e:22:04 (50:46:5d:7e:22:04)]
    Bluetooth HCI H4
    Bluetooth HCI ACL Packet
    Bluetooth L2CAP Protocol
    Bluetooth Attribute Protocol
        Opcode: Handle Value Notification (0x1b)
        Handle: 0x0014 (Unknown: Unknown)
        Value: cf01adaa0404015b1e026c1301cd0599
    
    cf01adaa 0414 015e 1c02 7013 01ca059c
    104.4 kg, fat 35%, water 45.8%, muscle 62.4kg, bone 2.8kg
    
    cf01adaa 0406 015b 1e 026d 13 01cd 0599
    103.0 kg, fat 34.7%, water 46.1%, muscle 62.1kg, bone 3.0kg, BMR 1433 kcal
    
    0x0406: 1030  kg
    0x015b: 347 fat
    0x1e: 30 bone
    0x026d: 621 muscle
    0x13: 19 visceral fat
    0x01cd: 461  water
    0x0599: 1433  BMR
    

    I am certainly willing to do testing on this if someone can decrypt the handshake and add the functionality to openScale.

    Let me know what you think!

    Thanks

    scale support 
    opened by dinki 157
  • Support for Beurer BF 950

    Support for Beurer BF 950

    Hi! Thanks for developing this great app! I recently bought a BF 950 and would like to help getting it supported by OpenScale.

    btsnoop_hci_2019-10-05_01.log date: 2019-10-05 time: 09:21 sex: male weight: 72.5 kg body fat: 13.2% water: 61.7% muscles: 44.6% bones: 3.2 kg

    btsnoop_hci_2019-10-05_02.log date: 2019-10-05 time: 11:58 sex: male weight: 74.7 kg body fat: 13.0% water: 60.8% muscles: 44.1% bones: 3.3 kg

    btsnoop_hci_2019-10-03.log date: 2019-10-05 time: 12:10 sex: male weight: 75.8 kg body fat: 14.9% water: 60.3% muscles: 43.8% bones: 3.3 kg

    btsnoop_hci_2019-10-05_04.log date: 2019-10-05 time: 12:15 sex: male weight: 77.0 kg body fat: 14.9% water: 59.7% muscles: 43.5% bones: 3.3 kg

    Debug log: See comment below.

    For the first three logs I could not find the corresponding weight values in the data stream, neither in big endian nor little endian format. The last value 77.0 kg is a bit unfortunate: it is 03 02 or 02 03 in hex, there are plenty occurrences, but I think those have to do with the bluetooth protocol rather then the weight value.

    Please let me know if I can help by doing more measurements.

    scale support 
    opened by PiQuer 59
  • Connection to YunChen Smart Scale

    Connection to YunChen Smart Scale

    Dear Olie,

    I have recently purchased this Yunchen Brand smart scale. Can you add it as one of supported scales in your program.

    I have tried using some hcitool and GATTtool commands to get relevant handles and UUIDs for this scale.

    It is based on Texas Instrument chip.

    Output of GATTTool commands like Primary & char-desc-hnd are given below:

    Result of GATTtool log : command "primary"

    attrhandle:0x0001,endgrp handle:0x0007 uuid:00001800-0000-1000-8000-00805f9b34fb attrhandle:0x0008,endgrp handle:0x000a uuid:0000180a-0000-1000-8000-00805f9b34fb attrhandle:0x000b,endgrp handle:0x000e uuid:00010203-0405-0607-0809-0a0b0c0d1912 attrhandle:0x000f,endgrp handle:0x0013 uuid:0000ffaa-0000-1000-8000-00805f9b34fb attrhandle:0x0014,endgrp handle:0x001c uuid:0000fff0-0000-1000-8000-00805f9b34fb

    Result of GATTtool log : command "char-desc"

    handle:0x0001,uuid:00002800-0000-1000-8000-00805f9b34fb handle:0x0002,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x0003,uuid:00002a00-0000-1000-8000-00805f9b34fb handle:0x0004,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x0005,uuid:00002a01-0000-1000-8000-00805f9b34fb handle:0x0006,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x0007,uuid:00002a04-0000-1000-8000-00805f9b34fb handle:0x0008,uuid:00002800-0000-1000-8000-00805f9b34fb handle:0x0009,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x000a,uuid:00002a50-0000-1000-8000-00805f9b34fb handle:0x000b,uuid:00002800-0000-1000-8000-00805f9b34fb handle:0x000c,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x000d,uuid:00010203-0405-0607-0809-0a0b0c0d2b12 handle:0x000e,uuid:00002901-0000-1000-8000-00805f9b34fb handle:0x000f,uuid:00002800-0000-1000-8000-00805f9b34fb handle:0x0010,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x0011,uuid:0000ffab-0000-1000-8000-00805f9b34fb handle:0x0012,uuid:00002902-0000-1000-8000-00805f9b34fb handle:0x0013,uuid:00002901-0000-1000-8000-00805f9b34fb handle:0x0014,uuid:00002800-0000-1000-8000-00805f9b34fb handle:0x0015,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x0016,uuid:0000fff4-0000-1000-8000-00805f9b34fb handle:0x0017,uuid:00002902-0000-1000-8000-00805f9b34fb handle:0x0018,uuid:00002901-0000-1000-8000-00805f9b34fb handle:0x0019,uuid:00002803-0000-1000-8000-00805f9b34fb handle:0x001a,uuid:0000fff1-0000-1000-8000-00805f9b34fb handle:0x001b,uuid:00002902-0000-1000-8000-00805f9b34fb handle:0x001c,uuid:00002901-0000-1000-8000-00805f9b34fb

    The values received from each handle above through command "char-read-hnd" in above order are given under:

    0018 12 59756e4368656e0000000000000000000000 02 0000 02 140028000000e803 0a18 02 028a2466820100 12190d0c0b0a09080706050403020100 16 00 4f5441 aaff 14 0000000000000000000000000000000000000000 0000 436d64205257 f0ff 10 0000000000000000000000000000000000000000 0000 53707020524f 04 0000000000000000000000000000000000000000 0000 53707020574f

    I have browsed through files hosted at openScale/android_app/app/src/main/java/com/health/openscale/core/bluetooth/

    and found that four of the java files use these UUIDs.

    Like: BluetoothBeurerBF700_800 and BluetoothSanitasSbf70 use

    UUIDs of 00002A00, 01, 04 and 50.

    BluetoothDigooDGSO38H and BluetoothExcelvanCF369BLE use UUIDs of 0000FFF0, 1 and 4.

    I hope it helps.

    scale support 
    opened by pkscwc 56
  • Problems with Sanitas SBF70 since version 1.7.2

    Problems with Sanitas SBF70 since version 1.7.2

    After updating openScale on my Android 7.1.1 I can't receive data from my Sanitas SBF70 anymore. OpenScale informs me about a successful connection and then after a few seconds it tells me that it lost the connection. No data is received in this time. Maybe it is liked to the bluetooth optimizations mentioned in the release notes of 1.7.2. I also just updated to 1.7.3 but the problem persists.

    question 
    opened by leahoswald 47
  • Need Help: reverse engineering Beurer BF 700 bt protocol

    Need Help: reverse engineering Beurer BF 700 bt protocol

    Hello! I have a Beurer BF 700 and the bulky "HealthManager App" from Beurer for Android. I decoded the Android App in a few steps and got the source code. But I don't know what to look for.

    I found the fcc docs from beurer here: https://fccid.io/VGR-BF700.

    Publishing the app's source code would be an infringement; it is closed source. Please contact me privately for more info about the source code.

    Have a peek in the files here: image

    and here: image

    The BF700 device is generically handled as a BF800.

    scale support 
    opened by linuxlurak 39
  • Reverse engineering Yunmai mini scale

    Reverse engineering Yunmai mini scale

    I am trying to reverse engineer the yunmai mini scale.

    I already found out the weight values but I can't figure out the body fat percentage, muscle percentage and so on. Any help or idea is welcome.

    So far what I got:

    • No weight values are stored on the scale itself. You have to be connected to the yunmai app to receive any data
    • Weights are continuous send to UUID: Unknown (0xffe4) (if you stay on the scale)
    • Sent values are like 0d:1f:0b:01:59:c6:15:2f:26:95:03
      • byte 0-6: bytes are constant
      • byte 7: first nibble is constant, second nibble is changing
      • byte 8-9: contains the weight value (here 0x2695 = 9877 = 98,77 btw the value is rounded in the yunmai app as 98,8 kg)
      • byte 10: is changing
    • last measurement from the scale of the continuous sent send data looks like 0d:1f:14:02:00:59:c6:15:2f:23:d0:b6:32:26:95:00:a5:08:f2:37
      • byte 0-5: bytes are constant
      • byte 6: first nibble is constant, second nibble is changing
      • byte 7-8: bytes are changing
      • byte 9-12: bytes are constant
      • byte 13-14: contains the weight value again
      • byte 15: bytes are constant
      • byte 16-19: bytes are changing
    • after that the yunmai app send some values to the scale. In response they send some values back to the scale like the following 0d:1f:12:06:01:23:d0:b6:32:af:01:19:55:5a:8d:26:01:6f
    • I guess that the values displayed in the yunmai app are rounded values like as the weight value
    • Since so many bytes are constant and only few bytes are changing it could be possible that the information of the body measurements (like fat, muscle, water percentage etc.) are compressed or somehow encrypted. (for example a fat percentage of 22,9 % is somehow in the above values encoded)

    Here are my Bluetooth log files with the corresponding body measurements which we have to find (open it with wireshark):

    23.9.2017 07:36 btsnoop_hci_979.log

    • Weight 97,9 kg
    • Body fat 22,9 %
    • Muscle 51,7 %
    • Water 56,0 %
    • Protein 16,2 %
    • Bone mass 4,0 %

    23.9.2017 10:02 btsnoop_hci_988.log

    • Weight 98,8 kg
    • Body fat 22,9%
    • Muscle 51,7%
    • Water 56,0%
    • Protein 16,2%
    • Bone mass 3,9%

    22.9.2017 18:35 btsnoop_hci_1041.log

    • Weight 104,1 kg
    • Body fat 25,0 %
    • Muscle 50,3%
    • Water 54,5%
    • Protein 16,1%
    • Bone mass 3,8%

    Compared last continous messages of all three values

     0d:1f:14:02:00:59:c5:f7:d6:23:d0:b6:32:26:3b:00:dd:08:f2:f9  // 97,9 kg; water 56,0 %
     0d:1f:14:02:00:59:c6:15:2f:23:d0:b6:32:26:95:00:a5:08:f2:37  // 98,8 kg; water 56,0 %
     0d:1f:14:02:00:59:c5:3b:d8:23:d0:b6:32:28:ae:00:c2:09:c4:88  // 104,1 kg; water 54,5 %
    
    help wanted scale support 
    opened by oliexdev 39
  • Support for Soehnle Shape Sense Connect 200

    Support for Soehnle Shape Sense Connect 200

    Logs:

    shape_sense_connect_200-btsnoop_hci.log

    openScale_2019-08-07_08-37.txt

    I did three weight measurements: 136,5kg (0555 big endian) found in package no. 1393:

    Bluetooth Attribute Protocol Opcode: Handle Value Notification (0x1b) 0... .... = Authentication Signature: False .0.. .... = Command: False ..01 1011 = Method: Handle Value Notification (0x1b) Handle: 0x0043 (Unknown: Unknown) [Service UUID: 352e300028e940b8a3616db4cca4147c] [UUID: 352e300128e940b8a3616db4cca4147c] Value: 090107e001090a331c055501dc019d

    136,7kg (0557 big endian) not found - propably to similiar to the first measurement.

    138,1kg (0565 big endian) found in package no. 7287:

    Bluetooth Attribute Protocol Opcode: Handle Value Notification (0x1b) 0... .... = Authentication Signature: False .0.. .... = Command: False ..01 1011 = Method: Handle Value Notification (0x1b) Handle: 0x0043 (Unknown: Unknown) [Service UUID: 352e300028e940b8a3616db4cca4147c] [UUID: 352e300128e940b8a3616db4cca4147c] Value: 300100056500000000

    There was no body composition data shown in the app, allthough the scale shows muscle, fat and water percentages.

    I used DCODE to find timestamps in the values before and after the weight string. Some Hex 32bit formats show weird time stamps, like from the year 1907 or 2050, but I did not find the exact date (May 27th, 2019, 9:33 MESZ)

    If needed I will add more data. Just let me know.

    scale support 
    opened by G0nzzzz 36
  • Support Beurer BF 105

    Support Beurer BF 105

    Beurer BF 105 https://www.beurer.com/web/de/produkte/wellbeing/gewicht-und-diagnose/diagnosewaagen/bf-105.php Beurer HealthManager from Google Play / App Store

    To support a new scale it is necessary to gather some information.

    Step 1: Read the general reverse engineer process

    Step 2: Acquiring some Bluetooth traffic Attach 3 log files with the corresponding true values, read here for further information.

    user settings in the vendors app: sex : male; body height: 180cm; age: 48; activity level: 3;

    1. Bluetooth HCI Snoop log file measured true values in the vendors app for the 1. HCI Snoop log file: btsnoop_hci_01.log 17.06.2020 18h51 weight: 79,4kg body fat 19,7% H2O: 52,3% muscle: 38,0% bones:3,3kg BMR: 1689kcla AMR 2534Kcal

    --> Attach the 1. HCI Snoop log file here <-- btsnoop_hci_01.log

    1. Bluetooth HCI Snoop log file measured true values in the vendors app for the 2. HCI Snoop log file: btsnoop_hci_02.log 17.06.2020 18h53 weight: 85,0 kg body fat 22,1 % H2O: 50,5 % muscle: 36,7% bones: 3,4kg BMR: 1745 kcla AMR 2618 kcal --> Attach the 2. HCI Snoop log file here <-- btsnoop_hci_02.log

    2. Bluetooth HCI Snoop log file measured true values in the vendors app for the 3. HCI Snoop log file: btsnoop_hci_03.log 17.06.2020 18h55 weight: 82,1 kg body fat 20,8 % H2O: 51,5 % muscle: 37,3 % bones: 3,4kg BMR: 1716 kcla AMR 2574 kcal --> Attach the 3. HCI Snoop log file here <-- btsnoop_hci_03.log

    Step 3: Discover Bluetooth services and characteristic Read here how to create the openScale debug file

    --> Attach the openScale debug log file here <-- openScale_2020-06-15_16-12.txt openScale_2020-06-15_16-50.txt

    scale support 
    opened by MiNGlKLW 33
  • Bluetooth scales debug testing

    Bluetooth scales debug testing

    I refactored the Bluetooth classes with commit https://github.com/oliexdev/openScale/commit/18a84570e4650df35c96cf14f7f2988b5f3e1ebe and https://github.com/oliexdev/openScale/commit/490061f7b8adbe1f5d09b5f438eaac1a1705b3cb so it will be more developer friendly to implement a new Bluetooth scale class. But I am not sure if I mixed up some source code... I hope not :sweat_smile:
    It would be great if somebody could test the latest developer build and report any bugs or if everything works fine.

    @jflesch I didn't refactored much at your source code but I am not sure if it still works because I set the BluetoothSanitasGattCallback in the constructor. Maybe somebody can check the Sanitas SBF70 scale.

    Thanks in advance oli

    help wanted 
    opened by oliexdev 32
  • Problems with Sanitas SBF70

    Problems with Sanitas SBF70

    Hello, Many thanks for developing openscale. This development was the reason for my buyig the SBF70. At the time of my purchase I did not notice the issues with the SBF 70 - I was happy that is labelled as supported.

    Since issue 252 was closed I am starting here a new issue. I hope this is fine.

    I am experiencing problems with the Sanitas SBF70. I am using Android 7.0 Kernel 3.18.31

    After going throrugh the different issues in this depository, I started with version 1.7.1 - hoping this would work with the SBF70. I could select the scale in the bluetooth settings - and weight readings were retrieved from the scale. No user was created in the balance. No further data were downloaded from the balance. I stepped on the scale three time with an interval of 1 minute in between.

    Then I registered a user with the healthcoach app (after uninstalling openscale) weight and further reading were read out from the balance.

    I could not obtain any reading with openscale 1.7.1.

    Then I changed to the dev version dated 2018-08-20 19:26:52 UTC (obtained from https://github.com/oliexdev/openScale/releases). I could choose the sbf 70 from the bluetooth settings. , When try to retrieve any data, I could not get any readings either. Resetting the balanced did not help. When trying to retrieve data I did obtain in German something like "connection established", and than something like "connection lost" I tried in the dev version to create a bt log (https://forums.lenovo.com/t5/Moto-G5-Moto-G5-Plus/Bluetooth-BLE-problem-on-moto-G5/m-p/3961770/highlight/true#M18512) and subsequently an error log of openscale.

    Can this be fixed? best che btsnoop_hci.log openScale_2018-08-27_12-37.txt

    bug 
    opened by cherocee 30
  • Sanitas SBF 70 related questions

    Sanitas SBF 70 related questions

    Hi, a few questions please:

    I've just started to use openScale to get my measurement data from my Sanitas SB70 (I had been using Sanitas HealthCoach app quite successfully (surprising I know!) for a number of months, but recently it stopped communicating; might be related to the Fitbit app recently installed?).

    So I've got openScale talking to the scales ok, but it operates slightly differently from HealthCoach. I've tried looking through all the FAQs etc for info, but couldn't find anything that helped.

    • It hasn't downloaded the history of measurements that were left in the scale since the last successful sync with HealthCoach, is that correct/expected behaviour? • The data sync only seems to work at the time I weigh myself; if I try the data sync some time after, it doesn't load the most recent measurement, is that expected? • I've exported all my data from HealthCoach to Excel. Looking at various comments, it would seem I need to use the latest dev/beta build to be able to successfully import those, is that correct? If so, will that delete the most recent measurements in openScale or do I need to export those first, combine with the HealthCoach data and import it all back in?

    Despite the questions, just want to say thanks for developing this app, it looks good and means I don't have to throw away the scales! (Once I've used and got know it a bit more I'll stick a rating on Play store).

    question 
    opened by PhilH55 28
  • Mi Scale 2 - Invalid data (10 instead of 13 bytes) is being copied into firstWeight and secondWeight for parsing.

    Mi Scale 2 - Invalid data (10 instead of 13 bytes) is being copied into firstWeight and secondWeight for parsing.

    I was trying to understand the data for Mi Scale 2 from this code and I noticed that the firstWeight and the secondWeight copies use only 10 bytes from the data[] but the parseBytes() expects 13 bytes and the data.length is 2*13=26 which suggests that the firstWeight should copy from 0-13 and secondWeight from 13-26 - or am I misunderstanding that part of code?

    https://github.com/oliexdev/openScale/blob/83c2d941ea8ec349c92fba173398c97a5ee45b70/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMiScale2.java#L78 https://github.com/oliexdev/openScale/blob/83c2d941ea8ec349c92fba173398c97a5ee45b70/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMiScale2.java#L79

    opened by pitus 0
  • Mi Scale 2 isDateInvalid flag uses the same bit 6 of ctrlByte1 as isCattyUnit

    Mi Scale 2 isDateInvalid flag uses the same bit 6 of ctrlByte1 as isCattyUnit

    I was trying to understand the data for Mi Scale 2 from this code and I noticed that the isDateInvalid is testing the same bit 6 of ctrlByte1 as isCattyUnit so one of these must be wrong. I'm guessing it's the isDateInvalid as I've seen elsewhere that isCattyUnit is on bit 6 of ctrlByte1. Not sure, however, where isDateInvalid info is located - which bit of which byte to test?

    https://github.com/oliexdev/openScale/blob/83c2d941ea8ec349c92fba173398c97a5ee45b70/android_app/app/src/main/java/com/health/openscale/core/bluetooth/BluetoothMiScale2.java#L144

    opened by pitus 0
  • Miscale2 lean mass fix

    Miscale2 lean mass fix

    Fixes #787 .

    Rather than changing the muscle value, we can fill the lean mass value which was already implemented, in such a way we do not contradict what is being shown in the mifit app. This PR adds some reference values for lean mass from a pubmed paper too.

    opened by Focshole 0
  • Application crashes when connecting to scale

    Application crashes when connecting to scale

    Describe the bug Application crashes when connecting to scale (QN-Scale)

    To Reproduce Steps to reproduce the behavior: I setup a user but was never able to connect to the scale without a crash. This trace was generated by:

    1. Open settings -> Bluetooth
    2. Press "Your Bluetooth Scale"
    3. List of bluetooth devices, including my scale, is displayed
    4. Select scale device

    Reproduced with release 2.4.6
    dev build (https://github.com/oliexdev/openScale/releases/tag/dev-build) fails to install on my device

    Expected behavior Connection to the scale should be established without crashing

    Debug log

    Build version: 2.4.6 
    Build date: 1981-01-01 01:01:02 
    Current date: 2022-12-17 16:46:37 
    Device: OnePlus ONEPLUS A5010 
    OS version: Android 10 (SDK 29) 
     
    Stack trace:  
    java.lang.NullPointerException: no valid characteristic provided
    	at java.util.Objects.requireNonNull(Objects.java:228)
    	at com.welie.blessed.BluetoothPeripheral.writeCharacteristic(BluetoothPeripheral.java:1202)
    	at com.health.openscale.core.bluetooth.BluetoothCommunication.writeBytes(BluetoothCommunication.java:303)
    	at com.health.openscale.core.bluetooth.BluetoothCommunication.writeBytes(BluetoothCommunication.java:291)
    	at com.health.openscale.core.bluetooth.BluetoothQNScale.onNextStep(BluetoothQNScale.java:111)
    	at com.health.openscale.core.bluetooth.BluetoothCommunication.nextMachineStep(BluetoothCommunication.java:599)
    	at com.health.openscale.core.bluetooth.BluetoothCommunication.nextMachineStep(BluetoothCommunication.java:601)
    	at com.health.openscale.core.bluetooth.BluetoothCommunication.nextMachineStep(BluetoothCommunication.java:601)
    	at com.health.openscale.core.bluetooth.BluetoothCommunication.resumeMachineState(BluetoothCommunication.java:210)
    	at com.health.openscale.core.bluetooth.BluetoothCommunication$1.onServicesDiscovered(BluetoothCommunication.java:453)
    	at com.welie.blessed.BluetoothPeripheral$1$1.run(BluetoothPeripheral.java:210)
    	at android.os.Handler.handleCallback(Handler.java:883)
    	at android.os.Handler.dispatchMessage(Handler.java:100)
    	at android.os.Looper.loop(Looper.java:214)
    	at android.app.ActivityThread.main(ActivityThread.java:7697)
    	at java.lang.reflect.Method.invoke(Native Method)
    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
    

    openScale_2022-12-17_16-44.txt

    opened by nmfm 0
  • Medisana BS444 scale not work correctly

    Medisana BS444 scale not work correctly

    Hi

    on file BluetoothMedisanaBS44x.java

    the app not retrieve the weight, but crash when arrive on the step 4:

    Screenshot_20221208-054957_BLE Scanner protected boolean onNextStep(int stepNr) { switch (stepNr) { case 0: // set indication on for feature characteristic setIndicationOn(WEIGHT_MEASUREMENT_SERVICE, FEATURE_MEASUREMENT_CHARACTERISTIC); break; case 1: // set indication on for weight measurement setIndicationOn(WEIGHT_MEASUREMENT_SERVICE, WEIGHT_MEASUREMENT_CHARACTERISTIC); break; case 2: // set indication on for custom5 measurement setIndicationOn(WEIGHT_MEASUREMENT_SERVICE, CUSTOM5_MEASUREMENT_CHARACTERISTIC); break; case 3: // send magic number to receive weight data long timestamp = new Date().getTime() / 1000; 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]};
    
                writeBytes(WEIGHT_MEASUREMENT_SERVICE, CMD_MEASUREMENT_CHARACTERISTIC, magicBytes);
                break;
            case 4:
                sendMessage(R.string.info_step_on_scale, 0);
                break;
            default:
                return false;
        }
    
        return true;
    }
    

    I have checked with BLE Scanner the characteristic and the custom service is not BluetoothGattUuid.fromShortCode(0x78b2); on the image attach you can see that it's different 00007802. I tried to change it on the code, but now the openSale say please barefoot on the scale. Can you help me ?

    Thanks in advance Paolo

    question 
    opened by brunop69 5
  • Support for ES-26BB-B

    Support for ES-26BB-B

    Closes #900

    Progress

    Measurements

    • [x] Weight
    • [ ] Body fat
    • [ ] Body water
    • [ ] Muscle mass
    • [ ] Protein
    • [ ] Base Metabolic Rate (BMR)

    Features

    • [x] Connect to scale
    • [ ] Disconnect gracefully from scale
    • [x] Offline measurements
    • [ ] Initial pairing (? not sure if this is needed, I wasn't the one setting up the scale)
    • [ ] Low battery alert

    Will add bullet points as I go

    opened by diogotcorreia 2
Releases(dev-build)
Owner
OliE
OliE
Android Bluetooth Helper Library, Bluetooth Device Finder

Bluetooth Helper Allows you to access the Bluetooth of your mobile device, manage turn-on - turn off, and discover bluetooth devices around you. Getti

Tolga Bolatcan 44 Jul 15, 2022
Kotlin Asynchronous Bluetooth Low Energy provides a simple Coroutines-powered API for interacting with Bluetooth Low Energy devices.

Kotlin Asynchronous Bluetooth Low Energy provides a simple Coroutines-powered API for interacting with Bluetooth Low Energy devices.

JUUL Labs 275 Sep 14, 2021
This library allows for easy access to a Bluetooth LE device's AdRecord and RSSI value. It offers additional functionality for iBeacons.

Bluetooth LE Library for Android This library allows for easy access to a Bluetooth LE device's Advertisement Records. It also offers: A simple runnin

Alexandros Schillings 843 Dec 13, 2022
A Bluetooth kotlin multiplatform "Cross-Platform" library for iOS and Android

Blue-Falcon A Bluetooth "Cross Platform" Kotlin Multiplatform library for iOS, Android, MacOS, Raspberry Pi and Javascript. Bluetooth in general has t

Andrew Reed 220 Dec 28, 2022
A non-trivial Bluetooth LE app using Kable and app architecture best practices

kable_mvvm_demo The intention of this project is to demonstrate a non-trivial Bluetooth LE app using Kable and app architecture best practices. ⚠️ The

Chris Laplante 14 Aug 18, 2022
BluePass extracts two factor authentication codes (2FA) from SMS and sends them to a paired device via Bluetooth RFCOMM.

BluePass extracts two factor authentication codes (2FA) from SMS and sends them to a paired device via Bluetooth RFCOMM.

Manuel Huber 15 Dec 4, 2022
Smooth communication via bluetooth with other android devices or microcontrollers such as Arduino.

Android Smooth Bluetooth Smooth communication via bluetooth with other android devices or microcontrollers such as Arduino. Getting Started Add Gradle

Mantas Palaima 191 Nov 28, 2022
A reactive, interface-driven central role Bluetooth LE library for Android

RxCentralBle RxCentralBle provides a simple reactive paradigm for connecting to and communicating with Bluetooth LE peripherals from the central role.

Uber Open Source 198 Nov 29, 2022
An Android Library for handling Bluetooth Low Energy on Android Easy

An Android Library for handling Bluetooth Low Energy on Android Easy

Leandro SQ 42 Jan 3, 2023
Kotlin Asynchronous Bluetooth Low-Energy

Kable Kotlin Asynchronous Bluetooth Low Energy provides a simple Coroutines-powered API for interacting with Bluetooth Low Energy devices. Usage is de

JUUL Labs 493 Dec 25, 2022
An Android library that solves a lot of Android's Bluetooth Low Energy problems

A library that makes working with Bluetooth LE on Android a pleasure. Seriously.

Nordic Semiconductor 1.4k Jan 7, 2023
BLESSED Coroutines, a Bluetooth Low Energy (BLE) library for Android using Kotlin Coroutines

BLESSED for Android with Coroutines - BLE made easy BLESSED is a very compact Bluetooth Low Energy (BLE) library for Android 8 and higher, that makes

Martijn van Welie 82 Jan 1, 2023
Simple bluetooth flutter project

bluetooth_simple Simple bluetooth implementation. Getting Started This project is a starting point for a Flutter application. A few resources to get y

Aleksey Vasiliev 0 Nov 25, 2021
The purpose is to share the Internet capability of one device to the entire Bluetooth LAN.

bluenet The purpose is to share the Internet capability of one device to the entire Bluetooth LAN. To make a prototype of a soft bus, or actually, I w

yunlong.wen 1 Jun 28, 2022
User-friendly Lightweight TPM Remote Attestation over Bluetooth

Ultrablue Ultrablue (User-friendly Lightweight TPM Remote Attestation over Bluetooth) is a solution to allow individual users to perform boot state at

ANSSI 32 Jan 2, 2023
RxBle: Use Android Bluetooth API in Rx way

RxBle: Use Android Bluetooth API in Rx way A lightweight encapsulation of Android Bluetooth API. Use Android Bluetooth API in Rx way. Support multiple

null 3 Dec 2, 2022
RTranslator is the world's first open source real-time translation app

RTranslator is the world's first open source real-time translation app. Connect to someone who has the app, connect Bluetooth headphones, put the phon

null 84 Dec 24, 2022
A simple, lightweight library intended to take away some of the cruft and tediousness of using the Android BLE.

Blueteeth What Is Blueteeth? Blueteeth is a simple, lightweight library intended to take away some of the cruft and tediousness of using the Android B

Robot Pajamas 103 Nov 26, 2022
🍔 Meals is a small demo app based on modern Android technologies and MVVM architecture

Meals ?? Meals is a small demo app based on modern Android technologies and MVVM architecture. built-in Kotlin, Coroutine, Flow, Retrofit, and Jetpack

Amr Jyniat 4 Nov 6, 2022