fiware io t_ul20_cpbr8
TRANSCRIPT
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.
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.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"}]}
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