• Stars
    star
    58
  • Rank 497,502 (Top 11 %)
  • Language
    JavaScript
  • License
    GNU Affero Genera...
  • Created over 9 years ago
  • Updated 4 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Module to enable IoT Agent developers to build custom agents for their devices that can easily connect to NGSI Context Brokers

FIWARE IoT Agent Node.js Library

FIWARE IoT Agents License: APGL Support badge
Documentation badge CI Coverage Status Status CII Best Practices

This project aims to provide a Node.js module to enable IoT Agent developers to build custom agents for their devices that can easily connect to NGSI Context Brokers (such as Orion).

An IoT Agent is a component that lets groups of devices send their data to and be managed from a FIWARE NGSI Context Broker using their own native protocols. IoT Agents should also be able to deal with security aspects of the FIWARE platform (authentication and authorization of the channel) and provide other common services to the device programmer.

This project is part of FIWARE. For more information check the FIWARE Catalogue entry for the IoT Agents.

📚 Documentation 🎓 Academy 🎯 Roadmap

Index

Background

The main concept of the IoT Agent node library is to provide a common framework for provisioning IoT devices, allowing each individual IoT Agent to access standardized mapping data for devices and to offer a series common utility functions.

  • For southbound communications, the library listens to changes in context entities and raises callbacks for the IoT Agent to process.
  • For northbound communications, the library offers an interface which accepts structured input data so that all NGSI communications are left to the library.
  • Standardized OAuth2-based security is available to enable each IoT Agent to connect to several common Identity Managers (e.g. Keystone and Keyrock) so that communications can be restricted to trusted components.

Each individual IoT Agent offers is driven by a config.js configuration file contains explicit custom settings based on the protocol and payload the IoT Agent is translating. It will also contain some common flags for common functionality provided by the IoT Agent node lin (e.g. for contecting to a conext broker or for authentication). The IoT Agent node library offers a standard API for provisioning devices and ensures that each IoT Agent can configure its device communications using a common vocabulary regardless of the payload, syntax or transport protocol used by the device itself.

Install

The IoT Agent node library is not a standalone product and should be added as a dependency to package.json of the IoT Agent

...
"dependencies": {
    "iotagent-node-lib": "*",
}

In order to use the library within your own IoT Agent, you must first you require it before use:

const iotagentLib = require('iotagent-node-lib');

Information about how to configure the Library can be found at the corresponding section of the Installation & Administration Guide.

Usage

This library has no packaging or build processes. The Getting Started is a good place to start. You can also review the API documentation for a full list of the available functions.

If you plan to use the library in your own IoT Agent, you should read the Developer Guide. You can also review the Architecture documentation and Northbound API.

The following features are listed as deprecated.

API

The IoT Agent node library offers a simple REST API which provides common functionality to access, provision and decommission devices. API.

Testing

Contributions to development can be found here - additional contributions are welcome.

If you are whishing to test the library, or include new tests (either as part of a contribution or as a new feature or as a bug report), you can use the functional tests suite included in the project. The tests are described using a JSON file. You can find more information about the test suite in the Functional Tests Guide.

Agent Console

A command-line client to experiment with the library is packed with it. The command-line client can be started using the following command:

bin/agentConsole.js

The client offers an API similar to the one offered by the library: it can start and stop an IoT agent, register and unregister devices, send measures mimicking the device and receive updates of the device data. Take into account that, by default, the console uses the same config.js file than the IoT Agent.

The command-line client creates a console that offers the following options:

stressInit

	Start recording a stress batch.

stressCommit <delay> <times> <threads> <initTime>

	Executes the recorded batch as many times as requested, with delay (ms) between commands.
	The "threads" parameter indicates how many agents will repeat that same sequence. The "initTime" (ms)
	parameter indicates the mean of the random initial waiting times for each agent.

exit

	Exit from the command-line.

start

	Start the IoT Agent

stop

	Stop the IoT Agent

register <id> <type>

	Register a new device in the IoT Agent. The attributes to register will be extracted from the
	type configuration

