Skip to main content

2-N-2 high-performance protocol stack

Project description

OpenSynaptic

2-N-2 high-performance IoT protocol stack — standardises sensor readings into UCUM units, compresses them via Base62 encoding, wraps them in a binary packet, and dispatches over pluggable transporters (TCP / UDP / UART / LoRa / MQTT / CAN).

Try In 30 Seconds

pip install -e .
os-node demo --open-browser
  • Default user config path: ~/.config/opensynaptic/Config.json
  • First run launches onboarding wizard (--yes / --no-wizard supported)

CLI Completion (Tab)

py -3 -m pip install argcomplete
powershell -ExecutionPolicy Bypass -File .\scripts\enable_argcomplete.ps1

Manual (without script):

Invoke-Expression (register-python-argcomplete os-node --shell powershell)

Restart PowerShell after activation.

OpenSynaptic Demo Quickstart


Table of Contents


Architecture

sensors list
    → OpenSynapticStandardizer.standardize()   # UCUM normalisation
    → OpenSynapticEngine.compress()            # Base62 solidity compression
    → OSVisualFusionEngine.run_engine()        # binary packet (FULL / DIFF strategy)
    → OpenSynaptic.dispatch(medium="UDP")      # physical send via transporter
src/opensynaptic/
├── core/
│   ├── __init__.py             # Public core facade + active backend loader
│   ├── pycore/
│   │   ├── core.py             # Orchestrator – OpenSynaptic class
│   │   ├── standardization.py  # UCUM normalisation
│   │   ├── solidity.py         # Base62 compress / decompress
│   │   ├── unified_parser.py   # Binary packet encode/decode, template learning
│   │   ├── handshake.py        # CMD byte dispatch, device ID negotiation
│   │   └── transporter_manager.py # Auto-discovers pluggable transporters
│   ├── rscore/                 # Rust core backend + build/check helpers
│   ├── transport_layer/        # L4 protocol managers and protocols/
│   ├── physical_layer/         # PHY protocol managers and protocols/
│   ├── layered_protocol_manager.py # 3-layer protocol orchestration
│   ├── coremanager.py          # Core selection/runtime manager
│   └── loader.py               # Core/plugin loader
├── services/
│   ├── service_manager.py      # Plugin mount / load / dispatch hub
│   ├── plugin_registry.py      # Built-in plugin mapping + config default sync
│   ├── tui/                    # Terminal UI service (section-aware, interactive)
│   ├── web_user/               # Lightweight web UI + user management API
│   ├── dependency_manager/     # Dependency check/repair/install plugin
│   ├── env_guard/              # Environment guard service
│   ├── transporters/           # Application-layer transporter service
│   ├── db_engine/              # Database integration service
│   └── test_plugin/            # Built-in component & stress test suite
├── utils/
│   ├── constants.py            # LogMsg enum, MESSAGES, CLI_HELP_TABLE
│   ├── logger.py               # os_log singleton
│   ├── paths.py                # OSContext, read_json, write_json, get_registry_path
│   ├── base62/                 # Base62 codec bindings/utilities
│   ├── security/               # crc/xor/session-key helpers
│   └── c/                      # Native loader/build helpers
├── CLI/
│   └── app.py                  # Argparse CLI (os-node entrypoint)
plugins/
└── id_allocator.py             # uint32 ID pool, persisted to data/id_allocation.json
libraries/
└── Units/                      # UCUM unit definition JSON files
scripts/
└── concurrency_smoke.py        # Concurrent pipeline smoke test
Config.json                     # Single source of truth for all runtime settings

Prerequisites

  • Python 3.11+
  • Optional: mysql-connector-python, psycopg[binary], aioquic (see pyproject.toml)

Install

pip install -e .

Minimal Usage

from opensynaptic.core import OpenSynaptic

node = OpenSynaptic()                        # reads Config.json automatically
node.ensure_id("192.168.1.100", 8080)        # request device ID from server
packet, aid, strategy = node.transmit(sensors=[["V1", "OK", 3.14, "Pa"]])
node.dispatch(packet, medium="UDP")
from opensynaptic.core import get_core_manager

manager = get_core_manager()
print(manager.available_cores())             # e.g. ['pycore', 'rscore']
manager.set_active_core('pycore')
OpenSynaptic = manager.get_symbol('OpenSynaptic')

CLI Quick Reference

All commands are available via os-node (installed entrypoint) or python -u src/main.py:

