pamoja

An SDK for IoT, robotics, and drones

pamojaRev 0.2.0MIT licensepamoja.molex.cloud

Python reference#

Every pamoja module, generated by pdoc from this commit. Each row below opens a module's API pages, and the same capability in the other three languages is one step away.

Each capability is its own distribution and one module of the pamoja namespace, so an import names the capability it uses, and the page for each module lists its classes and functions with their signatures. pamoja installs all of them.

Each module is hand-written Python over pamoja-native, the compiled engine, whose type stub ships as pamoja/_native/__init__.pyi so an editor sees every native signature; pamoja.raw re-exports that contract for anything the facades do not cover.

By domain#

Six of the chapters hold more than one capability, and each is a package of its own on PyPI, pamoja-<domain>, which brings its capabilities in and re-exports each under its own name:

Every package#

One row per capability: the install line, the module and its reference, the guide with the worked example, and the same capability on the other three reference pages, one step away.

Engine#

Your own devicepamoja.core

A sensor and an actuator pamoja has never heard of, written against the core traits, run against a rule, and published with nothing plugged in

pip install pamoja-core
Engine surfacepamoja.core

The transport every link shares (send, receive, subscribe, and a faulty wrapper for tests) and the runtime version

pip install pamoja-core

Identity#

Device identitypamoja.security

ed25519 device identity: sign a reading and verify it, so a gateway can prove it is authentic

pip install pamoja-security

Codecs#

Codecspamoja.codec

CBOR, JSON, and raw codecs behind one trait, and batch packing for metered links: delta and varint for integers, and a quantizer for f32 readings

pip install pamoja-codec

Helpers#

Helperspamoja.kit

Plain-language helper math: smoothing, calibration, PID and thermostat control, a trigger with hysteresis, trend and surge prediction, rolling windows, unit conversions, geo, and robot motion

pip install pamoja-kit

Field I/O#

Serial framingpamoja.serial

SLIP and COBS byte stuffing with streaming decoders, so a UART byte stream carries discrete packets

pip install pamoja-serial
Modbus RTUpamoja.modbus

Modbus RTU for RS485 field devices: a client that polls them over a serial port with the line's timing, simulated devices that answer as real ones do, and the frames with their CRC-16/MODBUS

pip install pamoja-modbus
CAN and J1939pamoja.can

CAN 2.0 and CAN FD frames with 11- and 29-bit identifiers, J1939 decode and compose, and a node on a bus, simulated or a Linux interface through SocketCAN

pip install pamoja-can
I2C, SPI, and GPIOpamoja.gpio

I2C address frames with reserved-range checks, the four SPI clock modes, active-high or active-low switches and contacts, and GPIO lines opened on a Linux board

pip install pamoja-gpio
Busespamoja.hal

The embedded-hal traits every driver takes, a bit-banged 1-Wire bus, simulated parts and scripted buses that stand in for hardware, the Linux backends over i2c-dev, spidev, and the GPIO character device, one I2C bus and one serial port a program and its drivers share, and delays that sleep or only count

pip install pamoja-hal

Sensing and actuation#

Sensor driverspamoja.sensors

Datasheet-anchored drivers for eleven parts, from every language: the BME280, BMP280, DS18B20, HDC1080, INA219, INA226, ADS1115, OPT3001, SCD4x, SHT3x, and TMP117

pip install pamoja-sensors
Actuator driverspamoja.actuators

A PCA9685 driver for servos, LEDs, and valves, and stepper drivers for four coil lines or a step and direction chip, in every language

pip install pamoja-actuators

Radio and reach#

LoRa airtime and rangepamoja.lora

Time-on-air, duty-cycle off-time, the regional channel plans a LoRa node must keep to, and the link budget that sets its range

pip install pamoja-lora
LoRaWANpamoja.lorawan

LoRaWAN 1.0.x MAC framing, AES-CMAC and AES encryption, and both halves of the OTAA join

