SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Implementando Smart Grid com Python:
Uma Visão Geral dos desafios e soluções
Quem sou eu?
● Paolo Oliveira
● Engenharia de Telecomunicações – IFCE
● LIT – Laboratório de Inovação Tecnológica
● Usuário python a uma década
Smart Grid
● Aplicação de conceitos de rede eletrica distruibuida
inteligente, que pode monitorar seu próprio fluxo
eletrico e se ajustar as condições adversas,
reconfigurando os dispositivos que a compõe através
da automação e integração de todos os elementos da
rede. E para tal, é necessário haver comunicação
entre elementos que acompoem.
Problemas do Mundo Real
● Infinidade de Protocolos de Comunicação, muitos
deles fechados (embora existam os abertos e bem
conhecidos como DNP3, Modbus e IEC61850);
● Rede Elétrica "analógica" (poucos ou nenhum
equipamento inteligente disponível);
● Conectividade complexa em locais distantes
(geralmente restrito ao GPRS);
● Etc.
Objetivos
● Integração;
● Interoperabilidade;
● Monitoramento;
● Gerenciamento.
SCADA
Supervisory Control And Data Acquisition
● Melhor forma de gerenciar.
Entretanto...
● Licenças “estupidamente” caras e individuais para
cada conexão;
● Só “fala” protocolos conhecidos e/ou abertos.
Solução
● Gateway integrador, decodificando os protocolos,
abertos e fechados, e traduzindo-os entre si,
permitindo interoperabilidade, ao passo em que que
fornece acesso a monitoramento e gerenciamento
industrial através do SCADA, e de forma genérica
através de webservice.
Necessidades na implementação da
Solução
● Garantia na execução de código em intervalos de
tempo finitos bem definidos;
● Facilidade em codificar e decodificar protocolos
proprietarios(parsing e validação de estruturas);
● Gerenciamento eficaz e simples de comunicação
serial e TCP/IP.
Garantia na execução de código em
intervalos de tempo finitos bem
definidos
● Criação de um “watchdog” com a biblioteca thread
● No construtor:
self.watchdog = threading.Timer(0.2, self.WDT)
self.watchdog.start()
● No método WDT:
def WDT(self):
● self.watchdog.cancel()
(…) # chamadas a serem executadas
self.watchdog = threading.Timer(0.2, self.WDT)
self.watchdog.start()
Garantia na execução de código em
intervalos de tempo finitos bem
definidos
● Iniciar todos os modulos via thread:
if __name__=='__main__':
threading.Thread(target=thread_modbus).start()
threading.Thread(target=thread_ws).start()
…
● Com isto, eu garantia meu código lendo o pool
Modbus a cada 0.2 segundos, tempo limite para
desarmar a rede elétrica de baixa tensão.
Executar o servidor modbus “fora”
● Implementação simples(<20 linhas de código);
● Quantidade imoral de acessos...
Deixa o S.O.
cuidar dele ;D
Facilidade em codificar e
decodificar protocolos proprietarios
Design de uma forma genérica de escrever protocolos:
● Definir todos os campos do frame como variáveis globais.
● Criar um método encode() que le as variaveis globais e “monta” o
pacote, computando tamanhos e CRC;
● Criar um método decode() que pega um frame e o decodifica,
liberando os valores nas variaveis globais;
● Uso massivo do pack e unpack da bibliteca struct;
● Fácil de trabalhar, fácil de fazer um novo, e sem necessidade de
mexer com o módulo parental, que so se importa em chamar
encode() e decode() dos módulos de cada protocolo.
Gerenciamento eficaz e simples de
comunicação serial e TCP/IP
● Bom, é python... Com os já muito bons modelos de
gerenciamento de conexão, unindo os métodos de
conexão e leitura dentro de um
try/except/else/finally, o sistema fica completamente
estável.
● Lembrar de sempre usar o
allow_reuse_address = True
para evitar dor de cabeça
Nem tudo são flores
● São valores enormes e dados que o python, por
padrão, não sabe lidar. Então mesmo depois de
entender os protocolos, é preciso converter os dados
para usá-los de alguma forma. E, digamos que não é
a coisa mais fácil do mundo...
E ainda assim, tem vezes que o python
sozinho não dá conta, ou demoraria muito
para “pythonizar” a solução.
Para ester momentos, nos temos...
CTYPES + muita coragem
● ctypes é a cola perfeita, mas ainda assim dá muito
trabalho;
● Muita coisa velha é feita em PIC, não existe
documentação do protocolo/funções;
● Converter código de PIC para python doi.
EXEMPLO
GAMBIARRAS!!!1!!
Chega de me envergonhar...
REUSO DA TÉCNICA
Reutilizar a metodologia
● Smart QUALQUERCOISA
Smart PLANTINHAS?
Definição Estruturação do modelo
do protocolo
SCADA
webservice
Mais informações:
http://paoloo.me/papers.html
PERGUNTAS?
OBRIGADO

