Skip to main content

EDPM Transparent - Simple, Secure, Universal Hardware Communication

Project description

EDPMT - Electronic Device Protocol Management (Transparent)

License Python Version Platform Docker

Simple • Secure • Universal Hardware Communication

EDPMT is a revolutionary hardware communication library that provides a transparent, zero-configuration solution for controlling GPIO, I2C, SPI, UART, and other hardware interfaces. Built from the ground up with security, simplicity, and transparency in mind.

🌟 Key Features

🚀 Radical Simplicity

  • Single Universal Method: One execute(action, target, params) method for everything
  • Zero Configuration: Automatic detection of transport, TLS, and hardware
  • Minimal Dependencies: Only 2-3 required packages vs 15+ in traditional solutions
  • One File Deployment: Complete functionality in a single transparent module

🔐 Security First

  • Automatic TLS Encryption: Self-signed certificates generated automatically
  • HTTPS/WSS by Default: Secure communication out of the box
  • Optional Let's Encrypt: Easy integration with production certificates
  • No Hardcoded Secrets: No API keys, UUIDs, or hash authentication needed

🎯 Complete Transparency

  • Full Operation Logging: Every action logged with clear timestamps
  • Linear Data Flow: Simple Client → TLS → Server → Hardware → Response
  • Debug-Friendly: Easy troubleshooting with comprehensive logs
  • Layer Separation: Clean architecture with distinct responsibilities

🌐 Universal Access

  • Cross-Platform: Linux, Windows, macOS support
  • Multi-Language API: Same interface for Python, JavaScript, curl, etc.
  • Transport Auto-Selection: IPC (local), TLS (network), WSS (browser)
  • Hardware Abstraction: Works with real hardware or simulators

📦 Installation

🚀 Development Setup (Recommended)

For modern Python environments with externally-managed-environment:

# Clone repository
git clone https://github.com/stream-ware/edpmt.git
cd edpmt

# Setup development environment (no pip installation needed)
make dev-setup

# Start using EDPMT immediately
./bin/edpmt server --dev --port 8877
./bin/edpmt info
./bin/edpmt --help

🐍 Virtual Environment Setup

# Create isolated virtual environment
make venv-setup

# Activate and use
source venv/bin/activate
edpmt server --dev --port 8877

📦 Traditional Installation (if supported)

# Install from PyPI (when published)
pip install edpmt

# Or install from source (may fail on managed environments)
git clone https://github.com/stream-ware/edpmt.git
cd edpmt
pip install -e .

🔧 Hardware Support (Raspberry Pi)

# With dev-setup - hardware libraries auto-detected
make dev-setup
./bin/edpmt server --dev  # Auto-falls back to simulators

# With pip installation
pip install edpmt[rpi]     # Raspberry Pi GPIO support
pip install edpmt[all]     # All optional dependencies

Requirements

  • Python 3.8+ (3.9+ recommended)
  • Linux/Windows/macOS (Linux recommended for hardware access)
  • Optional: Docker for containerized deployment

Core Dependencies (installed automatically):

  • aiohttp - HTTP server and client
  • aiohttp-cors - Cross-origin resource sharing
  • cryptography - TLS certificate generation
  • websockets - WebSocket communication

Hardware Dependencies (optional):

  • RPi.GPIO - Raspberry Pi GPIO control
  • smbus2 - I2C communication
  • spidev - SPI communication
  • pyserial - UART/Serial communication

🚀 Quick Start

1. Start the Server

# Start with TLS (recommended)
edpmt server --tls --port 8888

# Or start in development mode (auto TLS + debug)
edpmt server --dev

Access Points:

2. Control Hardware

Python Client:

import asyncio
from edpmt import EDPMClient

