Movesense Device API Reference
Local reference for the Movesense BLE sensor REST-like API accessed via GSP (GATT SensorData Protocol).
All commands are sent over BLE GATT:
Service UUID : 34802252-7185-4d5d-b431-630e7050e8f0
Write Characteristic : 34800001-7185-4d5d-b431-630e7050e8f0
Notify Characteristic : 34800002-7185-4d5d-b431-630e7050e8f0
GSP command codes:
Code
Name
Description
0
HELLO
Handshake, returns device info
1
SUBSCRIBE
Subscribe to data stream
2
UNSUBSCRIBE
Stop subscription
3
FETCH_LOG
Download SBEM data from flash
4
GET
Read resource value
5
CLEAR_LOGBOOK
Erase all logs
6
PUT_DATALOGGER_CONFIG
Set logging configuration
7
PUT_SYSTEMMODE
Set system mode (5=reboot)
8
PUT_UTCTIME
Sync UTC time (microseconds)
9
PUT_DATALOGGER_STATE
Start (3) / Stop (2) logging
Response codes: 1=CommandResponse, 2=Data, 3=DataPart2
Path
Rates (Hz)
Notes
/Meas/ECG/{Rate}
125, 128, 200, 250, 256, 500, 512
Raw integer LSBs (1 LSB = 0.000381469726563 mV)
/Meas/ECG/{Rate}/mV
same
Millivolt output (firmware ≥2.3)
/Meas/ECG/Info
GET
Available rates, array size, filter info
/Meas/ECG/Config
GET, PUT
Low-pass & high-pass filter settings
Path
Rates (Hz)
Notes
/Meas/Acc/{Rate}
13, 26, 52, 104, 208, 416, 833, 1666
Array of {x, y, z} floats
/Meas/Acc/Info
GET
Available rates & ranges
/Meas/Acc/Config
GET, PUT
G-range: 2, 4, 8, 16g
Path
Rates (Hz)
Notes
/Meas/Gyro/{Rate}
13, 26, 52, 104, 208, 416, 833, 1666
Array of {x, y, z} floats (DPS)
/Meas/Gyro/Config
GET, PUT
Range: 245, 500, 1000, 2000 DPS
Path
Rates (Hz)
Notes
/Meas/Magn/{Rate}
13, 26, 52, 104, 208, 416, 833, 1666
Array of {x, y, z} floats
Path
Sensors
Notes
/Meas/IMU6/{Rate}
Acc + Gyro
6-axis, same rate options
/Meas/IMU6m/{Rate}
Acc + Magn
6-axis
/Meas/IMU9/{Rate}
Acc + Gyro + Magn
9-axis
Path
Notes
/Meas/HR
Event-driven. Returns average (float bpm) + rrData (array of RR intervals in ms)
/Meas/HR/Info
Range: 200-2000 bpm
Path
Notes
/Meas/Temp
GET or SUBSCRIBE. Returns Kelvins. Range 233-398 K, accuracy ±1 K
Path
Notes
/Time
GET, PUT, SUBSCRIBE. UTC microseconds since epoch
/Time/Detailed
GET, SUBSCRIBE. Maps UTC to sensor timestamps. Always include in DataLogger config.
Value
Name
Description
1
Unknown
Initial/undefined
2
Ready
Stopped, ready for config changes and data retrieval
3
Logging
Actively recording to flash
When Ready (state 2):
PUT config, start logging, list logs, fetch data, erase memory, query config
When Logging (state 3):
Stop logging, query state, live SUBSCRIBE to measurement paths
Cannot : change config, fetch logs (409 Conflict), erase memory, list log entries
Path
Methods
Description
/Mem/DataLogger/Config
GET, PUT
Measurement paths to log
/Mem/DataLogger/State
GET, PUT
Start (3) / Stop (2)
/Mem/Logbook/Entries
GET, DELETE
List or erase all logs
/Mem/Logbook/IsFull
GET
Check if memory is full
/Logbook/byId/{LogId}/Descriptors
GET
SBEM metadata for a log
/Logbook/byId/{LogId}/Data
GET, SUBSCRIBE
Retrieve log data
Path
Methods
Description
/Info
GET
Device and platform info
/Info/App
GET
Running app, enabled modules
/System/Mode
GET, PUT
Mode: 1=FullPowerOff, 5=Application, 12=FwUpdate
/System/Energy/Level
GET
Battery percentage
/System/Memory/Heap
GET
Heap usage
/Comm/Ble/Addr
GET
BLE MAC address
/Comm/Ble/Peers
GET, SUBSCRIBE
Connected devices
No concurrent measurement limit documented — practical limit is BLE throughput + flash write speed + battery
ECG : Only one frequency at a time
IMU : Acc is always active when Gyro or Magn is in use
BLE : Single peripheral connection max, one bonded device at a time
DataLogger : Cannot log string-type data
Power Consumption (approximate)
Configuration
Current
Acc only (13-416 Hz)
46-268 µA
Acc + Gyro (13-416 Hz)
227-617 µA
Acc + Magn (13-416 Hz)
66-466 µA
ECG (125-512 Hz)
138-230 µA
SBEM (Suunto BLE Encoded Message) is the binary format for stored sensor data.
Conversion tool (sbem2json):
sbem2json --sbem2json <file> --output <json> # SBEM → JSON
sbem2json --json2sbem <file> --output <sbem> # JSON → SBEM
sbem2json --dump-sbem <file> # Dump structure info
sbem2json --descriptors <file> # Separate descriptor file
sbem2json --heatshrink # Handle compressed input
JSON output structure :
{
"Samples" : [
{"TimeDetailed" : {"relativeTime" : 1000 , "utcTime" : 1712000000000000 }},
{"MeasEcgmV" : {"Timestamp" : 0 , "Samples" : [0.1 , 0.2 , ... ]}},
{"MeasAcc" : {"Timestamp" : 0 , "ArrayAcc" : [{"x" : 0.1 , "y" : 0.2 , "z" : 9.8 }, ... ]}},
{"MeasTemp" : {"Timestamp" : 0 , "Measurement" : 309.5 }},
{"MeasHR" : {"Timestamp" : 0 , "average" : 72.0 , "rrData" : [820 , 815 ]}}
]
}