Skip to main content

Python library for applications to interact with ROV (Remotely Operated Vehicle) systems over WebSocket

Project description

HydroWire

A Python library for applications to interact with HydroWire devices (ROV / robot peripherals) over WebSocket.

Installation

From PyPI (Recommended)

pip install hydrowire

From Source (Development)

git clone https://github.com/yourusername/hydrowire.git
cd hydrowire
pip install -e .

Features

  • 🔌 WebSocket Communication: Send JSON commands to ROV devices
  • 🎯 Device Targeting: Route commands to specific devices using device IDs
  • ⚙️ Async-First Design: Built on asyncio for efficient concurrent operations
  • 🎨 GUI Ready: Framework for integrating graphical interfaces
  • 📦 Library-First: Designed to be embedded in main applications

Installation

pip install -r requirements.txt

For development:

pip install -r dev-requirements.txt

Quick Start

Basic Usage

import asyncio
from hydrowire import HydroWireManager as ROVManager

async def main():
    # Initialize manager
    manager = ROVManager("ws://localhost:8000")
    
    # Start communication
    await manager.start()
    
    try:
        # Send a command to a device
        response = await manager.send_command(
            device_id="arm_1",
            command={"action": "move", "position": 45},
            expect_response=True
        )
        print(response)
    finally:
        await manager.close()

asyncio.run(main())

Using the Global Start Function

import asyncio
from hydrowire import start

async def main():
    # Quick start with convenience function
    manager = await start("ws://localhost:8000")
    
    try:
        await manager.send_command(
            device_id="camera_main",
            command={"action": "capture"}
        )
    finally:
        await manager.close()

asyncio.run(main())

API Reference

ROVManager

The main class for interacting with ROV systems.

Initialization

manager = ROVManager(rov_uri, timeout=10.0)
  • rov_uri (str): WebSocket URI for ROV (e.g., ws://localhost:8000)
  • timeout (float): Command timeout in seconds (default: 10.0)

Methods

async initialize(): Initialize connection to ROV

async start(gui_enabled=False, **gui_config): Start the ROV manager and optionally launch GUI

async send_command(device_id, command, expect_response=False): Send a command to a device

  • device_id (str): Target device identifier (e.g., "arm_1", "camera_main")
  • command (dict): Command object with action and parameters
  • expect_response (bool): Wait for response if True
  • Returns: Response dict if expect_response=True, otherwise None

async close(): Close ROV connection

async run(gui_enabled=False, **gui_config): Run manager in blocking mode

attach_gui(gui_app): Attach GUI application instance

register_command_handler(command_type, handler): Register custom command handler

Global Functions

async start(rov_uri, gui_enabled=False, **gui_config): Convenience function to create and start a manager

async get_manager(): Get the global manager instance

Command Structure

Commands are sent with a structured format where parameters are grouped under a params key:

Your code:

await manager.send_command(
    device_id="led",
    command={"action": "pwm", "duty_cycle": 0.5, "enable": true}
)

What gets sent over WebSocket:

{
  "device": "led",
  "cmd": "pwm",
  "params": {
    "duty_cycle": 0.5,
    "enable": true
  }
}

This structured format makes it easy for the ROV backend to:

  • Route commands to the correct device
  • Access the command type directly
  • Parse all parameters from a single params object

Running Tests

pytest tests/ -v

Examples

See the examples/ directory for more detailed usage patterns.

Architecture

  • rov_lib/client.py: Low-level WebSocket client
  • rov_lib/manager.py: High-level manager with device routing
  • rov_lib/__init__.py: Package exports

Future Enhancements

  • GUI framework integration
  • Device discovery and management
  • Command queuing and priority
  • Connection recovery and reconnection
  • Telemetry and logging

License

(To be determined)

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

hydrowire-0.0.1.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

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

hydrowire-0.0.1-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file hydrowire-0.0.1.tar.gz.

File metadata

  • Download URL: hydrowire-0.0.1.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for hydrowire-0.0.1.tar.gz
Algorithm Hash digest
SHA256 a5dce20a54af200a55a98f81824e5071396ac6711d72faa2fd1d05919f223410
MD5 4a9d11e78abdae43379317b6628855b2
BLAKE2b-256 6f789d34eb0cb9e9939d1e73814625165c6e0c8e4bcf447f8201e62435482c87

See more details on using hashes here.

File details

Details for the file hydrowire-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: hydrowire-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 10.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for hydrowire-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c1da76e74f8c2288400b4afb6cbc07888f2521436e1dc89bdf33bad62bf29940
MD5 d03ab89321bb57436425191becfa8198
BLAKE2b-256 7e69463536a811f63379536bd3313b08f9d47436dba50ad8c0ec62bc068bb3ee

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