Everyware Software Framework Developer's Hub

Everyware Software Framework (ESF) is an enterprise-ready IoT Edge Framework distributed and supported by Eurotech. Based on Eclipse Kura, the open source Java/OSGi middleware for IoT gateways, ESF adds provisioning, advanced security, remote access, diagnostics monitoring. It supports ready-to-use field protocols (including Modbus, OPC-UA, S7), MQTT connectivity, and a web-based visual data flow programming to acquire data from the field, process it at the edge, and publish it to IoT Cloud Platforms. ESF features full remote device management through its integration with Everyware Cloud, Eurotech’s IoT Integration Platform.

Get Started

Architecture

Advanced software frameworks, which abstract and isolate the developer from the complexity of the hardware and the networking subsystems, redefine the development and reusability of integrated hardware and software solutions. Everyware Software Framework (ESF) is a smart application container that enables remote management of IoT gateways and provides a wide range of APIs allowing you to write and deploy your own IoT application.

The following diagram illustrates ESF functional architecture.

ESF runs on top of the Java Virtual Machine (JVM) and leverages OSGi, a dynamic component system for Java, to simplify the process of writing reusable software building blocks. ESF APIs offer easy access to the underlying hardware including serial ports, GPS, watchdog, USB, GPIOs, I2C, etc. They also offer OSGi bundles to simplify the management of network configurations, the communication with IoT servers, and the remote management of the gateway. ESF components are designed as configurable OSGi Declarative Services exposing the service API and raising events. While several ESF components are pure Java, others are invoked through Java Native Interface (JNI) and depend on the Linux operating system.

ESF provides the following services:

  • Device Abstraction
    • Support serial port access through javax.comm 2.0 API or an OSGi I/O connection.
    • Support USB access and events through javax.usb, HID API, or custom extensions.
    • Support Bluetooth and BLE access through javax.bluetooth or an OSGi I/O connection.
    • Provide a Position Service for GPS information from a NMEA stream.
    • Utilise the jdk.io API for GPIO/PWM/I2C/SPI access.
  • Basic Gateway Services
    • Clock Service - provides the synchronisation of the system clock through NTP or GPS
    • Database Service – a complete SQL relational database for embedded systems is provided for edge data storage and data analytics
    • Watchdog Service - provides the ability to register critical components to the Watchdog Service, which forces a system reset through the hardware watchdog when a problem is detected
  • Connectivity and Delivery Services
    • Enable store and forward functionality for the telemetry data that is collected by the gateway and published to remote servers.
    • Provide an easy-to-use API layer for IoT application communications with a remote server. In addition to simple publish/subscribe, the Cloud Service API simplifies the implementation of more complex interaction flows like request/response or remote resource management.
    • Allow for sharing of a single connection to a remote server across multiple applications deployed in the gateway providing the necessary topic partitioning.
    • Offer a policy-driven publishing system, which abstracts the application developer from the complexity of the network layer and the publishing protocol used
    • IoT Clouds support for leading IoT platforms like​ Everyware Cloud, Microsoft Azure IoT Hub, Amazon Aws IoT, Eclipse Kapua
  • Security
    • Offer an SSL Management Service that simplifies the management of SSL certificates, keystores, application signing and system integrity
    • Provide a readily configurable Provisioning Service for remote configuration of the device.
  • Remote Management
    • Configuration Service - leverages the OSGi specifications ConfigurationAdmin and MetaType to provide a snapshot service for importing/exporting the configuration of all registered services in the container.
    • Allows for remote management of the IoT applications installed in ESF including their deployment, upgrades, and configuration. The Remote Management service relies on the Configuration Service and Cloud Services.
    • Offer a VPN Client Service that allows a VPN connection to be established with the device and enables the system administrator to remotely access the device
  • Networking
    • Provides an API to introspect and control the configuration of the network interfaces available in the IoT gateway, such as Ethernet, Wi-Fi, and cellular modems
    • Provides an API to control the Firewall and IP / Port Forwarding configuration of the IoT gateway
    • Terminal Server/Client - allows the remote access and configuration of a gateway’s serial port using a TCP connection
  • Web Administration Interface
    • Offers a web-based management console (ESF Gateway Administration Console) running within the ESF container to manage the gateway.
  • Drivers and Assets
    • A unified model is introduced to simplify the communication with the devices attached to the gateway. The Driver encapsulates the communication protocol and its configuration parameters, while the Asset, which is generic across Drivers, models the information data channels towards the device. When an Asset is created, a Mirror of the device is automatically available for on-demand read and writes via Java APIs or via Cloud though remote messages.
  • Wires
    • Offers modular and visual data flow programming tool to define data collection and processing pipelines at the edge by simply selecting components from a palette and wiring them together. This way users can, for example, configure an Asset, periodically acquire data from its channels, store them in the gateway, filter or aggregate them using powerful SQL queries, and send the results to the Cloud. The Eclipse Kura Marketplace is a repository from which additional Wires components can be installed into your Kura runtime with a simple drag-and-drop.