Skip to main content

Pure-Python OPC UA servers from quasar Design files — the quasarnova family's no-codegen engine

Project description

kilonova

CI

What is this?

kilonova serves a quasar Design.xml + config.xml as a live OPC UA server in pure Python — no code generation, no C++. It produces the same address space as a quasar-generated server (same ns=2 string NodeIds, same dotted parent.child addressing), so quasar ecosystem tools — Cacophony/WinCC OA, UaoForQuasar clients, plain OPC UA clients — work against it unmodified.

A kilonova is the luminous flash of a neutron-star merger — a lighter, faster transient in the nova family. This kilonova is the pure-Python engine of the quasarnova family: successor of MilkyWay (Piotr Nikiel's 2021 pure-Python prototype; this rewrite was briefly named microquasar), rebuilt from scratch on asyncua 2.x.

Basic usage mode

  1. Install (Python ≥ 3.10): pip install kilonova
  2. Run your existing quasar server's design, unchanged: kilonova run --design Design/Design.xml --config bin/config.xml
  3. Point any OPC UA client at opc.tcp://host:4841 — the address space is quasar's.
  4. Dump a running server's address space (uasak_dump-style NodeSet2): kilonova dump --endpoint opc.tcp://127.0.0.1:4841 --output dump.xml

Device logic is plain Python (see doc/DeviceLogic.md):

from kilonova import Server

server = Server("Design.xml", config_path="config.xml")

@server.read("sca1.adc")                 # source variable: runs inside the client read
async def read_adc(obj):
    return await hardware.read_adc()

@server.method("sca1.reset")             # method handler
async def reset(obj):
    await obj.setOnline(0)               # generated setter, quasar naming

async with server:
    ...

What works

All 12 cases of quasar's own CI test suite pass against the reference nodesets (cache/source/calculated variables, methods incl. arguments, config entries and restrictions, singleVariableNode, design/config instantiation, StandardMetaData). Production designs were probed against live C++ servers of both backends: ATCA and CAEN at full structural parity; CanOpen surfaced two genuine C++ cross-backend quirks (kilonova sides with one backend on each). Details: doc/Parity.md.

Limitations

  • Device logic is registered per address at runtime — there is no generated D<Class> skeleton (that is the point).
  • Design-mandated children are instantiated unconditionally; C++ device logic may create some conditionally.
  • No server-side security policies yet (NoSecurity endpoint only).
  • Values live in asyncua's address space; extreme write rates were not a design goal.

Documentation

Credits

  • Paris Moschovakos (paris@moschovakos.com) — kilonova
  • Piotr Nikiel — quasar concept and architecture; MilkyWay, the predecessor

Interface stability

From 1.0.0, kilonova follows semantic versioning. The public API is kilonova.Server (constructor arguments, objects, the method/read/write decorators), kilonova.Design, QuasarObject (set_cv/get_cv/generated setters) and the exceptions in kilonova.errors. Anything imported from other modules is internal. Breaking changes get a deprecation release first.

Contact: paris@moschovakos.com

License: BSD-2-Clause.

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

kilonova-1.0.0.tar.gz (58.6 kB view details)

Uploaded Source

Built Distribution

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

kilonova-1.0.0-py3-none-any.whl (39.6 kB view details)

Uploaded Python 3

File details

Details for the file kilonova-1.0.0.tar.gz.

File metadata

  • Download URL: kilonova-1.0.0.tar.gz
  • Upload date:
  • Size: 58.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for kilonova-1.0.0.tar.gz
Algorithm Hash digest
SHA256 036cb4dfeab91854e9caba6d5f2d073b196d52f0f4e85a188764dcb2bb44f4d4
MD5 03317b11aaabfd58277a38f1bcf139ac
BLAKE2b-256 d1a37abb60d43b76c5e517e5363cbbc253fb3d4bc705eb54fecf2fccaf0fb876

See more details on using hashes here.

Provenance

The following attestation bundles were made for kilonova-1.0.0.tar.gz:

Publisher: release.yml on quasarnova-team/kilonova

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kilonova-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: kilonova-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 39.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for kilonova-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fed95a19977ec18429a515d2faf6e5a82fdbcb056b02e5619610bc17c0d998ce
MD5 53adbc65def1d798527886e3021fab76
BLAKE2b-256 9e0e85d9222dfbd1507960654d1d9229039c17b2b9e87b868155b0187179ed40

See more details on using hashes here.

Provenance

The following attestation bundles were made for kilonova-1.0.0-py3-none-any.whl:

Publisher: release.yml on quasarnova-team/kilonova

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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