Command Description
run Persistent run loop with heartbeat
snapshot Print node/service/transporter JSON snapshot
ensure-id Request device ID from server
transmit Encode one sensor reading and dispatch
inject Push data through pipeline stages and inspect output
decode Decode a binary packet (hex) or Base62 string back to JSON
watch Real-time poll a module's state (config / registry / transport / pipeline)
tui Render TUI snapshot (add --interactive for live mode)
config-show Display Config.json or a specific section
config-get Read a dot-notation key path from Config
config-set Write a typed value to a Config key path
core Show/switch core backend (pycore / rscore)
transporter-toggle Enable or disable a transporter in Config
plugin-list List mounted service plugins
plugin-load Load a mounted plugin by name
plugin-cmd Route a sub-command to a plugin's CLI handler
plugin-test Run component or stress tests
native-check Check native compiler/toolchain availability
native-build Build native C bindings (optionally include RS core)
rscore-build Build and install Rust RS core shared library
rscore-check Check RS core DLL/runtime readiness and active core
web-user Run web_user plugin directly from CLI
deps Run dependency_manager plugin directly from CLI
transport-status Show all transporter layer states
db-status Show DB engine status
help Print full help

Full usage examples → src/opensynaptic/CLI/README.md


Config.json

Config.json at the project root is the single source of truth.
Key fields:

Key Type Default Effect
assigned_id uint32 4294967295 Device ID; 4294967295 = unassigned
engine_settings.precision int 4 Base62 decimal places
engine_settings.active_standardization bool true Toggle UCUM normalisation stage
engine_settings.active_compression bool true Toggle Base62 compression stage
RESOURCES.transporters_status map {} Legacy merged compatibility map (mirrors layer-specific status maps)
security_settings.drop_on_crc16_failure bool true Drop packets with bad CRC

Full schema → docs/CONFIG_SCHEMA.md


Testing

# Component tests (unit tests for each pipeline stage)
python -u src/main.py plugin-test --suite component

# Stress test (200 concurrent pipeline encode cycles)
python -u src/main.py plugin-test --suite stress --workers 8 --total 200

# Web UI (foreground mode)
python -u src/main.py web-user --cmd start -- --host 127.0.0.1 --port 8765 --block

# Dependency checks and repair
python -u src/main.py deps --cmd check
python -u src/main.py deps --cmd repair

# Both suites
python -u src/main.py plugin-test --suite all

# Standalone smoke test
python scripts/concurrency_smoke.py 200 8 6

Packaging And Release

