Skip to main content
Version: 1.3

Quick start

Get up and running with SiFi Bridge in 5 minutes.

Starting the REPL​

Launch the SiFi Bridge interactive shell:

sifibridge
{"new": {"active":"device","created": "device","message":"Device device created and selected"}}

You're now in the REPL (Read-Eval-Print Loop) where you can type commands interactively.

JSON output

SiFi Bridge outputs responses in JSON format. For easier reading, use the --pretty flag:

sifibridge --pretty
{
"new": {
"active": "device",
"created": "device",
"message": "Device device created and selected"
}
}

The examples below show simplified output for clarity.

Scan for devices​

Discover available SiFi devices via Bluetooth:

> list ble
{
"list": {
"devices": [
{
"name": "BioPoint_v1_3",
"id": "C2:EC:EF:30:0D:10"
},
]
}
}

You can also list devices from other sources with list serial or list devices.

Connect to a device​

Connect to your device using its name or MAC address:

> connect BioPoint_v1_3

You can also connect by MAC address:

> connect C2:EC:EF:30:0D:10
{
"connect": {
"id": "default-1",
"device": "BioPointV1_3",
"connected": true,
"mac": "C2:EC:EF:30:0D:10"
}
}

Check device status​

View detailed information about the connected device:

> show
{
"show": {
"id": "default-1",
"mac": "C2:EC:EF:30:0D:10",
"connected": true,
"device": {
--- snip ---
}
}
}

The show command outputs the complete device configuration in JSON format.

Start collecting data​

Begin acquiring data from your device:

> command start-acquisition
{
"command": {
"id": "default-1",
"device": "BioPointV1_3",
"connected": true,
"command": "start_acquisition"
}
}
{
"device": "BioPointV1_3",
"id": "default-1",
"mac": "C2:EC:EF:30:0D:10",
"packet_type": "start_time",
"data": {
"year": [
2025.0
],
"day": [
16.0
],
"hour": [
14.0
],
"minute": [
50.0
],
"second": [
36.0
],
"month": [
11.0
]
},
"data_timestamps": {
--- snip ---
},
"data_lost_count": {
--- snip ---
},
"status": "lost_data",
"timestamp": 1763322636.219
}

SiFi Bridge returns the start acquisition response acknowledge. Notice that the device returns a Start time packet whenever a new acquisition is started.

Stop data collection​

Stop the data acquisition:

> command stop-acquisition
{
"command": {
"id": "default-1",
"device": "BioPointV1_3",
"connected": true,
"command": "stop_acquisition"
}
}

Export data to CSV​

To save data to CSV files, use the --csv-out flag when starting sifibridge:

sifibridge --csv-out ./data/

A file will be created for each device, sensor and recording, named <manager>_<YYYY-MM-DD-HH-MM-SS>_<sensor>.csv — for example default-1_2026-09-22-16-02-26_ecg.csv. Each file contains timestamped sensor data ready for analysis.

The output directory must already exist

--csv-out does not create the directory. Pointing it at a path that does not exist makes SiFi Bridge panic and exit rather than report an error:

panicked at src\publishers\csv.rs:72:39:
called `Result::unwrap()` on an `Err` value: Os { code: 3, kind: NotFound, ... }

Create the directory first (mkdir -p ./data). This also breaks sifi_bridge_py's publishers="csv://./data/", since the crash takes the subprocess down and the next call fails on a closed pipe.

Recordings stored in the device's on-board memory are downloaded with the command interface, or over a serial port with serial, which is significantly faster:

# Over BLE
> command download-memory

# Over a serial port
> serial /dev/ttyACM0

The downloaded packets are emitted on the data stream, so combine this with --csv-out to write them to disk. Completion is signalled by a memory packet:

> command download-memory
--- data packets snip ---
{
"device": "BioPointV1_3",
"id": "default-1",
"mac": "C2:EC:EF:30:0D:10",
"packet_type": "memory",
"status": "memory_download_completed",
"timestamp": 1763324822.599
}

And now the output folder contains:

$ tree ./data/
data
├── device_2025-11-16-15-26-06_ecg.csv
├── device_2025-11-16-15-26-06_eda.csv
├── device_2025-11-16-15-26-06_emg.csv
├── device_2025-11-16-15-26-06_imu.csv
├── device_2025-11-16-15-26-06_ppg.csv
├── device_2025-11-16-15-26-19_ecg.csv
├── device_2025-11-16-15-26-19_eda.csv
├── device_2025-11-16-15-26-19_emg.csv
├── device_2025-11-16-15-26-19_imu.csv
└── device_2025-11-16-15-26-19_ppg.csv

All the files' header starts with time, followed by the biochannels:

$ head -n 2 data/device_2025-11-16-15-26-06_imu.csv
time,ax,ay,az,qw,qx,qy,qz
1763324766,2.40,-1.49,0.90,0.80,-0.31,-0.51,-0.01

Disconnect from device​

Close the connection:

> disconnect
{
"disconnect": {
"id": "default-1",
"device": "BioPointV1_3",
"connected": false
}
}

Exit SiFi Bridge​

Leave the REPL:

> quit

You can also use Ctrl+C or Ctrl+D to exit.

Get help​

Type help in the REPL for a list of all available commands, or help <command> for details about a specific command:

> help
Available commands:
list List devices from BLE, serial, or saved devices
connect Connect to a device
disconnect Disconnect from device
...

> help connect
Connect to a device via BLE.

The connection handle can be:
- Empty to auto-connect to a device
- BLE device name (e.g. 'BioPoint')
- (Windows/Linux) BLE MAC address (e.g. '00:11:22:33:44:55')
- (MacOS) BLE UUID (e.g. '00001122-3344-5566-7788-99AABBCCDDEE')

Usage: connect [HANDLE]

Arguments:
[HANDLE]
Connection handle

Options:
-h, --help
Print help (see a summary with '-h')