Skip to content
wotex-projectPublic

About

W3C Web of Things for Elixir: one Thing Description model and runtime across HTTP, MQTT, CoAP, OPC UA, Matter, BACnet, Modbus, BLE and Thread.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

WoTEx

Reusable IoT protocols and W3C Web of Things building blocks for Elixir.

CI License Status: Experimental

Warning

WoTEx is experimental. Package specifications define the intended behavior; catalogue status and executable evidence state what each package implements and tests. Missing implementation or evidence does not reduce a specification. No package claims certification.

WoTEx represents W3C Web of Things descriptions as Elixir values and connects their Properties, Actions and Events to protocol-specific code. The repository contains twenty independent Mix projects: the value model, a runtime, bindings, protocol packages, conformance tools and a consumer laboratory.

This is a development monorepo, not an umbrella application. Each package has its own version, dependencies, tests and release archive. No package from this repository has been published to Hex yet. Until that changes, use a pinned repository commit as described under Using WoTEx.

Protocols, external profiles and processing

The family serves industrial and other IoT consumers. Protocol/session mechanics and generic profile-reading/authoring tools belong here; consumers own model/ quantity templates and private drafts. Optional data exports require local import/review; no definitions repo or AI provider is required. Adding a supported model should add data and qualification, not a sensor-name branch in Runtime. The profile/stream allocation defines this boundary and its delivery plan. The profile-reader is registered in the twenty-package graph; its catalogue records the implemented bounded reader, compiler and authoring APIs. Protocol-stream targets remain prospective. Streaming protocols preserve packets, clock information and lifecycle; DSP, capture/render, recording, surveillance analysis and deployment policy belong to separately selected components/consumers. Matter is one optional protocol, not the family-wide IoT capability vocabulary.

From a description to an exchange

A Thing Description says what a Thing exposes and which Forms can reach it. WoTEx keeps that description separate from the code that performs an exchange:

  1. wotex parses and validates the Thing Description.
  2. wotex_runtime selects a Form for the requested interaction.
  3. A binding or protocol package performs the exchange through a transport supplied by the application.

The same application-facing interaction can therefore use HTTP, MQTT, CoAP, OPC UA, Matter, BACnet, Modbus or Bluetooth Low Energy without putting protocol details in the Thing Description model. Thread support covers network inspection and OpenThread SDK management.

Package family

Parses, validates and encodes Thing Descriptions 1.1 and Thing Models 1.1.

Provides ConsumedThing and ExposedThing runtimes, Form selection, transports and credentials.

Implements Thing Description Directory mechanics over consumer-owned storage.

Defines exchange and lifecycle values shared between edge and cloud systems.

Builds deterministic Nx batches from typed observations.

Maps Forms to HTTP exchanges and Server-Sent Events.

Maps Forms to MQTT topics, messages and transport operations.

Connects Web of Things interactions to BACnet.

Connects Web of Things interactions to Bluetooth Low Energy through BlueZ.

Connects Web of Things interactions to CoAP, with DTLS and OSCORE support.

Connects Web of Things interactions to Matter through connectedhomeip.

Connects Web of Things interactions to Modbus TCP.

Connects Web of Things interactions to OPC UA through open62541.

Inspects Thread networks and manages the OpenThread SDK.

Provides bounded datagram transport with explicit socket ownership. Its catalogue records the remaining interoperability evidence.

Defines bounded installed behaviour and observation values for an optional pure routine kernel. The catalogue separates this foundation from the planned kernel, temporal host and analysis obligations.

Reads bounded external profiles and consumer-supplied semantic descriptors. The catalogue separates reader evidence from planned interpretation/authoring; consumers own data, installed bindings, trust and physical qualification.

Provides a bounded TI ZNP coordinator host and a finite ZCL attribute codec. Its catalogue records the remaining hardware and network evidence.

Runs conformance vectors and produces evidence reports for Web of Things libraries.

Hosts scenarios, evidence records, Workbench, Nerves hosts and Nx experiments.

The package graph records dependencies and ownership boundaries. Consumers install only the packages they use.

Ownership stays with the application

Loading a WoTEx package starts no process, reads no application environment and performs no I/O. Packages return child specifications when they need supervised work. The application remains responsible for Thing state, identifiers, credentials, policy, persistence, supervision and retries.

Protocol packages accept transports and credential providers explicitly. Failures use structured errors with stable codes, and documented limits bound untrusted input and long-lived work. Native stacks such as open62541, BlueZ and connectedhomeip run outside the BEAM in owned operating-system processes.

Using WoTEx

Set up the repository and run one package's tests from the root:

git clone https://github.com/wotex-project/wotex.git
cd wotex
mix setup
mix pkg wotex test

Before the packages are published, an application can depend on a package at a specific repository commit:

@wotex_ref "<commit>"

def deps do
  [
    {:wotex,
     git: "https://github.com/wotex-project/wotex.git",
     ref: @wotex_ref,
     sparse: "packages/wotex",
     override: true}
  ]
end

Pin every WoTEx dependency to the same commit. The consumer guide shows how to add packages with transitive WoTEx dependencies, use a local checkout and sync the concise usage-rules.md for each installed package's completed specification.

All packages are below 1.0, so a minor version may change a public API. Package READMEs contain package-specific examples and toolchain requirements.

Specifications and evidence

WoTEx does not treat a package name as a claim of complete protocol support. Each specification names its standards revision, acceptance cases and executable evidence. Its catalogue records whether the implementation is planned, partial or complete. Native and interoperability evidence uses pinned source identities and records the limits of each result; no package claims certification.

Start with the documentation index for specifications, plans, provenance and guides. The package catalogue is also available as a single generated family catalogue.

Contributing

CONTRIBUTING.md covers repository setup, package-scoped commands and validation. Changes to behavior begin with the owning package's specification and finish with evidence for the affected boundary.

Governance · Security · Code of Conduct · License

About

W3C Web of Things for Elixir: one Thing Description model and runtime across HTTP, MQTT, CoAP, OPC UA, Matter, BACnet, Modbus, BLE and Thread.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages