intercon 2016 - backend do iot com rethinkdb e python

65
BACKEND DO IOT ARDUINO ESP8266 RASPBERRY PI FALCON RETHINKDB

Upload: imasters

Post on 16-Apr-2017

164 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

ARDUINO ESP8266 RASPBERRY PI FALCON RETHINKDB

Page 2: InterCon 2016 - Backend do IoT com RethinkDB e Python

SOBRE MIM

AFONSO COUTINHOPROGRAMADOR PROFESSOR

/AFONSOCOUTINHOFACEBOOK

[email protected]

Page 3: InterCon 2016 - Backend do IoT com RethinkDB e Python

PORQUE BACKEND DA

INTERNET DAS COISAS?

Page 4: InterCon 2016 - Backend do IoT com RethinkDB e Python

PRECISAMOS ENTENDER O QUE NOS ESPERA…

▸ Em 2020> quase todas as coisas vão tá conectadas na internet.

▸ Cada vez mais existe mais dispositivos consumindo e alimentando nossos sistemas corporativos.

Page 5: InterCon 2016 - Backend do IoT com RethinkDB e Python

COMO FUNCIONA HOJE EM DIA O DESENVOLVIMENTO BACKEND?

Page 6: InterCon 2016 - Backend do IoT com RethinkDB e Python

SISTEMAS EMPRESARIAIS

▸ Software para servidores potentes, datacenters, etc.

▸ Desenvolvimento em uma plataforma unificada.

▸ Programação com alto nível de abstração.

Page 7: InterCon 2016 - Backend do IoT com RethinkDB e Python

SISTEMAS EMBARCADOS

▸ Software para dispositivos de várias configurações.

▸ Desenvolvimento para plataformas diferentes.

▸ Programação de baixo nível de abstração

Page 8: InterCon 2016 - Backend do IoT com RethinkDB e Python

AÍ ENTRA O INCRÍVEL MUNDO DOS

SISTEMAS IOTPRA UNIFICAR TODOS!

Page 9: InterCon 2016 - Backend do IoT com RethinkDB e Python

ENTRETANTO…

Page 10: InterCon 2016 - Backend do IoT com RethinkDB e Python

PRECISAMOS DE GENTE DOMINANDO O BACKEND DESSE NOVO MUNDO!

IoT

Page 11: InterCon 2016 - Backend do IoT com RethinkDB e Python

AGORA, COMO SER UM?

Page 12: InterCon 2016 - Backend do IoT com RethinkDB e Python

ISSO "NÓIS" ENTENDE!

IOT É BASICAMENTE UM SISTEMA DE MENSAGENS COM:

▸ Mensagens assíncronas

▸ Mensagens pequenas

▸ Bastante mensagens

Page 13: InterCon 2016 - Backend do IoT com RethinkDB e Python

ISSO "NÓIS" ENTENDE TB!

DESENVOLVIMENTO IOT FICA FÁCIL COM AS PRÁTICAS DE DEVOPS!

Page 14: InterCon 2016 - Backend do IoT com RethinkDB e Python

UIA! "NÓIS" TAMBÉM!

IOT AMA LINUX!

Page 15: InterCon 2016 - Backend do IoT com RethinkDB e Python

IOT +

POR QUÊ NÃO?

Page 16: InterCon 2016 - Backend do IoT com RethinkDB e Python

MAS, EXISTE UM LADO NEGRO…

Page 17: InterCon 2016 - Backend do IoT com RethinkDB e Python

É COMUM USAR VÁRIOS PROTOCOLOS PRA UMA ÚNICA SOLUÇÃO…

IPv4/IPv6, RPL, EPC, uCode, IPv6,

URIs, Wifi, Bluetooth, ZigBee,

NFC, Physical Web, mDNS, UPnP,

MQTT, CoAP, AMQP, Websocket,

XMPP, DDS, REST, SOAP…

Page 18: InterCon 2016 - Backend do IoT com RethinkDB e Python

TER CONECTIVIDADE ESTÁVEL É UM LUXO…

PLANEJAR O SISTEMA SEMPRE PENSANDO O PIOR É NECESSÁRIO!

Page 19: InterCon 2016 - Backend do IoT com RethinkDB e Python

…AS VEZES NEM ENERGIA!

PLANEJAR O SISTEMA SEMPRE PENSANDO O PIOR É NECESSÁRIO! V2

Page 20: InterCon 2016 - Backend do IoT com RethinkDB e Python

PRECISAMOS PAGAR PRA USAR ALGUNS SERVIÇOS, COMO CELULAR, WIFI, ETC…

PARECE ÓBVIO MAS POUCOS LEMBRAM DISSO!

Page 21: InterCon 2016 - Backend do IoT com RethinkDB e Python

É PRECISO SOBREVIVER NAS CONDIÇÕES ADVERSAS DO AMBIENTE DE PRODUÇÃO

CHUVA, CALOR, FRIO, VENTO, VIBRAÇÃO, GPS SEM SINAL…

Page 22: InterCon 2016 - Backend do IoT com RethinkDB e Python

