Description
- It is on premise and cloud (or hybrid) based IoT Platform that provides:
- Device management
- Data aggregation and data management
- Connectivity and message routing
- Event management
- User Interface
- Core analytics
- It is developed by considering following three main entities:
- Users : These are real users who can access and manage resources (CRUD).
- Things : These are devices & applications part of the IoT solution.
- Channels : These are communication channels to exchange messages.
- It uses *NATS as a main messaging system.
- It can be run on gateway as well as on cloud at the same time. It provides below services to deploy on gateway for having communication with MainFlux on cloud.
- Agents: It is a service to manage a gateway that is connected to MainFlux on cloud. It allows you to send commands to the gateway and receive responses.
- Export: It is a service that allows sending messages from one MainFlux cloud to another. It also allows sending messages from the gateway to MainFlux cloud.
- MainFlux provides following major functionalities:
- Provisioning: It is a configuration of IoT Platform for creating & setting-up different entities (users, channels & things).
- Messaging: Publishing messages from things to channels using protocols (HTTP/MQTT/CoAP/WebSocket)
- Storage: Supporting multiple databases (CassandraDB/MongoDB/InfluxDB/PostgreSQL) to store messages.
- Security: Establishes secure connections when users or things are communicating with other entities proper certificates are required to set.
- Authentication: Using keys or TLS mutual authentication.
- Authorization: Setting policies to control permissions for users, things and channels. Mainflux uses *Ory Keto server.
- Group based authentication: Allows group based authentication for users & things.
- Bootstrap: Supports self restarting process based on conditions set. Devices can trigger bootstrapping if conditions are matched.
- Tracing: Supports for generating profiling and monitoring applications as well as helps in debugging. Mainflux uses the *Jaeger tracing framework. It also uses Grafana, Prometheus and OpenTracing for instrumentation purposes.
- Twin Services: Supports digital twins functionality.
- Benchmarking: To generate large traffic & measure performance third party tool MZBench is used.
- Container-based deployment using Docker and Kubernetes.
MainFlux architecture contains following services mentioned in table 1.0
| Service | Description |
| users | This service provides APIs to Manages users by allowing following major activities: New Account Registration Obtaining access tokens and verify them |
| things | This service provides APIs to manage resources (things & channels) by allowing following activities: Provision new things Create new channels Connect things and channels |
| http-adapter | This service provides APIs to send messages. |
| mqtt-adapter | This service provides MQTT APIs to send messages. |
| coap-adapter | This service provides CoAP APIs to send messages. |
| opcua-adapter | This service provides OPCUA APIs to exchange data. This sits between Mainflux IoT System & OPC-US server. |
| lora-adapter | This service provides Lora APIs to exchange data. This sits between Mainflux IoT System & OPC-US server. It uses MQTT protocols. |
| mainflux-cli | This service provides APIs for command line interface. Cli makes it easy to manage users, things, channels and messages. |
*NATS : It is an open source messaging system. It provides servers and also has client libraries (multiple languages) for interacting with servers. It is scalable and high in performance. It is also used in cloud based solutions.
*OPCUA(OPC Unified Architecture) is an open standard to exchange data from sensors to cloud applications. It is cross platform.
*Ory Keto is a permission and authorization server.
*Jaeger tracing system is an open-source tracing system for microservices
Is it open source?
Yes
GitHub Link
https://github.com/mainflux/mainflux
Supported Messaging & Security protocols
- HTTP/HTTPS
- MQTT
- WebSocket
- CoAP
- TLS
Supported Networks
- BLE
- Ethernet (eth0)
- LoRaWAN
Supported technologies & tools
- Docker
- Kubernetes
- Swagger
Supported Languages
- Go
- *Protobuf (Protocol Buffers)
*Protobuf : It is a mechanism that allows us to serialize and de-serialize data. It is language & platform neutral so that different programs written in different languages on different platforms can send & receive data without writing additional code. It has its own compiler and specification.
Supported Databases
- CassandraDB
- MongoDB
- InfluxDB
- PostgreSQL
Supported OS
Supports all major OS
Domains where it is used and can be used
Applicable in all domains where IoT solution can be implemented.