# An Open Source Framework Approach to Support Condition Monitoring and Maintenance
## 4 The Arrowhead Framework  
The Arrowhead project (2014-2017) was a European effort aimed at applying SOA to IoT platforms supporting industrial automation scenarios. The use cases of the project spanned from manufacturing to energy optimization to machinery maintenance. A number of other projects (Productive 4.0, MANTIS, Arrowhead Tools, SOCRADES, IMC-AESOP, ARUM, INTER-IoT, etc.) pushed further the results of the Arrowhead project, to extend the coverage to other use cases and to make the technology more user friendly to use and more adaptable to new technological challenges. The main tenant of the Arrowhead project is the application of SOA [1]. In fact, the Arrowhead approach considers that all interactions are mediated by services. Services are produced and consumed by systems, which are executed on devices. Services and systems can be application ones when implementing a business case, or core ones when they provide support to other systems and services. Examples of application services can allow for sensor readings, controlling AC devices, obtaining energy consumption, etc. The core systems are usually shipped together as the Arrowhead Framework. Systems register themselves and the services they produced on the Service Registry core system and use the Orchestrator system to look up the systems that can produce the services they need. The Orchestrator, as the name implies, is able to provide a set of services that are then used together to produce a composed- and more complex-service. Moreover, the Arrowhead Framework takes care of security by means of the Authorization core system, which authenticates the systems and provides them with a token to access the services they need. The deployment unit is called a local cloud, which is an autonomous set of devices that have access to an Arrowhead Framework. A minimal local cloud is represented in Figure 3, where the service producers and consumers are represented with the usual schema: the endpoint of a line that represents an interaction ends with an O for a service producer, and with a C for service consumption. Multiple local clouds can exist and be used to create a distributed application. Each local cloud will have its own Arrowhead Framework, and it will use a Gateway core service to create a secure tunnel between the local clouds, which will permit a system to consume a service provided in another local cloud. The management of security between local clouds is bestowed upon the Gatekeeper core service, which maintains the security token used by Gateway core systems to interact. Figure 4 represents a set of local clouds that interact through gateways. An important benefit provided by the Arrowhead projects is a comprehensive documentation system [29] that supports the design and the maintenance of distributed applications. This is one of the key features that allowed the Arrowhead approach to become a strong player for the interoperability of industrial systems. In fact, the documentation system allows to communicate unambiguously the structure of services and the capabilities of systems, thus allowing for the creation of systems of systems. Figure 4: Inter-cloud service consumption supported by Arrowhead Frameworks. Figure 3: Minimal arrowhead local cloud. Even though the Arrowhead approach adheres to the SOA tenants, it is not limited to REST, and in fact, existing pilots are using alternative protocols and approaches such as the Constrained Application Protocol (CoAP), OLE for Process Control--Unified Architecture (OPC-UA) and Extensible Messaging and Presence Protocol (XMPP). The number of programming languages used to create Arrowhead-compliant systems is ever-growing, and already comprises Java, Python, and C, and the Arrowhead community provides and maintains libraries [30] and software generators [31] to speed up the development process. Moreover, Arrowhead can be considered a strong player in the interoperability arena.