from open_wearables import SensorDataset, load_recordingsPrimary internal package layers:
open_wearables.schemaopen_wearables.parsingopen_wearables.dataopen_wearables.ipc
OpenWearableIPCClient is an async JSON-RPC style client for
ws://127.0.0.1:8765/ws by default.
async with OpenWearableIPCClient() as client:
await client.ping()start_scan(check_and_request_permissions=True)start_scan_async(check_and_request_permissions=True) -> dictstart_scan_stream(check_and_request_permissions=True) -> StreamSubscriptionget_discovered_devices() -> list[DiscoveredDevice]connect_device(device_id, connected_via_system=False) -> WearableSummaryconnect_system_devices(ignored_device_ids=None) -> list[WearableSummary]list_connected() -> list[WearableSummary]disconnect(device_id)
client.synchronize_time(device_id)client.list_sensors(device_id) -> list[SensorInfo]client.list_sensor_configurations(device_id) -> list[SensorConfiguration]client.set_sensor_configuration(device_id, configuration_name=..., value_key=...)
Per-device handle:
wearable = client.wearable(device_id)
await wearable.connect()
await wearable.actions.synchronize_time()Use the typed stream helpers:
stream = await wearable.streams.sensor_values(sensor_id="accelerometer_0")
async for event in stream:
print(event.data)Other helpers:
wearable.streams.sensor_configuration()wearable.streams.button_events()wearable.streams.battery_percentage()wearable.streams.battery_power_status()wearable.streams.battery_health_status()wearable.streams.battery_energy_status()
Raw websocket-aligned methods:
store_sound(sound_id, audio_base64, codec=None, sample_rate=None, num_channels=None, interleaved=None, buffer_size=None)play_sound(sound_id, volume=None, codec=None, sample_rate=None, num_channels=None)
Python-friendly helpers:
store_sound_bytes(sound_id, audio_bytes, codec=None, sample_rate=None, num_channels=None, interleaved=None, buffer_size=None)store_sound_file(sound_id, file_path, codec=None, sample_rate=None, num_channels=None, interleaved=None, buffer_size=None)client.audio.store_sound(...)client.audio.store_sound_file(...)client.audio.play_sound(...)
Example:
async with OpenWearableIPCClient("ws://192.168.1.23:8765/ws") as client:
await client.audio.store_sound_file("beep_ok", "beep.wav")
await client.audio.play_sound("beep_ok", volume=1.0)High-level API for loading and analyzing a single .oe recording.
SensorDataset(filename: str, verbose: bool = False)filename: path to.oefile.verbose: enables parser diagnostic output.
Parsing happens during initialization.
filename: strsource file path.verbose: boolparser verbosity flag.parse_result: parser.ParseResultraw parse output.sensor_dfs: Dict[int, pandas.DataFrame]per-SID DataFrames.df: pandas.DataFramelazily built combined DataFrame.audio_stereo: Optional[numpy.ndarray]stereo audio frames (int16, shape(N, 2)).audio_df: pandas.DataFramecached audio DataFrame.
Sensor accessor attributes:
dataset.imudataset.barometerdataset.microphonedataset.ppgdataset.optical_tempdataset.bone_acc
Each accessor supports grouped and channel-level access (see data model docs).
Re-parses the recording file and updates parse_result.
Returns sensor names with non-empty DataFrames.
Returns one sensor DataFrame by name.
- Valid names:
imu,barometer,microphone,ppg,optical_temp,bone_acc - Raises
KeyErrorfor unknown names.
Builds and caches a merged DataFrame across all non-empty sensor streams.
Returns timestamp-indexed audio DataFrame with columns:
mic.innermic.outer
Behavior:
- Raises
ValueErrorifsampling_rate <= 0. - Returns empty DataFrame with expected columns if no mic packets exist.
- Caches by sampling rate.
Writes combined DataFrame to <recording_basename>.csv by delegating to save_csv().
Saves the combined DataFrame to CSV if self.df is non-empty.
Call get_dataframe() first to ensure self.df is populated.
Plays audio in IPython/Jupyter via IPython.display.Audio.
Writes WAV audio with scipy.io.wavfile.write.
load_recordings(file_paths: Sequence[str]) -> List[SensorDataset]Creates SensorDataset objects for existing files only.
Core classes and helpers for decoding binary packets:
Parser: stream parser over packetized binary data.PayloadParser: base parser interface.SchemePayloadParser: parser built fromSensorScheme.MicPayloadParser: parser for microphone payloads.ParseResult: parse container with per-SID DataFrames and microphone artifacts.interleaved_mic_to_stereo(samples): converts interleaved samples to stereo.mic_packet_to_stereo_frames(packet, sampling_rate): timestamp + stereo frame conversion.
Note: open_wearables.parser is a compatibility facade. New code should prefer
open_wearables.parsing.
Defines sensor schema primitives:
ParseTypeenumSensorComponentSchemeSensorComponentGroupSchemeSensorSchemebuild_default_sensor_schemes(sensor_sid)
Note: open_wearables.scheme is a compatibility facade. New code should prefer
open_wearables.schema.