Skale I and Skale II

There are APIs for Android and iPhone, if you don't want to use BLE directly:

If you want to use BLE directly, it's also pretty easy, that's what I do, because I don't program in Java on Android.

Before programming BLE directly, you'll want to poke around with a debugging tool. I recommend you start with:


Weight comes in on 0000EF81-0000-1000-8000-00805F9B34FB

Like so:
0x07: length
0xff: manufacture data
0xef: service header byte1
0x81: service header byte2
0x__ weight val byte1
0x__ weight val byte2
0x__ weight val byte3
0x__ weight val byte4
A simpler way to think of this is to discard the first two bytes, and then read the next 4 bytes as an unsigned long.

In Tcl/Androwish, my code to parse this is:
if {$uuid eq "0000EF81-0000-1000-8000-00805F9B34FB"} {
    binary scan $value cus1cu t0 t1 t2 t3 t4 t5
    set thisweight [expr {$t1 / 10.0}]

Battery level on Skale 1 came in on 00002A19-0000-1000-8000-00805F9B34FB but is on 0x180F for Skale II. On Skale I this always returned 100%: it was a firmware bug that's been fixed for Skale II.
binary scan $value cucucucucucu t0 t1 
AcaiaPackets::msg "- battery level: $t0/$t1"

Button presses for Skale I and II come in on 0000EF82-0000-1000-8000-00805F9B34FB

As single bytes unsigned chars. A pressed button returns a 1 in that byte.

In Tcl/Androwish, my code to parse this is:
if {$uuid eq "0000EF82-0000-1000-8000-00805F9B34FB"} {
    binary scan $value cucucucucucu t0 t1 
    puts "- Button pressed: $t0/$t1"

To Send Commands to the Skale II use UUID 0000EF80-0000-1000-8000-00805F9B34FB

Skale 1: there are no commands to send on Skale I. If you need to tare you do it in your own software.

UUID: 0xEF80, write value:
0x02 - unit: oz
0x03 - unit: gram
0x04 - write the display setting to flash
0xEC - display current weight
0xED - LED display ON
0xEE - LED display OFF
On Skale II, for BLE tare function, you can use CMD: 0x10.