unregister <id> <type>

	Unregister the selected device

showConfig

	Show the current configuration file

config <newConfig>

	Change the configuration file to a new one

updatevalue <deviceId> <deviceType> <attributes>

	Update a device value in the Context Broker. The attributes should be triads with the following
	format: "name/type/value" sepparated by commas.

listdevices

	List all the devices that have been registered in this IoT Agent session

Agent tester

Command-line testing

The library also offers a Context Broker and IoT Agent client that can be used to:

  • Simulate operations to the Context Broker used by the IoT Agent, triggering Context Provider forwardings for lazy attributes and checking the appropriate values for active ones.
  • Simulate operations to the Device Provisioning API and Configuration API of the IoT Agent.

The tester can be started with the following command, from the root folder of the project:

bin/iotAgentTester.js

From the command-line, the help command can be used to show a description of the currently supported features. These are the following:

stressInit

	Start recording a stress batch.

stressCommit <delay> <times> <threads> <initTime>

	Executes the recorded batch as many times as requested, with delay (ms) between commands.
	The "threads" parameter indicates how many agents will repeat that same sequence. The "initTime" (ms)
	parameter indicates the mean of the random initial waiting times for each agent.

exit

	Exit from the command-line.

update <entity> <type> <attributes>

	Update the values of the defined set of attributes, using the following format: name#type=value(|name#type=value)*

append <entity> <type> <attributes>

	Append a new Entity with the defined set of attributes, using the following format: name:type=value(,name:type=value)*

query <entity> <type>

	Get all the information on the selected object.

queryAttr <entity> <type> <attributes>

	Get information on the selected object for the selected attributes.

discover <entity> <type>

	Get all the context providers for a entity and type.

configCb <host> <port> <service> <subservice>

	Config a new host and port for the remote Context Broker.

showConfigCb

	Show the current configuration of the client for the Context Broker.

configIot <host> <port> <service> <subservice>

	Config a new host and port for the remote IoT Agent.

showConfigIot

	Show the current configuration of the client for the IoT Agent.

provision <filename>

	Provision a new device using the Device Provisioning API. The device configuration is
	read from the file specified in the "filename" parameter.

provisionGroup <template> <data> <type>

	Provision a group of devices with the selected template, taking the information needed to
	fill the template from a CSV with two columns, DEVICE_ID and DEVICE_NAME. The third parameter, type
	will be used to replace the DEVICE_TYPE field in the template. All the devices will be provisioned
	to the same IoT Agent, once the templates have been fulfilled.

listProvisioned

	List all the provisioned devices in an IoT Agent.

removeProvisioned <deviceId>

	Remove the selected provisioned device from the IoT Agent, specified by its Device ID.

addGroup <filename>

	Add a new device group to the specified IoT Agent through the Configuration API. The
	body is taken from the file specified in the "filename" parameter.

listGroups

	List all the device groups created in the selected IoT Agent for the configured service

removeGroup <apiKey> <resource>

	Remove the device group corresponding to the current configured subservice.

authenticate <host> <port> <user> <password> <service>

	Authenticates to the given authentication server, and use the token in subsequent requests.

setProtocol <protocol>

	Sets the protocol to use in the requests (http or https). Defaults to http.

configMigration <host> <port> <originDb>

	Sets the configuration for a migration between a C++ IoTA and a Node.js one.

showConfigMigration

	Shows the current migration configuration.

addProtocols <protocols>

	Add a protocol translation table, in the following format:
		protocolOrigin1=protocolTarget1;protocolOrigin2=protocolTarget2...


migrate <targetDb> <service> <subservice>

	Migrate all the devices and services for the selected service and subservice into the
	specified Mongo database. To perform the migration for all the services or all the
	subservices, use the "*" value.

The agent session stores transient configuration data about the target Context Broker and the target IoT Agent. This configuration is independent, and can be checked with the showConfigCb and showConfigIot commands, respectively. Their values can be changed with the configCb and configIot commands respectively. The new configurations will be deleted upon startup.


