Skip to main content

Python SDK for controlling and interacting with Nexstem Instinct headsets

Project description

Instinct SDK for Python

Python SDK for controlling and interacting with Nexstem Instinct headsets.

Overview

The Instinct Python SDK provides a comprehensive set of tools for discovering, connecting to, and controlling Nexstem Instinct headsets from Python applications. This SDK enables developers to:

  • Discover Instinct headsets on the local network
  • Monitor headset state (battery, CPU, RAM, storage)
  • Configure electrodes and sensors
  • Create and manage data streams
  • Build custom signal processing pipelines
  • Store and retrieve device configuration values

Installation

# Using pip
pip install instinct-sdk

# Using poetry
poetry add instinct-sdk

Requirements

  • Python 3.9 or later
  • An Instinct headset on the same network

Quick Start

Discovering Headsets

from instinct_py import Headset

# Discover all Instinct headsets on the network
headsets = Headset.discover()
print(f"Found {len(headsets)} headsets")

# Connect to the first headset found
headset = headsets[0]

# Or connect directly to a known headset
headset = Headset("192.168.1.100")

Getting Headset State

# Get basic headset information
state = headset.get_state()
print(f"Headset status: {state.status}")
print(f"Battery: {state.battery.percent}%")
print(f"CPU load: {state.cpu.load}%")

# Get the headset name
name = headset.get_name()
print(f"Headset name: {name}")

Working with Streams

import uuid

source_id = str(uuid.uuid4())
ssvep_id = str(uuid.uuid4())

# Create a stream
stream = headset.streams_manager.create_stream({
    "id": str(uuid.uuid4()),
    "nodes": [
        {
            "executable": "eeg_source",
            "config": {
                "sampleRate": 1000,
                "gain": 1,
            },
            "id": source_id,
        },
        {
            "executable": "ssvep_algo",
            "config": {},
            "id": ssvep_id,
        },
    ],
    "pipes": [
        {
            "source": source_id,
            "destination": ssvep_id,
        },
    ],
})

# Create the stream on the headset
await stream.create()

# Start the stream
await stream.start()

# Stop the stream when done
await stream.stop()

API Documentation

Headset Class

The main entry point for interacting with Instinct headsets.

Static Methods

Method Description
Headset.discover(timeout=3000, discovery_port=48010, debug=False) Discovers Instinct headsets on the network

Instance Properties

Property Type Description
streams_manager HeadsetStreamsManager Manager for creating and controlling data streams
electrode_manager HeadsetElectrodesManager Manager for electrode configurations
sensor_manager HeadsetSensorsManager Manager for sensor data
device_config_manager DeviceConfigManager Manager for device configuration storage
host_address str IP address of the headset

Instance Methods

Method Description
get_state() Gets the current state of the headset
get_name() Gets the current name of the headset
set_name(name) Sets a new name for the headset
send_debug_command(command) Sends a debug command to the headset (debug mode only)

Device Configuration Management

The SDK provides DeviceConfigManager for storing and retrieving persistent configuration values on the headset.

# Store user preferences
await headset.device_config_manager.create_config({
    "key": "userPreference.theme",
    "value": "dark",
})

# Store temporary data with expiration
await headset.device_config_manager.create_config({
    "key": "session.authToken",
    "value": "abc123xyz",
    "expires_in": "1h",
})

# Retrieve configuration
config = await headset.device_config_manager.get_config("userPreference.theme")
print(f"Theme preference: {config.value}")

# Update configuration
await headset.device_config_manager.update_config(
    "userPreference.theme",
    {
        "key": "userPreference.theme",
        "value": "light",
    }
)

# Delete configuration
await headset.device_config_manager.delete_config("session.authToken")

Stream Management

The SDK provides classes for creating and managing data processing streams:

import uuid

# Create a stream with custom metadata
stream = headset.streams_manager.create_stream({
    "meta": {
        "name": "Alpha Rhythm Analysis",
        "description": "Extracts and analyzes alpha rhythms from occipital electrodes",
        "version": "1.0.0",
    },
    "nodes": [
        {
            "executable": "eeg_source",
            "config": {
                "sampleRate": 250,
                "channels": ["O1", "O2", "PZ"],
            },
        },
        {
            "executable": "bandpass_filter",
            "config": {
                "cutoff": 10,
                "bandwidth": 4,
                "order": 4,
            },
        },
    ],
    "pipes": [
        {
            "source": "source_id",
            "destination": "destination_id",
        },
    ],
})

# Create and start the stream
await stream.create()
await stream.start()

# Stop and delete the stream when done
await stream.stop()
await stream.delete()

Electrode and Sensor Management

# List all electrodes
electrodes = await headset.electrode_manager.list_electrodes()
for electrode in electrodes:
    print(f"{electrode.position}: {'enabled' if electrode.enabled else 'disabled'}")

# Enable an electrode
await headset.electrode_manager.enable_electrode("PZ")

# List all sensors
sensors = await headset.sensor_manager.list_sensors()
for sensor in sensors:
    print(f"{sensor.type}: {'enabled' if sensor.enabled else 'disabled'}")

# Enable the accelerometer
await headset.sensor_manager.enable_sensor("accelerometer", sample_rate=100)

Error Handling

The SDK uses standard exception handling:

try:
    headsets = Headset.discover()
    if len(headsets) == 0:
        print("No headsets found.")
        exit()

    headset = headsets[0]
    await headset.set_name("My Headset")
except Exception as error:
    print(f"Error: {error}")

Troubleshooting

Common Issues

  1. Cannot discover headsets

    • Ensure the headset is powered on and connected to the same network
    • Check firewall settings that might block UDP broadcasts (port 48010)
    • Try specifying the IP address directly: Headset("192.168.1.100")
  2. Stream creation fails

    • Verify all UUIDs are valid
    • Check that node executables exist on the headset
    • Ensure pipe connections reference valid node IDs
  3. Configuration storage fails

    • Check that the key is a valid string
    • Ensure the value can be properly serialized
    • Verify that the expiration format is correct (e.g., "1h", "2d", "30m")
  4. Connection timeouts

    • The headset may be overloaded; try simplifying your stream
    • Check network stability and latency
    • Increase timeout values in API calls

Resources

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

instinct_py-1.4.3.tar.gz (17.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

instinct_py-1.4.3-py3-none-any.whl (27.0 kB view details)

Uploaded Python 3

File details

Details for the file instinct_py-1.4.3.tar.gz.

File metadata

  • Download URL: instinct_py-1.4.3.tar.gz
  • Upload date:
  • Size: 17.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.13.1 Darwin/24.5.0

File hashes

Hashes for instinct_py-1.4.3.tar.gz
Algorithm Hash digest
SHA256 0f7c3e4a41801c25a5c0ecf86ef4468752d5e5158817a4f8e10b667f193bbb11
MD5 c53456177aeb30c046a229badb88872f
BLAKE2b-256 d86acbc5aeffd47cad806c1a651f264c0ac4847205c0cf28978c91ca78b65453

See more details on using hashes here.

File details

Details for the file instinct_py-1.4.3-py3-none-any.whl.

File metadata

  • Download URL: instinct_py-1.4.3-py3-none-any.whl
  • Upload date:
  • Size: 27.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.2 CPython/3.13.1 Darwin/24.5.0

File hashes

Hashes for instinct_py-1.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2c1fb714cc6676947fb3af98cdd692d5a4ef512a183519809f0f763fc84de4a0
MD5 1246da098bde4e79a27872954b729499
BLAKE2b-256 219ac10031fa0dd549e637f47a4667bffdd9d2d5e02d0da340f6025df09a2e28

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page