Simple HTTP-based P2P framework for IoT
Project description
EasyHTTP
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) andEasyHTTPAsync(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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d828b16ed5cce902b6b2d1ebd8fb8973f88b309e9e0b9bffd704a2be14a6f646
|
|
| MD5 |
2dcf3e62e84eb5b88252dc652223bb55
|
|
| BLAKE2b-256 |
10bb8e13b6b9f0a219aa88fc04ac38c233d392a14a62c93b3fc5111bbbf2d8ef
|
File details
Details for the file easyhttp_python-0.4.0a6-py3-none-any.whl.
File metadata
- Download URL: easyhttp_python-0.4.0a6-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bbc2bdb417ee813670295e500c5fc8c73a0973edda0a63a83b645f3ffcc3a38
|
|
| MD5 |
501da0a3758a911d81aaf57c2f03ca3c
|
|
| BLAKE2b-256 |
cb6a591fdf27c70023b2c22c8a133d43c442f2cf6f1a454cbc859b44809ce599
|