Licence

The IoT Agent Node Library is licensed under Affero General Public License (GPL) version 3.

© 2022 Telefonica Investigación y Desarrollo, S.A.U

Are there any legal issues with AGPL 3.0? Is it safe for me to use?

There is absolutely no problem in using a product licensed under AGPL 3.0. Issues with GPL (or AGPL) licenses are mostly related with the fact that different people assign different interpretations on the meaning of the term “derivate work” used in these licenses. Due to this, some people believe that there is a risk in just using software under GPL or AGPL licenses (even without modifying it).

For the avoidance of doubt, the owners of this software licensed under an AGPL-3.0 license wish to make a clarifying public statement as follows:

Please note that software derived as a result of modifying the source code of this software in order to fix a bug or incorporate enhancements is considered a derivative work of the product. Software that merely uses or aggregates (i.e. links to) an otherwise unmodified version of existing software is not considered a derivative work, and therefore it does not need to be released as under the same license, or even released as open source.

More Repositories

1

fiware-orion

Context Broker and CEF building block for context data management, providing NGSI interfaces.
C++
209
star
2

lwm2m-node-lib

Library for building OMA Lightweight M2M Applications (client and server).
JavaScript
73
star
3

fiware-cygnus

A connector in charge of persisting context data sources into other third-party databases and storage systems, creating a historical view of the context
Java
65
star
4

di-py

Dependency injection in python #di #python
Python
58
star
5

tdigital-hybridge

MCA TDigital HyBridge
Objective-C
52
star
6

iotagent-json

IoT Agent for a JSON based protocol (with HTTP, MQTT and AMQP transports)
JavaScript
48
star
7

netphony-network-protocols

Java Library of Networking Protocols: PCEP, RSVP-TE, OSPF, BGP-LS
Java
42
star
8

iotagent-ul

IoT Agent for a UltraLight 2.0 based protocol (with HTTP, MQTT and AMQP transports)
JavaScript
37
star
9

tartare

Gherkin-like BDD testing framework for JavaScript based on Mocha
JavaScript
37
star
10

notification_server

Push Notification Server for the open web.
HTML
36
star
11

netphony-topology

BGP-LS Speaker and Traffic Engineering Database. Restconf API to get the topology.
Java
33
star
12

fiware-sth-comet

A component of the FIWARE ecosystem in charge of managing historical and aggregated time series context information
JavaScript
26
star
13

lightweightm2m-iotagent

IoT Agent accepting COAP requests. Designed to be a bridge between the OMA Lightweight M2M protocol and the NGSI interface.
JavaScript
23
star
14

PopBox

Simple High-Performance High-Scalability Inbox Notification Service
JavaScript
23
star
15

OpenWebDevice

Telefónica Open Web Device
JavaScript
22
star
16

fiware-figway

fiware-figway
Python
20
star
17

logops

Really simple and performant logger for node projects compatible with any kind of deployments as your server operations/environment defined
JavaScript
20
star
18

Rush

Http - Relayer
JavaScript
19
star
19

fiware-connectors

Data visualization connectors and utils for Orion Context Broker
Python
16
star
20

netphony-pce

Java Based Path Computation Element (PCE) following RFC 4655 architecture
Java
14
star
21

perseo-fe

Front End process for the Perseo CEP
JavaScript
13
star
22

submarine

Ever wanted to take advantage of both Leaflet and D3 to make fully interactive maps with minimal effort? Tired of using out-of-the-box mapping software only to find that it always falls short of requirements, whilst on the other hand, building from scratch is just a big hassle? Submarine is an open source library developed at Telefónica Labs to provide the best of both worlds.
JavaScript
13
star
23

fiware-cosmos

fiware-cosmos toolkit for administration and support. Includes Sahara plugin
JavaScript
11
star
24

sigfox-iotagent

IoT Agent for the Sigfox protocol
JavaScript
11
star
25

