Skip to main content

Python client library for i3X servers

Project description

i3x-client

Python client library for i3X servers.

Installation

pip install i3x-client

For development:

pip install -e ".[dev]"

Quick Start

import i3x

# Connect to an i3X server
client = i3x.Client("http://localhost:8080")
client.connect()

# Explore the data model
namespaces = client.get_namespaces()
object_types = client.get_object_types()
objects = client.get_objects(type_id="some-type")

# Read values
value = client.get_value("element-id-1")
print(value.data[0].value, value.data[0].quality)

# Read historical values
history = client.get_history("element-id-1", start_time="2026-01-01T00:00:00Z")

# Write values
client.update_value("element-id-1", {"temperature": 72.5})

# Disconnect
client.disconnect()

Context Manager

with i3x.Client("http://localhost:8080") as client:
    namespaces = client.get_namespaces()

Subscriptions

client = i3x.Client("http://localhost:8080")
client.on_value_change = lambda client, change: print(f"{change.element_id}: {change.data}")
client.connect()

# Subscribe to value changes (creates subscription + registers + starts SSE stream)
sub = client.subscribe(["element-id-1", "element-id-2"])

# ... on_value_change fires automatically when values change ...

# Unsubscribe when done
client.unsubscribe(sub)
client.disconnect()

Authentication

client = i3x.Client("http://localhost:8080", auth=("api-key", "secret"))

API Reference

Client Methods

Connection

  • connect() — Connect to the server
  • disconnect() — Disconnect and stop all subscriptions
  • is_connected — Property indicating connection state

Callbacks

  • on_connect(client) — Called after successful connection
  • on_disconnect(client) — Called after disconnection
  • on_value_change(client, change) — Called when a subscribed value changes
  • on_subscribe(client, subscription) — Called after a subscription is created
  • on_error(client, error) — Called on stream/subscription errors

Exploration

  • get_namespaces() — List all namespaces
  • get_object_types(namespace_uri=None) — List object types
  • query_object_types(element_ids) — Query types by ID
  • get_relationship_types(namespace_uri=None) — List relationship types
  • query_relationship_types(element_ids) — Query relationship types by ID
  • get_objects(type_id=None, include_metadata=False) — List object instances
  • get_object(element_id) — Get a single object
  • list_objects(element_ids) — Get multiple objects by ID
  • get_related_objects(element_ids, relationship_type) — Get related objects

Values

  • get_value(element_id, max_depth=1) — Get last known value
  • get_values(element_ids, max_depth=1) — Get multiple last known values
  • get_history(element_id, start_time=None, end_time=None, max_depth=1) — Get historical values

Updates

  • update_value(element_id, value) — Update an element's value
  • update_history(element_id, value) — Update historical values

Subscriptions (High-Level)

  • subscribe(element_ids, max_depth=0) — Create subscription + register + start stream
  • unsubscribe(subscription) — Stop stream and delete subscription
  • sync_subscription(subscription) — Poll queued updates

Subscriptions (Low-Level)

  • create_subscription() — Create an empty subscription
  • register_items(subscription_id, element_ids, max_depth=0) — Register items
  • unregister_items(subscription_id, element_ids) — Unregister items
  • get_subscriptions() — List all subscriptions
  • get_subscription(subscription_id) — Get subscription details
  • start_stream(subscription_id) — Start SSE for an existing subscription
  • stop_stream(subscription_id) — Stop SSE without deleting subscription

Models

All models are frozen dataclasses with from_dict() classmethods.

  • Namespaceuri, display_name
  • ObjectTypeelement_id, display_name, namespace_uri, schema
  • RelationshipTypeelement_id, display_name, namespace_uri, reverse_of
  • ObjectInstanceelement_id, display_name, type_id, namespace_uri, parent_id, is_composition
  • VQTvalue, quality, timestamp
  • LastKnownValueelement_id, data (list of VQT), children
  • ValueChangeelement_id, data (list of VQT), children
  • Subscriptionsubscription_id, created, is_streaming, queued_updates, objects

Errors

All errors inherit from i3x.I3XError:

  • ConnectionError — Failed to connect
  • AuthenticationError — Auth rejected (401/403)
  • NotFoundError — Resource not found (404)
  • ServerError — Server error (5xx)
  • TimeoutError — Request timed out
  • SubscriptionError — Subscription operation failed
  • StreamError — SSE streaming error

License

MIT

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

i3x_client-0.1.5.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

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

i3x_client-0.1.5-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

File details

Details for the file i3x_client-0.1.5.tar.gz.

File metadata

  • Download URL: i3x_client-0.1.5.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for i3x_client-0.1.5.tar.gz
Algorithm Hash digest
SHA256 fc1357b77318548bc8f868ed6d24712f75e1b001ffb8e5ecf13b61e6508f690e
MD5 fc1a6d510e251f439d9b81c7447adb36
BLAKE2b-256 fe84108e0d73453b1da2bb7d2b301c8b3ba774798ade63de95a7e4510801457c

See more details on using hashes here.

File details

Details for the file i3x_client-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: i3x_client-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 12.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for i3x_client-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 31e1c43743f5c7e15a4cd46da8868d4dcf9f46a1180286bca46f1a599434972f
MD5 4db34d327bfcc40448cd3be692cdb2e7
BLAKE2b-256 fb0a2fa7b0e98413ee1a22721f6752b922e785eb6e320f15890399f7932cb126

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