pip install pamoja-lorawan
LoRa radiospamoja.radios

The Semtech SX126x and SX127x LoRa radios and the SX1302 and SX1303 gateway concentrators: their commands, registers, and decoders, the amplifier setting a regional EIRP ceiling allows, a duty-cycle guard, and simulated chips that stand in for a module

pip install pamoja-radios
LoRaWAN gatewayspamoja.gateway

What a LoRaWAN gateway speaks: the Semtech packet forwarder protocol and the Basics Station protocol on both sides, the network side of a single site, and a bridge from the radio to the link that leaves it

pip install pamoja-gateway
Mesh framespamoja.mesh

Addressed, hop-limited, CRC-checked frames and duplicate suppression that floods a packet exactly once

pip install pamoja-mesh
Routingpamoja.routing

Reverse-path routing that learns the cheapest route from overheard traffic

pip install pamoja-routing

Trust and operation#

Audit logpamoja.audit

A tamper-evident, hash-chained log; altering, reordering, or dropping a record breaks verification

pip install pamoja-audit
Secured sessionpamoja.session

X25519 key agreement, HKDF, and ChaCha20-Poly1305 with an anti-replay window, with no TLS stack

pip install pamoja-session
Signed updatespamoja.update

Signed firmware manifests, streaming image verification, and A/B slots that fall back on their own

pip install pamoja-update
Powerpamoja.power

Duty cycling and an energy-aware governor that stretches work as the battery drains and holds its mode against a wandering charge

pip install pamoja-power
Telemetrypamoja.telemetry

Observability that ships only what is worth the bytes as link cost rises, while counting everything

pip install pamoja-telemetry

Transports and testing#

MQTTpamoja.mqtt

An MQTT client with the topic and wildcard rules, acknowledged delivery, retained messages, a last will, and TLS, as the core transport

pip install pamoja-mqtt
CoAPpamoja.coap

A CoAP client and the server it reports to, over UDP, with confirmable delivery and observe

pip install pamoja-coap
Loopbackpamoja.loopback

An in-process transport with topic matching, a fault injector, and outages on demand, for testing with no broker

pip install pamoja-loopback
Store and forwardpamoja.sync

Offline-first queues in memory or on disk, bounded or not, the on-disk one surviving power loss, and the drain that forwards them in order when a link returns

pip install pamoja-sync
Transport ladderpamoja.ladder

Cheapest reachable link first, buffering to a store when every link is down

pip install pamoja-ladder
Event buspamoja.bus

An in-memory typed publish and subscribe event bus, with publishers that never wait and subscribers that count what they miss

pip install pamoja-bus
Simulatorspamoja.sim

Noisy and replay sensors, a recording actuator, a simulated robot that dead-reckons its pose, and a link that loses sends on a pattern

pip install pamoja-sim

Profiles and robotics#

Device profilespamoja.profile

Named, ready-to-run device profiles from plain data or a JSON manifest, run as a node in every language

pip install pamoja-profile
Rulespamoja.profile

Rules between nodes as a file: a condition over one node's topic with hysteresis, and the actions that drive another node's actuator or publish, run by an engine off any link in every language, or judged reading by reading

pip install pamoja-profile
Robot motionpamoja.kit

Wheel speeds for differential, skid-steer, car-like, and mecanum chassis, a two-link arm and Denavit-Hartenberg forward kinematics, odometry, waypoint guidance, a safety gate, and servo, ESC, and encoder conversions

pip install pamoja-kit
ROS 2 rulespamoja.ros2

ROS 2 names, RIHS01 type hashes, CDR encoding, and rmw_zenoh key assembly, with no ROS 2 installed

pip install pamoja-ros2
Zenoh keyspamoja.zenoh

Zenoh key expressions: validity, canonical form, matching, and whether two expressions share or cover keys

pip install pamoja-zenoh

Edit this page on GitHub