A CoAP client over UDP with confirmable delivery and observe. One capability of pamoja, one memory-safe Rust core with bindings for TypeScript, Python, and C#.
npm install @pamoja/coap
This pulls in @pamoja/native, the compiled engine. npm install pamoja is the whole framework in one package.
The test that runs in CI, spliced here as it ran.
From bindings/node/guides/coap.ts:
import { CoapClient, Reliability } from '@pamoja/coap'
async function main(): Promise<void> {
// CoAP runs over UDP and opens no session, so connecting only binds a local socket.
// Nothing is listening on the far side here, and for a non-confirmable send nothing
// needs to be.
const reporter = new CoapClient({
host: '127.0.0.1',
port: 5683,
reliability: Reliability.NonConfirmable,
})
await reporter.connect()
console.log(`reporter connected: ${await reporter.isConnected()}`)
// Non-confirmable delivery is at most once: the datagram leaves unacknowledged, which is
// what a battery-powered node sends when one missed reading costs nothing.
await reporter.send('sensors/1/temperature', Buffer.from('21.5'))
console.log('reporter sent 21.5 and did not wait for an answer')
// A command is different: it has to arrive. Confirmable delivery retransmits until an
// acknowledgement comes back. RFC 7252 fixes the defaults at a two-second wait and four
// retransmissions; both are cut short here so the guide does not sit waiting.
const commander = new CoapClient({
host: '127.0.0.1',
port: 5683,
reliability: Reliability.Confirmable,
ackTimeoutMs: 20,
maxRetransmits: 1,
})
await commander.connect()
try {
await commander.send('actuators/valve', Buffer.from('open'))
console.log('commander the valve acknowledged the command')
} catch (error) {
console.log(`commander gave up unacknowledged: ${(error as Error).message}`)
}
await reporter.disconnect()
console.log(`reporter disconnected: ${!(await reporter.isConnected())}`)
}
main()
| Language | Package | Reference |
|---|---|---|
| Rust | pamoja-coap |
reference, docs.rs, install |
| TypeScript | @pamoja/coap |
reference, install |
| Python | pamoja-coap |
reference, install |
| C# | Pamoja.Coap |
reference, install |
@pamoja/coap reference, every class, function, and type this package exports.MIT
Ergonomic facade over the generated CoAP binding.
CoAP is the transport for links where MQTT is more than the budget allows: it runs over UDP, its headers are a handful of bytes, and a node can fire a reading and forget it rather than holding a session open.
The reliability choice is re-exported as a runtime Reliability object, because the generated enum is types-only.