Conectar Dispositivos IOT - intersystems.com · • Plataformas/protocolos abiertos ... • SSL /...

32
© 2016 InterSystems Corporation. All rights reserved. Conectar Dispositivos IOT Pierre-Yves Duquesnoy

Transcript of Conectar Dispositivos IOT - intersystems.com · • Plataformas/protocolos abiertos ... • SSL /...

© 2016 InterSystems Corporation. All rights reserved.

Conectar Dispositivos IOT Pierre-Yves Duquesnoy

1 | © 2016 InterSystems Corporation. All Rights Reserved.

¿Qué son los IOTs? • Dispositivos conectados a Internet

• Botón “Amazon Dash”

• Sistemas de gestion de Calefacción

• Alarmas

• Enchufes, Cameras, sensores

• Dispositivos portatiles (wearables)

• Ecosistemas completos

• (cerrados)

• Plataformas/protocolos abiertos

• Json/rest

• MQTT

• Websockets

2 | © 2016 InterSystems Corporation. All Rights Reserved.

• Micro controlador

• Excelente para iniciarse

• Prototipaje rápido (Uno)

• Económico

• Requiere poca energía

• Poco potente (SSL ?)

• Gestión de E/S Analógicas o

Digitales

• Gran cantidad de sensores,

relays

• “shield” internet como

extensión

• Programación en C (!)

Plataformas IOT: Micro controladores, el Arduino

3 | © 2016 InterSystems Corporation. All Rights Reserved.

• Raspberry PI 3:

• Muy potente

• procesador 4 Core 64bit

• Instalación OS (linux)

• Consumo energía mas alto

• Uso en combinación con

IOTs de controladores

• Eg: centralita de alarma

Plataformas IOT: Las CPUs, Raspberry PI

4 | © 2016 InterSystems Corporation. All Rights Reserved.

Plataformas IOT: otros ejemplos

ESP8266: Wifi Espruino: Javascript

5 | © 2016 InterSystems Corporation. All Rights Reserved.

• Plataformas menos potentes

• Requieren “shield” para conectarse a Internet.

• Power Supply issues

• Bluetooth, etc…

• Connectividad Internet

• Wifi / Ethernet por cable

• Firewall, connectividad

• Seguridad

• SSL / TLS

• Intrusiones

• Protocolos

• Http, Rest, JSON

• websockets

• MQTT

• Propietarios

Communicación Internet: los retos

6 | © 2016 InterSystems Corporation. All Rights Reserved.

Conectar sensores a Caché

ESP8266, Wifi, REST y JSON

7 | © 2016 InterSystems Corporation. All Rights Reserved.

Enviar Datos de sensores: Wifi, HTTP, JSON, REST

ESP8266

Caché

8 | © 2016 InterSystems Corporation. All Rights Reserved.

Class PYD.IOT.RestServer Extends %CSP.REST

