Fiware io t_ul20_cpbr8

30
FIWARE IoT Hackathon. Campus Party Brazil 2015. Carlos Ralli Ucendo, Telefonica IoT Chapter Architect, FIWARE @carlosralli

Transcript of Fiware io t_ul20_cpbr8

FIWARE IoT Hackathon. Campus Party Brazil 2015.Carlos Ralli Ucendo, TelefonicaIoT Chapter Architect, FIWARE@carlosralli

FIWARE (IoT) Target: Developers

ContextBroker

App Logic @FIWARE-Cloud

Desktop/Mobile/TabletUser Interface

Web 3D GE / Advanced UIWirecloud GE / Dashboards

OAuth2.0

SANTANDER

SMARTSPACESSEVILLA

2) IoT Providers. Pretty Heterogeneous solutions/skills.• An incremental approach. Public/Private instances.• KISS philosophy for most (web)developers.• Advanced IoT architecture, e.g. for IoT Advanced Devel.

1) IoT Consumers. Normally not just IoT.• A single point, API & Protocol for IoT, OpenData, etc.• Context: Data Entities + Data Entities events.• A Public & Secured Ecosystem at FIWARE Lab

MultiMediaEvents

ComplexEvent Processing

IoT-Agents

SmartcitiesOpenData

BigDataAnalytics

Evolution to the IoT-Agents Architecture

•Monolithic vs Modular -> Easier Installation, Cloud Blueprints•Coded in C++ vs Coded in any language -> Higher flexibility •Extensibility via C++ plugins vs a new IoT Agent -> Easier to get contribs/extensions•Scalability by design

FIWARE Context Broker

IoT Agent-UL2.0

IoT Agent-TT

IoT Agent-lwm2m

IoT Agent Manager

create/monitor

FIWARE IoT Backend Device Management

OMA NGSI API (Developers’ Interface)

(southbound interfaces)Thinking Things

Ultralight2.0 OMA LWM2M/IETF

CoAP

OMA NGSI API

IoT-Agent-UltraLight2.0 (IDAS) – FIGWAY Python2.7 Tools

CPBR8Hackathon

https://github.com/telefonicaid/fiware-figway/

•Coded in Python. Tested with RaspberryPI, MACOS & Linux.•Tools for (virtual) Sensors via IDAS IoT-Agent (Ultralight2.0)•Tools to access a ContextBroker.

IoT-Agent-UltraLight2.0 (IDAS) – CPBR8 Set up

CPBR8

Hackathon

Connect your IoT to FIWARE Lab: IoT-Agent-UltraLight2.0 (IDAS)

For testing use:- Service: OpenIoT

Step 1 – Create ModelStep 2 – Create Asset (device)Step 3 – Send MeasurementsStep 4 – Send Commands

IDAS/SBC Testing details: •IPv4: 130.206.80.47 •IPv6: 2001:720:1514:80::47•Devices API (UL2.0). Port: 8002 (IPv4)•ADMIN API. Port: 5371 (IPv4/IPv6)•Testing Service: OpenIoT•APIKEY: 4jggokgpepnvsb2uv4s40d59ov•Service URL: <IDAS_HOST>/m2m/v2/services/OpenIoT

IoT-Agent-UltraLight2.0 (IDAS)

Step 1 – Create Model(REST ADMIN API)

Payload JSON Format: - Check IDAS documents(At FIWARE Catalogue)- TOKEN = FIWARE Oauth Token.- Measurements have an “alias”. E.g: Temperature=t

“Open IoT” example Models:•SENSOR_TEMP•SENSOR_HUM•SENSOR_LUM•SENSOR_MOV•SENSOR_ZWAVE_4IN1

HTTP POST: http://130.206.80.47:5371/m2m/v2/services/OpenIoT/models/Headers: {'content-type': 'application/json’; 'X-Auth-Token' : [TOKEN]}Payload:{ "name": "SENSOR_TEMP", "capabilities" : [ { "name" : "Temperature", "property" : "temperature", "format" : { "name" : "Temperature", "alias" : "t" , "phenomenon": "urn:x-ogc:def:phenomenon:IDAS:1.0:temperature", "type" : "Quantity", "uom": "celsius” } } ], "protocol": "ul-2_0” }

IoT-Agent-UltraLight2.0 (IDAS)

Step 2 – Create AssetASSET = LOGICAL DEVICE(REST ADMIN API)

Payload JSON Format: - Check IDAS documentsAt FIWARE Catalogue.- TOKEN = FIWARE Oauth Token.- Must reuse an existing Model.- DEV_ID = 1st “name” - ASSET_ID = 2nd (asset) “name”

