Skip to main content

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 (v4.3.5 or higher is recommended)
  • ifaddr (optional, to query all IPs of an interface)
  • netifaces (optional alternative to ifaddr)

Status

The llapi module provides a complete interface for the current version of the libcoap library. The high-level API of libcoapy is still missing some parts and 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())

Provided tools

In the examples folder, this repo provides the following general-purpose 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

Documentation

API documentation: https://anyc.github.io/libcoapy/

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

libcoapy-2026.5.6.tar.gz (36.7 kB view details)

Uploaded Source

Built Distribution

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

libcoapy-2026.5.6-py3-none-any.whl (40.4 kB view details)

Uploaded Python 3

File details

Details for the file libcoapy-2026.5.6.tar.gz.

File metadata

  • Download URL: libcoapy-2026.5.6.tar.gz
  • Upload date:
  • Size: 36.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for libcoapy-2026.5.6.tar.gz
Algorithm Hash digest
SHA256 23f06b500381df0a2721c91bd0b32b570e410f1d5e5ffe7d5d98e9a59efe8bd4
MD5 a80baa1bbde288888801319f9ed11801
BLAKE2b-256 fceaf8c96a270aeeceea5b22259c5289d0e9c92409b99d238cae28cfc2bfe26b

See more details on using hashes here.

File details

Details for the file libcoapy-2026.5.6-py3-none-any.whl.

File metadata

  • Download URL: libcoapy-2026.5.6-py3-none-any.whl
  • Upload date:
  • Size: 40.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for libcoapy-2026.5.6-py3-none-any.whl
Algorithm Hash digest
SHA256 7c3b1ed34d1c95899074dc8c2be7dd4574b8886b9121f95bb3af7b5c4327b7c4
MD5 98a2b7d3995f8933b3e27a883fcc12ad
BLAKE2b-256 8df9dc08eb187ed7c6b40bb2fa3e66b11bae3f5ea3cb295f49b9b8e2c3b28e46

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