fiware-pep-steelskin

Telefonica's implementation of the FIWARE PEP GE
JavaScript
11
star
26

fiware-IoTAgent-Cplusplus

IoTAgent development framework for C++
C++
11
star
27

cne-tnetwork

True Network Library: Javascript library to create and draw network graphs. It is SVG based and HTML 5 compatible.
JavaScript
11
star
28

perseo-core

Core/backend for the Perseo CEP
Java
11
star
29

fiware-keypass

Keypass is a multitenant XACML Authorization Server (Access Control) with PAP (Policy Administration Point) and PDP (Policy Decision Point) capabilities used by IoT Platform.
Java
9
star
30

thinking-cities

Repository to store and manage end user documentation related to the Telefonica SmartCities Stack. See http://thinking-cities.readthedocs.io
Java
9
star
31

netphony-gmpls-emulator

Java based Emulator of a Transport Node (L1/L0) with GMPLS control plane (OSPF-TE, RSVP-TE, PCEP))
Java
9
star
32

iot-activation

Python
8
star
33

fiware-edison

Edison 2 FIWARE integration examples
HTML
8
star
34

fiware-device-simulator

Simulator of FIWARE-compatible devices (UltraLight 2.0, JSON & NGSIv2)
JavaScript
8
star
35

iotagent-manager

IoT Agent Manager to use as proxy for multiple IoTAgents with different protocols
JavaScript
7
star
36

lettuce-tools

Lettuce Tools are a set of tools and utilities that extend the lettuce out of the box features fill some of the gaps detected in the projects.
Python
7
star
37

firefoxos-gaia-spain

Firefox OS UI customizations for Spain
JavaScript
7
star
38

pylogops

Python version of logops, the simple and performant logger.
Python
7
star
39

bluevia_engine

Rails 3 Engine to handle BlueVia OAuth mechanism
Ruby
6
star
40

fiware-cosmos-platform

Scala
6
star
41

tartare-logs

Watch log files parsing their content according to a given pattern or as a JSON document
JavaScript
6
star
42

fiware-health

Program to check the functionality of each FIWARE Lab node.
Python
6
star
43

fiware-livedemoapp

fiware-livedemoapp
Python
6
star
44

tartare-chai

A set of Chai plugins to help writing acceptance tests.
JavaScript
5
star
45

fiware-arduino

This repository holds examples of Arduino sketches to persist your Arduino data into FIWARE IoT Stack cloud service by using HTTP UL 2.0
Arduino
5
star
46

fiware-keystone-scim

OpenStack Keystone SCIM (System for Cross-domain Identity Management) extenstion
Python
5
star
47

tartare-collections

An HTTP client targeted at making REST requests
JavaScript
5
star
48

tartare-mock

A handy server to mock any HTTP behaviour.
JavaScript
5
star
49

tartare-util

A set of utils to make acceptance tests.
JavaScript
5
star
50

orchestrator

Orchestrator groups all provision operations for IoT Platform that tipically implies several steps or several systems interaction.
Python
5
star
51

wakeup_platform

Mobile phones wakeup platform
Shell
5
star
52

protractor-tartare

Tartare framework plugin for Protractor
JavaScript
4
star
53

varufaker

Small utility to generate log traces based on a template, supporting Elastic Search, files and stdout
JavaScript
4
star
54

netphony-abno

Java reference implementation of ABNO Controller (RFC 7491 ) using COP and ONF-TAPI as Northbound and PCEP as southbound interface.
Java
4
star
55

command-shell-lib

The target of this module is to ease the creation of command line testing applications
JavaScript
3
star
56

iotp-talend-connectors

Talend connectors for Telefonica IoT Platform
3
star
57

fiware-SDK

Tools and libraries to make FIWARE Developer's Lives Easier
JavaScript
3
star
58

firefoxos-gaia-latam

Firefox OS UI customizations for LATAM
JavaScript
3
star
59

fiware-orion2cartodb

NGSI connector to CARTODB
Python
3
star
60