Mais conteúdo relacionado

Mais procurados

Acesso a área de trabalho remota
Acesso a área de trabalho remotaAcesso a área de trabalho remota
Acesso a área de trabalho remotaRafael Requião
 
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...BHack Conference
 
Introdução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IIntrodução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IVinícius Hax
 
Introdução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIIntrodução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIVinícius Hax
 
Micronaut - modernizando a plataforma Java
Micronaut - modernizando a plataforma JavaMicronaut - modernizando a plataforma Java
Micronaut - modernizando a plataforma JavaHenrique Weissmann
 

Mais procurados (9)

Acesso a área de trabalho remota
Acesso a área de trabalho remotaAcesso a área de trabalho remota
Acesso a área de trabalho remota
 
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
Palestra Rafael Correia - O que eu deveria ter aprendido sobre segurança na g...
 
Linux básico
Linux básicoLinux básico
Linux básico
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
Introdução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte IIntrodução à Computação de Alto Desempenho - Parte I
Introdução à Computação de Alto Desempenho - Parte I
 
Síncrono vs Assíncrono
Síncrono vs AssíncronoSíncrono vs Assíncrono
Síncrono vs Assíncrono
 
Introdução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte IIIntrodução à Computação de Alto Desempenho - Parte II
Introdução à Computação de Alto Desempenho - Parte II
 
Mqtt protocolo iot
Mqtt protocolo iotMqtt protocolo iot
Mqtt protocolo iot
 
Micronaut - modernizando a plataforma Java
Micronaut - modernizando a plataforma JavaMicronaut - modernizando a plataforma Java
Micronaut - modernizando a plataforma Java
 

Semelhante a IX Pylestras - SmartGrid com Python

Ferment io t - Distributed and Scalable IoT Solution
Ferment io t - Distributed and Scalable IoT SolutionFerment io t - Distributed and Scalable IoT Solution
Ferment io t - Distributed and Scalable IoT SolutionDonato Vianna
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores picAnderson Inácio Morais
 
Automação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceGDGFoz
 
Protocolo MQTT - Redes de Computadores
Protocolo MQTT - Redes de Computadores Protocolo MQTT - Redes de Computadores
Protocolo MQTT - Redes de Computadores Maurício Moreira Neto
 
Cisco Packet Tracer
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracermaykon-26
 
Protocolos e redes industriais
Protocolos e redes industriaisProtocolos e redes industriais
Protocolos e redes industriaisEverton_michel
 
3b5d17 748a8b99e224a1bf91f42123e5388634
3b5d17 748a8b99e224a1bf91f42123e53886343b5d17 748a8b99e224a1bf91f42123e5388634
3b5d17 748a8b99e224a1bf91f42123e5388634JADSON SANTOS
 
Protocolo de memória I2C e SPI
Protocolo de memória I2C e SPIProtocolo de memória I2C e SPI
Protocolo de memória I2C e SPIPedro Raphael
 
Aula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptxAula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptxAntonioCarlos349007
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptxfmtpereira
 
Projeto final módulo 4
Projeto final módulo 4Projeto final módulo 4
Projeto final módulo 4y3vg3n
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - ThreadsGlaucio Scheibel
 

Semelhante a IX Pylestras - SmartGrid com Python (20)

IoT: construindo ideias com nodeMCU e MQTT
IoT: construindo ideias com nodeMCU e MQTTIoT: construindo ideias com nodeMCU e MQTT
IoT: construindo ideias com nodeMCU e MQTT
 