# Build and validate Python distributions
py -3 -m pip install -e .[dev]
py -3 -m build
py -3 -m twine check dist/*

# Build Rust acceleration wheel (maturin)
py -3 -m maturin build --manifest-path src/opensynaptic/core/rscore/rust/Cargo.toml --release

GitHub Actions workflows are defined in .github/workflows/ci.yml and .github/workflows/release.yml. Configure repository secrets TEST_PYPI_API_TOKEN and PYPI_API_TOKEN before tag-based publishing.


v0.2.0 Performance Focus

This release line emphasizes practical performance tuning and backend acceleration:

  • Multi-process stress controls: --processes, --threads-per-process, --batch-size
  • Auto-tuning profile scan: --auto-profile with --profile-processes, --profile-threads, --profile-batches
  • RS core workflow: rscore-build, rscore-check, core --set rscore --persist
  • Backend comparison flow: plugin-test --suite compare

Detailed release note -> docs/releases/v0.2.0.md

Optimized Usage Examples

# High-throughput multi-process stress
python -u src/main.py plugin-test --suite stress --total 20000 --workers 16 --processes 4 --threads-per-process 4 --batch-size 64

# Auto-profile best concurrency matrix
python -u src/main.py plugin-test --suite stress --auto-profile --profile-total 50000 --profile-runs 1 --final-runs 1 --profile-processes 1,2,4,8 --profile-threads 4,8,16 --profile-batches 32,64,128

# Build/check/switch to RS core
python -u src/main.py rscore-build
python -u src/main.py rscore-check
python -u src/main.py core --set rscore --persist

# Compare pycore vs rscore performance
python -u src/main.py plugin-test --suite compare --total 10000 --workers 8 --processes 2 --threads-per-process 4 --runs 2 --warmup 1

RS Core (rscore) Quick Start

Use this flow to build, verify, and switch to the Rust core backend.

# 1) Build RS core shared library
python -u src/main.py rscore-build

# 2) Verify runtime status (DLL path/load state, active core)
python -u src/main.py rscore-check

# 3) Switch backend for current process + persist in Config.json
python -u src/main.py core --set rscore --persist

# 4) Optional: enforce RS path in stress tests
python -u src/main.py plugin-test --suite stress --total 5000 --workers 8 --processes 2 --require-rust

If you need to keep Python backend, switch back with:

python -u src/main.py core --set pycore --persist

More details: docs/RSCORE_API.md, docs/PYCORE_RUST_API.md, docs/releases/v0.2.0.md


Adding a Transporter

See docs/TRANSPORTER_PLUGIN.md.


API Reference

See docs/API.md.

Core facade and loader reference -> docs/CORE_API.md


Documentation Hub


Release Notes

Plugin Config Auto-Sync

Built-in plugin settings are stored in Config.json at:

RESOURCES.service_plugins.<plugin_name>

These entries are auto-created with defaults if missing; plugins remain manual-start and do not auto-run at process startup.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

opensynaptic-1.0.0rc2-cp313-cp313-win_amd64.whl (260.3 kB view details)

Uploaded CPython 3.13Windows x86-64

opensynaptic-1.0.0rc2-cp313-cp313-musllinux_1_2_x86_64.whl (415.4 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

opensynaptic-1.0.0rc2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (338.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

opensynaptic-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl (295.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

opensynaptic-1.0.0rc2-cp312-cp312-win_amd64.whl (260.4 kB view details)

Uploaded CPython 3.12Windows x86-64

opensynaptic-1.0.0rc2-cp312-cp312-musllinux_1_2_x86_64.whl (415.3 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

opensynaptic-1.0.0rc2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (338.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

opensynaptic-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl (295.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

opensynaptic-1.0.0rc2-cp311-cp311-win_amd64.whl (260.4 kB view details)

Uploaded CPython 3.11Windows x86-64

opensynaptic-1.0.0rc2-cp311-cp311-musllinux_1_2_x86_64.whl (415.7 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

opensynaptic-1.0.0rc2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (338.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

opensynaptic-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl (296.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file opensynaptic-1.0.0rc2-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3668488d8557f0ba91bf01935367dc6dc310b92aad4a7d361db04b6091452532
MD5 8f4a5791f45a935ac79ba06b37075b2a
BLAKE2b-256 4e9b51af2439da046c7e553a284014da26183c23b05a2cd2561697d6fc898078

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f4a2fdeac1772aad9b8a47f2c7fa93b10f80129948c75e14cb02ac848fe1e630
MD5 25aba7cc257ad765cd9e09655b835778
BLAKE2b-256 41f2db553f635481f7cf5e0c3faa80831e805a0b85c5bf39058cf37e732f2b03

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 b0d064cb39a08fe0d003f99dc7aa1ae1ab14b45bb1ec4c3534af3ef4b3346580
MD5 7a5367fa6e846484b0fd67d447385d22
BLAKE2b-256 32060fa88a3890afb1bcc270c0f551dff059f965892dc0980360f0172e058a03

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fd5683b1c3e25897fe324c9ff22761b3ec28591cb51754d36d42543d5e540fde
MD5 304822e0944803fc4974562e95280d29
BLAKE2b-256 ed7029d144c7ce4f3f2d365f4a8bde4d2e9daf6c187cc65fe359c69a498bef86

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2b1e43822b0a6c444739075b85b15ba4680306a79f30d5ac74911542db3523c0
MD5 81d167aaad09761265ea6b57db04f899
BLAKE2b-256 2365411508f9824a89520d0804ed5882c3b7c506ea0733c0b39965400520348d

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c29bd50561ffd604ff3b73a387889d69ee8db54e4412ebff9c7db2840ae4c528
MD5 753fd4dafe68ae253b6badb95c6afaf1
BLAKE2b-256 5b15e929fce93c599610dd0a108a2a0784bab1ee0afc2251f20ef6e9d2e711da

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 9e2f1ea904fb825e23e182d689b131abe2c63e26957cb31c5073914b6f553228
MD5 b79e6921bcebd81f4ef7a4b98f656803
BLAKE2b-256 f83e0114df526abf7956d65c83b87c647141ba8a8b51ab952926c11e5a0cbe25

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 842f537c6723cab351397ed71409c92968073beb4874e50f35cad9616c946c45
MD5 db172057b613cc832e4238027867c817
BLAKE2b-256 1955c67dc5b6220312dff39c5e43a143b6e5a0133db843bd979aad6dec6c7588

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b9c632330e3c242ed2f312a60bdcfd1e9298ff4d3ad1a01dc051ff21097b2c15
MD5 54905ba626df4291267c6cf687575ed3
BLAKE2b-256 903432cbb9afa3cb0dc1fef6678bed4e0057f9ce442b2f1f5f6bc9af9a2e3497

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 378297575ed7a6f21dae6b0f2ecdba85140aba0ffdd3ca218a66aaab27c31342
MD5 2ddb7dbfb9e55a34eeda176b7986cbca
BLAKE2b-256 c432c613a63f52d7372e8e59a8eeac690c27c11bce6907b080e1f220bb8fcf48

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 1fff637d4dd27c379e0273d88e9d2c2830db17b52c6ede4029d7b25e0fcaeb9b
MD5 f99c47cb802c0ee3f6986e0dd310bf9e
BLAKE2b-256 c2e9784be14961a0dbec395db985c899cfe1811dbe19bfe458d18eb3ebdd02b4

See more details on using hashes here.

File details

Details for the file opensynaptic-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80e0f78fcaf45b0b1a8dc08cfa125097002722ae811b1326e83dad1eacb8f2aa
MD5 9bab702a7026ff4655dcf4ca305d2815
BLAKE2b-256 9c78975d597c63dc5498f0d6032670ef43b5b5c45c7c0fbdcbd7933c767753ff

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