async def main():
    # Auto-detects server URL and TLS settings
    client = EDPMClient()
    
    # GPIO Control
    await client.execute('set', 'gpio', pin=17, value=1)  # LED ON
    await client.execute('set', 'gpio', pin=17, value=0)  # LED OFF
    state = await client.execute('get', 'gpio', pin=18)   # Read pin
    
    # I2C Communication
    devices = await client.execute('scan', 'i2c')
    data = await client.execute('read', 'i2c', 
                               device=0x76, register=0xD0, length=1)
    
    # PWM Control
    await client.execute('pwm', 'gpio', 
                        pin=18, frequency=1000, duty_cycle=50)
    
    # Audio Generation
    await client.execute('play', 'audio', frequency=440, duration=1.0)
    
    await client.close()

asyncio.run(main())

JavaScript/Browser:

// WebSocket connection (real-time)
const ws = new WebSocket('wss://localhost:8888/ws');
ws.onopen = () => {
    // Control GPIO
    ws.send(JSON.stringify({
        action: 'set',
        target: 'gpio',
        params: { pin: 17, value: 1 }
    }));
};

// HTTP REST API (simple)
fetch('https://localhost:8888/api/execute', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
        action: 'scan',
        target: 'i2c'
    })
}).then(r => r.json()).then(console.log);

Command Line:

# Single command execution
edpmt client --execute set gpio '{"pin": 17, "value": 1}'

# Interactive mode
edpmt client --interactive
> set gpio {"pin": 17, "value": 1}
> scan i2c
> play audio {"frequency": 440, "duration": 1.0}

# Using curl
curl -k https://localhost:8888/api/execute \
  -H "Content-Type: application/json" \
  -d '{"action":"set","target":"gpio","params":{"pin":17,"value":1}}'

🐳 Docker Deployment

Raspberry Pi 3 with Docker Compose

# Clone repository
git clone https://github.com/stream-ware/edpmt.git
cd edpmt/examples/docker

# Start full stack (EDPMT + MQTT + InfluxDB + Grafana)
docker-compose up -d

# Access services:
# - EDPMT Web UI: https://localhost:8888
# - Grafana Dashboard: http://localhost:3000 (admin/admin)
# - MQTT Broker: localhost:1883

Single Container (Minimal)

# Build EDPMT image
docker build -t edpmt .

# Run with hardware access
docker run -d --name edpmt-server \
  --device /dev/gpiomem \
  --device /dev/i2c-1 \
  --device /dev/spidev0.0 \
  --device /dev/spidev0.1 \
  -p 8888:8888 \
  -v edpmt-certs:/app/certs \
  -v edpmt-logs:/app/logs \
  -e EDPM_TLS=true \
  -e EDPM_PORT=8888 \
  edpmt

Environment Variables

Variable Default Description
EDPM_PORT 8888 Server port
EDPM_HOST 0.0.0.0 Bind address
EDPM_TLS true Enable TLS encryption
EDPM_DEV false Development mode (debug + relaxed TLS)
EDPM_URL Auto Client connection URL
EDPM_CERT_PATH /app/certs Certificate storage path
EDPM_LOG_LEVEL INFO Logging verbosity

🔌 API Reference

Universal Execute Method

await client.execute(action: str, target: str, **params) -> Any

GPIO Operations

# Digital I/O
await client.execute('set', 'gpio', pin=17, value=1)        # Set HIGH
await client.execute('set', 'gpio', pin=17, value=0)        # Set LOW
state = await client.execute('get', 'gpio', pin=18)         # Read pin

# PWM Control
await client.execute('pwm', 'gpio', pin=18, frequency=1000, duty_cycle=50)
await client.execute('pwm', 'gpio', pin=18, frequency=0)    # Stop PWM

# Pin Configuration
await client.execute('config', 'gpio', pin=17, mode='out') # Output mode
await client.execute('config', 'gpio', pin=18, mode='in', pull='up') # Input with pullup

I2C Operations

# Device Discovery
devices = await client.execute('scan', 'i2c')              # Scan bus for devices