Ferment io t - Distributed and Scalable IoT Solution
Ferment io t - Distributed and Scalable IoT SolutionFerment io t - Distributed and Scalable IoT Solution
Ferment io t - Distributed and Scalable IoT Solution
 
Curso redes seed
Curso redes seedCurso redes seed
Curso redes seed
 
Aula 02 redes
Aula 02   redesAula 02   redes
Aula 02 redes
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
Automação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com Opensource
 
Mini-curso CUDA
Mini-curso CUDAMini-curso CUDA
Mini-curso CUDA
 
Protocolo MQTT - Redes de Computadores
Protocolo MQTT - Redes de Computadores Protocolo MQTT - Redes de Computadores
Protocolo MQTT - Redes de Computadores
 
Cisco Packet Tracer
Cisco Packet TracerCisco Packet Tracer
Cisco Packet Tracer
 
Protocolos e redes industriais
Protocolos e redes industriaisProtocolos e redes industriais
Protocolos e redes industriais
 
3b5d17 748a8b99e224a1bf91f42123e5388634
3b5d17 748a8b99e224a1bf91f42123e53886343b5d17 748a8b99e224a1bf91f42123e5388634
3b5d17 748a8b99e224a1bf91f42123e5388634
 
Protocolo de memória I2C e SPI
Protocolo de memória I2C e SPIProtocolo de memória I2C e SPI
Protocolo de memória I2C e SPI
 
Aula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptxAula 2 - Introdução aos Miconcontroladores.pptx
Aula 2 - Introdução aos Miconcontroladores.pptx
 
ffffFicha 8 Nº.docx
ffffFicha 8 Nº.docxffffFicha 8 Nº.docx
ffffFicha 8 Nº.docx
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Projeto final módulo 4
Projeto final módulo 4Projeto final módulo 4
Projeto final módulo 4
 
Projecto final de AC
Projecto final de ACProjecto final de AC
Projecto final de AC
 
Programação Paralela - Threads
Programação Paralela - ThreadsProgramação Paralela - Threads
Programação Paralela - Threads
 
Projectofinal
ProjectofinalProjectofinal
Projectofinal
 
Projectofinal
ProjectofinalProjectofinal
Projectofinal
 

Mais de italomaia

Scraping for fun and glory
Scraping for fun and gloryScraping for fun and glory
Scraping for fun and gloryitalomaia
 
Scraping for fun and glory annotated
Scraping for fun and glory annotatedScraping for fun and glory annotated
Scraping for fun and glory annotateditalomaia
 
Empty - The Flask Boilerplate
Empty - The Flask BoilerplateEmpty - The Flask Boilerplate
Empty - The Flask Boilerplateitalomaia
 
Conhecendo o pug-ce
Conhecendo o pug-ceConhecendo o pug-ce
Conhecendo o pug-ceitalomaia
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factoryitalomaia
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmoitalomaia
 

Mais de italomaia (6)

Scraping for fun and glory
Scraping for fun and gloryScraping for fun and glory
Scraping for fun and glory
 
Scraping for fun and glory annotated
Scraping for fun and glory annotatedScraping for fun and glory annotated
Scraping for fun and glory annotated
 
Empty - The Flask Boilerplate
Empty - The Flask BoilerplateEmpty - The Flask Boilerplate
Empty - The Flask Boilerplate
 
Conhecendo o pug-ce
Conhecendo o pug-ceConhecendo o pug-ce
Conhecendo o pug-ce
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmo
 