NECESSIDADE DE SER TUDO REMOTO

DEPLOY REMOTO, ATUALIZAÇÃO REMOTA, MONITORAMENTO REMOTO, ETC…

Page 23: InterCon 2016 - Backend do IoT com RethinkDB e Python

HARDWARE

Page 24: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

ARDUINO▸ Open-Hardware

▸ Linguagem própria

▸ Plug'n'play

▸ Comunidade madura

▸ Paixão mundial

▸ Fácil de aprender

▸ Coringa pra prototipar

Page 25: InterCon 2016 - Backend do IoT com RethinkDB e Python

MODELOS

Page 26: InterCon 2016 - Backend do IoT com RethinkDB e Python

SHIELDS

Page 27: InterCon 2016 - Backend do IoT com RethinkDB e Python

MÓDULOS

Page 28: InterCon 2016 - Backend do IoT com RethinkDB e Python

MONTE O SEU EM CASA

Page 29: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

RASPBERRY PI▸ Open-Hardware(quase)

▸ Mini PC

▸ Ótimo para multimídia

▸ Comunidade madura

▸ GPIOs via software

▸ Barato

▸ Serve pra produção

Page 30: InterCon 2016 - Backend do IoT com RethinkDB e Python

PIBOY

MAGIC MIRRORHACK FTW

CARPUTER

Page 31: InterCon 2016 - Backend do IoT com RethinkDB e Python

BANANA PI

C.H.I.P

WIFI + BLE

PI ZERO

WIFI + BLE CUSTOM SHIELDS

RECEPTOR IR

8GB INTERNO

4GB INTERNO

5 USD

9 USD

35 USD

Page 32: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

ESP8266▸ Open-Hardware

▸ Usa pouca energia

▸ WiFi

▸ Comunidade madura

▸ Pequeno

▸ Barato

▸ Ótimo pra produção

Page 33: InterCon 2016 - Backend do IoT com RethinkDB e Python

CHATO DE PROGRAMAR

Page 34: InterCon 2016 - Backend do IoT com RethinkDB e Python

NODEMCU

WEMOS

MICRO SHIELDS

Page 35: InterCon 2016 - Backend do IoT com RethinkDB e Python

RTL8710

ARM CORTEX-M3

ESP8285

WEARABLES

ESP32

BLUETOOTH 4.2 DUAL CORE

Page 36: InterCon 2016 - Backend do IoT com RethinkDB e Python

SOFTWARE

Page 37: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

FALCON▸ Focado para microservices

▸ Minimalista

▸ Rápido, Leve e Flexível

▸ Simples

▸ Fácil

▸ Roda em qualquer WSGI server

▸ Focado pra arquitetura REST

▸ 20% mais rápido se tiver Cython

▸ Suporta muito bem Unicode

▸ Intuitivo

▸ Suporta Python 2.6~2.7 e 3.3~3.5

▸ Compatível com PyPy e Jython

https://falconframework.org/

Page 38: InterCon 2016 - Backend do IoT com RethinkDB e Python

Falcon Framework

$ pip install falcon

Guia Rápido!

Page 39: InterCon 2016 - Backend do IoT com RethinkDB e Python

Falcon Framework# oi.py import falcon

