OpenMIC library supports the development of systems that typically run on multiple computing devices (Raspberry Pis, laptops, workstations, etc.), operate autonomously and cooperate. In all these systems there is a common design model that includes a dedicated application running on individual computing devices and a centralized entity that coordinates the operation and remote management of the specific applications. In addition, a number of common functions are required regardless of the exact role of the developed systems, regarding the exchange of messages and information between applications, the discovery of participating devices and other.
To this end, we designed and implemented an integrated software library (exclusively open source) written in Python programming language that facilitates the development of applications with similar requirements. The library, called OpenMIC, is designed to be readily deployed and expanded to implement agent-based applications operating concurrently on multi-devices.
One of the most important advantages of the library is that it allows developers to focus on the application logic, alleviating them from the burden of implementing basic communication, collaboration and management functions. In addition, OpenMIC enables unexperienced developers to create interesting and complex applications. OpenMIC library has three main components: i) the Controller, ii) the Communication Interface and iii) the Agent.
OpenMIC Controller: It is the basis for creating the control and management logic. It automates communication between individual agents and the controller so that library users do not have to develop communication related mechanisms. It also provides methods for sending commands to all or individual agent-applications, to receive responses automatically, and to allow particular application-agents to exchange collaboration messages. Also, the OpenMIC Controller component contains auxiliary methods to identify the running application-agents, to discover new ones, and to automatically identify when anyone is disconnected.
OpenMIC Communication Interface: It provides mechanisms enabling reliable communication between the control application and the specific application-agents. It is designed to support multiple protocols and related technologies. The current version of the library supports the open source ZeroMQ messaging library and the open source RabbitMQ advanced messaging system, however it can be easily expanded. Library users do not interact with this component as it is internally used by the other two OpenMIC components, to implement the overall communication functionality.
OpenMIC Agent: It is the basis for creating custom applications running in a host computing entity. An OpenMIC Agent can support one or more such applications. The library automatically assigns a unique identifier to each served application, which distinguish it from other ones running in the same or on different computing devices. The Agent can receive requests / commands from the controller and support their execution. It also provides methods for sending the results of a request or general status messages to the Controller application as well as for sending collaboration messages to other served/special applications. In addition, it contains auxiliary methods and logic to queue received commands and to keep track of the served applications available on other computing devices. All this functionality and related information is automatically available in all systems developed through the OpenMIC library.
The library is available in github: OpenMIC