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.0rc3-cp313-cp313-win_amd64.whl (260.3 kB view details)

Uploaded CPython 3.13Windows x86-64

opensynaptic-1.0.0rc3-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.0rc3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (338.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

opensynaptic-1.0.0rc3-cp312-cp312-musllinux_1_2_x86_64.whl (415.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

opensynaptic-1.0.0rc3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (338.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

opensynaptic-1.0.0rc3-cp311-cp311-win_amd64.whl (260.5 kB view details)

Uploaded CPython 3.11Windows x86-64

opensynaptic-1.0.0rc3-cp311-cp311-musllinux_1_2_x86_64.whl (415.8 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

opensynaptic-1.0.0rc3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (338.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

opensynaptic-1.0.0rc3-cp311-cp311-macosx_11_0_arm64.whl (296.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 601fc884a4c438ed72ae590c8986aa5706556321f0c4147ab9367a3274c8d7f4
MD5 6a412db4eb0cafb944582a50d9ea8f33
BLAKE2b-256 bfd5f84c109e3ab10d96b9aa44830dc1edfe63132725cbe8d651733357e173c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2c4eff11a7fd219b491ede95ea67596d8b218d30392f4d1fdaff2d028ff1eac8
MD5 837da819f5870805ad66ab35088c052b
BLAKE2b-256 b6fe801b48289493ea141738a603f5739cad753f0be1e961ef43961b5209abc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 d464c997077e9b2355bd4b552ae51f2a30ced1679f125f2633d6542218430e93
MD5 ec2d8b11511b259c0fa05f831444709a
BLAKE2b-256 e3bc2466262f5e7f51e7988249cd39a0aab3dfcc8c4a7cfef97c30d96096adc4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0696b87a2ff4ed8b4259a11bf238c10e6b45e028853e67125b6fa356fd9d31ac
MD5 42e223a7c4f87dc906a493bf46a93266
BLAKE2b-256 80198b5097e7af8b8f92917f52a16c2da4306b95aae251d436540440d5887116

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 afee87460b95a4a7cfad4e64f0948f2a6bdcfcde189ea1ea08de18c6c60b2dcd
MD5 b8164ba0c0b0b8117431da1a4043d190
BLAKE2b-256 9812ad60e89bbbd4500fcf3db8ad59719068d37bb4532f6890ef53d9d2ae58f0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 57454ae29f20c44c334f35ef270227b2ab3471f56283a47afc574b9a8d3a61b5
MD5 ece1577dca32804ba10c57436af436f3
BLAKE2b-256 fb32526fd1ad41ade03141f70c24c419abd136b70f0848ca33df391cd6f3c2be

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 0010210e62c368c409162f9f15852b9e92f50d8317993e728f191fb73842fbe7
MD5 4a9ecfc60ade60d9b020f4ddb58f8994
BLAKE2b-256 c12517b9f426b65b51aefbcdc5af955dc89b36ee3d41d93e3733e174119a0e2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b863af9d981f5104edd9fdd58011c6c969c34be35fe0afa4e2659e8248c32cae
MD5 f56133d39b7f6d2933772200ddfe5b1a
BLAKE2b-256 e2dc3708888d37c7bb104690a92b42e4863c60c9ffd9f9ee60bb610d378d20f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 f123112acd70016daa2266a46fe6af19f38b3999830bcf78b5eadeb76471e6e8
MD5 54789b6d2a169ce8e957a27adb1a816d
BLAKE2b-256 884f72b5341e8dfb8427954028c3f8f80015c645ff02c884927a95d84373c84d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ff65bcd06505c943bb269dc0eec05fcc97b162c1f936dd22a2770ab983098946
MD5 9a8c4b53b2850e0023a5fd7fa4a818f7
BLAKE2b-256 490a3402ae75cb2628cb9016bee382d40c516eacb3c3ad463dcc9d0899dedcce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 f1788663b6aa97e934d8450433d9806e95b0cce1f014b4d66f0fe81f8dffa7cc
MD5 0bad6e4da37094820496ec0c134f3953
BLAKE2b-256 a81e584b62ccf1b27e2390e03a872d7ca0ac4780484ecb3e42138a6d644d5a80

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for opensynaptic-1.0.0rc3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 77c28b0f6e6dccd19a5efaf8f914b58044f418b80a7aa785a1ed10aca1ff9994
MD5 df31d2af4bd8cf3e5f18a3010a9e348c
BLAKE2b-256 06484969d8fb0e6da1e6c259304fca7e78da5279fcf1b8b020d4cc03c5370619

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