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.
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.
--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')