IX Pylestras - SmartGrid com Python

  • 1. Implementando Smart Grid com Python: Uma Visão Geral dos desafios e soluções
  • 2. Quem sou eu? ● Paolo Oliveira ● Engenharia de Telecomunicações – IFCE ● LIT – Laboratório de Inovação Tecnológica ● Usuário python a uma década
  • 3. Smart Grid ● Aplicação de conceitos de rede eletrica distruibuida inteligente, que pode monitorar seu próprio fluxo eletrico e se ajustar as condições adversas, reconfigurando os dispositivos que a compõe através da automação e integração de todos os elementos da rede. E para tal, é necessário haver comunicação entre elementos que acompoem.
  • 4. Problemas do Mundo Real ● Infinidade de Protocolos de Comunicação, muitos deles fechados (embora existam os abertos e bem conhecidos como DNP3, Modbus e IEC61850); ● Rede Elétrica "analógica" (poucos ou nenhum equipamento inteligente disponível); ● Conectividade complexa em locais distantes (geralmente restrito ao GPRS); ● Etc.
  • 6. SCADA Supervisory Control And Data Acquisition ● Melhor forma de gerenciar. Entretanto... ● Licenças “estupidamente” caras e individuais para cada conexão; ● Só “fala” protocolos conhecidos e/ou abertos.
  • 7. Solução ● Gateway integrador, decodificando os protocolos, abertos e fechados, e traduzindo-os entre si, permitindo interoperabilidade, ao passo em que que fornece acesso a monitoramento e gerenciamento industrial através do SCADA, e de forma genérica através de webservice.
  • 8. Necessidades na implementação da Solução ● Garantia na execução de código em intervalos de tempo finitos bem definidos; ● Facilidade em codificar e decodificar protocolos proprietarios(parsing e validação de estruturas); ● Gerenciamento eficaz e simples de comunicação serial e TCP/IP.
  • 9. Garantia na execução de código em intervalos de tempo finitos bem definidos ● Criação de um “watchdog” com a biblioteca thread ● No construtor: self.watchdog = threading.Timer(0.2, self.WDT) self.watchdog.start() ● No método WDT: def WDT(self): ● self.watchdog.cancel() (…) # chamadas a serem executadas self.watchdog = threading.Timer(0.2, self.WDT) self.watchdog.start()
  • 10. Garantia na execução de código em intervalos de tempo finitos bem definidos ● Iniciar todos os modulos via thread: if __name__=='__main__': threading.Thread(target=thread_modbus).start() threading.Thread(target=thread_ws).start() … ● Com isto, eu garantia meu código lendo o pool Modbus a cada 0.2 segundos, tempo limite para desarmar a rede elétrica de baixa tensão.
  • 11. Executar o servidor modbus “fora” ● Implementação simples(<20 linhas de código); ● Quantidade imoral de acessos... Deixa o S.O. cuidar dele ;D
  • 12. Facilidade em codificar e decodificar protocolos proprietarios Design de uma forma genérica de escrever protocolos: ● Definir todos os campos do frame como variáveis globais. ● Criar um método encode() que le as variaveis globais e “monta” o pacote, computando tamanhos e CRC; ● Criar um método decode() que pega um frame e o decodifica, liberando os valores nas variaveis globais; ● Uso massivo do pack e unpack da bibliteca struct; ● Fácil de trabalhar, fácil de fazer um novo, e sem necessidade de mexer com o módulo parental, que so se importa em chamar encode() e decode() dos módulos de cada protocolo.
  • 13.
  • 14. Gerenciamento eficaz e simples de comunicação serial e TCP/IP ● Bom, é python... Com os já muito bons modelos de gerenciamento de conexão, unindo os métodos de conexão e leitura dentro de um try/except/else/finally, o sistema fica completamente estável. ● Lembrar de sempre usar o allow_reuse_address = True para evitar dor de cabeça
  • 15. Nem tudo são flores ● São valores enormes e dados que o python, por padrão, não sabe lidar. Então mesmo depois de entender os protocolos, é preciso converter os dados para usá-los de alguma forma. E, digamos que não é a coisa mais fácil do mundo...
  • 16.
  • 17. E ainda assim, tem vezes que o python sozinho não dá conta, ou demoraria muito para “pythonizar” a solução. Para ester momentos, nos temos...
  • 18. CTYPES + muita coragem ● ctypes é a cola perfeita, mas ainda assim dá muito trabalho; ● Muita coisa velha é feita em PIC, não existe documentação do protocolo/funções; ● Converter código de PIC para python doi. EXEMPLO
  • 19.
  • 21.
  • 22.
  • 23. Chega de me envergonhar...
  • 25. Reutilizar a metodologia ● Smart QUALQUERCOISA
  • 27. SCADA