Conectar Dispositivos IOT - intersystems.com · • Plataformas/protocolos abiertos ... • SSL /...
-
Upload
nguyendieu -
Category
Documents
-
view
229 -
download
0
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)
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
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
25 | © 2016 InterSystems Corporation. All Rights Reserved.
Pilotar una luz por WebSockets
Amazon Alexa, REST, Caché, WebSockets, ESP8266
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]