It defines the structure of all information of Virtual Entities only at conceptual level and not at concrete level. In other words, it covers all aspects of adding information in the data. Here, structure covers attributes, relations and services that helps to know what, who, where, and when.
The detailed representation of information is not covered in this model.
This model covers following details (elements & their association) and of modelling of virtual entities:
1. Virtual Entity has attributes with name and its type.
Each virtual entity has a unique id or type i.e human, a car, or a temperature sensor.
A virtual entity can have zero to many attributes.
2. Attribute can have one or more values.
Each attribute has a name, a type (semantics) and one to many values.
3.Valuehas meta information(Meta data)
Value can further also have more values and each value has zero or many meta data. A virtual container keeps grouping of a value and associated zero or many meta data.
4. Meta Data might help to define other information like:
Time stamp (what time information is defined)
Location (Location where measurement took place
Quality (Quality of measurement) etc.
Meta data can itself have additional meta data i.e unit
5. Association between Virtual entity and Service description for specific attributes. Service allows to read attribute value or set the value based on changes in physical entity.
6. Services description describes services and associated interface. It also contains resource description that covers functionality of resource those are exposed by service.
7. Resource Description describes a resource and also contains description of device on which resource is hosted.
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.
Table 1.0
*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
*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.