Python module to communicate over the CoAP protocol
Project description
libcoapy
libcoapy project enables communication over the CoAP protocol (RFC 7252). The
llapi
module provides ctypes-based wrappers for the libcoap
C library. The libcoapy
module uses llapi
to provide a high-level class interface
to the libcoap functions.
Dependencies:
- libcoap
- ifaddr (optional, to query all IPs of an interface)
- netifaces (optional alternative to ifaddr)
Status
This project is still in early development. Several functions of the libcoap library are not yet available and existing high-level libcoapy APIs might change in the future.
Portability
libcoapy is a pure python module and the underlying libcoap supports several platforms like Linux, Windows, MacOS and Android. However, libcoap (and hence libcoapy) does not support all features on all platforms and with all possible SSL/TLS libraries.
If you want to use libcoapy with asyncio on platforms without epoll, like Windows,
it might be necessary to choose an event loop that supports add_reader()
. On
Windows you might need to add this to your code before initializing the loop:
if sys.version_info[0] == 3 and sys.version_info[1] >= 8 and sys.platform.startswith('win'):
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
Tools
- coap-gui - a small Tkinter-based GUI to interact with a CoAP server
- coarl - a CLI tool that provides a similar interface as curl
Example: client
from libcoapy import *
if len(sys.argv) < 2:
uri_str = "coap://localhost"
else:
uri_str = sys.argv[1]
ctx = CoapContext()
session = ctx.newSession(uri_str)
def rx_cb(session, tx_msg, rx_msg, mid):
print(rx_msg.payload)
session.ctx.stop_loop()
session.sendMessage(path=".well-known/core", response_callback=rx_cb)
ctx.loop()
Example: server
from libcoapy import *
def echo_handler(resource, session, request, query, response):
response.payload = request.payload
def time_handler(resource, session, request, query, response):
import datetime
now = datetime.datetime.now()
response.payload = str(now)
ctx = CoapContext()
ctx.addEndpoint("coap://[::]")
time_rs = CoapResource(ctx, "time")
time_rs.addHandler(time_handler)
ctx.addResource(time_rs)
echo_rs = CoapResource(ctx, "echo")
echo_rs.addHandler(echo_handler)
ctx.addResource(echo_rs)
ctx.loop()
More examples can be found in the examples
directory.
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
Built Distribution
File details
Details for the file libcoapy-2024.10.7.tar.gz
.
File metadata
- Download URL: libcoapy-2024.10.7.tar.gz
- Upload date:
- Size: 24.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | edc5ed16e89227044383d7bcd20e45ae1c146a6b912513bf69d03644760d7509 |
|
MD5 | 85d907d8de07cdcfe879b2ac95ef1aa9 |
|
BLAKE2b-256 | da562f67f1519c917fde74071ebebc99e73414b1462f68c7405dc08819805a39 |
File details
Details for the file libcoapy-2024.10.7-py3-none-any.whl
.
File metadata
- Download URL: libcoapy-2024.10.7-py3-none-any.whl
- Upload date:
- Size: 24.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a956add5d9023a541999745049f628d14d139008ec90f19be0ce137d3eaf165c |
|
MD5 | b3fb09c58e73ee768b5c82413e348bfe |
|
BLAKE2b-256 | f7bc1166ac2ef29959d88d24ae5fbb7d8d5a5cfe42dbc84cfc2e05a06132b3e6 |