HTTP POST: http://130.206.80.47:5371/m2m/v2/services/OpenIoT/assets/ Headers: {'content-type': 'application/json’; 'X-Auth-Token' : [TOKEN]}Payload:{ "name": ”gateway02:Arduino01-Temp-Garden", "model": "SENSOR_TEMP", "asset": { "name": ”TEMP-Garden-Madrid28027", "description": "asset model protocol” } }

IDASIDASDevice ID

ASSET ID

Devices API

ADMIN API

IoT-Agent-UltraLight2.0 (IDAS)

Step 3 – Send Measurements(UL2.0 DEVICE API)

Payload JSON Format: - TOKEN = FIWARE Oauth Token.- DEV_ID = Asset name (Step 2).

* Read Last Measurements:HTTP GET:/m2m/v2/services/OpenIoT/assets/[ASSET_ID]

HTTP POST: http://130.206.80.47:8002/d?k=[APIKEY]&i=[DEV_ID]http://130.206.80.47:8002/d?k=4jggokgpepnvsb2uv4s40d59ov&i=GW02:Arduino01-Temp-Garden

Headers: {'content-type': 'application/text’; 'X-Auth-Token' : [TOKEN]}Payload: ‘ t|25‘

- Sending multiple measurements with one request:

http://130.206.80.47:8002/d?k=4jggokgpepnvsb2uv4s40d59ov&i=RPI:79:ed:af:4IN1-Room

Headers: {'content-type': 'application/text’; 'X-Auth-Token' : [TOKEN]}Payload: ‘t|23#h|80#l|95#m|Quiet‘

IoT-Agent-UltraLight2.0 (IDAS)

Step 4 – Sending Commands to Devices

IoT-Agent-UltraLight2.0 (IDAS)

Step 4.2 - Send Commands via IDAS REST ADMIN API

Step 4.1a (PUSH)– Define Command & Register Commands URL

HTTP POST: http://130.206.80.47:5371/m2m/v2/services/[SERVICE]/assets/[ASSET_ID]/command

Headers: {'content-type': 'application/json’; 'X-Auth-Token' : [TOKEN]}Payload:{"name": ” [COMMAND]", "params": [ { "name":” [PARAMETER]", "value": ” [VALUE]" } ] }

HTTP PUT: http://130.206.80.47:5371/m2m/v2/services/[SERVICE]/assets/[ASSET_ID] Headers: {'content-type': 'application/json’; 'X-Auth-Token' : [TOKEN]}Payload:{ "commands" : [ { "name" : "RawCommand”, "parameters" : [{ "name" : "Command", "type" : "Text", "phenomenon" : "urn:x-ogc:def:phenomenon:IDAS:1.0:unknown" }]}],}

IoT-Agent-UltraLight2.0 (IDAS)

Step 4.2 - Send Commands via IDAS REST ADMIN API

Step 4.1b (POOLING) - Define Command & Get Commands from Device

HTTP GET: http://130.206.80.47:8002/d?k=[APIKEY]&i=[DEV_ID]

Headers: {'content-type': 'application/text’; 'X-Auth-Token' : [TOKEN]}

HTTP POST: http://130.206.80.47:5371/m2m/v2/services/[SERVICE]/assets/[ASSET_ID]/command

Headers: {'content-type': 'application/json’; 'X-Auth-Token' : [TOKEN]}Payload:{"name": ” [COMMAND]", "params": [ { "name":” [PARAMETER]", "value": ” [VALUE]" } ] }

HTTP PUT: http://130.206.80.47:5371/m2m/v2/services/[SERVICE]/assets/[ASSET_ID] Headers: {'content-type': 'application/json’; 'X-Auth-Token' : [TOKEN]}Payload:{ "commands" : [ { "name" : ” [COMMAND]”, "parameters" : [{ "name" : ” [PARAMETER]", "type" : "Text", "phenomenon" : "urn:x-ogc:def:phenomenon:IDAS:1.0:unknown" }]}],}

Annex I: FIGWAY - Configuration

figway/python/config.ini

[user]# Please, configure here your username at FIWARE Cloud and a valid Oauth2.0 TOKEN for your user (you can use get_token.py to obtain a valid TOKEN). username=token=

[local]#Choose here your System type. Examples: RaspberryPI, MACOSX, Linux, ...host_type=RaspberryPI# Here please add a unique identifier for you. Suggestion: the 3 lower hexa bytes of your Ethernet MAC. E.g. 79:ed:af# Also you may use your e-mail address.host_id=3F:2A:1A

Annex I: FIGWAY – Registering a (UL2.0) Sensor

SensorsUL20/> python RegisterDevice.py [DEV_MODEL] [DEV NAME] [ASSET]

> python RegisterDevice.py SENSOR_TEMP Sensor1 Temperature-Madrid28001

* YOUR DEVICE details:*** DEVICE ID = 3F:2A:1A:Sensor1*** ASSET ID = 3F:2A:1A:Temperature-Madrid28001

* This device will be sent to the ContextBroker with the following configuration*** Entity ID = SENSOR_TEMP.3F:2A:1A:Temperature-Madrid28001*** Entity Type = Device*** FIWARE_SERVICE = OpenIoT…* Status Code: 201* Response:

Annex I: FIGWAY - Sending Sensor Observations/Measurements

ContextBroker/> python SendObservation.py [DEV_ID] ‘[alias1|value1]’

> python SendObservation.py 3F:2A:1A:Sensor1 't|26'

* Asking to http://130.206.80.47:8002/d?k=4jggokgpepnvsb2uv4s40d59ov&i=3F:2A:1A:Sensor1

* Headers: {'content-type': 'application/text', 'X-Auth-Token’: 'Zvcg**********************************************************************qvD6g'}* Sending PAYLOAD: t|26...* Status Code: 200* Response:

Annex I: FIGWAY – Check observation was correctly sent

SensorsUL20/> python ReadObservation.py [DEV_ID]

> Python ReadDeviceStatus.py 3F:2A:1A:Temperature-Madrid28001

{ "data": { "status": "Active", "isConcentrator": false, "name": "3F:2A:1A:Sensor1", "registrationTime": "2014-11-28T12:59:53Z", "creationTime": "2014-11-28T12:59:53Z", "commands": [], "sensorData": [ { "ms": { "p": "Temperature", "u": "celsius", "v": 26.0 },

Annex I: FIGWAY – Read your Sensor data at the ContextBroker

ContextBroker/> python GetEntity.py [ENTITY_ID]

> python GetEntity.py SENSOR_TEMP.3F:2A:1A:Temperature-Madrid28001

*Asking to http://130.206.80.47:1026/ngsi10/queryContext* Headers: {'Fiware-Service': 'OpenIoT', 'content-type': 'application/json', 'accept': 'application/json', 'X-Auth-Token': 'xn6V**********************************************************************kDwxw'}

* Response: … "contextElement" : { "type" : "device", "isPattern" : "false", "id" : "SENSOR_TEMP.3F:2A:1A:Temperature-Madrid28001", "attributes" : [… "name" : "Temperature", "type" : "Quantity", "value" : ”26", "metadatas" : [

Annex I: FIGWAY – What if I want to create other kind of sensors?

SensorsUL20/> python DiscoverModels.py

> Python DiscoverModels.py

* Asking to http://130.206.80.47:5371/m2m/v2/services/OpenIoT/models* Headers: {'content-type': 'application/json', 'X-Auth-Token': 'Zvcg**********************************************************************qvD6g'}…* Status Code: 200* Total Number of Models: 8

* Full List of Models:SENSOR_HUMSENSOR_LUMSENSOR_MOVSENSOR_TEMPSENSOR_TEMP_test2SENSOR_ZWAVE_4IN1

Annex I: FIGWAY – What if I want to create other kind of sensors? (II)

SensorsUL20/> python GetModel.py [DEV_TYPE]

> python GetModel.py SENSOR_TEMP

** Asking to http://130.206.80.47:5371/m2m/v2/services/OpenIoT/models/SENSOR_TEMP* Headers: {'content-type': 'application/json', 'X-Auth-Token': 'Zvcg**********************************************************************qvD6g'}…* Status Code: 200{"capabilities": [ { "format": { "alias": "t", "type": "Quantity", "name": "Temperature", "uom": "celsius", "phenomenon": "urn:x-ogc:def:phenomenon:IDAS:1.0:temperature" },

Annex I: FIGWAY – What if I want to create other kind of sensors? (III)

SensorsUL20/> python CreateModel.py [MODEL_FILE]

> python CreateModel.py SENSOR_TEMP

** Asking to http://130.206.80.47:5371/m2m/v2/services/OpenIoT/models/SENSOR_TEMP* Headers: {'content-type': 'application/json', 'X-Auth-Token': 'Zvcg**********************************************************************qvD6g'}…* Status Code: 201

Annex I: FIGWAY – What if I want to connect Actuators?

SensorsUL20/> python CreateModel.py SWITCH

{ "name": "SWITCH", "commands" : [ { "name" : "RawCommand",

"parameters" : [{ "name" : "Command", "type" : "Text", "phenomenon" : "urn:x-ogc:def:phenomenon:IDAS:1.0:unknown" }] } ], "capabilities": [ …"protocol": "ul-2_0" }

Annex I: FIGWAY – What if I want to connect Actuators? (II)

SensorsUL20/> python RegisterDevice.py SWITCH lamp3 lamp3-Madrid

* YOUR DEVICE details:*** DEVICE ID = 3F:2A:1A:lamp3*** ASSET ID = 3F:2A:1A:lamp3-Madrid

* This device will be sent to the ContextBroker with the following configuration*** Entity ID = SWITCH.3F:2A:1A:lamp3-Madrid*** Entity Type = Device*** FIWARE_SERVICE = OpenIoT

* Status Code: 201

Annex I: FIGWAY – What if I want to connect Actuators? (III)

python SendCommand.py [ASSET_ID] RawCommand Command ‘[COMMAND]‘

> python SendCommand.py 3F:2A:1A:lamp3-Madrid RawCommand Command 'Set 95-10-23'

* Asking to http://130.206.80.47:5371/m2m/v2/services/OpenIoT/assets/3F:2A:1A:lamp3-Madrid/command* Headers: {'content-type': 'application/json', 'X-Auth-Token': 'xn6V**********************************************************************kDwxw'}* Sending PAYLOAD: {"name": "RawCommand", "params": [ { "name":"Command", "value": "Set 95-10-23" } ] }

...

* Status Code: 200* Response: {"commandResultML":"<commandResultML>Pending<\/commandResultML>"}

Annex I: FIGWAY – What if I want to connect Actuators (IV)

python GetPoolingCommands.py [ASSET_ID]

> python GetPoolingCommands.py 3F:2A:1A:lamp3

* Asking to http://130.206.80.47:8002/d?k=4jggokgpepnvsb2uv4s40d59ov&i=3F:2A:1A:lamp3* Headers: {'content-type': 'application/text', 'X-Auth-Token': 'xn6V**********************************************************************kDwxw'}* Sending PAYLOAD: ...* Status Code: 200* Response: 3F:2A:1A:lamp3@RawCommand|Command=Set 95-10-23

Annex I: FIGWAY – What if I want to connect Actuators (V)

Python DebugCommand.py [ASSET_ID

> python DebugCommand.py 3F:2A:1A:lamp3-Madrid

* Asking to http://130.206.80.47:5371/m2m/v2/services/OpenIoT/assets/3F:2A:1A:lamp3-Madrid/command* Headers: {'content-type': 'application/json', 'X-Auth-Token': 'xn6V**********************************************************************kDwxw'}* Sending PAYLOAD:

...

* Status Code: 200* Response: {"count":1,"data":[{"command_id":"3F:2A:1A:lamp3@RawCommand","timestamp":"2014-12-02T15:21:08.313135+01:00","status":"DELIVERED"}]}

Thanks!Thanks!

Annex II: FIGWAY Exercises

Excersise 1

Goal: Create a Sensor Model for SmartIndustry/SmartRural/SmartCity/...

Description:

Crete one Model of sensor related to Mining activities within the “OpenIoT” service at idas4.

Duration: 15 Minutes.

Annex II: FIGWAY Exercises

Excersise 2

Goal: Create 2 instances of virtual Sensors for SmartIndustry/SmartRural/SmartCity…

Description:

Create two Sensors instances based on the model created in exercise one, within “OpenIoT” service at idas4.Check out how the entity has been created at the ContextBroker Orion4.

Duration: 15 Minutes.

Annex II: FIGWAY Exercises

Excersise 3

Goal: Send Observations and Read data at the ContextBroker

Description:

Send Observations for the two sensors and check they are correctly received at the ContextBroker.

Optional: create a script to send different observations every minute Optional 2: create a subscription to receive notifications from the ContextBroker.

Duration: 15min (+10 min)(+15 min)

Annex II: FIGWAY Exercises

Excersise 4

Goal: Create an Actuator (Pooling mode) for SmartIndustry/SmartRural/SmartCity/...

Description:

Create an SmartMining actuator device Model and one virtual instance within “OpenIoT” service at idas4.Check the entity created at ContextBroker orion4.Send Commands using idas4 ADMIN API. Check the Commands queue for the created asset/device. Read the Command from the virtual device host and check the Commands queue again.

Duration: 20min