Skip to main content

Simple HTTP-based P2P framework for IoT

Project description

EasyHTTP

GitHub Protocol Version Development Status License Python

A lightweight HTTP-based P2P framework for IoT and device-to-device communication

🛠️ Changelog

  • Added UDP multicast discovery
  • Fixed some bugs

📖 About

EasyHTTP is a simple yet powerful framework with asynchronous core that enables P2P (peer-to-peer) communication between devices using plain HTTP.

Key Features:

  • 🔄 P2P Architecture - No central server required
  • 🧩 Dual API: EasyHTTP (synchronous) and EasyHTTPAsync (asynchronous) with the same methods
  • 📡 Event-Driven Communication - Callback-based architecture
  • 🆔 Human-Readable Device IDs - Base32 identifiers instead of IP addresses
  • ✅ Easy to Use - Simple API with minimal setup
  • 🚀 Performance - Asynchronous code and lightweight libraries(FastAPI/aiohttp)
  • ⚙️ Auto-detect - Devices automatically find each other

🏗️ Architecture

Device Identification

Instead of using hard-to-remember IP addresses, each device in the EasyHTTP network has a unique 6-character identifier:

  • Format: 6 characters from Base32 alphabet (without ambiguous characters)
  • Alphabet: 23456789ABCDEFGHJKLMNPQRSTUVWXYZ
  • Examples: 7H8G2K, AB3F9Z, X4R7T2
  • Generation: Randomly generated on first boot, stored in device configuration

Command System

EasyHTTP uses a simple JSON-based command system:

Command Value Description
PING 1 Check if another device is reachable
PONG 2 Response to ping request
FETCH 3 Request data from a device
DATA 4 Send data or answer to FETCH
PUSH 5 Request to write/execute on remote device
ACK 6 Success/confirmation
NACK 7 Error/reject

Basic Example with Callbacks (synchronous)

import time
from easyhttp_python import EasyHTTP

# Callback function
def handle_data(sender_id, data, timestamp):
    # Callback for incoming DATA responses
    print(f"From {sender_id}: {data}")

def handle_fetch(sender_id, query, timestamp):
    # Callback for FETCH requests - returns data when someone requests it
    print(f"FETCH request from {sender_id}")
    return {
        "temperature": 23.5,
        "humidity": 45,
        "status": "normal",
        "timestamp": timestamp
    }

def handle_push(sender_id, data, timestamp):
    # Callback for PUSH requests - handle control commands
    print(f"Control from {sender_id}: {data}")
    if data and data.get("command") == "led":
        state = data.get("state", "off")
        print(f"[CONTROL] Turning LED {state}")
        # Here you can add real GPIO control
        return True  # Successful → ACK
    return False  # Error → NACK

def main():
    # Initializing EasyHTTP - sync wrapper of EasyHTTPAsync
    easy = EasyHTTP(debug=True, port=5000)
    
    # Setting up callback functions
    easy.on('on_ping', handle_ping)
    easy.on('on_pong', handle_pong)
    easy.on('on_fetch', handle_fetch)
    easy.on('on_data', handle_data)
    easy.on('on_push', handle_push)
    
    easy.start()  # Starting server
    print(f"Device {easy.id} is running on port 5000!")
    
    # Monitoring device's status
    try:
        while True:
            if easy.ping("ABC123"):
                print("Device ABC123 is online")
            else:
                print("Device ABC123 is offline")
            
            time.sleep(5)
    
    except KeyboardInterrupt:
        print("\nStopping device...")
        easy.stop()  # Stopping server

# Starting main process
if __name__ == "__main__":
    main()

📦 Version History

Version Date Changes
0.4.0 2026-11-03 UDP Discovery, auto-detect
0.3.3 2026-03-01 Fixed imports, renamed to easyhttp_python
0.3.2 2026-02-14 Context managers

More examples available on GitHub

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

easyhttp_python-0.4.0a6.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

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

easyhttp_python-0.4.0a6-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file easyhttp_python-0.4.0a6.tar.gz.

File metadata

  • Download URL: easyhttp_python-0.4.0a6.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for easyhttp_python-0.4.0a6.tar.gz
Algorithm Hash digest
SHA256 d828b16ed5cce902b6b2d1ebd8fb8973f88b309e9e0b9bffd704a2be14a6f646
MD5 2dcf3e62e84eb5b88252dc652223bb55
BLAKE2b-256 10bb8e13b6b9f0a219aa88fc04ac38c233d392a14a62c93b3fc5111bbbf2d8ef

See more details on using hashes here.

File details

Details for the file easyhttp_python-0.4.0a6-py3-none-any.whl.

File metadata

File hashes

Hashes for easyhttp_python-0.4.0a6-py3-none-any.whl
Algorithm Hash digest
SHA256 1bbc2bdb417ee813670295e500c5fc8c73a0973edda0a63a83b645f3ffcc3a38
MD5 501da0a3758a911d81aaf57c2f03ca3c
BLAKE2b-256 cb6a591fdf27c70023b2c22c8a133d43c442f2cf6f1a454cbc859b44809ce599

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