{

XData UrlMap { <Routes> <Route Url="/ESP8266/sensorData" Method="POST" Call="sensorData" /> </Routes>

ClassMethod sensorData() As %Status {

… //Procesar JSON del Request

//Grabar a Tabla o Global

} }

REST y JSON en Caché

9 | © 2016 InterSystems Corporation. All Rights Reserved.

#include "ESP8266WiFi.h“

WiFiClient client;

String json = "{\"temperature\":\""+String(temperature)+"\"}";

WiFi.begin(ssid, password); //---Conectar a la Wifi

client.connect(host,port); //---Verificar Conexión a Servidor Caché

client.println(

"POST http://52.17.73.170:57772/csp/IOTRest/ESP8266/sensorData HTTP/1.1");

client.println("Host: 52.17.73.170:57772");

client.println("Content-Type: application/json");

client.print("Content-Length: " client.println(json.length());

client.println();

client.println(json);

REST y JSON en el cliente (ESP8266)

10 | © 2016 InterSystems Corporation. All Rights Reserved.

Enviar datos de sensores

11 | © 2016 InterSystems Corporation. All Rights Reserved.

Maquina de Vending conectada

Arduino AT Mega + Ethernet Shield, MQTT, Mosquitto Broker, Ensemble

12 | © 2016 InterSystems Corporation. All Rights Reserved.

Beneficios

• Control remoto de la maquina

• Agotamiento de producto, cambios de precios..

• Mantenimiento de la maquina

• sensores de temperatura, vibración…

• Pago mediante Key RFID

• Autenticación, control de Saldo en servidor (previene pirateo)

• Datos de las compras (Fecha Hora, consumidor) para data mining

• promociones especiales

• happy hour, oferta 3 por 2….

Maquina de Vending conectada

13 | © 2016 InterSystems Corporation. All Rights Reserved.

• Protocolo tipo Publish /Subscribe

• Encima de TCP/IP

• Mensajeria Ligera

• Diseñado para communicación con sitios remotos

• Libreria cliente pequeña

• Uso limitado de ancho de banda

• Brokers MQTT

• HiveMQ (propietario)

• Mosquitto (Open Source)

• Librerias Cliente

• Eclipse PAHO (java)

• Libreria C para Arduinos

14 | © 2016 InterSystems Corporation. All Rights Reserved.

Venduino, MQTT, Ensemble Ensemble

MQTT Broker

Interfaz Gestión

15 | © 2016 InterSystems Corporation. All Rights Reserved.

Publica

• Venduino/Ens/CARD

• Pide Datos de una Tarjeta RFID

• Venduino/Ens/BUY

• Notifica de una compra

• Venduino/Ens/STATUS -> “ONLINE”

Suscribe

• Venduino/Dev/A#

• Venduino/Dev/A/CARD

• Detalles para una tarjeta RFID

• ID | Nombre | Saldo

• Venduino/Dev/A/PRICE

• Notificación de cambio de Precio

• Venduino/Dev/A/OFFER

• Notificación de oferta

MQTT Venduino Topics

16 | © 2016 InterSystems Corporation. All Rights Reserved.

Publica (Business Operation)

• Venduino/Dev/A/CARD

• Detalles para una tarjeta RFID

• Venduino/Dev/A/PRICE

• Notificación de cambio de Precio

• Venduino/Dev/A/OFFER

• Notificación de oferta

Suscribe (Business Service)

• Venduino/Ens/CARD

• Pide Datos de una Tarjeta RFID

• Venduino/Ens/BUY

• Notifica de una compra

• Venduino/Ens/STATUS -> “ONLINE”

MQTT Ensemble Topics

Ensemble

17 | © 2016 InterSystems Corporation. All Rights Reserved.

Venduino: flujo de mensajes MQTT

Ensemble

Venduino/Ens/CARD ID=XX-XX-XX-XX

Venduino/A/CARD Jordi | $30

Venduino/Ens/BUY CardID | TRAY 2

Venduino/A/OFFER $1

Venduino/A/PRICE $3

18 | © 2016 InterSystems Corporation. All Rights Reserved.

• JavaInitiator: permite definir Componentes de Ensemble todo en Java (BS y BO)

• MqttSub: Business Service (Java) que suscribe a “topics” de MQTT

• MqttPub: Business Operation(Java) que envia mensajes al broker MQTT

• BPCard: Busines Process que procesa mensajes de tarjeta RFID

Producción de Ensemble

19 | © 2016 InterSystems Corporation. All Rights Reserved.

Mensajes Ensemble: Venduino/Ens/CARD

20 | © 2016 InterSystems Corporation. All Rights Reserved.

#include <PubSubClient.h>

PubSubClient client(ethClient);

//---Initialización

client.setServer(MqttServer, MqttServerPort);

client.connect(MQTTClientName);

//---Suscripción

void callback(char* topic, byte* payload, unsigned int length) { … }

client.setCallback(callback);

client.subscribe(topic);

//Publicación

client.publish(topic,content);

Arduino: librería MQTT

21 | © 2016 InterSystems Corporation. All Rights Reserved.

Venduino: Idea y Caja diseñada por Ryan Bates:

http://www.retrobuiltgames.com/the-build-page/arduino-vending-machine/

Modificado con

- Arduino Uno reemplazado con AT MEGA 2560

- Ethernet Shield añadido

- Lector RFID añadido

- Led RGB añadida

Venduino Conectado via MQTT a Ensemble

22 | © 2016 InterSystems Corporation. All Rights Reserved.

Inicialización

23 | © 2016 InterSystems Corporation. All Rights Reserved.

Datos de targeta RFID en Servidor

24 | © 2016 InterSystems Corporation. All Rights Reserved.

Mensaje de Oferta Especial

25 | © 2016 InterSystems Corporation. All Rights Reserved.

Pilotar una luz por WebSockets

Amazon Alexa, REST, Caché, WebSockets, ESP8266

26 | © 2016 InterSystems Corporation. All Rights Reserved.

Conectar un servicio de Voz a Caché

27 | © 2016 InterSystems Corporation. All Rights Reserved.

Conectar Servicio de Voz a Caché

Caché AWS Lambda

Skill “Intersystems”

Amazon Echo, Echo Dot, o Raspberry

REST & JSON Respuesta texto Servicio Voz

Alexa

WebSockets

ESP8266

HTTPS +Rest&Json

28 | © 2016 InterSystems Corporation. All Rights Reserved.

Class PYD.IOTDemo.WebSocketServer Extends %CSP.WebSocket {

Method Server() As %Status {

//---Read data if there is any. set len=32000, timeout=0.5 //500 ms timeout set data=..Read(.len,.tSC,.timeout)

if (ledStatusChanged=1) {

//---Send Status

set tSC=..Write(##class(PYD.IOTDemo.Data.LedStatus).getStatusAsString())

}

quit tSC

}

Caché WebSockets

29 | © 2016 InterSystems Corporation. All Rights Reserved.

#include "ESP8266WiFi.h"

#include "WebSocketClient.h“

WiFiClient client;

WebSocketClient webSocketClient;

char* socketURL="/csp/IOTSocket/PYD.IOTDemo.WebSocketServer.cls";

//--- Connect to server and establish WebSocket

if (client.connect(host, port)) { ... }

webSocketClient.path = socketURL;

webSocketClient.host = host;

if (webSocketClient.handshake(client)) { ... }

/---Write & Read Data

webSocketClient.getData(data);

webSocketClient.sendData(json);

ESP8266 WebSockets

30 | © 2016 InterSystems Corporation. All Rights Reserved.

• Alexa

• https://developer.amazon.com/

• Hay tutoriales…

• Alexa Skills Kit

• Invocation name “Intersystems”

• Utterances: <texto ingles de los comandos> + sinomimos

• Intent Schema: <acción a realizar>

• Destino a ejecutar: HTTPS o AWS Lambda

• AWS Lambda

• aws.amazon.com

• Ejempos de GitHub: amzn/alexa-skills-kit-js

Modificar para añadir llamada REST a Caché en código Javascript.

Amazon Alexa Skills & AWS Lambda

31 | © 2016 InterSystems Corporation. All Rights Reserved.

Gracias!

Código, sketch, preguntas adicionales: [email protected]