# Data Transfer
data = await client.execute('read', 'i2c', device=0x76, register=0xD0, length=1)
await client.execute('write', 'i2c', device=0x76, register=0xF4, data=[0x27])

# Raw I2C
data = await client.execute('read_raw', 'i2c', device=0x76, length=6)
await client.execute('write_raw', 'i2c', device=0x76, data=[0x1, 0x2, 0x3])

SPI Operations

# SPI Transfer
response = await client.execute('transfer', 'spi', data=[0x01, 0x02, 0x03])

# SPI Configuration
await client.execute('config', 'spi', bus=0, device=0, 
                     speed=1000000, mode=0, bits=8)

UART/Serial Operations

# Send Data
await client.execute('write', 'uart', data="Hello World\n")

# Read Data  
data = await client.execute('read', 'uart', timeout=1.0)

# Configuration
await client.execute('config', 'uart', port='/dev/ttyUSB0', 
                     baudrate=9600, timeout=1.0)

📚 Complete Examples

img.png See the examples/ directory for complete project implementations:

🛠️ CLI Usage

⚠️ Important: Use local wrapper script ./bin/edpmt for development setup

# Server management (development setup)
./bin/edpmt server --dev                    # Start in development mode
./bin/edpmt server --dev --port 8877        # Custom port
./bin/edpmt info                            # Show system information
./bin/edpmt --help                          # Show all commands

# Client operations
./bin/edpmt client --url https://localhost:8877  # Connect to server
./bin/edpmt client --interactive                 # Interactive mode

# Alternative with system installation
edpmt server --dev                    # Only if installed via pip/venv
edpmt info                            # System-wide command

🔧 Troubleshooting

Common Installation Issues

Problem: bash: edpmt: command not found

# ❌ Don't use: edpmt server --dev
# ✅ Use instead: ./bin/edpmt server --dev

Problem: externally-managed-environment error

# Solution 1: Use development setup (recommended)
make dev-setup
./bin/edpmt server --dev

# Solution 2: Use virtual environment
make venv-setup
source venv/bin/activate
edpmt server --dev

Problem: 'NoneType' object has no attribute 'setup' errors

# Fixed in latest version - hardware interfaces now properly fall back to simulators
./bin/edpmt server --dev  # Should run without hardware errors

Problem: [Errno 98] address already in use

# Use different port
./bin/edpmt server --dev --port 8877
./bin/edpmt server --dev --port 9999

Development Workflow

# 1. Clone and setup
git clone https://github.com/stream-ware/edpmt.git
cd edpmt

# 2. Development setup (no installation needed)
make dev-setup

# 3. Start server
./bin/edpmt server --dev --port 8877

# 4. Access web interface
# Open: https://localhost:8877

# 5. Run tests
make test

🔧 Development

Setup Development Environment

# Clone repository
git clone https://github.com/stream-ware/edpmt.git
cd edpmt

# Create virtual environment
python -m venv venv
source venv/bin/activate  # Linux/macOS
# or: venv\Scripts\activate  # Windows

# Install in development mode
pip install -e .[dev]

# Start development server
edpmt server --dev

📄 License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

🙋 Support


Made with ❤️ for simple, secure, and transparent hardware communication

EDPM Transparent (EDPMT)

EDPM Transparent (EDPMT) is a simple, secure, and universal server framework designed for hardware interaction and control. It provides a hardware-agnostic architecture with pluggable interfaces, allowing seamless switching between real hardware and simulators.

Key Features

  • Single Universal API: Use execute(action, target, params) for all hardware interactions.
  • Automatic TLS: Secure communication with self-signed certificates.
  • Multi-Transport Support: Supports Local IPC, Network TLS, and Browser WSS.
  • Hardware Abstraction: Automatically falls back to simulators if real hardware is unavailable.
  • Zero Configuration: Auto-detection of hardware and environment settings.
  • Comprehensive Web Interface: Real-time control and monitoring.
  • Docker Support: Easy deployment with hardware access.
  • Full Logging and Transparency: Detailed logs for debugging and monitoring.

