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.3.tar.gz (14.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.3-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: hydrowire-0.0.3.tar.gz
  • Upload date:
  • Size: 14.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.3.tar.gz
Algorithm Hash digest
SHA256 bbd3e0735f0b50f28dbe80375dc399b7e89055903967e94a47fae1fe16dc616d
MD5 1ebc7c4b6107d414206f611369936bcf
BLAKE2b-256 5b8221cabcb62e6e67eadede3f4d1f7437d9e8603d501a481ab825785b358fcd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hydrowire-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 11.9 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6c1c80d9083d7e543e575c89b6a8f26dffe02e5faa96bc42b8fa48470b77d2f1
MD5 24b780aa561f61d0171cdf74a64add1b
BLAKE2b-256 464e5a89f1760d0b735851d6394a504b9b62e82eb9c97f4cc504a5e3fea47149

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