65
BACKEND DO IOT ARDUINO ESP8266 RASPBERRY PI FALCON RETHINKDB

Backend do Iot com rethinkdb e python

Embed Size (px)

Citation preview

BACKEND DO IOT

ARDUINO ESP8266 RASPBERRY PI FALCON RETHINKDB

SOBRE MIM

AFONSO COUTINHOPROGRAMADOR PROFESSOR

/AFONSOCOUTINHOFACEBOOK

[email protected]

PORQUE BACKEND DA

INTERNET DAS COISAS?

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.

COMO FUNCIONA HOJE EM DIA O DESENVOLVIMENTO BACKEND?

SISTEMAS EMPRESARIAIS

▸ Software para servidores potentes, datacenters, etc.

▸ Desenvolvimento em uma plataforma unificada.

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

SISTEMAS EMBARCADOS

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

▸ Desenvolvimento para plataformas diferentes.

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

AÍ ENTRA O INCRÍVEL MUNDO DOS

SISTEMAS IOTPRA UNIFICAR TODOS!

ENTRETANTO…

PRECISAMOS DE GENTE DOMINANDO O BACKEND DESSE NOVO MUNDO!

IoT

AGORA, COMO SER UM?

ISSO "NÓIS" ENTENDE!

IOT É BASICAMENTE UM SISTEMA DE MENSAGENS COM:

▸ Mensagens assíncronas

▸ Mensagens pequenas

▸ Bastante mensagens

ISSO "NÓIS" ENTENDE TB!

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

UIA! "NÓIS" TAMBÉM!

IOT AMA LINUX!

IOT +

POR QUÊ NÃO?

MAS, EXISTE UM LADO NEGRO…

É 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…

TER CONECTIVIDADE ESTÁVEL É UM LUXO…

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

…AS VEZES NEM ENERGIA!

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

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

PARECE ÓBVIO MAS POUCOS LEMBRAM DISSO!

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

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

NECESSIDADE DE SER TUDO REMOTO

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

HARDWARE

BACKEND DO IOT

ARDUINO▸ Open-Hardware

▸ Linguagem própria

▸ Plug'n'play

▸ Comunidade madura

▸ Paixão mundial

▸ Fácil de aprender

▸ Coringa pra prototipar

MODELOS

SHIELDS

MÓDULOS

MONTE O SEU EM CASA

BACKEND DO IOT

RASPBERRY PI▸ Open-Hardware(quase)

▸ Mini PC

▸ Ótimo para multimídia

▸ Comunidade madura

▸ GPIOs via software

▸ Barato

▸ Serve pra produção

PIBOY

MAGIC MIRRORHACK FTW

CARPUTER

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

BACKEND DO IOT

ESP8266▸ Open-Hardware

▸ Usa pouca energia

▸ WiFi

▸ Comunidade madura

▸ Pequeno

▸ Barato

▸ Ótimo pra produção

CHATO DE PROGRAMAR

NODEMCU

WEMOS

MICRO SHIELDS

RTL8710

ARM CORTEX-M3

ESP8285

WEARABLES

ESP32

BLUETOOTH 4.2 DUAL CORE

SOFTWARE

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/

Falcon Framework

$ pip install falcon

Guia Rápido!

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!

Falcon Framework

$ pip install gunicorn $ gunicorn oi:app

Guia Rápido!

Falcon Framework

$ curl localhost:8000/oi

Guia Rápido!

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

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

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

.changes()

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

r.http

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

RethinkDB Query LanguageReQL

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

query.run(conn)

Execução Server-side

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

RethinkDB Query LanguageReQL

#matematica

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

#condicional

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

Divertido

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

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

CASES

HACKED VENDING MACHINE

CASES

HACKED VENDING MACHINE

ESP8266

INTERNET

ARDUINO

MOTORES

CHUTE SENSOR

TELEGRAM API

CHAT BOT

USUÁRIO

Celular

Vending Machine

ESTRUTURA

CASES

HACKED VENDING MACHINE

PONTOS CEGOS

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

CASES

PONTOS CEGOS

PLUVI.ON

CASES

PLUVI.ONESTRUTURA

ESP8266TEMPERATURA

HUMIDADE

TELEGRAM API

CHAT BOT

USUÁRIO

Celular

Pluviometro

CHUVA

RETHINKDB

FALCON

Consumo da API Rest

MAPS APPS

SITES

CASES

PLUVI.ON

TELEGRAM? BOT DOMINATION!!!

TELEGRAM BOTS

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

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!

/AFONSOCOUTINHOFACEBOOK

[email protected]

FIM!