This tutorial is an introduction to FIWARE Wirecloud - a generic enabler visualization tool which allows end users without programming skills to create web applications and dashboards to visualize their NGSI data. The tutorial explains how to create a Wirecloud workspace and upload widget to visualise the data. Once the widgets are configured the data is displayed on screen
The tutorial demonstrates examples of interactions using the Wirecloud GUI only. No programming is involved within the tutorial itself, as Wirecloud is designed to be usable by all type of user, even those with limited programming skills. However the commentary continues to reference various programming principles and standard concepts common to all FIWARE architectures.
Additional materials covering how to develop and create your own widgets will be the subject of a later tutorial.
- このチュートリアルは日本語でもご覧いただけます。
Contents
Details
Visualizing NGSI Data using a Mashup
"One picture is worth a thousand words."
— Fred R. Barnard (Printers' Ink)
As a Smart Solution evolves, it is necessary to be able to analyse and understand the current system context, so that appropriate decisions can be made. An obvious first step of data analysis is to display context data on screen. At this stage it is not necessarily known which context data is relevant and how it would be best displayed to the end user. Flexible rapid prototyping is required to be able to refine, enhance and manipulate the data, display and tweak the visualizations, and add further information as necessary.
An application mashup is a web application which uses content from multiple sources to display a single new service with a graphical interface. Most mashups are visual and interactive by design, and many are short-lived representations which are only required to help analyse a single problem.1
The FIWARE Wirecloud Generic Enabler is a tool which helps users to rapidly generate new application mashups based on NGSI and other data sources. To speed up development, the Wirecloud architecture has been defined to split mashup operations into a series of simple reusable tasks (widgets and operators). Each task has well-defined input and output interfaces, and the Wirecloud UI allows mashup creators to wire up a series of tasks into a complex chain of data processing and visualization events.
Broadly speaking application mashup tasks can be split into four categories:
- Data sources: These are operators that provide information for consumption elsewhere. For example, an operator that retrieves some type of information from an NGSI web service.
- Data targets: The reverse of the above. These operators push information out to an external microservice
- Data transformers: This type of operator manipulates data in order to make it usable by other tasks further down the chain within the Wirecloud ecosystem. For example, transposing form list values or renaming attributes to align with an input interface downstream
- Visual Components: Combinations of HTML and JavaScript which display data on a browser online. Within Wirecloud, visual components are known as widgets.
The overall aim of Wirecloud is to allow someone without a programming background to be able to create data visualizations using a drag-and-drop interface. A wide range of existing open-source Wirecloud Widgets and Operators are already available and can be used to create complex visualizations.
The existing widget and operator set covers a wide range of scenarios, but can be complemented by your own additional widgets. A background in JavaScript and HTML is necessary in this case. Creating your own widgets will be the subject of a subsequent tutorial.
Once a mashup has been wired up and created it can be also be shared wholesale with end users.
Prerequisites
Docker
To keep things simple all components will be run using Docker. Docker is a container technology which allows to different components isolated into their respective environments.
- To install Docker on Windows follow the instructions here
- To install Docker on Mac follow the instructions here
- To install Docker on Linux follow the instructions here
Docker Compose is a tool for defining and running multi-container Docker applications. A YAML file is used configure the required services for the application. This means all container services can be brought up in a single command. Docker Compose is installed by default as part of Docker for Windows and Docker for Mac, however Linux users will need to follow the instructions found here
Cygwin
We will start up our services using a simple bash script. Windows users should download cygwin to provide a command-line functionality similar to a Linux distribution on Windows.
Architecture
This application adds the Wirecloud application mashup into the existing Stock Management and Sensors-based application created in previous tutorials. The aim of the tutorial is to be able to monitor devices and wire-up a simple supermarket finder. This monitoring tool mashup will be able to duplicate and replace much of the visualisation functionality already found in the tutorial application itself (which is written in PUG, Node.JS and JavaScript). The aim is to create an equivalent application without resorting to writing a line of code.
The Users in Wirecloud have been created using the standard identity management component, Keyrock. Overall the system makes make use of four FIWARE components - the Orion Context Broker,the IoT Agent for UltraLight 2.0, the Keyrock Identity Manager and the newly integrated Wirecloud application mashup tool. Usage of the Orion Context Broker is sufficient for an application to qualify as “Powered by FIWARE”.
Therefore the overall architecture will consist of the following elements:
-
The FIWARE Orion Context Broker which will receive requests using NGSI-v2
-
The FIWARE IoT Agent for UltraLight 2.0 which will receive southbound requests using NGSI-v2 and convert them to UltraLight 2.0 commands for the devices
-
The FIWARE Keyrock Identity Management System
- Used by both the Stock Management System and Wirecloud
-
FIWARE Wirecloud an application mashup tool for displaying NGSI entities
-
Three databases
- A PostgreSQL database :
- Used by Wirecloud to hold mashup state
- A MySQL database :
- Used by Keyrock to persist user identities, applications, roles and permissions
- A MongoDB database:
- Used by the Orion Context Broker to hold context data information such as data entities, subscriptions and registrations
- Used by the IoT Agent to hold device information such as device URLs and Keys
- A PostgreSQL database :
-
The Stock Management Frontend does the following:
- Displays store information
- Shows which products can be bought at each store
- Allows users to "buy" products and reduce the stock count.
-
A webserver acting as set of dummy IoT devices using the UltraLight 2.0 protocol running over HTTP - access to certain resources is restricted.
-
Three additional microservices are used by Wirecloud:
- Memcache, a general-purpose distributed memory caching system.
- ElasticSearch, a full-text search engine
- NGSI Proxy, a server that is capable of redirecting Orion notifications to web pages.
Since all interactions between the elements are initiated by HTTP requests, the entities can be containerized and run from exposed ports.
The specific architecture of each section of the tutorial is discussed below.
Wirecloud Configuration
image: fiware/wirecloud
container_name: fiware-wirecloud
hostname: wirecloud
ports:
- "8000:8000"
networks:
default:
ipv4_address: 172.18.1.10
restart: always
depends_on:
- keyrock
- elasticsearch
- memcached
- postgres-db
environment:
- DEBUG=True
- DEFAULT_THEME=wirecloud.defaulttheme
- DB_HOST=postgres-db
- DB_PASSWORD=wirepass
- FORWARDED_ALLOW_IPS=*
- ELASTICSEARCH2_URL=http://elasticsearch:9200/
- MEMCACHED_LOCATION=memcached:11211
- FIWARE_IDM_PUBLIC_URL=http://localhost:3005
- FIWARE_IDM_SERVER=http://172.18.1.5:3005
- SOCIAL_AUTH_FIWARE_KEY=wirecloud-dckr-site-0000-00000000000
- SOCIAL_AUTH_FIWARE_SECRET=wirecloud-docker-000000-clientsecret
volumes:
- wirecloud-data:/opt/wirecloud_instance/data
- wirecloud-static:/var/www/static
The wirecloud
container is a web application server listening on a single port:
- Port
8000
has been exposed for HTTP traffic so we can display the web page
The wirecloud
container is connecting to Keyrock and is driven by environment variables as shown:
Key | Value | Description |
---|---|---|
DEFAULT_THEME | wirecloud.defaulttheme |
Which Wirecloud theme to display |
DB_HOST | postgres-db |
The name of the Wirecloud database |
DB_PASSWORD | wirepass |
The password for the Wirecloud database - this should be protected by Docker Secrets |
FORWARDED_ALLOW_IPS | * |
|
ELASTICSEARCH2_URL | http://elasticsearch:9200/ |
The location the ElasticSearch service is listening on |
MEMCACHED_LOCATION | memcached:11211 |
The location the Memcahe service is listening on |
FIWARE_IDM_PUBLIC_URL | http://localhost:3005 |
The URL of Keyrock used to display the login screen |
FIWARE_IDM_SERVER | http://172.18.1.5:3005 |
The URL of Keyrock used for OAuth2 Authentication |
SOCIAL_AUTH_FIWARE_KEY | wirecloud-dckr-site-0000-00000000000 |
The Client ID defined by Keyrock for Wirecloud |
SOCIAL_AUTH_FIWARE_SECRET | wirecloud-docker-000000-clientsecret |
The Client Secret defined by Keyrock for Wirecloud |
Start Up
To start the installation, do the following:
git clone https://github.com/FIWARE/tutorials.Application-Mashup.git
cd tutorials.Application-Mashup
git checkout NGSI-v2
./services create
Note The initial creation of Docker images can take up to three minutes
Thereafter, all services can be initialized from the command-line by running the services Bash script provided within the repository:
./services start
Then go to your browser and open Wirecloud using the URL: http://localhost:8000/
ℹ️ Note: If you want to clean up and start over again you can do so with the following command:./services stop
Log in
Wirecloud is enabled for Oauth2 security, and as mentioned previously, user an admin user has already been created
for the Wirecloud application. To start creating a mashup, click on the Sign in button on the top right of the
page and sign in to Keyrock using alice-the-admin@test.com
with the password test
.
Note: if you want to see how Alice has been authorized to use Wirecloud, you can Log in to Keyrock itself, and look at Alice's applications (
http://localhost:3005/idm/applications
)The Wirecloud application is set up as follows:
- URL:
http://localhost:8000
- Callback:
http://localhost:8000/complete/fiware/
- The application has one single role called
admin
- The
admin
role has a single blank permission.- The
admin
role has been assigned to Alice.
Adding Resources to Wirecloud
As noted above, Wirecloud relies on widgets and operators to connect to NGSI sources, manipulate data and display
something on screen. As a first step these widgets (*.wgt
) must be uploaded into Wirecloud. It is possible to do
this programmatically, but for this tutorial, the user is directed to upload widgets manually.
Upload Widgets
To upload resources click on the My Resources button:
A series of resources may already be available, however for this tutorial additional widgets and operators are required. Click on the Upload button
Then and click on Select files from your computer.
Sources of Wirecloud Widgets can be found on the
Wirecloud Marketplace. Alternatively
individual Widget binaries (*.wgt
) can be downloaded directly from available releases on GitHub. A list of common
widgets and their location can be found in the appendix to the
Wirecloud documentation
Navigate to the root of this repository and select all the files found in the widgets
directory as shown:
Clicking on upload will add the resources to Wirecloud.
Just click on any available widget to obtain a summary of the widget's usage. More details about the available inputs and outputs and how to wire up each widget can do can be found in the widget's documentation.
To return to the homepage, click on the back button:
Creating a Workspace
Individual mashups are created in different workspaces, allowing the user to offer separate views with different URLs. To create a workspace click on the hamburger button and select new workspace.
Fill in the dialog as shown to create an empty workspace.
The workspace will open. The URL in the browser bar will alter to http://localhost:8000/<user>/<workspace>
.
The workspace will also be added to the list of available workspaces found under the hamburger button. Any available workspace can be selected on click
You can return to the homepage by selecting the back button:
Creating Application Mashups
An application mashup can be created by adding widgets to a workspace. At a minimum there must be one data source and one visual component, but some widgets combine these functions into a single browser widget.
More complex mashups will consist of a series of widgets and operations linked together using wirecloud wiring.
Creating a simple Mashup
The Hello World of Wirecloud components involves adding a single browser widget on screen and then configuring it to display some context data.
As you would expect, this tutorial relies on context data from the context broker. To ensure that the IoT devices are
running, open the tutorial application (http://localhost:3000/
) in a new browser window. Log in as
bob-the-manager@test.com
with the password test
and click on device monitor. Bob can switch on the lamp to obtain
some context data for the mashup.
Selecting Widgets and Operators
Click the Edit button to switch the workspace to edit mode, then click on the Find Components button to add a widget or operator to the workspace
The components sidebar will be displayed
NGSI Browser Widget
Since we require a visual component, in the components sidebar select Widgets and then scroll down until you find the NGSI Browser
Clicking on the + button will add an unconfigured NGSI Browser on screen
Note: the widget can be removed by clicking on the x at the top right of the window
The next step is to configure the widget. Click on the wiring button to switch to the wiring view, and select Widgets from the components sidebar. Scrolling down to the NGSI browser shows an available widget in orange
Clicking on the orange button brings up the settings to configure. Select the hamburger to obtain a dropdown and click on settings to configure as shown:
Then click on Accept
Click on the back button to return to the workspace view:
The NGSI browser should be displaying live data as shown:
Combining Multiple Widgets within a Mashup
The simple widget in the example above give above combines both input and output into a single component, but it is when a series of operators and widgets are combined that the true power of Wirecloud can be seen. Simple data flows can be mapped graphically on screen and a mashup can be created by a user with minimal understanding of the technologies used to create the mashup.
Selecting Widgets and Operators
From the workspace page, click on edit and then click on the jigsaw button to bring up the wiring editor view.
Then click on add components to bring up the components sidebar. We will require a combination of both Operators and Widgets
Click on the operators tab, and select an instance of NGSI Source and an instance of NGSI-Entity-to-POI by pressing the + button. A green bar will appear below each entry which can be dragged-and-dropped onto the wiring editor view.
Then click on the Widgets tab and add an instance of the Open Layers Map Widget and drag it onto the wiring editor view.
Operators | Widgets |
---|---|
The result is a series of unconnected components on screen.
Hovering over the connectors will give more information about the available inputs and outputs. Click and drag to connect the elements as shown.
You can see that flow of data can be visualized on screen, in the mashup we wish to display Points of Interest (POIs) on screen. In order to do this we will receive data entities from an NGSI source, the data from each entity will be converted into a POI. Finally each POI will be inserted onto the OpenLayers Map.
NGSI Source Operator
The NGSI Source operator allows you to connect to an Orion Context Broker and use it as source of data. This is accomplished by creating a subscription to obtain real time notifications about changes on the entities of interest. It is an example of a data source component.
Full details of the operator documentation can be found within the running application under the My Resources
screen:
http://localhost:8000/wirecloud/home#view=myresources&subview=details&resource=CoNWeT%2Fngsi-source%2F4.0.0&tab=Documentation
To configure the component, click on the NGSI Source hamburger button and select settings:
Amend the settings as shown below and click accept.
- The NGSI server needs to be the location of the Orion Context broker
- The NGSI proxy is used to bypass CORS issues when accessing webservices using JavaScript. This is a simple endpoint which ensures that the Orion Context Broker is only accessed via a server-side API call.
- User credentials and workspace credentials should be left unchecked
- The FIWARE service and service path match the data found within the Orion Context Broker
- ID pattern, Query and Monitored Attributes can be left blank.
NGSI Entity to POI Operator
The NGSI Entity to POI operator transforms NGSI entities to Points of Interest. It is an example of a data manipulation component. To be able to do so, those entities should contain an attribute containing the coordinates of the entity. Also, take into account the fact this operator is generic, so marker bubbles of the PoIs created by this operator will be a mere composition of the attribute/value pairs.
Full details of the operator documentation can be found within the running application under the My Resources
screen:
http://localhost:8000/wirecloud/home#view=myresources&subview=details&resource=CoNWeT%2Fngsientity2poi%2F3.1.2&tab=Documentation
To configure the component, click on the NGSI Entity to POI hamburger button and select settings:
Amend the coordinates setting as shown below and click accept.
According to the Smart Data Models Guidelines an attribute called location
should be
used for geographical coordinates. Coordinates should be encoded using GeoJSON. Since this convention has been used for
the tutorial data, the widget knows how to extract a location from the Store
entity.
Open Layers Map Widget
The Open Layers Map Widget allows a user to display geographic data onto an Open Layers map. It is an example of a visual component. Open Layers is a free, open-source JavaScript library, released under the 2-clause BSD License
Full details of the widget documentation can be found within the running application under the My Resources screen:
http://localhost:8000/wirecloud/home#view=myresources&subview=details&resource=CoNWeT%2Fol3-map%2F1.1.2&tab=Documentation
To configure the component, click on the Open Layers Map hamburger button and select settings:
Amend the settings as shown below and click accept.
The Store Data is found in Berlin. This city is located at 52.53N 13.4E. The initial location setting is defined in Long/Lat format. The other settings help to display the map over the right part of the globe.
The updated mashup can be seen on the workspace tab (refresh the browser if necessary).
http://localhost:8000/alice/test#view=workspace&tab=tab
Clicking on the POIs retrieves additional data from each stores.
Currently the data is displayed as unformatted JSON. This is because the Store
context data entities with the tutorial
example are not using a standard FIWARE data model. If a standard data model such as
Building had been used the data would be formatted in an
appropriate manner and a Building specific icon would be used.
Next Steps
Want to learn how to add more complexity to your application by adding advanced features? You can find out by reading the other tutorials in this series
License
MIT © 2019-2020 FIWARE Foundation e.V.
Footnotes
- Wikipedia: Mashup - a web application that uses content from more than one source