Förderjahr 2018 / Project Call #13 / ProjektID: 3441 / Projekt: CoMatrix
Since our project reboot we were working on the CoMatrix architecture and CoMatrix protocol requirements (functional and non-functional).
The Matrix protocol  is currently revolutionizing the messaging market. The objective of CoMatrix (constrained Matrix) is to enable IoT devices (constrained devices) to communicate with the Matrix network. Our aim is not to create a new protocol, but to elevate Matrix by making it accessible via the constrained stack too. CoMatrix will use CoAP, CBOR and UDP, instead of HTTPS, JSON and TCP as Matrix does. We aim to build code for constrained nodes to communicate via CoMatrix and a gateway which can translate between regular Matrix and CoMatrix traffic.
The following diagram shows the current state of our CoMatrix architecture design and testbed:
Our testbed consists of:
- Multiple CoMatrix clients, implemented on SAMR21-xpro  microcontroller
- A CoMatrix gateway, implemented on a Raspberry Pi
- A Matrix homeserver (Synapse ), running on another Raspberry Pi
- A PC running a standard Matrix client (e.g. Element )
The CoMatrix client software is running on a microcontroller (constrained device, SAMR21-xpro). This microcontroller will collect sensor data (e.g. temperature) and sends them via CoMatrix protocol to the CoMatrix gateway which is implemented on a Raspberry Pi. The CoMatrix gateway then translates the CoMatrix protocol to the Matrix Client-Server API  and forwards messages to our Matrix homeserver, which is a Synapse running on a another Raspberry Pi. A user can access the sensor data from the Matrix room via a standard Matrix client (or other software). The use case for such a setup would be home automation.
Please note that this architecture is work in progress and subject to change. Some technology and architectural design decisions are still open, for example we need to define if CoMatrix clients use star or mesh network topology. Currently we are evaluating client-side technolgy, e.g. if OpenThread  is suitable for our use case.