Skip to main content

Python client for PhyHub - events, actions, DataChannel, and MediaStream

Project description

Phystack Hub Client (Python)

Python client for PhyHub that provides:

  • Events and Actions via twin messaging
  • WebRTC DataChannel for P2P data
  • WebRTC MediaStream for P2P video/audio (with webcam support)

Installation

pip install phystack-hub-client

Or install from source:

pip install -e .

Usage

Basic Connection

import asyncio
from phystack.hub_client import PhyHubClient

async def main():
    # Create client from environment variables
    async with PhyHubClient.from_env() as client:
        instance = await client.get_instance()
        print(f"Connected as twin: {instance.id}")

asyncio.run(main())

Environment Variables

  • DEVICE_ID or PHYGRID_DEVICE_ID: Device identifier
  • ACCESS_KEY or PHYGRID_DEVICE_KEY: Access key
  • PHYHUB_URL or PHYHUB_REGION: Server URL or region (eu, us, etc.)
  • TWIN_ID or INSTANCE_ID: Optional specific twin ID

Events

# Listen for events
instance.on("my-event", lambda data, respond: print(f"Received: {data}"))

# Send events to a peer
instance.to(peer_twin_id).emit("my-event", {"message": "hello"})

Actions (Request-Response)

def on_result(result):
    print(f"Response: {result.status} - {result.message}")

# Send action with callback
instance.to(peer_twin_id).emit("my-action", {"command": "process"}, callback=on_result)

# Handle actions
def handle_action(data, respond):
    if respond:
        respond(TwinMessageResult(
            status=TwinMessageResultStatus.SUCCESS,
            message="Processed",
            data={"result": "done"}
        ))

instance.on("my-action", handle_action)

WebRTC DataChannel

# Create DataChannel connection
dc = await client.create_data_channel(peer_twin_id, is_initiator=True)

# Send data
dc.send({"message": "hello via WebRTC"})

# Receive data
dc.on_message(lambda data: print(f"Received: {data}"))

# Close when done
dc.close()

WebRTC MediaStream (with Webcam)

# Create MediaStream connection (streams from webcam)
stream = await client.create_media_stream(peer_twin_id, is_initiator=True)

# Check if streaming
print(f"Streaming: {stream.is_open()}")
print(f"Has video: {stream.video_track is not None}")

# Close when done
stream.close()

Testing

Python-Node Interoperability Test

Test communication between Python and Node.js hub-client implementations:

# Setup credentials
./scripts/python-node-test.sh setup

# Run test (Python initiator, Node.js responder)
./scripts/python-node-test.sh run

# Run reversed (Node.js initiator, Python responder)
./scripts/python-node-test.sh run-rev

Browser Test Backend

Use the Python client as initiator for the browser-based responder:

export DEVICE_ID=your-device-id
export ACCESS_KEY=your-access-key
export PEER_TWIN_ID=browser-responder-twin-id
export PHYHUB_REGION=eu

python examples/browser_test_backend.py

Dependencies

  • python-socketio[asyncio] - Socket.IO client
  • aiortc - WebRTC implementation
  • opencv-python - Webcam capture
  • aiohttp - HTTP client

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

phystack_hub_client-0.2.1.tar.gz (32.8 kB view details)

Uploaded Source

Built Distribution

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

phystack_hub_client-0.2.1-py3-none-any.whl (32.8 kB view details)

Uploaded Python 3

File details

Details for the file phystack_hub_client-0.2.1.tar.gz.

File metadata

  • Download URL: phystack_hub_client-0.2.1.tar.gz
  • Upload date:
  • Size: 32.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for phystack_hub_client-0.2.1.tar.gz
Algorithm Hash digest
SHA256 95b48d3f014e7f667476f83dcfb4420b46d6771429d097f2e0c1ebfce8911c3b
MD5 c11cdf669d0671171171e71a0708113a
BLAKE2b-256 6460bae5f56488b379a52cae4f8e4fd3717ea319749403bd63b529d0c59f928d

See more details on using hashes here.

Provenance

The following attestation bundles were made for phystack_hub_client-0.2.1.tar.gz:

Publisher: build-and-publish.yml on phystack/phystack-pypi

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

File details

Details for the file phystack_hub_client-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for phystack_hub_client-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6cc1f2957f5a1aab25098d8a24dd602135d897b09d68955f54b7670d930000a8
MD5 21d005960b81d8eb817905e86bce2690
BLAKE2b-256 0026d245563ef471f3ba743feaa7fcb54d06d54594b755b3f7e8149d8bd85337

See more details on using hashes here.

Provenance

The following attestation bundles were made for phystack_hub_client-0.2.1-py3-none-any.whl:

Publisher: build-and-publish.yml on phystack/phystack-pypi

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