This repository provides reference implementation of message exchanging for IoT3 over MQTT (v5).
On top of this, it also provides a proposal of implementation for V2X messages in JSON based on ETSI's
Intelligent Transportation Systems (ITS).
For both of these use cases, telemetry is both automatically done and abstracted to send custom traces.
Rust | Python | Java | |
---|---|---|---|
MQTTv5 | ✓ | ✓ | ✓ |
Telemetry | ✓ | ✓ | ✓ |
Device Management |
Each implementation provides a client implementation allowing to subscribe and publish to an MQTT broker.
Each implementation might provide an abstraction of Open Telemetry features.
Language | Traces | Logs | Metrics |
---|---|---|---|
Rust | ✓ | ||
Python | ✓ | ||
Java | ✓ |
Depending on client's choice or implementation, MQTT message publishing and reception might be automatically traced.
The link between the span of a message publish and the span of its reception is automatically made
by propagating the W3C Trace Context using MQTTv5 properties.
Sent traces include the following parameters:
service_name
client app name (configurable)span.status
Error if anything went wrong, Unset otherwisespan.name
IoT3 Core MQTT Messagespan.kind
consumer
when receiving a messageproducer
when publishing a message
- attributes:
iot3.core.mqtt.topic
iot3.core.mqtt.payload_size
iot3.core.sdk_language
Work in progress
Each implementation is intended to provide an implementation of LwM2M protocol to bootstrap the device or application, and to send periodical alive messages.
Language | Bootstrap | Run |
---|---|---|
Rust | ||
Python | ||
Java |
As mentioned, you can find in the schemas
directory a proposal of implementation using the JSON language
(instead of ASN.1 UPER by default) of the following ETSI.org messages:
- CooperativeAwarenessMessage (CAM)
- CollectivePerceptionMessage (CPM)
- DecentralizedEmergencyNotificationMessage (DENM)
But also schemas of custom messages for V2X:
- Information (information about service instance)
- Status (status of an instance)
Note: none of the provided implementation is able to use different versions of a schema, they are using the following versions:
The features presented above are hereby provided in several languages in an SDK-like form.
Choice has been made to respect each language paradigm over providing a unique implementation; it might therefore differ depending on the language.
Provides the basic abstraction for IoT3 and an application oriented V2X (mobility) set of functions and traits.
Provides an abstraction of IoT3 for easy manipulation in Python.
Usefull abstractions around quadtrees, suitable for the ITS clients.
Application periodically sending Information message.
Application periodically sending Status message.
Application
On-board Unit oriented application sending CAM messages at high frequency.
The Java IoT3 Mobility library - powered by the IoT3 Core library - makes it easy to build applications able to:
- connect to our ITS platform
- send and receive ITS messages through it