class Hello(object): def on_get(self, req, resp): resp.status = falcon.HTTP_200 resp.body = ('\nHello World! ' ‘\n…de cima! HUE.')

app = falcon.API() oi = Hello() app.add_route('/oi', oi)

Guia Rápido!

Page 40: InterCon 2016 - Backend do IoT com RethinkDB e Python

Falcon Framework

$ pip install gunicorn $ gunicorn oi:app

Guia Rápido!

Page 41: InterCon 2016 - Backend do IoT com RethinkDB e Python

Falcon Framework

$ curl localhost:8000/oi

Guia Rápido!

Page 42: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

RETHINKDB▸ Open-Source

▸ Rethink Query Language(ReQL)

▸ Escalável

▸ Fácil de Instalar e Usar

▸ Feito em C++ na unha

▸ Admin Dashboard é legal

▸ Sob licença AGPL v3

Page 43: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

CLIENT DRIVERS OFICIAIS▸ Ruby

▸ Python

▸ Javascript/NodeJS

▸ Java

CLIENT DRIVERS MANTIDOS PELA COMUNIDADE▸ C++

▸ C#

▸ R, etc..

BEM DOCUMENTADOS

MAIS OU MENOS DOCUMENTADOS

Page 44: InterCon 2016 - Backend do IoT com RethinkDB e Python

r.table('chat').orderBy('last_update').changes()

.changes()

Page 45: InterCon 2016 - Backend do IoT com RethinkDB e Python

r.http('https://api.github.com/repos/afonso/impressao3d/commits')

r.http

Page 46: InterCon 2016 - Backend do IoT com RethinkDB e Python

RethinkDB Query LanguageReQL

r.table('users').run(conn)

r.table(‘users').pluck('last_name').run(conn)

r.table(‘users').pluck('last_name').distinct().run(conn)

r.table('users').pluck('last_name').distinct().count().run(conn)

Chainable

Page 47: InterCon 2016 - Backend do IoT com RethinkDB e Python

RethinkDB Query LanguageReQL

query = r.table('users').pluck('last_name').distinct()

query.run(conn)

Execução Server-side

Page 48: InterCon 2016 - Backend do IoT com RethinkDB e Python

RethinkDB Query LanguageReQL

r.table('users').filter(lambda user: user['age'] > 30).run(conn)

# ou sem lambda

r.table('users').filter(r.row['age'] > 30).run(conn)

Query avançada

Page 49: InterCon 2016 - Backend do IoT com RethinkDB e Python

RethinkDB Query LanguageReQL

#matematica

(r.expr(2) + 2 / 2).run(conn)

#condicional

(r.expr(2) > 3).run(conn)

Divertido

Page 50: InterCon 2016 - Backend do IoT com RethinkDB e Python

RethinkDB Query LanguageReQL

r.table_create('fib').run(conn) r.table('fib').insert([{'id': 0, 'value': 0}, {'id': 1, 'value': 1}]).run(conn) r.expr([2, 3, 4, 5, 6, 7, 8, 9, 10, 11]).for_each(lambda x: r.table('fib').insert({'id': x, 'value': (r.table('fib').order_by('id').nth(x - 1)['value'] + r.table('fib').order_by('id').nth(x - 2)['value']) })).run(conn) r.table('fib').order_by('id')['value'].run(conn)

Divertido #fibonacci

Page 51: InterCon 2016 - Backend do IoT com RethinkDB e Python

BACKEND DO IOT

COMENTÁRIOS SOBRE O RETHINKDB▸ É preciso criar o banco e as tabelas manualmente

▸ Não existe o .stats() como no mongodb.

▸ Prioriza consistência em vez de velocidade

▸ Não tem muito suporte pra rodar em Windows

▸ NASA tá usando pra integração de dados

▸ A empresa que criou e estava por trás do projeto faliu

▸ Agora o projeto é mantido 100% pela comunidade

Page 52: InterCon 2016 - Backend do IoT com RethinkDB e Python

CASES

Page 53: InterCon 2016 - Backend do IoT com RethinkDB e Python

HACKED VENDING MACHINE

Page 54: InterCon 2016 - Backend do IoT com RethinkDB e Python

CASES

HACKED VENDING MACHINE

ESP8266

INTERNET

ARDUINO

MOTORES

CHUTE SENSOR

TELEGRAM API

CHAT BOT

USUÁRIO

Celular

Vending Machine

ESTRUTURA

Page 55: InterCon 2016 - Backend do IoT com RethinkDB e Python

CASES

HACKED VENDING MACHINE

Page 56: InterCon 2016 - Backend do IoT com RethinkDB e Python

PONTOS CEGOS

Page 57: InterCon 2016 - Backend do IoT com RethinkDB e Python

CASES

PONTOS CEGOS

SD CARD

PARSING & UPLOAD

ARDUINO

LEDS

SENSORES

TELEGRAM API

CHAT BOT

USUÁRIO

Celular

Capacete

ESTRUTURA

BOTÃO

GPS

RETHINKDB

OPEN STREET MAPS

Page 58: InterCon 2016 - Backend do IoT com RethinkDB e Python

CASES

PONTOS CEGOS

Page 59: InterCon 2016 - Backend do IoT com RethinkDB e Python

PLUVI.ON

Page 60: InterCon 2016 - Backend do IoT com RethinkDB e Python

CASES

PLUVI.ONESTRUTURA

ESP8266TEMPERATURA

HUMIDADE

TELEGRAM API

CHAT BOT

USUÁRIO

Celular

Pluviometro

CHUVA

RETHINKDB

FALCON

Consumo da API Rest

MAPS APPS

SITES

Page 61: InterCon 2016 - Backend do IoT com RethinkDB e Python

CASES

PLUVI.ON

Page 62: InterCon 2016 - Backend do IoT com RethinkDB e Python

TELEGRAM? BOT DOMINATION!!!

Page 63: InterCon 2016 - Backend do IoT com RethinkDB e Python

TELEGRAM BOTS

THE BOTFATHERSÓ FALAR COM @BOTFATHER E SEGUIR AS INSTRUÇÕES

Page 64: InterCon 2016 - Backend do IoT com RethinkDB e Python

TELEGRAM BOTS

CONSUMINDO A API

PHP PYTHON JAVA

C#

RUBY

GO

LUA

NODEJS

HASKELL

JAVA

TELEGRAMBOTS

TELEGRAM.BOT

TELEGRAMBOT

TBOTAPI

LUA-TELEGRAM-BOT

TELEGRAM-NODE-BOT

HASKELL-TELEGRAM-API

TELEGRAMBOTS

TWX.BOTAPI

TELEPOT

TELEGRAM BOT SERVICE

HELLOBOT

SIMPLE POLL BOT

BOT API PHP SDK

TÁ TUDO NO GITHUB!

Page 65: InterCon 2016 - Backend do IoT com RethinkDB e Python

/AFONSOCOUTINHOFACEBOOK

[email protected]

FIM!