Installation

To install EDPMT, follow these steps:

# Clone the repository
git clone https://github.com/stream-ware/edpmt.git
cd edpmt

# Set up for development
make dev-setup

For detailed installation instructions and troubleshooting, refer to the Installation Guide section below.

Usage

Starting the Server

# Start the server in development mode with simulators
make server-dev-sim

# Or use the CLI directly
./bin/edpmt server --dev --hardware-simulators

Accessing the Server

Once the server is running, you can access:

  • Web Interface: https://<host>:<port> (default: https://0.0.0.0:8888)
  • REST API: https://<host>:<port>/api/execute
  • WebSocket: wss://<host>:<port>/ws
  • Health Check: https://<host>:<port>/health

Hardware-Agnostic Framework

EDPMT now features a hardware-agnostic framework with pluggable hardware interfaces. This allows dynamic setup of hardware during initialization, with fallback to simulators if real hardware is unavailable. Currently supported interfaces include:

  • GPIO: Real (Raspberry Pi) and Simulated implementations.
  • I2C: Real (SMBus) and Simulated implementations.
  • SPI, UART, USB, I2S: Dummy implementations (to be expanded with real and simulated versions).

To run the server with simulated hardware:

make server-dev-sim

Examples

EDPMT comes with several examples to demonstrate its capabilities. You can find them in the examples directory:

Installation Guide

Prerequisites

  • Python 3.6 or higher
  • Access to hardware (Raspberry Pi for real hardware interaction) or use simulators

Steps

  1. Clone the Repository:
    git clone https://github.com/stream-ware/edpmt.git
    cd edpmt
    
  2. Development Setup:
    make dev-setup
    
  3. Running the Server:
    • For development with simulators:
      make server-dev-sim
      
    • For development with real hardware:
      make server-dev
      

Troubleshooting

  • Server Fails to Start: Ensure no other process is using the default port (8888). Use the --port option to specify a different port.
  • Hardware Not Detected: Verify hardware connections and permissions. Use --hardware-simulators flag to test with simulated hardware.
  • TLS Errors: If you encounter certificate issues, use --no-tls to disable TLS temporarily for debugging.

Contributing

Contributions to EDPMT are welcome! Please follow these steps:

  1. Fork the repository.
  2. Create a new branch for your feature or bug fix.
  3. Make your changes and commit them with descriptive messages.
  4. Push your changes to your fork.
  5. Create a pull request with a detailed description of your changes.

License

EDPMT is licensed under the Apache 2.0 License. See LICENSE for more information.

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

edpmt-1.0.3.tar.gz (62.9 kB view details)

Uploaded Source

Built Distribution

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

edpmt-1.0.3-py3-none-any.whl (55.6 kB view details)

Uploaded Python 3

File details

Details for the file edpmt-1.0.3.tar.gz.

File metadata

  • Download URL: edpmt-1.0.3.tar.gz
  • Upload date:
  • Size: 62.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for edpmt-1.0.3.tar.gz
Algorithm Hash digest
SHA256 cca24f2782c4354b3e15a2c78bd63dd54df5a58d629798005f43f90234890b10
MD5 0cc5f8fe9bee99feddc7d2da9ea98403
BLAKE2b-256 e8012a8f55fcb0207280b804ef60170006ee6c7335e78f2d916f282d473ceb60

See more details on using hashes here.

File details

Details for the file edpmt-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: edpmt-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 55.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for edpmt-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 b8d52dcc1b7123b0f99b683de1165397a8a6208df8d273c95489e8152e1a1adb
MD5 84ab0cfb60224e66632690d16061a6ee
BLAKE2b-256 57334c1e6ee258cbe8664549cdc94ecc834df0aebdfcf4e9554bc68effd24fda

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