rabbit-topic-acl

RabbitMQ Plugin for adding ACL-based security for topics
Erlang
3
star
61

FIWARE-ttopen

This repository holds examples of arduino sketches to persist your Thinking Things Open sensors data into FIWARE IoT Stack cloud service by using UL 2.0
Arduino
3
star
62

fiware-sinfonier

Sinfonier is a technology that solves the problem of collection and real-time processing of large amounts of information. Sinfonier tries to make available to users a real-time framework as Apache-STORM but with an intuitive graphical interface, an abstraction layer to facilitate the development of new functions and cluster management and an open, collaborative community.
Java
3
star
63

fiware-keystone-spassword

Keystone SPASSWORD is an OpenStack Keystone extension that enables some extra security checks over user passwords, as force the usage of strong passwords, expiration time for a password, number of bad login attempts before user account became temporarily blocked, a recover procedure password, second factor authentication (2FA), etc.
Python
3
star
64

libphonenumber-js

Builds a compact javascript version of libphonenumber without requiring to use Closure
Shell
3
star
65

gologops

Go version of logops, the simple and performant logger.
Go
2
star
66

fiware-cloto

Policy Manager GEi of the FIWARE project
Python
2
star
67

fiware-monitoring

FIWARE Monitoring GE
JavaScript
2
star
68

iotqatools

IoT toolbelt and libraries used for QA IoT-Platform validation
Python
2
star
69

iotagent-thinking-things

IOT Agent for the Telefonica Thinking Things protocol
JavaScript
2
star
70

fiware-tidoop

Hadoop extensions for CKAN, STH...
Java
2
star
71

iotagent-onem2m

IoT Agent for the OneM2M protocol
JavaScript
2
star
72

CrossPlatform-ClockApp

FFOS Gaia's Clock Application working on Webkit and Gecko
JavaScript
2
star
73

B2G-Utility-Libraries.JS

Utility libraries for developing apps on Open Web Devices / B2G / FirefoxOS
JavaScript
2
star
74

instantservers

Businesses can rely on Instant Servers as an enterprise-grade platform to deliver high-performance cloud applications with low latency, easy scalability and 100% data reliability and integrity; paying only for what is used. Instant Servers is designed to handle applications that other cloud platforms choke on
Java
2
star
75

fiware-cosmos-ambari

Java
1
star
76

fiware-rss

FIWARE RSS
Java
1
star
77

5g-developers-portal

#294370
1
star
78

apichk

#269913
1
star
79

ckanext-ngsiview

ckanext-ngsiview
JavaScript
1
star
80

WebAPISpecs

WebAPI Specifications
1
star
81

fiware-commonsproperties

Fiware commons properties for paasmanager and sdc.
Java
1
star
82

firefoxos-gaia-testsbuild

Firefox OS UI customizations for testing
JavaScript
1
star
83

vaultier-cli

Awesome CLI client for Vaultier password manager
Python
1
star
84

Licensing

Repository containing FLOSS Licenses and Contribution Policies
1
star
85

tdaf-notif

Endpoint for notifications
JavaScript
1
star
86

bbutton-tests

BButton project Tests repository
Python
1
star
87

owd-kpis

This repository stores the code related with OWD-PNS report generation.
Python
1
star
88

fiware-node-logger

Logger for Fiware Node.js projects
JavaScript
1
star
89

fiware-puppetwrapper

SDC wrapper in order to deploy artifacts following puppet manifests
Java
1
star
90

fiware-sth-graphs

A set of examples of how to visualize data stored in Fiware Sth-Comet
1
star
91

django-moqueta

Awesome RESTful-web mocking application
1
star
92

hydra-context-provider

Hydra command simulator
JavaScript
1
star
93

fiware-here-adaptor

Backend implementation of the integration between FIWARE and HERE Maps
JavaScript
1
star
94

fiware-facts

Policy Manager GEi of the FIWARE project, this is the server to process the incoming facts from Orion Context Broker
Python
1
star